Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch custom_card_import_dialog
Excluding Merge-Ins
This is equivalent to a diff from
a0bb946382
to bd1ca5c600
2025-04-25
| | |
11:56 |
|
Leaf
check-in: bd1ca5c600 user: thomas tags: custom_card_import_dialog
|
11:37 |
|
check-in: dfab6f5fde user: thomas tags: custom_card_import_dialog
|
2025-04-03
| | |
14:20 |
|
check-in: 2cbbc31007 user: thomas tags: trunk
|
2025-04-01
| | |
20:51 |
|
check-in: d8a4c9160d user: thomas tags: custom_card_import_dialog
|
13:36 |
|
check-in: a0bb946382 user: thomas tags: trunk
|
12:39 |
|
check-in: 3467478e43 user: thomas tags: trunk
|
| | |
Changes to .fossil-settings/ignore-glob.
︙ | | |
26
27
28
29
30
31
32
|
26
27
28
29
30
31
32
33
|
+
|
*.spec
*.pdf
*.mtgproxies
mtg_proxy_printer/resources/translations/*.qm
mtg_proxy_printer/resources/translations/mtgproxyprinter_sources.ts
Screenshots/*.txt
*.png
requirements*.txt
|
Changes to doc/changelog.md.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
|
# Changelog
# Next version (in development)
## Changed features
## New features
- Improved custom card support
- Adding custom cards via drag & drop now opens a dialog to customize the import
- Allows setting the number of copies to add for each card. Vastly improves the workflow when you want
to print multiple copies.
- Shown card name is now derived from the file name, instead of defaulting to "Custom Card"
- The import dialog can also be accessed from the File menu. Access to printing custom cards no longer
requires the use of drag & drop.
- Improved custom card support: It is now possible to save custom cards and empty slots in the apps save file format.
- It is now possible to save custom cards and empty slots in the apps save file format.
Custom cards are no longer lost when saving.
## Changed features
- The card table in the deck import wizard now has an editable Copies column to state the number of copies per card,
instead of duplicating the card for that many rows. This makes it possible to edit the number of copies per card
- When splitting exported PDFs, zero-pad the sequence numbers appended to the file name
so that all have the same length. This gives a more consistent sorting of output files.
- This avoids having output files sorted like "1.pdf", "11.pdf", "12.pdf", …, "2.pdf", "21.pdf", …
- The page content table no longer uses a fancy multi selection behavior, as it interfered with editing entries.
The new behavior is in line with how other applications allow selections in tables.
# Version 0.30.1 (2025-03-11) <a name="v0_30_1"></a>
## Fixed issues
- Fixed that some start-up tasks were not run on the Windows 10+ build. Fixes that the deck list translation and
default card language setting in the application settings did not offer any language choices.
|
︙ | | |
Changes to mtg-proxy-printer-runner.py.
︙ | | |
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
-
+
|
import sys
# Make sure to find this checkout, and not any system- or user-wide installed versions that may be present
root_path = pathlib.Path(__file__).parent.absolute().resolve()
sys.path.insert(0, str(root_path))
import mtg_proxy_printer.model.carddb
from mtg_proxy_printer.__main__ import main # noqa
from mtg_proxy_printer.__main__ import main
# These methods are wrapped by the profile() function
# if this script is run using the kernprof line profiler.
to_be_profiled_functions = {
mtg_proxy_printer.model.carddb.CardDatabase: [
"get_all_languages",
|
︙ | | |
Changes to mtg_proxy_printer/decklist_parser/common.py.
︙ | | |
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
-
+
+
|
from abc import abstractmethod
import typing
from PyQt5.QtCore import QObject, pyqtSignal as Signal
from mtg_proxy_printer.model.carddb import Card, CardDatabase, CardIdentificationData
from mtg_proxy_printer.model.carddb import CardDatabase, CardIdentificationData
from mtg_proxy_printer.model.card import Card, AnyCardType
from mtg_proxy_printer.model.imagedb import ImageDatabase
import mtg_proxy_printer.settings
from mtg_proxy_printer.logger import get_logger
logger = get_logger(__name__)
del get_logger
__all__ = [
|
︙ | | |
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
-
+
|
# noinspection PyUnresolvedReferences,PyUnboundLocalVariable
profile
except NameError:
# If not defined, use this identity decorator as a replacement
def profile(func):
return func
CardCounter = typing.Counter[Card]
CardCounter = typing.Counter[AnyCardType]
ParsedDeck = typing.Tuple[CardCounter, typing.List[str]]
class ParserBase(QObject):
@staticmethod
def supported_file_types() -> typing.Dict[str, typing.List[str]]:
|
︙ | | |
Changes to mtg_proxy_printer/decklist_parser/csv_parsers.py.
︙ | | |
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
-
+
+
|
import abc
import collections
import csv
import typing
from PyQt5.QtCore import QObject, QCoreApplication
from mtg_proxy_printer.model.carddb import Card, CardDatabase, CardIdentificationData
from mtg_proxy_printer.model.carddb import CardDatabase, CardIdentificationData
from ..model.card import Card
from mtg_proxy_printer.model.imagedb import ImageDatabase
from .common import ParsedDeck, ParserBase
from mtg_proxy_printer.logger import get_logger
logger = get_logger(__name__)
del get_logger
|
︙ | | |
Changes to mtg_proxy_printer/decklist_parser/re_parsers.py.
︙ | | |
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
-
+
+
|
from collections import Counter
import re
import typing
from PyQt5.QtCore import QObject, QCoreApplication
from mtg_proxy_printer.decklist_parser.common import ParsedDeck, ParserBase
from mtg_proxy_printer.model.carddb import Card, CardDatabase, CardIdentificationData
from mtg_proxy_printer.model.carddb import CardDatabase, CardIdentificationData
from mtg_proxy_printer.model.card import Card
from mtg_proxy_printer.model.imagedb import ImageDatabase
from mtg_proxy_printer.logger import get_logger
logger = get_logger(__name__)
del get_logger
MatchType = typing.Dict[str, str]
|
︙ | | |
Changes to mtg_proxy_printer/document_controller/_interface.py.
︙ | | |
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
-
+
|
@abstractmethod
def undo(self, document: "Document") -> Self:
"""
Reverses the application of the action to the given document, undoing its effects.
For this to work properly, this action must have been the most recent action applied to the document.
"""
pass
return self
def __eq__(self, other) -> bool:
return isinstance(other, self.__class__) and all(
map(
operator.eq,
map((partial(getattr, self)), self.COMPARISON_ATTRIBUTES),
map((partial(getattr, other)), self.COMPARISON_ATTRIBUTES)
|
︙ | | |
Changes to mtg_proxy_printer/document_controller/card_actions.py.
︙ | | |
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
-
+
+
+
|
import functools
import itertools
import math
import typing
from mtg_proxy_printer.model.carddb import Card, AnyCardType
from ..model.card import Card, AnyCardType
if typing.TYPE_CHECKING:
from mtg_proxy_printer.model.document import Document
from mtg_proxy_printer.model.document_page import Page
from mtg_proxy_printer.natsort import to_list_of_ranges
from ._interface import DocumentAction, IllegalStateError, Self, split_iterable
from .page_actions import ActionNewPage, ActionRemovePage
from mtg_proxy_printer.logger import get_logger
logger = get_logger(__name__)
del get_logger
__all__ = [
|
︙ | | |
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
216
217
218
219
220
221
222
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
def as_str(self):
card_count = sum(upper-lower+1 for lower, upper in self.card_ranges_to_remove)
page_number = self.page_number+1
return self.translate(
"ActionRemoveCards", "Remove %n card(s) from page {page_number}",
"Undo/redo tooltip text", card_count
).format(page_number=page_number)
def to_list_of_ranges(sequence: typing.Iterable[int]) -> typing.List[typing.Tuple[int, int]]:
sequence = sorted(sequence)
ranges: typing.List[typing.Tuple[int, int]] = []
sequence = itertools.chain(sequence, (sentinel := object(),))
lower = upper = next(sequence)
for item in sequence:
if item is sentinel or upper != item-1:
ranges.append((lower, upper))
lower = upper = item
else:
upper = item
return ranges
|
Added mtg_proxy_printer/document_controller/edit_custom_card.py.