MTGProxyPrinter

Timeline
Login

Timeline

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

94 check-ins using file mtg_proxy_printer/print.py version c68e5ac818

2025-04-09
18:12
Add Card.is_custom_card property. It defines in one place how a custom card is identified, by having an empty oracle_id field. Avoids littering the code-base with "not card.oracle_id" statements. Leaf check-in: d11b61da21 user: thomas tags: custom_card_import_dialog
11:44
LanguageEditorDelegate: Improve variable naming check-in: 134d0c5865 user: thomas tags: custom_card_import_dialog
11:32
Extract index to Document instance resolution into a function. This is used by multiple item delegates to access the base Document instance from a given QModelIndex. Add additional docstrings. check-in: b39ed360ee user: thomas tags: custom_card_import_dialog
2025-04-08
21:50
Add LanguageEditorDelegate class, implementing language selector for official cards and a language editor for custom cards. check-in: f5ebfa43dd user: thomas tags: custom_card_import_dialog
21:28
Reworked how item delegates are stored. Since they are not accessed after creation and only kept as attributes to prevent the garbage collector from collecting them, put all into a tuple. check-in: 5fbda4453a user: thomas tags: custom_card_import_dialog
13:52
Extract editing custom cards into a dedicated document action ActionEditCustomCard. This makes it possible to undo/redo edits to custom cards. check-in: 74ed86293b user: thomas tags: custom_card_import_dialog
13:34
Move PageColumns enum to document_page.py. This de-couples the enum from Document, and allows importing it for use in document actions. check-in: e32d2314cd user: thomas tags: custom_card_import_dialog
13:31
Fix bad import in a test module check-in: 33e82fd3d0 user: thomas tags: custom_card_import_dialog
2025-04-07
13:53
Document: Update the parent page when changing a custom card name. check-in: a3961bbbd9 user: thomas tags: custom_card_import_dialog
13:45
CustomCardImportDialog: Removed the unused QLabel. Reworded the "Add cards" button to "Load images", and switched the icon to an "import" icon. Moved the Ok button to the bottom. This reduces confusion, as the top "add" button did not accept the dialog previously. check-in: 90b1f2d5de user: thomas tags: custom_card_import_dialog
13:02
Document: Implement editing custom cards. check-in: b706dfef58 user: thomas tags: custom_card_import_dialog
12:21
Add two tests for the CustomCardSetEditor. check-in: 81e8c2b4f6 user: thomas tags: custom_card_import_dialog
10:47
Add unit tests for BoundedCopiesSpinboxDelegate check-in: 89e5ef1d59 user: thomas tags: custom_card_import_dialog
09:51
Disable pytest timeouts check-in: 0e1776beb5 user: thomas tags: custom_card_import_dialog
09:04
Ensure compatibility with the deck list import wizard. Both use the CardListModel and CardListTableView. So internally distinguish between custom cards and official cards in the SetEditorDelegate and use the appropriate editor for each kind of card. check-in: dc1289e21e user: thomas tags: custom_card_import_dialog
08:16
Implement writing the set for DFC check cards check-in: 906da3a391 user: thomas tags: custom_card_import_dialog
08:13
Implement a code editor for MTG sets. Set it as the item delegate for the Set column in the CardListTableView. Fix data() for retrieving the set in EditRole. Implement writing the set to the Card instance check-in: 2da89391a0 user: thomas tags: custom_card_import_dialog
07:43
Add requirements*.txt to the ignore glob check-in: 697cd395bd user: thomas tags: custom_card_import_dialog
2025-04-06
22:27
CustomCardImportDialog: The "Remove selected" button now removes only the selected cards, instead of everything. Dialog buttons are now disabled, if clicking them would do nothing. So the "Delete selected" button is only active, if cards are selected. The Ok button is only active if the table is non-empty. check-in: 317df9d635 user: thomas tags: custom_card_import_dialog
18:02
Add changelog entry check-in: fc938eff47 user: thomas tags: custom_card_import_dialog
17:45
Set the dialog window size to 900x500. check-in: d8bb73a742 user: thomas tags: custom_card_import_dialog
17:44
CustomCardImportDialog: Add spinbox to specify the target copy count when clicking the set copies button. check-in: 5e5ef08041 user: thomas tags: custom_card_import_dialog
17:31
Implemented setting all copy values to 1 and clearing the custom card table when clicking the delete button check-in: cd2a7d62f7 user: thomas tags: custom_card_import_dialog
17:29
MainWindow: Unify handling of dialogs and wizards. check-in: 88be39f16f user: thomas tags: custom_card_import_dialog
11:34
Implemented opening the custom card import wizard from an action in the main window check-in: 03c67497e2 user: thomas tags: custom_card_import_dialog
11:18
CustomCardImportDialog: Implemented adding images via a button and file selector. check-in: 1bc680fd48 user: thomas tags: custom_card_import_dialog
2025-04-04
12:46
Implement CustomCardImportDialog.accept(). Request applying an ActionImportDeckList when accepting the dialog. Connect that to document.apply(). Accepting the custom card import dialog now adds the imported custom cards to the document. check-in: d09f174082 user: thomas tags: custom_card_import_dialog
12:15
Add delegate class CardSideSelectionDelegate. This improves display of sides when editing the Side column check-in: a07615fedc user: thomas tags: custom_card_import_dialog
12:04
Rename SpinboxItemDelegate to BoundedCopiesSpinboxDelegate which better reflects the use of the class. check-in: a60db985d0 user: thomas tags: custom_card_import_dialog
11:36
CardListModel now uses get_image_for_tooltip_display() to show images of custom cards via tooltips when hovering over the card name column check-in: 84283babeb user: thomas tags: custom_card_import_dialog
11:35
Moved get_image_for_tooltip_display() from cache_cleanup_wizard.py to common.py check-in: 48c7027eb5 user: thomas tags: custom_card_import_dialog
11:02
Initialize the custom card name to the file name stem. check-in: 96ff305bc5 user: thomas tags: custom_card_import_dialog
10:58
Add additional Card attributes to the object hash. Includes the Image URI which also holds the file path for custom cards. This allows the model to deduplicate cards based on the file path. check-in: 0574a81d27 user: thomas tags: custom_card_import_dialog
09:53
Extend the CardListModel to allow editing columns of custom cards. check-in: b5540b8327 user: thomas tags: custom_card_import_dialog
2025-04-03
15:35
Move the creation of the sort model into the CardListTableView. Use the CardListTableView class in the CustomCardImportDialog. That ensures that the copies column is in a valid range. check-in: ddf5312527 user: thomas tags: custom_card_import_dialog
15:23
Add CardListTableView class, subclassing QTableView. This encapuslates the logic used to manage a card list in a class. Replace the plain QTableView in the deck list import wizard with the new class. check-in: a99a0cbbcd user: thomas tags: custom_card_import_dialog
14:20
Remove unused attributes in the PageConfigWidget and PageConfigContainer classes. Leaf check-in: 2cbbc31007 user: thomas tags: trunk
2025-04-02
22:24
Adjusted internals of the CustomCardImportDialog. It now has an actual model class to hold the cards, and displays them via the connected table view. check-in: f3099f5e2d user: thomas tags: custom_card_import_dialog
22:19
Implemented showing the CustomCardImportDialog when dropping images onto the main window. check-in: 31735059ed user: thomas tags: custom_card_import_dialog
2025-04-01
20:51
Merge with trunk. check-in: d8a4c9160d user: thomas tags: custom_card_import_dialog
13:36
Break long lines in README.md check-in: a0bb946382 user: thomas tags: trunk
12:39
Implemented saving custom cards in the native save file format. Major improvement for custom card support check-in: 3467478e43 user: thomas tags: trunk
12:37
Add changelog entry Closed-Leaf check-in: 9b8e196b3f user: thomas tags: save_custom_cards
12:24
Reworked creation of requirements*.txt files. Run the creation in parallel, reducing runtime from ~17s to ~7s. check-in: 61bfa050ae user: thomas tags: trunk
11:22
Perform additional database validation steps when opening document save files. Don't run PRAGMA integrity_check on the CardDatabase file, as that can take 30s, balooning application startup time. check-in: 6ada69b429 user: thomas tags: save_custom_cards
10:55
Remove MIN_SUPPORTED_SQLITE_VERSION constants in the code base. Remove SQLite library version checks from database validation logic. Centralize the version check in sqlite_helpers.py and run it during module import. This reduces complexity. check-in: e665f1db06 user: thomas tags: save_custom_cards
10:42
Support loading empty documents. check-in: 5e84be640d user: thomas tags: save_custom_cards
2025-03-31
10:28
Fix test_unknown_save_version_raises_exception() check-in: c5b964d0f2 user: thomas tags: save_custom_cards
2025-03-29
14:33
Fixed outdated mock path, fixing most of the failing document loader tests. check-in: a6733d995f user: thomas tags: save_custom_cards
14:23
Further fixes for the test suite. check-in: 3bfed0b5c5 user: thomas tags: save_custom_cards
12:11
Adjusted test cases check-in: e3325f9751 user: thomas tags: save_custom_cards
08:06
Implemented saving empty slots. Required relaxing the constraints on the scryfall_id and custom_card_id in the Card table check-in: 6b3e3ab95f user: thomas tags: save_custom_cards
2025-03-28
23:34
Implemented loading empty cards. check-in: efe940969f user: thomas tags: save_custom_cards
14:57
Merge with trunk check-in: ce96e05fe9 user: thomas tags: save_custom_cards
14:48
Extracted the page card table view into a dedicated class. This moves most of the logic out of CentralWidget, as most of the present logic dealt with the table custom context menu. check-in: 67360d8140 user: thomas tags: trunk
13:22
Restore connection from delete_selected_images_button to page_card_table_view.delete_selected_images. Closed-Leaf check-in: 94178036d9 user: thomas tags: extract_page_card_table_view_class
13:16
Fix segmentation fault happening when clicking a row in the PageCardTableView. Connect the selectionChanged signal to a Slot method instead of a lambda, which resolves the crash. And an additional bit of code cleanup. check-in: 3851dc7bd8 user: thomas tags: extract_page_card_table_view_class
12:56
Dev environment: create_development_environment scripts now echo that creating requirements.txt will take a while before generating them. check-in: 5ac4445565 user: thomas tags: extract_page_card_table_view_class
12:55
Minor clean-up in WizardBase._set_default_size() check-in: 6e2775b89b user: thomas tags: extract_page_card_table_view_class
12:11
Move tests for the PageCardTableView into a dedicated module. Remove dependency on the main_window fixture for these tests, which speeds up the execution. check-in: 8ba7aebe03 user: thomas tags: extract_page_card_table_view_class
11:24
Use functools.cache for cached_dedent(), if it is available. check-in: 14030e571e user: thomas tags: extract_page_card_table_view_class
11:16
Run PRAGMA integrity_check during validate_database_schema() check-in: 656e6c5f26 user: thomas tags: save_custom_cards
2025-03-27
22:39
Use the new PageCardTableView class in the CentralWidget UI files. Fix a @Slot() decorator check-in: 3d696d39ae user: thomas tags: extract_page_card_table_view_class
22:28
Moved additional components. Add the page_card_table_view.py module that should have been added in the last check-in. check-in: f7157d11eb user: thomas tags: extract_page_card_table_view_class
22:13
Extract the PageCardTableView as a dedicated class. Most of the CentralWidget logic is related to setting up the page card table view, and its custom context menu. Encapsulate all that in a dedicated class. check-in: 436980c684 user: thomas tags: extract_page_card_table_view_class
14:49
Adjust test_save_migration() and schema validation testing for the proper target schema version check-in: e27771c553 user: thomas tags: save_custom_cards
14:26
Fix the registered adapter for TIMESTAMP. Fixes Python warning. check-in: 8ac57a45c5 user: thomas tags: save_custom_cards
14:24
Fix card database migration code. Replace the implicit and deprecated SQL TIMESTAMP converter with an explicit one. Adjust the code to handle getting datetime instances directly from the database. check-in: 9b2b20c59b user: thomas tags: save_custom_cards
2025-03-26
19:14
Implemented loading document-v7, including custom cards. The implementation is not yet tested and hardened against bad save data. A first round-trip save/load cycle worked. check-in: fb701aeb1e user: thomas tags: save_custom_cards
19:12
Schema change: Declare boolean columns with type BOOLEAN_INTEGER and register a converter to bool. check-in: e5a4811447 user: thomas tags: save_custom_cards
13:45
DocumentLoader: Use from imports for typing imports check-in: 65dc5fdea9 user: thomas tags: save_custom_cards
12:55
Only VACUUM the save file, if the number of free database pages exceed 10% of the total page count. check-in: a11d99e3d7 user: thomas tags: save_custom_cards
2025-03-25
18:47
Tests: Validate that save file migration scripts set the user_version pragma to the correct value check-in: 05f4f9695e user: thomas tags: save_custom_cards
18:38
Implemented saving document version 7, including custom cards. check-in: 440b2139f7 user: thomas tags: save_custom_cards
18:37
Fixed _migrate_6_to_7() not updating the user_version field. check-in: c1f731a4cc user: thomas tags: save_custom_cards
2025-03-23
16:12
Add table Page to the document save file. Allows storing the image size of the page, to support sizes of blanks check-in: 0cf4256c7d user: thomas tags: save_custom_cards
16:02
MagicWorkstationDeckListParser: Improve parser compatibility, by also allowing single space characters between the sideboard note and the number of copies. Ensures compatibility with mwDeck files obtained from [https://mtgen.net] check-in: 639a73228d user: thomas tags: trunk
15:45
README: Fix link to the XMage homepage, as the project switched the domain check-in: 9ac5254edf user: thomas tags: trunk
13:05
Partial, complete rewrite of the document loader logic. The document save file format needs additional amendments to support storing size information for pages. As of now, blank slots cause issues, because they don't contain image size information, and thus cannot be loaded. check-in: b28103889c user: thomas tags: save_custom_cards
2025-03-22
23:09
Partial implementation for loading document settings from document-v7 save files. check-in: 9af679f0dc user: thomas tags: save_custom_cards
22:43
Written save file migration code from document-v6 to document-v7 check-in: fcffce34ff user: thomas tags: save_custom_cards
22:42
Save file schema: The DocumentSettings value column must allow empty strings to support empty document titles. check-in: e6ad8fccd3 user: thomas tags: save_custom_cards
13:50
Save file schema: Add missing type column to the Card table. This is still required to distinguish regular cards from DFC check cards check-in: d0787d4316 user: thomas tags: save_custom_cards
12:56
Import unit tests from trunk check-in: 7fe861fc68 user: thomas tags: save_custom_cards
12:52
Implement test for _migrate_5_to_6(). Cleaned up imports. check-in: 516971ed14 user: thomas tags: trunk
11:38
Add test module tests/test_save_file_migrations.py. Contains tests verifying the correctness of the save file migration. Currently validates database schema. Partially validates data migration. check-in: 13b830d80f user: thomas tags: trunk
09:26
Ignore the translation sources file, which is automatically generated by the translation tools check-in: 9956d1c88c user: thomas tags: trunk
09:24
Add draft for a custom card import dialog. It is supposed to allow setting data like number of copies, card name, etc when dropping images. And also allow loading images to make the feature accessible without drag&drop by adding a menu entry for it. check-in: 8255a732f1 user: thomas tags: custom_card_import_dialog
09:21
Improve save schema comments and constraint descriptions. check-in: 93d7c47220 user: thomas tags: save_custom_cards
2025-03-21
14:29
Add draft for document save file version 7. It allows storing custom cards in a table, together with metadata like set, name, etc for future use. Document settings are set to TEXTual column type affinity to avoid coercing document tiles like "01.0" to "1". Dimensional settings, like margings are moved into the DocumentDimensions table, which will be converted to pint Quantities on the fly. check-in: 23395ea245 user: thomas tags: save_custom_cards
13:17
Move ImageKey and CacheContent dataclasses from imagedb.py into a separate module. This avoids a cyclic import work-around. check-in: bf9caa9e7d user: thomas tags: trunk
2025-03-20
14:42
MeteredSeekableHTTPFile: Fix a few static analysis warnings. Add comments explaining whence flag values in the code. check-in: 0444b622e8 user: thomas tags: trunk
14:25
Moved document saving logic from a Document method into a dedicated save Action class to encapsulate the functionality. Moved the PageLayoutSettings from document_loader.py into a dedicated module to reduce the interdependencies. This reduces the likelihood of cyclic imports. check-in: 1b919d949b user: thomas tags: trunk
14:09
Moved the PageLayoutSettings class from document_loader.py into a dedicated module. This decouples the class from the document loader and reduces import graph complexity. Closed-Leaf check-in: 0bd41d28f3 user: thomas tags: document_save_action