bbb81f6085627f37c0d40e2cda12f5f611f444e5
[matthijs/upstream/mobilegtd.git] / src / gui / projects_list / project_list_view.py
1 from model import model
2 from config import config
3 from gui.gui import EditableListView
4 import appuifw,thread,re
5 from model import *
6 from config.config import gtd_directory,read_sms
7 from config.defaultconfig import default_projects_menu
8 from log.logging import logger
9 from e32 import Ao_lock, in_emulator
10 from key_codes import *
11 import key_codes
12 from new_project_widget import NewProjectWidget
13 from new_action_widget import NewActionWidget
14 from project_widget import ProjectWidget
15 from logic import review_visitor
16
17 #from gui import *
18
19
20 PROJECT_LIST_KEYS_AND_MENU = config.Configuration(gtd_directory+"projects.cfg",default_projects_menu)
21 sms_regexp = re.compile('([^\w ]*)',re.U)
22
23 class ProjectListView(EditableListView):
24     def __init__(self,projects):
25         self.projects = projects
26         self.projects.observers.append(self)
27         super(ProjectListView, self).__init__()
28         self.set_keybindings(PROJECT_LIST_KEYS_AND_MENU)
29         self.set_title(u'Projects')
30         self.set_filters([lambda:projects])
31         #appuifw.note(u'Before starting thread')
32 #        thread.start_new_thread(projects.process,())
33         #appuifw.note(u'After starting thread %s'%repr(projects.observers))
34     def exit(self):
35         self.exit_flag = True
36         self.lock.signal()
37         if not in_emulator():
38             appuifw.app.set_exit()
39
40     def edit_menu(self):
41         show_config(PROJECT_LIST_KEYS_AND_MENU)
42         PROJECT_LIST_KEYS_AND_MENU.write()
43     def edit_config(self):
44         show_config(COMMON_CONFIG)
45         COMMON_CONFIG.write()
46     def add_project(self,project):
47         self.projects.add_project(project)
48         self.refresh()
49     def all_widget_entries(self):
50         return [entry.name_and_details() for entry in self.widgets]
51     def new_project(self):
52         NewProjectWidget(self.projects).change()
53     def new_action(self):
54         NewActionWidget().change()
55     def generate_widgets(self):
56         widgets = []
57         widgets.append(NewProjectWidget(self.projects))
58         widgets.append(NewActionWidget())
59         self.filtered_list()
60         widgets.extend([ProjectWidget(self.projects,project) for project in self.projects.sorted_by_status()])
61         if read_sms:
62             from sms_widget import create_sms_widgets
63             try:
64                 widgets.extend(create_sms_widgets())
65             except Exception,e:
66                 logger.log(u'No permission to access SMS inbox')
67                 logger.log(unicode(repr(e.args)))
68         return widgets
69
70     def process_all(self):
71         review_visitor.reviewer.review(self.projects)
72         self.redisplay_widgets()
73     def reread_projects(self):
74         self.projects.reread()
75         self.refresh()
76
77
78
79