from Foundation import * # enum ToDoItemStatus INCOMPLETE=0 COMPLETE=1 DEFER_TO_NEXT_DAY=2 SECS_IN_MINUTE=60 SECS_IN_HOUR=SECS_IN_MINUTE*60 SECS_IN_DAY=SECS_IN_HOUR*24 SECS_IN_WEEK=SECS_IN_DAY*7 class ToDoItem (NSObject): __slots__ = ( '_day', '_itemName', '_notes', '_timer', '_secsUntilDue', '_secsUntilNotify', '_status', ) def init(self): self = NSObject.init(self) if not self: return None self._day = None self._itemName = None self._notes = None self._secsUntilDue = 0 self._secsUntilNotify = 0 self._status = None self._timer = None def description(self): descr = """%s \tName: %s \tNotes: %s \tCompleted: %s \tSecs Until Due: %d \tSecs Until Notify: %d """%( super.description(), self.itemName(), self._day, self._notes, ['No', 'YES'][self.status() == COMPLETE], self._secsUntilDue, self._secsUntilNotify) return descr def initWithName_andDate_(self, aName, aDate): self = NSObject.init(self) if not self: return None self._day = None self._itemName = None self._notes = None self._secsUntilDue = 0 self._secsUntilNotify = 0 self._status = None self._timer = None if not aName: return None self.setItemName_(aName) if aDate: self.setDay_(aDate) else: now = NSCalendarDate.date() self.setDay_( NSCalendarDate.dateWithYear_month_day_hour_minute_second_timeZone_( now.yearOfCommonEra(), now.monthOfYear(), now.dayOfMonth(), 0, 0, 0, NSTimeZone.localTimeZone())) self.setStatus_(INCOMPLETE) self.setNotes_("") return self def encodeWithCoder_(self, coder): coder.encodeObject_(self._day) coder.encodeObject_(self._itemName) coder.encodeObject_(self._notes) tempTime = self._secsUntilDue coder.encodeValueOfObjCType_at_(objc._C_LNG, tempTime) tempTime = self._secsUntilNotify coder.encodeValueOfObjCType_at_(objc._C_LNG, tempTime) tempStatus = self._status coder.encodeValueOfObjCType_at_(objc._C_INT, tempStatus) def initWithCoder_(self, coder): self.setDay_(coder.decodeObject()) self.setItemName_(coder.decodeObject()) self.setNotes_(coder.decodeObject()) tempTime = coder.decodeObjectOfObjCType_at_(objc._C_LNG) self.setSecsUntilDue_(tempTime) tempTime = coder.decodeObjectOfObjCType_at_(objc._C_LNG) self.setSecsUntilNotify_(tempTime) tempStatus = coder.decodeObjectOfObjCType_at_(objc._C_INT) self.setSecsUntilNotify_(tempStatus) return self def __del__(self): # dealloc if self._notes: self._timer.invalidate() def setDay_(self, newDay): self._day = newDay def day(self): return self._day def setItemName_(self, newName): self._itemName = newName def itemName(self): return self._itemName def setNotes_(self, newNotes): self._notes = newNotes def notes(self): return self._notes def setTimer_(self, newTimer): if self._timer: self._timer.invalidate() if newTimer: self._timer = newTimer else: self._timer = None def timer(self): return self._timer def setStatus_(self, newStatus): self._status = newStatus def status(self): return self._status def setSecsUntilDue_(self, secs): self._secsUntilDue = secs def secsUntilDue(self): return self._secsUntilDue def setSecsUntilNotify_(self, secs): self._secsUntilNotify = secs def secsUntilNotify(self): return self._secsUntilNotify def ConvertTimeToSeconds(hour, minute, pm): if hour == 12: hour = 0 if pm: hour += 12 return (hour * SECS_IN_HOUR) + (minute * SECS_IN_MINUTE) def ConvertSecondsToTime(secs): pm = 0 hour = secs / SECS_IN_HOUR if hour > 11: hour -= 12 pm = 1 if hour == 0: hour = 12 minute = (secs % SECS_IN_HOUR) / SECS_IN_MINUTE return (hour, minute, pm)