61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
import urwid
|
|
|
|
from ui.constants import keys
|
|
|
|
class TaskList(object):
|
|
def __init__(self, tasks, header, on_task_click):
|
|
self.callback = on_task_click
|
|
self.grid = urwid.Frame(
|
|
urwid.ListBox(
|
|
urwid.SimpleFocusListWalker(
|
|
[TaskRow(t, self.callback) for t in tasks]
|
|
)
|
|
),
|
|
header=urwid.Text(('header', header)),
|
|
focus_part='body'
|
|
)
|
|
|
|
def component(self):
|
|
return self.grid
|
|
|
|
class MyTasks(object):
|
|
def __init__(self, tasks, on_task_click):
|
|
self.callback = on_task_click
|
|
all_tasks = [t for t in tasks]
|
|
|
|
self.new = [t for t in all_tasks if t.atm_section() == 'inbox']
|
|
self.today = [t for t in all_tasks if t.atm_section() == 'today']
|
|
self.upcoming = [t for t in all_tasks if t.atm_section() == 'upcoming']
|
|
self.later = [t for t in all_tasks if t.atm_section() == 'later']
|
|
|
|
def component(self):
|
|
return urwid.Frame(
|
|
urwid.ListBox(
|
|
urwid.SimpleFocusListWalker([
|
|
urwid.Text(('atm_section', 'New'))
|
|
] + [TaskRow(t, self.callback) for t in self.new] + [
|
|
urwid.Text(('atm_section', 'Today'))
|
|
] + [TaskRow(t, self.callback) for t in self.today] + [
|
|
urwid.Text(('atm_section', 'Upcoming'))
|
|
] + [TaskRow(t, self.callback) for t in self.upcoming] + [
|
|
urwid.Text(('atm_section', 'Later'))
|
|
] + [TaskRow(t, self.callback) for t in self.later]
|
|
)
|
|
),
|
|
header=urwid.Text(('header', 'My Tasks')),
|
|
focus_part='body'
|
|
)
|
|
|
|
class TaskRow(urwid.SelectableIcon):
|
|
def __init__(self, task, on_click):
|
|
self.on_click = on_click
|
|
self.task = task
|
|
style = 'section' if task.name() and task.name()[-1] == ':' else 'task'
|
|
super(TaskRow, self).__init__((style, task.name()))
|
|
|
|
def keypress(self, size, key):
|
|
if key in keys['select']:
|
|
self.on_click(self.task.id())
|
|
else:
|
|
return key
|