1from Cocoa import * 2 3class MyWindowController (NSWindowController): 4 rectGradientView = objc.IBOutlet() 5 bezierGradientView = objc.IBOutlet() 6 7 startColorWell = objc.IBOutlet() 8 endColorWell = objc.IBOutlet() 9 angle = objc.IBOutlet() 10 angleSlider = objc.IBOutlet() 11 12 radialCheck = objc.IBOutlet() 13 radialExplainText = objc.IBOutlet() 14 15 16 def initWithPath_(self, newPath): 17 return super(MyWindowController, self).initWithWindowNibName_("TestWindow") 18 19 def awakeFromNib(self): 20 # make sure our angle text input keep the right format 21 formatter = NSNumberFormatter.alloc().init() 22 formatter.setNumberStyle_(NSNumberFormatterDecimalStyle) 23 self.angle.cell().setFormatter_(formatter) 24 25 # setup the initial start color 26 self.rectGradientView.setStartColor_(NSColor.orangeColor()) 27 self.bezierGradientView.setStartColor_(NSColor.orangeColor()) 28 self.startColorWell.setColor_(NSColor.orangeColor()) 29 30 # setup the initial end color 31 self.rectGradientView.setEndColor_(NSColor.blueColor()) 32 self.bezierGradientView.setEndColor_(NSColor.blueColor()) 33 self.endColorWell.setColor_(NSColor.blueColor()) 34 35 # setup the initial angle value 36 self.rectGradientView.setAngle_(90.0) 37 self.bezierGradientView.setAngle_(90.0) 38 self.angle.setStringValue_("90.0") 39 self.angleSlider.setFloatValue_(90.0) 40 41 @objc.IBAction 42 def swapColors_(self, sender): 43 startColor = self.startColorWell.color() 44 endColor = self.endColorWell.color() 45 46 # change all our view's start and end colors 47 self.rectGradientView.setStartColor_(endColor) 48 self.rectGradientView.setEndColor_(startColor) 49 50 self.bezierGradientView.setStartColor_(endColor) 51 self.bezierGradientView.setEndColor_(startColor) 52 53 # fix our color wells 54 self.startColorWell.setColor_(endColor) 55 self.endColorWell.setColor_(startColor) 56 57 @objc.IBAction 58 def startColor_(self, sender): 59 newColor = sender.color() 60 self.rectGradientView.setStartColor_(newColor) 61 self.bezierGradientView.setStartColor_(newColor) 62 63 @objc.IBAction 64 def endColor_(self, sender): 65 newColor = sender.color() 66 self.rectGradientView.setEndColor_(newColor) 67 self.bezierGradientView.setEndColor_(newColor) 68 69 def controlTextDidEndEditing_(self, notification): 70 theAngle = self.angle.floatValue() 71 self.rectGradientView.setAngle_(theAngle) 72 self.bezierGradientView.setAngle_(theAngle) 73 74 theAngleDougle = self.angle.doubleValue() 75 self.angleSlider.setDoubleValue_(theAngleDougle) 76 self.angleSlider.setNeedsDisplay_(True) 77 78 @objc.IBAction 79 def angleSliderChange_(self, sender): 80 angleValue = sender.floatValue() 81 self.rectGradientView.setAngle_(angleValue) 82 self.bezierGradientView.setAngle_(angleValue) 83 self.angle.setDoubleValue_(angleValue) 84 85 @objc.IBAction 86 def radialDraw_(self, sender): 87 self.rectGradientView.setRadialDraw_(sender.selectedCell().state()) 88 self.bezierGradientView.setRadialDraw_(sender.selectedCell().state()) 89 90 # angle factor does not relate to radial draws 91 self.angleSlider.setEnabled_(not sender.selectedCell().state()) 92 self.angle.setEnabled_(not sender.selectedCell().state()) 93 94 # hide/show the explain text for radial gradients 95 self.radialExplainText.setHidden_(not sender.selectedCell().state()) 96