# HG changeset patch # User Björn Ricks # Date 1301912726 -7200 # Node ID d747563dff03c6c548bdc6f07cf7b6dc092317d6 # Parent 1d63ab21b8afd24c92d722e5b5183d8a6c3d03b3 add create project related states create a project by pressing 'a' in the main menu diff -r 1d63ab21b8af -r d747563dff03 getan/states.py --- a/getan/states.py Mon Apr 04 12:23:55 2011 +0200 +++ b/getan/states.py Mon Apr 04 12:25:26 2011 +0200 @@ -63,6 +63,9 @@ if 'enter' in key: return self.select() + if 'a' in key: + return AddProjectNameState(self.controller, self.view) + if 'esc' in key: return ExitState(self.controller, self.view) @@ -91,7 +94,6 @@ self.controller.start_project(self.view.item_in_focus()) return RunningProjectsState(self.controller, self.view) - class ExitState(ProjectState): messages = { 'quit' : _(" Really quit? (y/n)"), @@ -438,3 +440,92 @@ self.view.set_footer_text(self.msg('really'), 'question') return self + +class CreateProjectState(HandleUserInputState): + + messages = { + 'choose_proj': _(' Choose a project.'), + } + + def __init__(self, controller, view): + super(CreateProjectState, self).__init__(controller, view, None, + controller.view.view.get_footer()) + + def exit(self): + self.controller.view.set_footer_text(self.msg('choose_proj'), 'question') + return PausedProjectsState(self.controller, self.view) + +class AddProjectNameState(CreateProjectState): + messages = { + 'choose_proj': _(' Choose a project.'), + 'proj_name': _('Insert new project name: '), + } + + def __init__(self, controller, view): + controller.view.set_footer_text(self.msg('proj_name'), + 'question', 1) + super(AddProjectNameState, self).__init__(controller, view) + self.view.frame.set_focus('footer') + + def enter(self): + project = self.footer.get_edit_text() + if project == '': + return self + return AddProjectKeyState(self.controller, self.view, project) + + +class AddProjectKeyState(CreateProjectState): + + messages = { + 'proj_name': _('Insert new project name: '), + 'proj_key': _('Insert key for new project: '), + } + + def __init__(self, controller, view, project): + controller.view.set_footer_text(self.msg('proj_key'), + 'question', 1) + super(AddProjectKeyState, self).__init__(controller, view) + self.view.frame.set_focus('footer') + self.project = project + + def keypress(self, key): + logger.debug("HandleUserInputState: handle key '%r'" % key) + pos = self.footer.edit_pos + + if 'esc' in key: + return self.exit() + elif 'enter' in key: + return self.enter() + elif len(key) >= 1 and len(key[0]) == 1: + self.footer.set_edit_pos(pos) + self.footer.set_edit_text(key[0]) + return self + + def enter(self): + key = self.footer.get_edit_text() + if key == '': + return self + return AddProjectDescriptionState(self.controller, self.view, + self.project, key) + +class AddProjectDescriptionState(CreateProjectState): + messages = { + 'proj_description': _('Insert a description for project: '), + 'choose_proj': _(" Choose a project.") + } + + def __init__(self, controller, view, project, key): + controller.view.set_footer_text(self.msg('proj_description'), + 'question', 1) + super(AddProjectDescriptionState, self).__init__(controller, view) + self.view.frame.set_focus('footer') + self.project = project + self.key = key + + def enter(self): + description = self.footer.get_edit_text() + if description == '': + return self + self.controller.add_project(self.key, description) + self.controller.view.set_footer_text(self.msg('choose_proj'), 'question') + return PausedProjectsState(self.controller, self.view)