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