1from Foundation import * 2 3# enum ToDoItemStatus 4INCOMPLETE=0 5COMPLETE=1 6DEFER_TO_NEXT_DAY=2 7 8SECS_IN_MINUTE=60 9SECS_IN_HOUR=SECS_IN_MINUTE*60 10SECS_IN_DAY=SECS_IN_HOUR*24 11SECS_IN_WEEK=SECS_IN_DAY*7 12 13class ToDoItem (NSObject): 14 __slots__ = ( 15 '_day', 16 '_itemName', 17 '_notes', 18 '_timer', 19 '_secsUntilDue', 20 '_secsUntilNotify', 21 '_status', 22 ) 23 24 def init(self): 25 self = NSObject.init(self) 26 if not self: 27 return None 28 29 self._day = None 30 self._itemName = None 31 self._notes = None 32 self._secsUntilDue = 0 33 self._secsUntilNotify = 0 34 self._status = None 35 self._timer = None 36 37 def description(self): 38 descr = """%s 39\tName: %s 40\tNotes: %s 41\tCompleted: %s 42\tSecs Until Due: %d 43\tSecs Until Notify: %d 44"""%( 45 super.description(), 46 self.itemName(), 47 self._day, 48 self._notes, 49 ['No', 'YES'][self.status() == COMPLETE], 50 self._secsUntilDue, 51 self._secsUntilNotify) 52 return descr 53 54 def initWithName_andDate_(self, aName, aDate): 55 self = NSObject.init(self) 56 if not self: 57 return None 58 59 self._day = None 60 self._itemName = None 61 self._notes = None 62 self._secsUntilDue = 0 63 self._secsUntilNotify = 0 64 self._status = None 65 self._timer = None 66 67 if not aName: 68 return None 69 70 self.setItemName_(aName) 71 72 if aDate: 73 self.setDay_(aDate) 74 else: 75 now = NSCalendarDate.date() 76 77 self.setDay_( 78 NSCalendarDate.dateWithYear_month_day_hour_minute_second_timeZone_( 79 now.yearOfCommonEra(), now.monthOfYear(), now.dayOfMonth(), 0, 0, 0, 80 NSTimeZone.localTimeZone())) 81 self.setStatus_(INCOMPLETE) 82 self.setNotes_("") 83 return self 84 85 def encodeWithCoder_(self, coder): 86 87 coder.encodeObject_(self._day) 88 coder.encodeObject_(self._itemName) 89 coder.encodeObject_(self._notes) 90 91 tempTime = self._secsUntilDue 92 coder.encodeValueOfObjCType_at_(objc._C_LNG, tempTime) 93 94 tempTime = self._secsUntilNotify 95 coder.encodeValueOfObjCType_at_(objc._C_LNG, tempTime) 96 97 tempStatus = self._status 98 coder.encodeValueOfObjCType_at_(objc._C_INT, tempStatus) 99 100 def initWithCoder_(self, coder): 101 102 self.setDay_(coder.decodeObject()) 103 self.setItemName_(coder.decodeObject()) 104 self.setNotes_(coder.decodeObject()) 105 106 tempTime = coder.decodeObjectOfObjCType_at_(objc._C_LNG) 107 self.setSecsUntilDue_(tempTime) 108 109 tempTime = coder.decodeObjectOfObjCType_at_(objc._C_LNG) 110 self.setSecsUntilNotify_(tempTime) 111 112 tempStatus = coder.decodeObjectOfObjCType_at_(objc._C_INT) 113 self.setSecsUntilNotify_(tempStatus) 114 115 return self 116 117 def __del__(self): # dealloc 118 if self._notes: 119 self._timer.invalidate() 120 121 def setDay_(self, newDay): 122 self._day = newDay 123 124 def day(self): 125 return self._day 126 127 def setItemName_(self, newName): 128 self._itemName = newName 129 130 def itemName(self): 131 return self._itemName 132 133 def setNotes_(self, newNotes): 134 self._notes = newNotes 135 136 def notes(self): 137 return self._notes 138 139 def setTimer_(self, newTimer): 140 if self._timer: 141 self._timer.invalidate() 142 143 if newTimer: 144 self._timer = newTimer 145 else: 146 self._timer = None 147 148 def timer(self): 149 return self._timer 150 151 def setStatus_(self, newStatus): 152 self._status = newStatus 153 154 def status(self): 155 return self._status 156 157 def setSecsUntilDue_(self, secs): 158 self._secsUntilDue = secs 159 160 def secsUntilDue(self): 161 return self._secsUntilDue 162 163 164 def setSecsUntilNotify_(self, secs): 165 self._secsUntilNotify = secs 166 167 def secsUntilNotify(self): 168 return self._secsUntilNotify 169 170 171def ConvertTimeToSeconds(hour, minute, pm): 172 if hour == 12: 173 hour = 0 174 175 if pm: 176 hour += 12 177 178 return (hour * SECS_IN_HOUR) + (minute * SECS_IN_MINUTE) 179 180def ConvertSecondsToTime(secs): 181 pm = 0 182 183 hour = secs / SECS_IN_HOUR 184 if hour > 11: 185 hour -= 12 186 pm = 1 187 188 if hour == 0: 189 hour = 12 190 191 minute = (secs % SECS_IN_HOUR) / SECS_IN_MINUTE 192 193 return (hour, minute, pm) 194