class Task(dict): '''Main Task class for ToDo.py Has keys Task, ID and Subtasks''' def __init__(self, win, Task=None, ID=None, Subtasks=None, Parent=None): self['Task'] = Task if Task is not None else "ToDo List" self['ID'] = ID if ID is not None else 0 self['Subtasks'] = Subtasks if Subtasks is not None else [] self.win = win self.parent = Parent if Parent is not None else self self.scroll = 0 self.ec = EventChecker(win) self.ec.addTrigger(self.scrollDown, 10) self.ec.addTrigger(self.scrollUp, 11) def saveTasks(self, path): '''Save tasks to .ToDo.json file.''' if len(self.get('Subtasks')) > 0: self.sortTasks() else: self['Subtasks'] = [] f = open(path, 'w') json.dump(self.get('Subtasks'), f) f.close() def loadTasks(self, path): '''Load tasks from .ToDo.json file to 'Subtasks'.''' try: f = open(path, 'r') self['Subtasks'] = json.loads(f.read()) self.convertDictsToTasks() f.close() except Exception, e: self.saveTasks(path)
class Helper(): def __init__(self, win): self.win = win self.ec = EventChecker(win) self.ec.addTrigger(self.scrollDown, ord('j')) self.ec.addTrigger(self.scrollUp, ord('k')) self.ec.addTrigger(self.scrollDown, 10) self.ec.addTrigger(self.scrollUp, 11) self.scroll = 0 self.f = self.getHelpTxt() def display(self): '''Display help text file, scrollable with 'j' and 'k'.''' try: h, w = self.win.getmaxyx() fl = self.f.readlines() self.scroll = 0 while True: s = "" for i in range(h-4): if self.scroll+i < len(fl): s += fl[(self.scroll+i)%len(fl)] self.win.erase() self.win.addstr(2, 0, s) curses.curs_set(0) # Hide cursor event = self.ec.check() if event == 13: break except Exception, e: self.win.erase() drawMessage(str(e)+"\n Press ENTER.", self.win)
def __init__(self, win): self.win = win self.ec = EventChecker(win) self.ec.addTrigger(self.scrollDown, ord('j')) self.ec.addTrigger(self.scrollUp, ord('k')) self.ec.addTrigger(self.scrollDown, 10) self.ec.addTrigger(self.scrollUp, 11) self.scroll = 0 self.f = self.getHelpTxt()
def __init__(self, win): self.text = "" self.bl = 0 self.br = 0 self.win = win self.ec = EventChecker(win) self.ec.addTrigger(self.removeChar, 127) #backspace macos self.ec.addTrigger(self.removeChar, curses.KEY_BACKSPACE) #other os self.ec.addTrigger(self.addChar, 'rest') #all other keys
def __init__(self, win, Task=None, ID=None, Subtasks=None, Parent=None): self['Task'] = Task if Task is not None else "ToDo List" self['ID'] = ID if ID is not None else 0 self['Subtasks'] = Subtasks if Subtasks is not None else [] self.win = win self.parent = Parent if Parent is not None else self self.scroll = 0 self.ec = EventChecker(win) self.ec.addTrigger(self.scrollDown, 10) self.ec.addTrigger(self.scrollUp, 11)
class CommandBox(): '''The CommandBox class for ToDo.py''' def __init__(self, win): self.text = "" self.bl = 0 self.br = 0 self.win = win self.ec = EventChecker(win) self.ec.addTrigger(self.removeChar, 127) #backspace macos self.ec.addTrigger(self.removeChar, curses.KEY_BACKSPACE) #other os self.ec.addTrigger(self.addChar, 'rest') #all other keys def check(self): '''Wait and check for an event (keyboard or other).''' event = self.win.getch() event = self.ec.check(event) return event def drawRect(self): '''Draws commandbox rectangle.''' h, w = self.win.getmaxyx() textpad.rectangle(self.win, h-3, 1, h-1, w-2) def drawText(self): '''Draw vistext within rectangel.''' if self.text < self.getRmVistextThresh(): self.bl = 0 self.br = len(self.text) h = self.win.getmaxyx()[0] self.win.addstr(h-2, 2, self.getVistext()) def draw(self): '''Draw all CommandBox elements.''' self.drawRect() self.drawText() def addChar(self, char): '''Add char to end of string and adjust vistext.''' char = chr(char) self.text = self.text+char self.br += 1 if self.br - self.bl > self.getMaxVistextLen(): self.bl += 1 def removeChar(self): if not len(self.text): return '''Remove char from end of string and adjust vistext.''' self.text = self.text[:-1] thresh = self.getRmVistextThresh() self.br -= 1 if self.br - self.bl <= thresh and len(self.text) > thresh: self.bl -= 1 def getMaxVistextLen(self): '''Get max drawable string length for self.vistext.''' w = self.win.getmaxyx()[1] return w - 5 def getRmVistextThresh(self): '''Get string length threshold for when to scroll back vistext.''' return int(self.getMaxVistextLen()*2/3) def getVistext(self): return self.text[self.bl:][:self.br] def shuffleVistext(self, n): self.bl += n self.br += n def reset(self): self.resetText() self.resetCursor() def resetText(self): '''Resets the text buffers and moves cursor to start of textbox.''' h = self.win.getmaxyx()[0] self.text = "" self.bl = 0 self.br = 0 def resetCursor(self): h = self.win.getmaxyx()[0] self.win.move(h-2, 2)