Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
 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()
Пример #4
0
 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
Пример #5
0
 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)
Пример #6
0
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)