diff --git a/src/.board.md b/src/.board.md index 0e33e65..36668f2 100644 --- a/src/.board.md +++ b/src/.board.md @@ -2,20 +2,17 @@ ## To Do -- task 2 -- task 1 +- Update the task information +- Task 2 -## Review +## Review -- task 4 +-  Task 3 -## Done +## Done - - -- task 3 - +- Task 4 diff --git a/src/board.py b/src/board.py index 3073701..0047c2f 100644 --- a/src/board.py +++ b/src/board.py @@ -55,7 +55,7 @@ class Board: # Now add the task to the list structures elif item_type == "-": # The tasks are a list of [col index, task name] - self.tasks[-1].append(" "+' '.join(line.split(' ')[1:])) + self.tasks[-1].append(' '.join(line.split(' ')[1:]).strip()) def write_md(self): @@ -64,7 +64,7 @@ class Board: for i,col in enumerate(self.columns): f.write('## {}\n\n'.format(col)) for task in self.tasks[i]: - f.write('- {}\n'.format(task[1][1:])) + f.write('- {}\n'.format(task)) f.write('\n') @@ -107,3 +107,12 @@ class Board: def get_task(self, icol, itask): """ Return a task based on column and task index""" return self.tasks[icol][itask] + + def update_task( self, icol, itask, text): + """ Update the task based on text """ + self.tasks[icol][itask] = text + + def add_task( self, icol, text): + """Add a task to icol""" + self.tasks[icol].append(text) + diff --git a/src/layout.tcss b/src/layout.tcss index 99fb0e1..907378c 100644 --- a/src/layout.tcss +++ b/src/layout.tcss @@ -3,6 +3,13 @@ Screen { overflow-x: auto; } +EditScreen { + align: center middle; + overflow-x: hidden; + layout: vertical; + background: #282828 50%; +} + .column { width: 1fr; height: 100%; diff --git a/src/tui.py b/src/tui.py index 8868bd4..befe595 100644 --- a/src/tui.py +++ b/src/tui.py @@ -1,6 +1,7 @@ from textual.app import App, ComposeResult -from textual.widgets import Static, Label, ListItem, ListView +from textual.widgets import Static, Label, ListItem, ListView, TextArea, Input from textual.containers import Horizontal, Vertical +from textual.screen import Screen from textual.binding import Binding from board import Board @@ -15,16 +16,52 @@ class TaskList(ListView): Binding("j", "cursor_down", "Cursor Down", show=False, priority=True), ] +class EditScreen(Screen): + """ + This is a screen used to edit the name of a task + """ + CSS=""" + Label{ + width:50%; + } + Input{ + width:50%; + } + """ + BINDINGS = [ + Binding('enter', 'save', 'Save Changes', priority=True) + ] + def __init__(self,text): + """ + Initialize the screen + """ + super().__init__() + self.text = text + + def compose(self): + """ + Compose the widgets on the screen, this screen doesn't need dynamic layout changes + """ + yield Label('Task Name:') + yield Input(value=self.text) + + + def action_save(self): + query = self.query(selector=Input) + self.dismiss(query.nodes[0].value) + class KanbanForm(App): CSS_PATH = 'layout.tcss' BINDINGS = [ - Binding("l", "fnext", "Focus Next", show=False, priority=True), - Binding("h", "fprev", "Focus Prev", show=False, priority=True), - Binding("L", "move_up", "Focus Next", show=False, priority=True), - Binding("H", "move_down", "Focus Prev", show=False, priority=True), - Binding('q', 'exit', "Exit", priority=True, show=False) - ] + Binding("l", "fnext", "Focus Next", show=False, ), + Binding("a", "new_task", "Add New Task", show=False, ), + Binding("h", "fprev", "Focus Prev", show=False, ), + Binding("L", "move_up", "Focus Next", show=False), + Binding("H", "move_down", "Focus Prev", show=False), + Binding("e", "edit_task", "Edit Task", show=False,), + Binding('q', 'exit', "Exit") + ] def compose(self): """ @@ -82,8 +119,17 @@ class KanbanForm(App): self.action_fprev() self.focused.action_cursor_down() + def action_edit_task(self): + icol, itask = self.get_col_task() + task = self.board.get_task(icol, itask) + self.push_screen(EditScreen(task), self.update_task) + + def action_new_task(self): + self.push_screen(EditScreen(""), self.new_task) + def action_exit(self): """ Exit the application """ + self.board.write_md() self.exit() def get_col_task(self): @@ -106,8 +152,24 @@ class KanbanForm(App): task_index = i return col_index, task_index - + + def update_task(self, text): + """ This function gets the text inputted in the edit screen and updates the underlying + task and the board class + + """ + icol, itask = self.get_col_task() + self.focused.highlighted_child.children[0].update(text) + self.board.update_task(icol, itask, text) + def new_task(self, text): + """ This function adds a new task to our board + """ + icol,_ = self.get_col_task() + self.focused.mount(ListItem(Label(text))) + self.board.add_task(icol, text) + self.focused.highlighted_child + # def on_key(self): # with open('log','a') as f: # f.write("{}".format(self.children[0].focus_next))