class BuildingCtrls(Group): uppercaseAccents = False def __init__(self, posSize, uppercaseAccents, callbackAttrs, callbackCheck, callbackBuild): super(BuildingCtrls, self).__init__(posSize) x, y, width, height = posSize self.uppercaseAccents = uppercaseAccents self.callbackAttrs = callbackAttrs self.callbackCheck = callbackCheck self.callbackBuild = callbackBuild jumpinY = 0 self.uppercaseCheck = CheckBox( (0, jumpinY, width, vanillaControlsSize['CheckBoxRegularHeight']), 'Use Uppercase accents', value=self.uppercaseAccents, callback=self.uppercaseCheckCallback) self.uppercaseCheck.enable(False) jumpinY += self.uppercaseCheck.getPosSize()[3] + MARGIN_ROW + 2 self.checkButton = Button((0, jumpinY, width * .45, vanillaControlsSize['ButtonRegularHeight']), 'Check', callback=self.checkButtonCallback) self.buildButton = Button((width * .55, jumpinY, width * .45, vanillaControlsSize['ButtonRegularHeight']), 'Build', callback=self.buildButtonCallback) def getUppercaseAccents(self): return self.uppercaseAccents def uppercaseCheckCallback(self, sender): self.callbackAttrs(self) def checkButtonCallback(self, sender): self.callbackCheck(self) def buildButtonCallback(self, sender): self.callbackBuild(self)
class SingleGridController(Group): """this controller takes care of canvas grid drawing""" def __init__(self, posSize, index, isVertical, isHorizontal, step, gridColor, callback): Group.__init__(self, posSize) # from arguments to attributes self.ctrlX, self.ctrlY, self.ctrlWidth, self.ctrlHeight = posSize self.index = index self.isVertical = isVertical self.isHorizontal = isHorizontal self.step = step self.gridColor = gridColor self.callback = callback # ctrls jumpin_X = 12 self.indexText = TextBox( (jumpin_X, 0, 16, vanillaControlsSize['TextBoxRegularHeight']), '{:d})'.format(index)) jumpin_X += self.indexText.getPosSize()[2] self.stepCtrl = EditText( (jumpin_X, 0, 38, vanillaControlsSize['EditTextRegularHeight']), callback=self.stepCtrlCallback) jumpin_X += self.stepCtrl.getPosSize()[2] + 16 self.isHorizontalCheck = CheckBox( (jumpin_X, 0, 32, vanillaControlsSize['CheckBoxRegularHeight']), "H", value=self.isHorizontal, callback=self.isHorizontalCheckCallback) jumpin_X += self.isHorizontalCheck.getPosSize()[2] + 2 self.isVerticalCheck = CheckBox( (jumpin_X, 0, 32, vanillaControlsSize['CheckBoxRegularHeight']), "V", value=self.isVertical, callback=self.isVerticalCheckCallback) jumpin_X += self.isVerticalCheck.getPosSize()[2] + 10 self.whichColorWell = ColorWell( (jumpin_X, 0, 46, self.ctrlHeight), color=NSColor.colorWithCalibratedRed_green_blue_alpha_(*gridColor), callback=self.whichColorWellCallback) def enable(self, onOff): self.indexText.enable(onOff) self.stepCtrl.enable(onOff) self.isHorizontalCheck.enable(onOff) self.isVerticalCheck.enable(onOff) self.whichColorWell.enable(onOff) def get(self): return self.index - 1, { 'horizontal': self.isHorizontal, 'vertical': self.isVertical, 'step': self.step, 'color': self.gridColor } def stepCtrlCallback(self, sender): try: self.step = int(sender.get()) self.callback(self) except ValueError as error: self.step = None self.stepCtrl.set('') def isHorizontalCheckCallback(self, sender): self.isHorizontal = bool(sender.get()) self.callback(self) def isVerticalCheckCallback(self, sender): self.isVertical = bool(sender.get()) self.callback(self) def whichColorWellCallback(self, sender): calibratedColor = sender.get() self.gridColor = (calibratedColor.redComponent(), calibratedColor.greenComponent(), calibratedColor.blueComponent(), calibratedColor.alphaComponent()) self.callback(self)
class GraphicsManager(Group): previousState = None def __init__(self, posSize, isSidebearingsActive, areGroupsShown, areCollisionsShown, isKerningDisplayActive, areVerticalLettersDrawn, isCorrectionActive, isMetricsActive, isColorsActive, callback): super(GraphicsManager, self).__init__(posSize) self.isKerningDisplayActive = isKerningDisplayActive self.areVerticalLettersDrawn = areVerticalLettersDrawn self.areGroupsShown = areGroupsShown self.areCollisionsShown = areCollisionsShown self.isSidebearingsActive = isSidebearingsActive self.isCorrectionActive = isCorrectionActive self.isMetricsActive = isMetricsActive self.isColorsActive = isColorsActive self.callback = callback self.ctrlWidth, self.ctrlHeight = posSize[2], posSize[3] jumping_Y = 0 self.ctrlCaption = TextBox((0, jumping_Y, self.ctrlWidth, vanillaControlsSize['TextBoxRegularHeight']), 'Display options:') jumping_Y = vanillaControlsSize['TextBoxRegularHeight'] + MARGIN_VER/2. indent = 16 self.showKerningCheck = CheckBox((indent, jumping_Y, self.ctrlWidth-indent, vanillaControlsSize['CheckBoxRegularHeight']), 'show kerning', value=self.isKerningDisplayActive, callback=self.showKerningCheckCallback) self.showKerningHiddenButton = Button((0,self.ctrlHeight+40,0,0), 'hidden kerning button', callback=self.showKerningHiddenButtonCallback) # self.showKerningHiddenButton.show(False) self.showKerningHiddenButton.bind('k', ['command']) jumping_Y += vanillaControlsSize['CheckBoxRegularHeight'] self.showGroupsCheck = CheckBox((indent, jumping_Y, self.ctrlWidth-indent, vanillaControlsSize['CheckBoxRegularHeight']), 'show groups', value=self.areGroupsShown, callback=self.showGroupsCheckCallback) jumping_Y += vanillaControlsSize['CheckBoxRegularHeight'] self.showCollisionsCheck = CheckBox((indent, jumping_Y, self.ctrlWidth-indent, vanillaControlsSize['CheckBoxRegularHeight']), 'show pair collision', value=self.areCollisionsShown, callback=self.showCollisionsCheckCallback) jumping_Y += vanillaControlsSize['CheckBoxRegularHeight'] self.showSidebearingsCheck = CheckBox((indent, jumping_Y, self.ctrlWidth-indent, vanillaControlsSize['CheckBoxRegularHeight']), 'show sidebearings', value=self.isSidebearingsActive, callback=self.showSidebearingsCheckCallback) jumping_Y += vanillaControlsSize['CheckBoxRegularHeight'] self.showCorrectionCheck = CheckBox((indent, jumping_Y, self.ctrlWidth-indent, vanillaControlsSize['CheckBoxRegularHeight']), 'show corrections amount', value=self.isCorrectionActive, callback=self.showCorrectionCheckCallback) jumping_Y += vanillaControlsSize['CheckBoxRegularHeight'] self.showColorsCheck = CheckBox((indent, jumping_Y, self.ctrlWidth-indent, vanillaControlsSize['CheckBoxRegularHeight']), 'show color bars', value=self.isColorsActive, callback=self.showColorsCheckCallback) jumping_Y += vanillaControlsSize['CheckBoxRegularHeight'] self.showMetricsCheck = CheckBox((indent, jumping_Y, self.ctrlWidth-indent, vanillaControlsSize['CheckBoxRegularHeight']), 'show metrics', value=self.isMetricsActive, callback=self.showMetricsCheckCallback) jumping_Y += vanillaControlsSize['CheckBoxRegularHeight'] self.verticalLettersCheck = CheckBox((indent, jumping_Y, self.ctrlWidth-indent, vanillaControlsSize['CheckBoxRegularHeight']), 'show vertical letters', value=self.areGroupsShown, callback=self.verticalLettersCheckCallback) def set(self, isKerningDisplayActive, areVerticalLettersDrawn, areGroupsShown, areCollisionsShown, isSidebearingsActive, isCorrectionActive, isMetricsActive, isColorsActive): # update attributes self.isKerningDisplayActive = isKerningDisplayActive self.areVerticalLettersDrawn = areVerticalLettersDrawn self.areGroupsShown = areGroupsShown self.areCollisionsShown = areCollisionsShown self.isSidebearingsActive = isSidebearingsActive self.isCorrectionActive = isCorrectionActive self.isMetricsActive = isMetricsActive self.isColorsActive = isColorsActive # aligning controls self.showKerningCheck.set(self.isKerningDisplayActive) self.showGroupsCheck.set(self.areGroupsShown) self.showCollisionsCheck.set(self.areCollisionsShown) self.showSidebearingsCheck.set(self.isSidebearingsActive) self.showCorrectionCheck.set(self.isCorrectionActive) self.showColorsCheck.set(self.isColorsActive) self.showMetricsCheck.set(self.isMetricsActive) self.verticalLettersCheck.set(self.areVerticalLettersDrawn) def get(self): return (self.isKerningDisplayActive, self.areVerticalLettersDrawn, self.areGroupsShown, self.areCollisionsShown, self.isSidebearingsActive, self.isCorrectionActive, self.isMetricsActive, self.isColorsActive) def switchControls(self, value): self.showKerningCheck.enable(value) self.showSidebearingsCheck.enable(value) self.showGroupsCheck.enable(value) self.showCorrectionCheck.enable(value) self.showMetricsCheck.enable(value) self.showColorsCheck.enable(value) self.showCollisionsCheck.enable(value) self.verticalLettersCheck.enable(value) def showKerningCheckCallback(self, sender): self.isKerningDisplayActive = bool(sender.get()) self.callback(self) def showGroupsCheckCallback(self, sender): self.areGroupsShown = bool(sender.get()) self.callback(self) def verticalLettersCheckCallback(self, sender): self.areVerticalLettersDrawn = bool(sender.get()) self.callback(self) def showCollisionsCheckCallback(self, sender): self.areCollisionsShown = bool(sender.get()) self.callback(self) def showKerningHiddenButtonCallback(self, sender): self.isKerningDisplayActive = not self.isKerningDisplayActive self.showKerningCheck.set(self.isKerningDisplayActive) self.callback(self) def showSidebearingsCheckCallback(self, sender): self.isSidebearingsActive = bool(sender.get()) self.callback(self) def showCorrectionCheckCallback(self, sender): self.isCorrectionActive = bool(sender.get()) self.callback(self) def showMetricsCheckCallback(self, sender): self.isMetricsActive = bool(sender.get()) self.callback(self) def showColorsCheckCallback(self, sender): self.isColorsActive = bool(sender.get()) self.callback(self)
class ParameterSliderTextInput(Group): ''' Custom Vanilla object consisting mainly of a Slider & and text input linked together (through a parameter object) ''' def __init__(self, parameter, posSize, title=None, callback=None): super(ParameterSliderTextInput, self).__init__(posSize) self.parameter = parameter self.callback = callback editTextPosSize = (-65, 0, 40, 22) if title is None: sliderPosSize = (5, 3, -80, 15) elif title is not None: title = title.capitalize() sliderPosSize = (70, 3, -80, 15) self.title = TextBox((0, 3, 65, 30), title, sizeStyle='small') if parameter.dissociable: editTextPosSize = (-65, 0, 40, 22) self.checkBox = CheckBox((-22, 5, 22, 25), u'∞', callback=self.setFree, value=True, sizeStyle='mini') self.slider = Slider(sliderPosSize, minValue=parameter.limits[0], maxValue=parameter.limits[1], value=parameter.value, callback=self.valueInput, sizeStyle='small') self.textInput = EditText(editTextPosSize, str(parameter.value), callback=self.valueInput, continuous=False, sizeStyle='small') self.parameter.bind(self) def get(self): return self.parameter.get() def enable(self, b): self.slider.enable(b) self.textInput.enable(b) if hasattr(self, checkBox): self.checkBox.enable(b) def valueInput(self, sender): value = sender.get() parameter = self.parameter if value == 'R': parameter.reset() parameter.update() if self.callback is not None: self.callback(self) return elif value != '*': parameter.setInput(value, sender=sender) parameter.update() if self.callback is not None: self.callback(self) def update(self, sender): value = self.parameter.get() self.textInput.set(str(value)) if (value != '*'): self.slider.set(value) if hasattr(self, 'checkBox'): free = self.parameter.hasMaster self.checkBox.set(free) def setFree(self, sender): value = not bool(sender.get()) self.parameter.setFree(value)
class ParameterSliderTextInput(Group): """ Custom Vanilla object consisting mainly of a Slider & and text input linked together (through a parameter object) """ def __init__(self, parameter, posSize, title=None, callback=None): super(ParameterSliderTextInput, self).__init__(posSize) self.parameter = parameter self.callback = callback editTextPosSize = (-65, 0, 40, 22) if title is None: sliderPosSize = (5, 3, -80, 15) elif title is not None: if "point" in title: title = title.lstrip("point") title = "p. " + title title = title.capitalize() sliderPosSize = (70, 3, -80, 15) self.title = TextBox((0, 3, 65, 30), title, sizeStyle="small") if parameter.dissociable: editTextPosSize = (-65, 0, 40, 22) self.checkBox = CheckBox((-22, 5, 22, 25), u"∞", callback=self.setFree, value=True, sizeStyle="mini") self.parameter.bind(self.checkBox) self.slider = Slider( sliderPosSize, minValue=parameter.limits[0], maxValue=parameter.limits[1], value=parameter.value, callback=self.valueInput, sizeStyle="small", ) self.textInput = EditText( editTextPosSize, str(parameter.value), callback=self.valueInput, continuous=False, sizeStyle="small" ) self.parameter.bind(self) self.parameter.bind(self.slider) self.parameter.bind(self.textInput) def enable(self, b): self.slider.enable(b) self.textInput.enable(b) if hasattr(self, checkBox): self.checkBox.enable(b) def valueInput(self, sender): value = sender.get() parameter = self.parameter if value == "R": parameter.reset() parameter.update() if self.callback is not None: self.callback(self) return elif value != "*": parameter.setInput(value, sender=sender) parameter.update() if self.callback is not None: self.callback(self) def setFree(self, sender): value = bool(sender.get()) self.parameter.setFree(value)
class ParameterSliderTextInput(Group): ''' Custom Vanilla object consisting mainly of a Slider & and text input linked together (through a parameter object) ''' def __init__(self, parameter, posSize, title=None, callback=None): super(ParameterSliderTextInput, self).__init__(posSize) self.parameter = parameter self.callback = callback editTextPosSize = (-45, 0, 45, 22) if title is None: sliderPosSize = (5, 3, -80, 15) elif title is not None: if len(title) > 15: title = '{0}.'.format(title[:16]) title = title.capitalize() sliderPosSize = (120, 3, -55, 15) self.title = TextBox((0, 3, 115, 30), title, sizeStyle='small') if parameter.dissociable: editTextPosSize = (-65, 0, 40, 22) self.checkBox = CheckBox((-22, 5, 22, 25), u'∞', callback=self.setFree, value=True, sizeStyle='mini') self.slider = Slider(sliderPosSize, minValue=parameter.limits[0], maxValue=parameter.limits[1], value=parameter.value, callback=self.valueInput, sizeStyle='small') self.textInput = EditText(editTextPosSize, str(parameter.value), callback=self.valueInput, continuous=False, sizeStyle='small') self.parameter.bind(self) def get(self): return self.parameter.get() def enable(self, b): self.slider.enable(b) self.textInput.enable(b) if hasattr(self, checkBox): self.checkBox.enable(b) def valueInput(self, sender): value = sender.get() parameter = self.parameter if value == 'R': parameter.reset() parameter.update() if self.callback is not None: self.callback(self) return elif value != '*': parameter.setInput(value, sender=sender) parameter.update() if self.callback is not None: self.callback(self) def update(self, sender): value = self.parameter.get() self.textInput.set(str(value)) if (value != '*'): self.slider.set(value) if hasattr(self, 'checkBox'): free = self.parameter.hasMaster self.checkBox.set(free) def setFree(self, sender): value = not bool(sender.get()) self.parameter.setFree(value)