From 088ffc08191eca4fe2b65f995ea1a055773c6c48 Mon Sep 17 00:00:00 2001 From: Wendel Voigt Date: Fri, 16 Oct 2015 10:53:34 -0500 Subject: [PATCH 1/3] Enhancements - fulltab, center_name, back_offset_height Added 3 enhancements: --fulltab to make the tab the full width of the divider --center_name to center the card name on the tab --back_offset_height to add points in the vertical direction on the back page --- dominion_tabs.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/dominion_tabs.py b/dominion_tabs.py index 9c78ea6..06b5120 100755 --- a/dominion_tabs.py +++ b/dominion_tabs.py @@ -450,8 +450,11 @@ class DominionTabs: h -= h / 2 words = line.split() - if rightSide or not self.options.edge_align_name: - w = textInset + if rightSide or not self.options.edge_align_name or self.options.center_name: + if self.options.center_name: + w = self.tabLabelWidth / 2 - self.nameWidth(line, fontSize) / 2 + else: + w = textInset def drawWordPiece(text, fontSize): self.canvas.setFont('MinionPro-Regular', fontSize) @@ -557,7 +560,7 @@ class DominionTabs: self.canvas.resetTransforms() self.canvas.translate(self.horizontalMargin, self.verticalMargin) if useExtra: - self.canvas.translate(self.options.back_offset, 0) + self.canvas.translate(self.options.back_offset, self.options.back_offset_height) self.canvas.translate(x * self.totalTabWidth, y * self.totalTabHeight) # actual drawing @@ -794,6 +797,8 @@ class DominionTabs: parser = OptionParser() parser.add_option("--back_offset", type="float", dest="back_offset", default=0, help="Points to offset the back page to the right; needed for some printers") + parser.add_option("--back_offset_height", type="float", dest="back_offset_height", default=0, + help="Points to offset the back page upward; needed for some printers") parser.add_option("--orientation", type="choice", choices=["horizontal", "vertical"], dest="orientation", default="horizontal", help="horizontal or vertical, default:horizontal") @@ -807,6 +812,10 @@ class DominionTabs: help="'<%f>x<%f>' (size in cm), or 'A4', or 'LETTER'") parser.add_option("--tabwidth", type="float", default=4, help="width in cm of stick-up tab (ignored if tabs-only used)") + parser.add_option("--fulltab", action="store_true", dest="fulltab", + help="force all label tabs to be full width with name centered") + parser.add_option("--center_name", action="store_true", + help="Center the card name on the tab") parser.add_option("--samesidelabels", action="store_true", dest="sameside", help="force all label tabs to be on the same side" " (this will be forced on if there is an uneven" @@ -966,7 +975,10 @@ class DominionTabs: else: minmarginwidth, minmarginheight = self.parseDimensions( self.options.minmargin) - self.tabLabelWidth = self.options.tabwidth * cm + if self.options.fulltab: + self.tabLabelWidth = self.tabWidth + else: + self.tabLabelWidth = self.options.tabwidth * cm self.tabLabelHeight = .9 * cm self.horizontalBorderSpace = 0 * cm self.verticalBorderSpace = 0 * cm From 996fa90681a56654db16dba1ee163b9eec1f5dd1 Mon Sep 17 00:00:00 2001 From: Wendel Voigt Date: Fri, 16 Oct 2015 22:06:21 -0500 Subject: [PATCH 2/3] Consolidation of options Consolidated options on tab location and tab text alignment. Options that were generally mutually exclusive to each other were combined. Replaced --center_name and --edge_align_name with single --tab_name_align that takes the parameters left, right, center, centre, edge (default=left) Replaced --samesidelables and --fulltab with --tab_side that takes the parameters left, right, alternate, full (default=alternate) --- dominion_tabs.py | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/dominion_tabs.py b/dominion_tabs.py index 06b5120..4af74cd 100755 --- a/dominion_tabs.py +++ b/dominion_tabs.py @@ -450,8 +450,8 @@ class DominionTabs: h -= h / 2 words = line.split() - if rightSide or not self.options.edge_align_name or self.options.center_name: - if self.options.center_name: + if (not self.options.tab_name_align == "right") and (self.options.tab_name_align == "centre" or rightSide or not self.options.tab_name_align == "edge" ): + if self.options.tab_name_align == "centre": w = self.tabLabelWidth / 2 - self.nameWidth(line, fontSize) / 2 else: w = textInset @@ -549,13 +549,16 @@ class DominionTabs: def drawDivider(self, card, x, y, useExtra=False): # figure out whether the tab should go on the right side or not - if not self.options.sameside: + if self.options.tab_side == "right": + rightSide = useExtra + elif self.options.tab_side == "left" or self.options.tab_side == "full": + rightSide = not useExtra + else: if not useExtra: rightSide = not self.odd else: rightSide = self.odd - else: - rightSide = useExtra + # apply the transforms to get us to the corner of the current card self.canvas.resetTransforms() self.canvas.translate(self.horizontalMargin, self.verticalMargin) @@ -810,21 +813,22 @@ class DominionTabs: help="'<%f>x<%f>' (size in cm, left/right, top/bottom), default: 1x1") parser.add_option("--papersize", type="string", dest="papersize", default=None, help="'<%f>x<%f>' (size in cm), or 'A4', or 'LETTER'") + parser.add_option("--tab_name_align", type="choice", choices=["left", "right", "center", "centre", "edge"], + dest="tab_name_align", default="left", + help="Alignment of text on the tab. choices: left, centre (or center), edge." + " The edge option will align the card name to the outside edge of the" + " tab, so that when using tabs on alternating sides," + " the name is less likely to be hidden by the tab in front;" + " default:left") + parser.add_option("--tab_side", type="choice", choices=["left", "right", "alternate", "full"], + dest="tab_side", default="alternate", + help="Alignment of tab. choices: left, right, alternate, full;" + " left/right forces all tabs to that side;" + " alternate will toggle between left and right for the tabs;" + " full will force all label tabs to be full width of the divider" + " default:alternate") parser.add_option("--tabwidth", type="float", default=4, help="width in cm of stick-up tab (ignored if tabs-only used)") - parser.add_option("--fulltab", action="store_true", dest="fulltab", - help="force all label tabs to be full width with name centered") - parser.add_option("--center_name", action="store_true", - help="Center the card name on the tab") - parser.add_option("--samesidelabels", action="store_true", dest="sameside", - help="force all label tabs to be on the same side" - " (this will be forced on if there is an uneven" - " number of cards horizontally across the page)") - parser.add_option("--edge_align_name", action="store_true", - help="align the card name to the outside edge of the" - " tab, so that when using tabs on alternating sides," - " the name is less likely to be hidden by the tab" - " in front; ignored if samesidelabels is on") parser.add_option("--cost", action="append", type="choice", choices=cls.LOCATION_CHOICES, default=[], help="where to display the card cost; may be set to" @@ -960,6 +964,9 @@ class DominionTabs: else: self.tabWidth, self.tabBaseHeight = dominionCardWidth, dominionCardHeight + if self.options.tab_name_align == "center": + self.options.tab_name_align = "centre" + fixedMargins = False if self.options.tabs_only: # fixed for Avery 8867 for now @@ -975,7 +982,7 @@ class DominionTabs: else: minmarginwidth, minmarginheight = self.parseDimensions( self.options.minmargin) - if self.options.fulltab: + if self.options.tab_side == "full": self.tabLabelWidth = self.tabWidth else: self.tabLabelWidth = self.options.tabwidth * cm From 8c4c1395a28acfc848df40a37778dabef20338d4 Mon Sep 17 00:00:00 2001 From: Wendel Voigt Date: Sat, 17 Oct 2015 09:25:08 -0500 Subject: [PATCH 3/3] Cleanup and Added starting alternating tabs on the left or the right. Added the option to start the alternating tabs with a left tab, or a right tab. Clean up of help text. Fixed one case where overlapping options did not make sense. --- dominion_tabs.py | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/dominion_tabs.py b/dominion_tabs.py index 4af74cd..f0d6ce2 100755 --- a/dominion_tabs.py +++ b/dominion_tabs.py @@ -554,6 +554,7 @@ class DominionTabs: elif self.options.tab_side == "left" or self.options.tab_side == "full": rightSide = not useExtra else: + # alternate the cards if not useExtra: rightSide = not self.odd else: @@ -755,7 +756,14 @@ class DominionTabs: def drawDividers(self, cards): # split into pages cards = split(cards, self.numTabsVertical * self.numTabsHorizontal) - self.odd = True + + # Starting with tabs on the left or the right? + if self.options.tab_side == "right-alternate" or self.options.tab_side == "right": + self.odd = True + else: + # left-alternate, left, full + self.odd = False + for pageNum, pageCards in enumerate(cards): # remember whether we start with odd or even divider for tab # location @@ -815,20 +823,22 @@ class DominionTabs: help="'<%f>x<%f>' (size in cm), or 'A4', or 'LETTER'") parser.add_option("--tab_name_align", type="choice", choices=["left", "right", "center", "centre", "edge"], dest="tab_name_align", default="left", - help="Alignment of text on the tab. choices: left, centre (or center), edge." + help="Alignment of text on the tab. choices: left, right, centre (or center), edge." " The edge option will align the card name to the outside edge of the" " tab, so that when using tabs on alternating sides," - " the name is less likely to be hidden by the tab in front;" + " the name is less likely to be hidden by the tab in front" + " (edge will revert to left when tab_side is full since there is no edge in that case);" " default:left") - parser.add_option("--tab_side", type="choice", choices=["left", "right", "alternate", "full"], - dest="tab_side", default="alternate", - help="Alignment of tab. choices: left, right, alternate, full;" - " left/right forces all tabs to that side;" - " alternate will toggle between left and right for the tabs;" + parser.add_option("--tab_side", type="choice", choices=["left", "right", "left-alternate", "right-alternate", "full"], + dest="tab_side", default="right-alternate", + help="Alignment of tab. choices: left, right, left-alternate, right-alternate, full;" + " left/right forces all tabs to left/right side;" + " left-alternate will start on the left and then toggle between left and right for the tabs;" + " right-alternate will start on the right and then toggle between right and left for the tabs;" " full will force all label tabs to be full width of the divider" - " default:alternate") + " default:right-alternate") parser.add_option("--tabwidth", type="float", default=4, - help="width in cm of stick-up tab (ignored if tabs-only used)") + help="width in cm of stick-up tab (ignored if tab_side is full or tabs-only is used)") parser.add_option("--cost", action="append", type="choice", choices=cls.LOCATION_CHOICES, default=[], help="where to display the card cost; may be set to" @@ -966,7 +976,11 @@ class DominionTabs: if self.options.tab_name_align == "center": self.options.tab_name_align = "centre" - + + if self.options.tab_side == "full" and self.options.tab_name_align == "edge": + # This case does not make sense since there are two tab edges in this case. So picking left edge. + self.options.tab_name_align == "left" + fixedMargins = False if self.options.tabs_only: # fixed for Avery 8867 for now