1from Cocoa import * 2 3NOT_DONE=0 4DONE=1 5DEFERRED=2 6 7class ToDoCell (NSButtonCell): 8 9 __slots__ = ('_triState', '_doneImage', '_deferredImage', '_timeDue' ) 10 11 def init(self): 12 self._triState = NOT_DONE 13 self._timeDue = None 14 self._doneImage = None 15 self._deferredImage = None 16 17 NSButtonCell.initTextCell_(self, "") 18 19 self.setType_(NSToggleButton) 20 self.setImagePosition_(NSImageLeft) 21 self.setBezelStyle_(NSShadowlessSquareBezelStyle) 22 self.setFont_(NSFont.userFontOfSize_(10)) 23 self.setAlignment_(NSRightTextAlignment) 24 25 self._doneImage = NSImage.imageNamed_("DoneMark") 26 self._deferredImage = NSImage.imageNamed_("DeferredMark") 27 return self 28 29 @objc.typedAccessor('i') 30 def setTriState_(self, newState): 31 if newState > DEFERRED: 32 self._triState = NOT_DONE 33 else: 34 self._triState = newState 35 36 self.updateImage() 37 38 @objc.typedAccessor('i') 39 def triState(self): 40 return self._triState 41 42 43 def setState_(self, val): 44 pass 45 46 def state(self): 47 if self._triState == DEFERRED: 48 return DONE 49 else: 50 return self._triState 51 52 def updateImage(self): 53 54 if self._triState == NOT_DONE: 55 #print "NO IMAGE" 56 self.setImage_(None) 57 elif self._triState == DONE: 58 #print "DONE IMAGE" 59 self.setImage_(self._doneImage) 60 elif self._triState == DEFERRED: 61 #print "DEFERRED IMAGE" 62 self.setImage_(self._deferredImage) 63 64 self.controlView().updateCell_(self) 65 66 def startTrackingAt_inView_(self, startPoint, controlView): 67 #print "startTracking:", startPoint, controlView 68 return 1 69 70 def stopTracking_at_inView_mouseIsUp_(self, lastPoint, stopPoint, controlView, flag): 71 #print "stopTracking:", lastPoint, stopPoint, controlView, flag, self.triState() 72 if flag: 73 self.setTriState_(self.triState() + 1) 74 75 def setTimeDue_(self, newTime): 76 if newTime: 77 self._timeDue = newTime 78 self.setTitle_(self._timeDue.descriptionWithCalendarFormat_timeZone_locale_("%I:%M %p", NSTimeZone.localTimeZone(), None)) 79 else: 80 self._timeDue = None 81 self.setTitle_("-->") 82 83 def timeDue(self): 84 return self._timeDue 85