Files
cmdasana/ui/task_list.py

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