Commit Graph

1098 Commits

Author SHA1 Message Date
Isaiah Odhner
16f4bc0a88 Fix some mypy errors (and a couple pyright errors) 2023-07-15 19:44:05 -04:00
Isaiah Odhner
dd4fea1e78 Add py.typed for mypy 2023-07-15 19:44:05 -04:00
Isaiah Odhner
4fc5a6e8e5 Clarify a comment
"optional" is ambiguous, between optional arguments (i.e. parameters with a default value), and a union with `None` (i.e. `Optional`, or `| None`)
2023-07-15 19:44:05 -04:00
Isaiah Odhner
cbcf22c4d7 Clean up old _expanding_directory_tree flag, and logging 2023-07-15 19:44:05 -04:00
Isaiah Odhner
54f29eabf1 Fix false positives and false negatives for when to populate file name
When opening the Open dialog, it shouldn't populate the file name input,
but when clicking a file, it should fill in the clicked file's name.

The `_expanding_directory_tree` flag gave false positives:
- When opening a file in a directory the program doesn't have permissions to via the CLI,
  such as with `python -m src.textual_paint.paint /root/nonexistent`,
  opening the Open dialog, and clicking a file, it wasn't populating the filename input,
  because the flag was never cleared if it couldn't find (access) the
  directories and file matching any of the path parts, working down the directory structure.
  
  This was broken in [b3ca55a3b1] "Use new callback to remove race condition"
  but before, it just cleared the flag after a delay, so it wasn't a good solution,

It also gave false negatives:
- When opening the Open dialog, it was populating the name input field
  with the file selected programmatically with `expand_to_path`,
  instead of leaving it blank.
  
  The automatic expansion was broken in [e9755637d6] "Update Textual to 0.26.0"
  due to changes 0.25.0, since directory contents are now loaded in a worker.
  This flag's behavior was broken since rewriting the code to handle asynchronous directory loading in
  [4e1f11ab23] "Fix expanding directory tree to current folder, in file dialogs"

An alternative I considered was to create a new message such as `EnhancedDirectoryTree.NodeHighlighted`, but let's call it `EnhancedNodeHighlighted`, then to have `on_tree_node_highlighted` in `EnhancedDirectoryTree` which sends `EnhancedNodeHighlighted` always with `from_expand_to_path=False`, and then do:

    | # Suppress EnhancedNodeHighlighted with from_expand_to_path=False
    | with self.prevent(self.EnhancedNodeHighlighted):
    | 	self.select_node(node)
    | # Send it with the flag set
    | self.post_message(self.EnhancedNodeHighlighted(..., from_expand_to_path=True))

The solution I settled on was to add an `on_tree_node_highlighted` method to my `EnhancedDirectoryTree` for the purpose of clearing the flag, with still a further delay so that the app's `on_tree_node_highlighted` can use the flag before its cleared.

(I left `_expanding_directory_tree` in at this commit for comparison of the behavior. For a fair estimate of the complexity of this change, include the following cleanup in the diff.)
2023-07-15 19:44:05 -04:00
Isaiah Odhner
1b8b07def9 Move callback outside try block 2023-07-14 00:08:08 -04:00
Isaiah Odhner
f6607195e8 Clarify docstring association 2023-07-13 22:19:55 -04:00
Isaiah Odhner
c97203e882 Add more error handling to Get Colors 2023-07-13 20:03:23 -04:00
Isaiah Odhner
489bd95a20 Ignore permission errors when deleting backup
and improve error message in the general (fallback) case
2023-07-13 19:43:15 -04:00
Isaiah Odhner
6a4351d824 Handle arbitrary exceptions when deleting backup 2023-07-13 19:35:25 -04:00
Isaiah Odhner
6d5ffabcfb Add smaller versions of the Pipe Strip (and sequel)
Making use of the new Stretch/Skew dialog to scale the comic down by 50%
increments, and then hand-editing from there.
2023-07-13 17:32:03 -04:00
Isaiah Odhner
d5b738e034 Add to Known Issues 2023-07-12 17:33:23 -04:00
Isaiah Odhner
67b4ec8ac4 Return to custom zoom level when zooming out and back in 2023-07-12 02:16:24 -04:00
Isaiah Odhner
9876a3c15c Repeat first color in palette when loading a palette
This ensures all colors are part of the palette.
It would be better to allow the number of color wells to change.
2023-07-12 01:51:57 -04:00
Isaiah Odhner
3713e9ed00 Switch color palette to mIRC's palette when saving/opening as mIRC code format 2023-07-12 01:51:57 -04:00
Isaiah Odhner
618fe00d81 Simplify IRC palette data structure, to match regular palette 2023-07-12 01:51:57 -04:00
Isaiah Odhner
967801cf17 Prevent digits in document from merging with mIRC color codes
If digits were present in the document, they were concatenated after
the color codes, and they ran together indistinguishably.
This changed the color index numbers that were read back, to potentially
invalid color indices, and lost the digits as part of the document.
It needs the delimiter of the ending escape code to separate the digits.
2023-07-12 01:51:57 -04:00
Isaiah Odhner
f77d2bba38 Note new format support 2023-07-12 01:44:08 -04:00
Isaiah Odhner
878bf45ea3 Fix nearest color finding 2023-07-11 18:51:12 -04:00
Isaiah Odhner
0eea55e7f6 Make saved mIRC files openable 2023-07-11 18:25:49 -04:00
Isaiah Odhner
645f1ec127 Add missing duplicate error handling for Paste From 2023-07-11 17:19:08 -04:00
Isaiah Odhner
da85d319e4 Add mIRC code export support 2023-07-11 04:00:22 -04:00
Isaiah Odhner
b885436966 Fix drag and drop of files with CharInput focused 2023-07-11 02:02:18 -04:00
Isaiah Odhner
85ba439cbd Fix pasting into CharInput not affecting brush 2023-07-11 02:02:18 -04:00
Isaiah Odhner
2c1069d619 Fix contrast of fieldsets in dark mode 2023-07-11 00:02:39 -04:00
Isaiah Odhner
da0abcbf1e Add stretch/skew icons to dialog 2023-07-10 23:57:48 -04:00
Isaiah Odhner
6309e05d8f Update readme 2023-07-10 23:02:04 -04:00
Isaiah Odhner
2d9ba1ae5f Implement stretch/skew 2023-07-10 21:32:17 -04:00
Isaiah Odhner
b5e52a1463 Conditionally enable angle radio buttons 2023-07-10 19:30:18 -04:00
Isaiah Odhner
f979090b42 Fix layout (Container caused contents to collapse) 2023-07-10 19:10:18 -04:00
Isaiah Odhner
7a81446558 WIP: merge flip/rotate and rotate dialogs 2023-07-10 19:10:18 -04:00
Isaiah Odhner
7d8dddb97f Implement rotate by angle 2023-07-10 18:47:11 -04:00
Isaiah Odhner
2a7d88b10c Implement flip horizontal/vertical 2023-07-10 17:28:19 -04:00
Isaiah Odhner
755a92fce0 DRY adding undos to the stack and clearing redos 2023-07-10 17:28:19 -04:00
Isaiah Odhner
5939c85ea4 Maybe this is cleaner, because it's type-checked 2023-07-10 17:28:19 -04:00
Isaiah Odhner
3a0552ada6 Fix wrapping focus within dialog windows (with Tab)
(broken in last commit)
2023-07-10 17:28:19 -04:00
Isaiah Odhner
c944a74f8d Make Ctrl+I work, distinguished from Tab heuristically 2023-07-10 17:28:19 -04:00
Isaiah Odhner
c1998c52f7 Fix lack of undo state for paste+stamp 2023-07-10 17:28:19 -04:00
Isaiah Odhner
46c52fcaf1 Fix arrow keys not moving selected data if not moved with mouse first 2023-07-10 17:28:19 -04:00
Isaiah Odhner
505cb389f2 Invert only within Free-Form Select's polygon
It turns out this isn't actually how MS Paint works (in Windows 98, my go-to reference), but, isn't it better this way?
2023-07-10 17:28:19 -04:00
Isaiah Odhner
a3e7a2d8b9 Extract method for selection extraction 2023-07-08 01:31:02 -04:00
Isaiah Odhner
54c9f6a500 Implement Image > Invert Colors 2023-07-08 01:14:40 -04:00
Isaiah Odhner
71dd8b50df Implement Image > Clear Image 2023-07-08 00:24:51 -04:00
Isaiah Odhner
2f7182d8c3 Fix structural validity of saved HTML 2023-06-30 21:49:41 -04:00
Isaiah Odhner
3b4ec0e79c Update/tweak readme
Saying "discards color information" probably isn't helpful, especially since it shows a warning when saving.
None of the image formats say "discards text information" anyways.
2023-06-30 21:43:35 -04:00
Isaiah Odhner
6c7d48e49f Disable saving in ICNS format, and update format support list 2023-06-30 21:00:42 -04:00
Isaiah Odhner
6c51b8fba0 Refactor format disabling
- confirm_information_loss and encode_to_format no longer need syncing
- other formats can be disabled easily
2023-06-30 20:10:24 -04:00
Isaiah Odhner
d886e31930 Configure ICO format saving 2023-06-30 19:42:16 -04:00
Isaiah Odhner
f64d75df3c Fix unnecessary backup saving due to reload_after_save 2023-06-30 19:05:06 -04:00
Isaiah Odhner
a2000e7374 Recover from backup file after Save As; fix backup files left behind
Note: "the backup file will be deleted on close" was no longer true since making it check `self.backup_checked_for`.
2023-06-30 18:49:50 -04:00