fixes to get 4x2 landscape layout working
- made it properly pick landscape if can cram more cards in that way - tabs are on alternating sides as long as horz number of tabs is even (not just 2) - set labels are printed on side (vertically) if not enough space at bottom - ...and not at all if not enough room on side OR bottom (with warning)
This commit is contained in:
parent
ffeca0f5d5
commit
06eeb3ef36
113
dominion_tabs.py
113
dominion_tabs.py
@ -142,7 +142,7 @@ class DominionTabs:
|
|||||||
self.canvas.line(-2*cmw,0,-cmw,0)
|
self.canvas.line(-2*cmw,0,-cmw,0)
|
||||||
self.canvas.line(-2*cmw,self.tabBaseHeight,-cmw,self.tabBaseHeight)
|
self.canvas.line(-2*cmw,self.tabBaseHeight,-cmw,self.tabBaseHeight)
|
||||||
if y > 0:
|
if y > 0:
|
||||||
self.canvas.line(-2*cmw,self.tabTotalHeight,-cmw,self.tabTotalHeight)
|
self.canvas.line(-2*cmw,self.tabHeight,-cmw,self.tabHeight)
|
||||||
if mirror:
|
if mirror:
|
||||||
self.canvas.restoreState()
|
self.canvas.restoreState()
|
||||||
if y == 0:
|
if y == 0:
|
||||||
@ -151,13 +151,13 @@ class DominionTabs:
|
|||||||
if x == 0:
|
if x == 0:
|
||||||
self.canvas.line(0,-2*cmw,0,-cmw)
|
self.canvas.line(0,-2*cmw,0,-cmw)
|
||||||
elif y == self.numTabsVertical-1:
|
elif y == self.numTabsVertical-1:
|
||||||
self.canvas.line(self.tabWidth,self.tabTotalHeight+cmw,self.tabWidth,self.tabTotalHeight+2*cmw)
|
self.canvas.line(self.tabWidth,self.tabHeight+cmw,self.tabWidth,self.tabHeight+2*cmw)
|
||||||
self.canvas.line(self.tabWidth-self.tabLabelWidth,
|
self.canvas.line(self.tabWidth-self.tabLabelWidth,
|
||||||
self.tabTotalHeight+cmw,
|
self.tabHeight+cmw,
|
||||||
self.tabWidth-self.tabLabelWidth,
|
self.tabWidth-self.tabLabelWidth,
|
||||||
self.tabTotalHeight+2*cmw)
|
self.tabHeight+2*cmw)
|
||||||
if x == 0:
|
if x == 0:
|
||||||
self.canvas.line(0,self.tabTotalHeight+cmw,0,self.tabTotalHeight+2*cmw)
|
self.canvas.line(0,self.tabHeight+cmw,0,self.tabHeight+2*cmw)
|
||||||
|
|
||||||
self.canvas.restoreState()
|
self.canvas.restoreState()
|
||||||
|
|
||||||
@ -166,9 +166,9 @@ class DominionTabs:
|
|||||||
self.canvas.saveState()
|
self.canvas.saveState()
|
||||||
if not rightSide or self.options.sameside:
|
if not rightSide or self.options.sameside:
|
||||||
self.canvas.translate(self.tabWidth-self.tabLabelWidth,
|
self.canvas.translate(self.tabWidth-self.tabLabelWidth,
|
||||||
self.tabTotalHeight-self.tabLabelHeight)
|
self.tabHeight-self.tabLabelHeight)
|
||||||
else:
|
else:
|
||||||
self.canvas.translate(0,self.tabTotalHeight-self.tabLabelHeight)
|
self.canvas.translate(0,self.tabHeight-self.tabLabelHeight)
|
||||||
|
|
||||||
textWidth = 85
|
textWidth = 85
|
||||||
textHeight = self.tabLabelHeight/2-7+card.getType().getTabTextHeightOffset()
|
textHeight = self.tabLabelHeight/2-7+card.getType().getTabTextHeightOffset()
|
||||||
@ -270,7 +270,7 @@ class DominionTabs:
|
|||||||
s.fontName = "Times-Roman"
|
s.fontName = "Times-Roman"
|
||||||
dmod = self.add_inline_images(d,s.fontSize)
|
dmod = self.add_inline_images(d,s.fontSize)
|
||||||
p = Paragraph(dmod,s)
|
p = Paragraph(dmod,s)
|
||||||
textHeight = self.tabTotalHeight - self.tabLabelHeight + 0.2*cm
|
textHeight = self.tabHeight - self.tabLabelHeight + 0.2*cm
|
||||||
textWidth = self.tabWidth - cm
|
textWidth = self.tabWidth - cm
|
||||||
|
|
||||||
w,h = p.wrap(textWidth,textHeight)
|
w,h = p.wrap(textWidth,textHeight)
|
||||||
@ -286,7 +286,7 @@ class DominionTabs:
|
|||||||
|
|
||||||
def drawDivider(self,card,x,y,useExtra=False):
|
def drawDivider(self,card,x,y,useExtra=False):
|
||||||
#figure out whether the tab should go on the right side or not
|
#figure out whether the tab should go on the right side or not
|
||||||
if self.numTabsHorizontal == 2:
|
if self.numTabsHorizontal % 2 == 0:
|
||||||
rightSide = x%2 == 1
|
rightSide = x%2 == 1
|
||||||
else:
|
else:
|
||||||
rightSide = useExtra
|
rightSide = useExtra
|
||||||
@ -295,7 +295,7 @@ class DominionTabs:
|
|||||||
self.canvas.translate(self.horizontalMargin,self.verticalMargin)
|
self.canvas.translate(self.horizontalMargin,self.verticalMargin)
|
||||||
if useExtra:
|
if useExtra:
|
||||||
self.canvas.translate(self.options.back_offset,0)
|
self.canvas.translate(self.options.back_offset,0)
|
||||||
self.canvas.translate(x*(self.tabWidth+self.horizontalBorderSpace),y*(self.tabTotalHeight+self.verticalBorderSpace))
|
self.canvas.translate(x*self.totalTabWidth,y*self.totalTabHeight)
|
||||||
|
|
||||||
#actual drawing
|
#actual drawing
|
||||||
if not self.options.tabs_only:
|
if not self.options.tabs_only:
|
||||||
@ -384,14 +384,57 @@ class DominionTabs:
|
|||||||
def drawSetNames(self, pageCards):
|
def drawSetNames(self, pageCards):
|
||||||
#print sets for this page
|
#print sets for this page
|
||||||
self.canvas.saveState()
|
self.canvas.saveState()
|
||||||
self.canvas.setFont('MinionPro-Regular',12)
|
|
||||||
sets = []
|
try:
|
||||||
for c in pageCards:
|
# calculate the text height, font size, and orientation
|
||||||
setTitle = c.cardset.title()
|
maxFontsize = 12
|
||||||
if setTitle not in sets:
|
minFontsize = 6
|
||||||
sets.append(setTitle)
|
fontname = 'MinionPro-Regular'
|
||||||
self.canvas.drawCentredString(self.paperwidth/2,20,'/'.join(sets))
|
font = pdfmetrics.getFont(fontname)
|
||||||
self.canvas.restoreState()
|
fontHeightRelative = (font.face.ascent + font.face.descent) / 1000
|
||||||
|
|
||||||
|
canFit = False
|
||||||
|
|
||||||
|
layouts = [{'rotation': 0,
|
||||||
|
'minMarginHeight': self.minVerticalMargin,
|
||||||
|
'totalMarginHeight': self.verticalMargin,
|
||||||
|
'width': self.paperwidth},
|
||||||
|
{'rotation': 90,
|
||||||
|
'minMarginHeight': self.minHorizontalMargin,
|
||||||
|
'totalMarginHeight': self.horizontalMargin,
|
||||||
|
'width': self.paperheight}]
|
||||||
|
|
||||||
|
for layout in layouts:
|
||||||
|
availableMargin = layout['totalMarginHeight'] - layout['minMarginHeight']
|
||||||
|
fontsize = availableMargin / fontHeightRelative
|
||||||
|
fontsize = min(maxFontsize, fontsize)
|
||||||
|
if fontsize >= minFontsize:
|
||||||
|
canFit = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if not canFit:
|
||||||
|
import warnings
|
||||||
|
warnings.warn("Not enough space to display set names")
|
||||||
|
return
|
||||||
|
|
||||||
|
self.canvas.setFont(fontname,fontsize)
|
||||||
|
|
||||||
|
sets = []
|
||||||
|
for c in pageCards:
|
||||||
|
setTitle = c.cardset.title()
|
||||||
|
if setTitle not in sets:
|
||||||
|
sets.append(setTitle)
|
||||||
|
|
||||||
|
xPos = layout['width'] / 2
|
||||||
|
yPos = layout['minMarginHeight'] + availableMargin / 2
|
||||||
|
|
||||||
|
if layout['rotation']:
|
||||||
|
self.canvas.rotate(layout['rotation'])
|
||||||
|
yPos = -yPos
|
||||||
|
|
||||||
|
self.canvas.drawCentredString(xPos,yPos,'/'.join(sets))
|
||||||
|
finally:
|
||||||
|
self.canvas.restoreState()
|
||||||
|
|
||||||
def drawDividers(self,cards):
|
def drawDividers(self,cards):
|
||||||
cards = split(cards,self.numTabsVertical*self.numTabsHorizontal)
|
cards = split(cards,self.numTabsVertical*self.numTabsHorizontal)
|
||||||
@ -512,25 +555,35 @@ class DominionTabs:
|
|||||||
self.horizontalBorderSpace = 0*cm
|
self.horizontalBorderSpace = 0*cm
|
||||||
self.verticalBorderSpace = 0*cm
|
self.verticalBorderSpace = 0*cm
|
||||||
|
|
||||||
self.tabTotalHeight = self.tabBaseHeight + self.tabLabelHeight
|
self.tabHeight = self.tabBaseHeight + self.tabLabelHeight
|
||||||
|
|
||||||
numTabsVerticalP = int ((self.paperheight - 2*minmarginheight) / self.tabTotalHeight)
|
self.totalTabWidth = self.tabWidth + self.horizontalBorderSpace
|
||||||
numTabsHorizontalP = int ((self.paperwidth - 2*minmarginwidth) / self.tabWidth)
|
self.totalTabHeight = self.tabHeight + self.verticalBorderSpace
|
||||||
numTabsVerticalL = int ((self.paperwidth - 2*minmarginwidth) / self.tabWidth)
|
|
||||||
numTabsHorizontalL = int ((self.paperheight - 2*minmarginheight) / self.tabTotalHeight)
|
|
||||||
|
|
||||||
if numTabsVerticalL * numTabsHorizontalL > numTabsVerticalP * numTabsHorizontalP:
|
print "Paper dimensions: %fcm (w) x %fcm (h)" % (self.paperwidth / cm, self.paperheight / cm)
|
||||||
|
print "Tab dimensions: %fcm (w) x %fcm (h)" % (self.totalTabWidth / cm, self.totalTabHeight / cm)
|
||||||
|
|
||||||
|
numTabsVerticalP = int ((self.paperheight - 2*minmarginheight) / self.totalTabHeight)
|
||||||
|
numTabsHorizontalP = int ((self.paperwidth - 2*minmarginwidth) / self.totalTabWidth)
|
||||||
|
numTabsVerticalL = int ((self.paperwidth - 2*minmarginwidth) / self.totalTabHeight)
|
||||||
|
numTabsHorizontalL = int ((self.paperheight - 2*minmarginheight) / self.totalTabWidth)
|
||||||
|
|
||||||
|
if numTabsVerticalL * numTabsHorizontalL > numTabsVerticalP * numTabsHorizontalP and not fixedMargins:
|
||||||
self.numTabsVertical, self.numTabsHorizontal\
|
self.numTabsVertical, self.numTabsHorizontal\
|
||||||
= numTabsVerticalL, numTabsHorizontalL
|
= numTabsVerticalL, numTabsHorizontalL
|
||||||
self.paperheight, self.paperwidth = self.paperwidth, self.paperheight
|
self.paperheight, self.paperwidth = self.paperwidth, self.paperheight
|
||||||
|
self.minHorizontalMargin = minmarginheight
|
||||||
|
self.minVerticalMargin = minmarginwidth
|
||||||
else:
|
else:
|
||||||
self.numTabsVertical, self.numTabsHorizontal\
|
self.numTabsVertical, self.numTabsHorizontal\
|
||||||
= numTabsVerticalP, numTabsHorizontalP
|
= numTabsVerticalP, numTabsHorizontalP
|
||||||
|
self.minHorizontalMargin = minmarginwidth
|
||||||
|
self.minVerticalMargin = minmarginheight
|
||||||
|
|
||||||
if not fixedMargins:
|
if not fixedMargins:
|
||||||
#dynamically max margins
|
#dynamically max margins
|
||||||
self.horizontalMargin = (self.paperwidth-self.numTabsHorizontal*self.tabWidth)/2
|
self.horizontalMargin = (self.paperwidth-self.numTabsHorizontal*self.totalTabWidth)/2
|
||||||
self.verticalMargin = (self.paperheight-self.numTabsVertical*self.tabTotalHeight)/2
|
self.verticalMargin = (self.paperheight-self.numTabsVertical*self.totalTabHeight)/2
|
||||||
else:
|
else:
|
||||||
self.horizontalMargin = minmarginwidth
|
self.horizontalMargin = minmarginwidth
|
||||||
self.verticalMargin = minmarginheight
|
self.verticalMargin = minmarginheight
|
||||||
@ -539,11 +592,11 @@ class DominionTabs:
|
|||||||
self.verticalMargin / cm)
|
self.verticalMargin / cm)
|
||||||
|
|
||||||
self.tabOutline = [(0,0,self.tabWidth,0),
|
self.tabOutline = [(0,0,self.tabWidth,0),
|
||||||
(self.tabWidth,0,self.tabWidth,self.tabTotalHeight),
|
(self.tabWidth,0,self.tabWidth,self.tabHeight),
|
||||||
(self.tabWidth,self.tabTotalHeight,
|
(self.tabWidth,self.tabHeight,
|
||||||
self.tabWidth-self.tabLabelWidth,self.tabTotalHeight),
|
self.tabWidth-self.tabLabelWidth,self.tabHeight),
|
||||||
(self.tabWidth-self.tabLabelWidth,
|
(self.tabWidth-self.tabLabelWidth,
|
||||||
self.tabTotalHeight,self.tabWidth-self.tabLabelWidth,
|
self.tabHeight,self.tabWidth-self.tabLabelWidth,
|
||||||
self.tabBaseHeight),
|
self.tabBaseHeight),
|
||||||
(self.tabWidth-self.tabLabelWidth,
|
(self.tabWidth-self.tabLabelWidth,
|
||||||
self.tabBaseHeight,0,self.tabBaseHeight),
|
self.tabBaseHeight,0,self.tabBaseHeight),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user