X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Fgui%2Fproject_details%2Fproject_view.py;fp=src%2Fgui%2Fproject_details%2Fproject_view.py;h=bc36d77c6b14f83e382f2b0d4702102ed2b7b4a0;hb=826cc2e9923c858d3c6a86c04f371cfb326e1728;hp=0000000000000000000000000000000000000000;hpb=44f7fa2ef41d54548aa800b2bb71a886261c5046;p=matthijs%2Fupstream%2Fmobilegtd.git diff --git a/src/gui/project_details/project_view.py b/src/gui/project_details/project_view.py new file mode 100644 index 0000000..bc36d77 --- /dev/null +++ b/src/gui/project_details/project_view.py @@ -0,0 +1,127 @@ +import model, config, gui +import appuifw,os +import thread +from model.model import * +from config.config import gtd_directory,Configuration +from config.defaultconfig import default_actions_menu +from gui.gui import EditableListView +from infos_widget import InfosWidget +from info_widget import InfoWidget +from context_widget import ContextWidget +from action_widget import ActionWidget,edit_action +from action_view import ActionView +from model import action +from model import info +from model import project +from model.action import Action +from log.logging import logger +from e32 import Ao_lock, in_emulator +from key_codes import * +import key_codes + +from gui import * + +ACTION_LIST_KEYS_AND_MENU = Configuration(os.path.join(gtd_directory,"actions.cfg")) + + +def ask_for_action(project_name,proposition=None): + + action = Action(project_name,u'') + was_saved = edit_action(action) + if was_saved: + return action + else: + return None + + +#def ask_for_action(project_name,proposition=None): +# if proposition == None: +# proposition = u'Context %s'%(project_name) +# action_line = appuifw.query(u'Enter action %s'%project_name,'text',proposition) +# if action_line == None: +# return None +# else: +# return parse_action(action_line) + + +# text = u'Enter action' +# if info: +# text = text+info +# new_description = appuifw.query(text,'text',action.description) +# if new_description: +# action.set_description(new_description) +# return True +# return False + + + +def ask_for_info(proposition): + return appuifw.query(u'Enter info','text',u'%s'%(proposition)) + + +class ProjectView(EditableListView): + def __init__(self,project): + self.project = project + self.project.observers.append(self) + super(ProjectView, self).__init__(self.project.name, [lambda:self.project.actions.with_property(lambda a:a.status==action.active)], ACTION_LIST_KEYS_AND_MENU) + + def exit(self): + self.project.observers.remove(self) +# self.project.status = project.active +# self.project.status.update(self.project) + EditableListView.exit(self) +# self.project.dirty = True +# self.project.write() +# self.projects.update_status(self.project) + def edit_menu(self): + show_config(ACTION_LIST_KEYS_AND_MENU) + ACTION_LIST_KEYS_AND_MENU.write() + + def actions(self): + return self.project.actions + + def generate_widgets(self): + widgets = [] + widgets.append(InfosWidget(self.project)) + for info in self.project.infos: + widgets.append(InfoWidget(info,self.project)) + for (context,actions) in self.actions_by_context().items(): + widgets.append(ContextWidget(context,self.project)) + for action in actions: + widgets.append(ActionWidget(action)) + return widgets + def actions_by_context(self): + context_actions_map = {} + for action in self.actions(): + if not action.context in context_actions_map: + context_actions_map[action.context]=[] + context_actions_map[action.context].append(action) + return context_actions_map + + def add_action(self): + a = ask_for_action(self.project.name) + if a: + self.project.add_action(a) + self.project.status = project.active + def add_info(self): + i = ask_for_info(self.project.name) + if i: + selected = self.selected_index() + # First position is "Infos" + if selected>=0 and selected <= len(self.project.infos): + position = selected + else: + position = None + self.project.add_info(info.Info(i),position) + if position: + self.set_index(position+1) + + + + def notify(self,project,attribute,new=None,old=None): + self.refresh() + + + + +__all__= ('ProjectView','ask_for_action','ask_for_info')