annotate getan/states.py @ 94:159a1ef0fd7c

Add new state to select projects with keys larger then one Introduce a new SelectProjectState which records the key sequence and return the project if a corresponding key was found. It's possible to go back to the ProjectPausedState with ESC.
author Björn Ricks <bjoern.ricks@intevation.de>
date Wed, 31 Aug 2011 15:43:12 +0200
parents bcf914880f80
children 19e9d76a10fb
rev   line source
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
1 #!/usr/bin/env python
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
3 #
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
4 # (c) 2010 by Ingo Weinzierl <ingo.weinzierl@intevation.de>
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
5 #
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
6 # This is Free Software licensed under the terms of GPLv3 or later.
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
7 # For details see LICENSE coming with the source of 'getan'.
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
8 #
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
9
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
10
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
11 import logging
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
12 import signal
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
13 from datetime import datetime, timedelta
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
14
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
15 from getan.resources import gettext as _
37
68cc10d082ab Fix for #1569
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
16 from getan.utils import human_time, safe_int
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
17
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
18 logger = logging.getLogger()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
19
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
20 class State(object):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
21 messages = {
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
22 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
24 def __init__(self, controller, view):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
25 self.controller = controller
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
26 self.view = view
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
27
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
28 def msg(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
29 return self.messages[key]
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
30
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
31
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
32 class ProjectState(State):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
33 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
34 logger.debug("ProjectState: handle key '%r'" % key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
35 if 'f1' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
36 self.view.switch_time_mode()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
37 return None
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
38
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
39 if 'tab' in key:
72
90b61a24742b Don't switch to EntryView if it doesn't contain any row/entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 56
diff changeset
40 if not self.controller.entries_view.rows:
90b61a24742b Don't switch to EntryView if it doesn't contain any row/entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 56
diff changeset
41 return self
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
42 self.controller.entries_view.focused = 0
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
43 self.controller.entries_view.update_focus(0)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
44 return DefaultEntryListState(self, self.controller,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
45 self.controller.entries_view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
46
88
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
47 if 'up' in key:
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
48 return self.up()
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
49
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
50 if 'down' in key:
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
51 return self.down()
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
52
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
53 def up(self):
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
54 self.view.up()
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
55 self.controller.update_entries(self.view.item_in_focus())
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
56 return self
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
57
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
58 def down(self):
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
59 self.view.down()
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
60 self.controller.update_entries(self.view.item_in_focus())
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
61 return self
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
62
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
63 class PausedProjectsState(ProjectState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
64 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
65 'choose_proj': _('Choose a project: '),
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
66 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
67
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
68 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
69 logger.debug("PausedProjectsState: handle key '%r'" % key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
70 ret = super(PausedProjectsState, self).keypress(key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
71 if ret:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
72 return ret
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
73
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
74 if 'enter' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
75 return self.select()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
76
56
1f7c9371b648 use insert key instead of a to create a new project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 54
diff changeset
77 if 'insert' in key:
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
78 return AddProjectNameState(self.controller, self.view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
79
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
80 if 'esc' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
81 return ExitState(self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
82
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
83 else:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
84 if len(key) > 0:
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
85 return SelectProjectState(self.controller, self.view, key[0])
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
86 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
87
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
88
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
89 def select(self):
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
90 proj = self.view.item_in_focus()
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
91 self.controller.start_project(proj)
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
92 return RunningProjectsState(self.controller, self.view, proj)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
93
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
94 class SelectProjectState(State):
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
95
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
96
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
97 def __init__(self, controller, view, key):
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
98 super(SelectProjectState, self).__init__(controller, view)
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
99 self.proj_keys = key
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
100 self.set_footer_text()
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
101
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
102 def reset(self):
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
103 self.view.set_footer_text("", "entry_footer")
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
104
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
105 def set_footer_text(self):
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
106 self.view.set_footer_text("Selecting project from key: %s" % self.proj_keys, "running")
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
107
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
108 def keypress(self, key):
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
109 if 'esc' in key:
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
110 self.reset()
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
111 return PausedProjectsState(self.controller, self.view)
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
112
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
113 else:
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
114 if len(key) > 0:
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
115 self.proj_keys += key[0]
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
116 self.set_footer_text()
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
117 proj = self.controller.project_by_key(self.proj_keys)
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
118 if proj:
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
119 self.reset()
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
120 self.view.select_project(proj)
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
121 self.controller.start_project(self.view.item_in_focus())
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
122 self.controller.update_entries(
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
123 self.view.item_in_focus())
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
124 return RunningProjectsState(self.controller, self.view, proj)
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
125 return self
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
126
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
127 class ExitState(ProjectState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
128 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
129 'quit' : _(" Really quit? (y/n)"),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
130 'choose': _(" Choose a project:")
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
131 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
132
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
133 def __init__(self, controller, view):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
134 super(ExitState, self).__init__(controller, view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
135 self.controller.view.set_footer_text(self.msg('quit'), 'question')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
136
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
137 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
138 logger.debug("ExitState: handle key '%r'" % key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
139 ret = super(ExitState, self).keypress(key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
140 if ret:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
141 return ret
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
142
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
143 if 'y' in key or 'Y' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
144 self.controller.exit()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
145
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
146 if 'n' in key or 'N' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
147 self.controller.view.set_footer_text(self.msg('choose'), 'question')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
148 return PausedProjectsState(self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
149
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
150 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
151
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
152
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
153 class RunningProjectsState(ProjectState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
154 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
155 'description': _("Enter a description: "),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
156 'add_time' : _("Enter time to add [min]: "),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
157 'min_time' : _("Enter time to subtract [min]: "),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
158 'continue' : _("Press 'Space' to continue."),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
159 'running' : _("Running ( %s ) on '%s'."),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
160 'paused' : _(" Break ( %s )%s."),
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
161 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
162
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
163 sec = 0
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
164 break_start = None
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
165
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
166 def __init__(self, controller, view, project):
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
167 super(RunningProjectsState, self).__init__(controller, view)
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
168 self.project = project
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
169 signal.signal(signal.SIGALRM, self.handle_signal)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
170 signal.alarm(1)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
171
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
172 def handle_signal(self, signum, frame):
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
173 proj = self.project
41
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 39
diff changeset
174 if not proj: return
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
175 if not self.break_start:
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
176 self.controller.view.set_footer_text(self.msg('running') %
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
177 (human_time(self.sec),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
178 proj.desc),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
179 'running')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
180 self.controller.view.loop.draw_screen()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
181 self.sec = self.sec + 1
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
182 else:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
183 self.view.set_footer_text(
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
184 self.msg('paused') %
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
185 (human_time((datetime.now()-self.break_start).seconds),
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
186 self.msg('continue')),
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
187 'paused_running')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
188 self.controller.view.loop.draw_screen()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
189
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
190 signal.signal(signal.SIGALRM, self.handle_signal)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
191 signal.alarm(1)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
192
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
193 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
194 logger.debug("RunningProjectsState: handle key '%r'" % key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
195 ret = super(RunningProjectsState, self).keypress(key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
196 if ret:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
197 return ret
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
198
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
199 if 'enter' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
200 return self.stop()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
201 if '+' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
202 self.view.set_footer_text(self.msg('add_time'),
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
203 'question', 1)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
204 self.view.frame.set_focus('footer')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
205 return AddTimeState(self.controller, self.view, self)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
206 if '-' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
207 self.view.set_footer_text(self.msg('min_time'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
208 'question', 1)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
209 self.view.frame.set_focus('footer')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
210 return SubtractTimeState(self.controller, self.view, self)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
211 if ' ' in key and not self.break_start:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
212 self.break_start = datetime.now()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
213 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
214 if ' ' in key and self.break_start:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
215 self.view._total_time()
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
216 proj = self.project
41
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 39
diff changeset
217 if proj:
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 39
diff changeset
218 proj.start += datetime.now() - self.break_start
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 39
diff changeset
219 self.break_start = None
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 39
diff changeset
220 signal.signal(signal.SIGALRM, self.handle_signal)
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 39
diff changeset
221 signal.alarm(1)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
222 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
223
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
224 def stop(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
225 signal.alarm(0)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
226 self.view.select()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
227 if self.break_start:
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
228 proj = self.project
42
a5439795ef09 More checks againts empty projects.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 41
diff changeset
229 if proj: proj.start += datetime.now() - self.break_start
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
230 self.controller.view.set_footer_text(self.msg('description'),'question',1)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
231 self.controller.view.get_frame().set_focus('footer')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
232 return DescriptionProjectsState(
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
233 self.controller, self.view, self,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
234 self.controller.view.get_frame().get_footer())
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
235
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
236
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
237 class HandleUserInputState(State):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
238 def __init__(self, controller, view, state, footer):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
239 self.controller = controller
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
240 self.view = view
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
241 self.state = state
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
242 self.footer = footer
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
243
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
244 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
245 logger.debug("HandleUserInputState: handle key '%r'" % key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
246 pos = self.footer.edit_pos
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
247
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
248 if 'esc' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
249 return self.exit()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
250 elif 'enter' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
251 return self.enter()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
252 elif 'left' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
253 self.footer.set_edit_pos(pos-1)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
254 elif 'right' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
255 self.footer.set_edit_pos(pos+1)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
256 elif 'backspace' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
257 text = self.footer.edit_text
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
258 self.footer.set_edit_text(
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
259 '%s%s' % (text[0:pos-1], text[pos:len(text)]))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
260 self.footer.set_edit_pos(pos-1)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
261 elif 'delete' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
262 text = self.footer.edit_text
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
263 self.footer.set_edit_text(
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
264 '%s%s' % (text[0:pos], text[pos+1:len(text)]))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
265 self.footer.set_edit_pos(pos)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
266 elif len(key) >= 1 and len(key[0]) == 1:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
267 return self.insert(key)
39
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
268 return self
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
269
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
270 def enter(self):
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
271 raise Exception("Not implemented")
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
272
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
273 def exit(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
274 return self.state
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
275
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
276 def insert(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
277 logger.debug("Enter key: %r" % key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
278 self.footer.insert_text(key[0])
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
279 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
280
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
281
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
282 class BaseTimeState(HandleUserInputState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
283 def __init__(self, controller, view, running_state):
44
f10126519797 Fixed super call
Sascha L. Teichmann <teichmann@intevation.de>
parents: 43
diff changeset
284 super(BaseTimeState, self).__init__(controller, view, running_state,
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
285 view.frame.get_footer())
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
286 self.project = running_state.project
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
287
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
288 def exit(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
289 self.view._total_time()
39
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
290 return self.state
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
291
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
292 def insert(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
293 if key[0] in ['0','1','2','3','4','5','6','7','8','9']:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
294 self.footer.insert_text(key[0])
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
295 else:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
296 logger.debug("BaseTimeState: invalid character for "\
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
297 "adding/subtracting time: '%r'" % key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
298 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
299
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
300
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
301 class AddTimeState(BaseTimeState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
302 def enter(self):
37
68cc10d082ab Fix for #1569
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
303 minutes = safe_int(self.view.frame.get_footer().get_edit_text())
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
304 project = self.project
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
305 project.start -= timedelta(minutes=minutes)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
306 self.state.sec += minutes * 60
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
307 logger.info("AddTimeState: add %d minutes to project '%s'"
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
308 % (minutes, project.desc))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
309 self.view._total_time()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
310 return self.state
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
311
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
312
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
313 class SubtractTimeState(BaseTimeState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
314 def enter(self):
37
68cc10d082ab Fix for #1569
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
315 minutes = safe_int(self.view.frame.get_footer().get_edit_text())
76
07394c6155e2 Don't crash if subtracted time is greater then the current time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 74
diff changeset
316 sec = minutes * 60
07394c6155e2 Don't crash if subtracted time is greater then the current time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 74
diff changeset
317 if sec > self.state.sec:
07394c6155e2 Don't crash if subtracted time is greater then the current time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 74
diff changeset
318 self.view._total_time()
07394c6155e2 Don't crash if subtracted time is greater then the current time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 74
diff changeset
319 return self.state
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
320 project = self.project
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
321 project.start += timedelta(minutes=minutes)
76
07394c6155e2 Don't crash if subtracted time is greater then the current time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 74
diff changeset
322 self.state.sec -= sec
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
323 logger.info("SubtractTimeState: subtract %d minutes from project '%s'"
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
324 % (minutes, project.desc))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
325 self.view._total_time()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
326 return self.state
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
327
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
328
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
329 class DescriptionProjectsState(HandleUserInputState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
330 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
331 'choose_proj': _(" Choose a project."),
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
332 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
333
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
334 def enter(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
335 text = self.footer.get_edit_text()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
336 if text == '':
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
337 return self
30
fea63a224065 Stop still running projects before getan quits - even if getan crashes.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 27
diff changeset
338 self.controller.stop_project(text)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
339 self.controller.view.set_footer_text(self.msg('choose_proj'), 'question')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
340 return PausedProjectsState(self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
341
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
342 def exit(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
343 project = self.view.item_in_focus()
43
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
344 if project:
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
345 time = (datetime.now() - project.start).seconds
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
346 self.state.sec = time
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
347 signal.signal(signal.SIGALRM, self.state.handle_signal)
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
348 signal.alarm(1)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
349 return self.state
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
350
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
351
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
352 class EntryListState(State):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
353 def __init__(self, state, controller, view):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
354 self.projectlist_state = state
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
355 self.controller = controller
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
356 self.view = view
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
357
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
358 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
359 logger.debug("EntryListState: pressed key '%r'" % key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
360 if 'tab' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
361 self.view.clear()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
362 return self.projectlist_state
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
363 if 'up' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
364 return self.up()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
365 if 'down' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
366 return self.down()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
367 if 'enter' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
368 return self.select()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
369 return None
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
370
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
371 def up(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
372 self.view.up()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
373 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
374
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
375 def down(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
376 self.view.down()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
377 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
378
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
379 def select(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
380 self.view.select()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
381 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
382
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
383 def renew_focus(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
384 e_len = self.view.row_count()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
385 f = self.view.focused
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
386 if f >= e_len: f = e_len - 1
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
387 self.view.focused = f
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
388 self.view.update_focus(f)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
389
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
390
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
391 class DefaultEntryListState(EntryListState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
392 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
393 ret = super(DefaultEntryListState, self).keypress(key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
394 if ret:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
395 return ret
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
396
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
397 if 'd' in key:
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
398 if self.view.selection:
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
399 return DeleteEntryState(self.projectlist_state,
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
400 self.controller, self.view)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
401 if 'm' in key:
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
402 if self.view.selection:
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
403 return MoveEntryState(self.projectlist_state,
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
404 self.controller, self.view)
74
057e0fc8a74d switch to EditEntryState when 'e' is pressed in the EntryList to be able
Björn Ricks <bjoern.ricks@intevation.de>
parents: 73
diff changeset
405 if 'e' in key:
057e0fc8a74d switch to EditEntryState when 'e' is pressed in the EntryList to be able
Björn Ricks <bjoern.ricks@intevation.de>
parents: 73
diff changeset
406 entry = self.view.item_in_focus()
057e0fc8a74d switch to EditEntryState when 'e' is pressed in the EntryList to be able
Björn Ricks <bjoern.ricks@intevation.de>
parents: 73
diff changeset
407 if entry:
057e0fc8a74d switch to EditEntryState when 'e' is pressed in the EntryList to be able
Björn Ricks <bjoern.ricks@intevation.de>
parents: 73
diff changeset
408 return EditEntryState(self.projectlist_state,
057e0fc8a74d switch to EditEntryState when 'e' is pressed in the EntryList to be able
Björn Ricks <bjoern.ricks@intevation.de>
parents: 73
diff changeset
409 self.controller, self.view, entry)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
410 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
411
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
412
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
413 class DeleteEntryState(EntryListState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
414 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
415 'delete' : _("Really delete this entry? (y/n)"),
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
416 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
417
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
418 def __init__(self, state, controller, view):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
419 super(DeleteEntryState, self).__init__(state, controller, view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
420 self.view.set_footer_text(self.msg('delete'), 'question')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
421
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
422 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
423 ret = super(DeleteEntryState, self).keypress(key)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
424 if ret:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
425 return ret
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
426
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
427 if 'y' in key:
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
428 entries = [x.item for x in self.view.selection]
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
429 if entries:
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
430 self.controller.delete_entries(entries)
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
431 self.renew_focus()
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
432 self.view.set_footer_text("", 'entry_footer')
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
433 return DefaultEntryListState(self.projectlist_state,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
434 self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
435
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
436 if 'n' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
437 self.view.set_footer_text("", 'entry_footer')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
438 return DefaultEntryListState(self.projectlist_state,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
439 self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
440
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
441 return self
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
442
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
443
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
444 class MoveEntryState(EntryListState):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
445 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
446 'project': _(" Into which project do you want to move these entries?"),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
447 'really': _(" Are you sure? (> %s) (y/n)"),
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
448 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
449
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
450 proj = None
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
451
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
452 def __init__(self, state, controller, view):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
453 super(MoveEntryState, self).__init__(state, controller, view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
454 self.view.set_footer_text(self.msg('project'), 'question')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
455
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
456 def keypress(self, key):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
457 if 'y' in key and self.proj:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
458 logger.debug("MoveEntryState: move selected entries.")
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
459 self.controller.move_selected_entries(self.proj)
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
460 self.renew_focus()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
461 self.view.set_footer_text('', 'entry_footer')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
462 self.proj = None
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
463 return DefaultEntryListState(self.projectlist_state,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
464 self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
465
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
466 if 'n' in key and self.proj:
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
467 self.view.set_footer_text('', 'entry_footer')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
468 return DefaultEntryListState(self.projectlist_state,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
469 self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
470
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
471 if 'esc' in key:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
472 self.view.set_footer_text('', 'entry_footer')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
473 return DefaultEntryListState(self.projectlist_state,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
474 self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
475
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
476 if len(key) > 0 and self.proj is None:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
477 self.proj = self.controller.project_by_key(key[0])
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
478 if self.proj:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
479 logger.debug("MoveEntryState: prepared entries to be moved to "\
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
480 "project '%s'" % self.proj.desc)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
481 self.view.set_footer_text(self.msg('really'), 'question')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
482
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
483 return self
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
484
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
485 class CreateProjectState(HandleUserInputState):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
486
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
487 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
488 'choose_proj': _(' Choose a project.'),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
489 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
490
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
491 def __init__(self, controller, view):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
492 super(CreateProjectState, self).__init__(controller, view, None,
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
493 controller.view.view.get_footer())
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
494
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
495 def exit(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
496 self.controller.view.set_footer_text(self.msg('choose_proj'), 'question')
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
497 return PausedProjectsState(self.controller, self.view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
498
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
499 class AddProjectNameState(CreateProjectState):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
500 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
501 'choose_proj': _(' Choose a project.'),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
502 'proj_name': _('Insert new project name: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
503 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
504
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
505 def __init__(self, controller, view):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
506 controller.view.set_footer_text(self.msg('proj_name'),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
507 'question', 1)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
508 super(AddProjectNameState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
509 self.view.frame.set_focus('footer')
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
510
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
511 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
512 project = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
513 if project == '':
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
514 return self
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
515 return AddProjectKeyState(self.controller, self.view, project)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
516
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
517
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
518 class AddProjectKeyState(CreateProjectState):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
519
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
520 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
521 'proj_name': _('Insert new project name: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
522 'proj_key': _('Insert key for new project: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
523 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
524
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
525 def __init__(self, controller, view, project):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
526 controller.view.set_footer_text(self.msg('proj_key'),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
527 'question', 1)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
528 super(AddProjectKeyState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
529 self.view.frame.set_focus('footer')
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
530 self.project = project
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
531
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
532 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
533 key = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
534 if key == '':
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
535 return self
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
536 return AddProjectDescriptionState(self.controller, self.view,
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
537 self.project, key)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
538
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
539 class AddProjectDescriptionState(CreateProjectState):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
540 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
541 'proj_description': _('Insert a description for project: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
542 'choose_proj': _(" Choose a project.")
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
543 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
544
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
545 def __init__(self, controller, view, project, key):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
546 controller.view.set_footer_text(self.msg('proj_description'),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
547 'question', 1)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
548 super(AddProjectDescriptionState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
549 self.view.frame.set_focus('footer')
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
550 self.project = project
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
551 self.key = key
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
552
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
553 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
554 description = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
555 if description == '':
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
556 return self
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
557 self.controller.add_project(self.key, description)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
558 self.controller.view.set_footer_text(self.msg('choose_proj'), 'question')
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
559 return PausedProjectsState(self.controller, self.view)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
560
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
561
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
562 class EditEntryState(HandleUserInputState):
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
563 messages = {
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
564 'edit_entry': _('Edit entry text: '),
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
565 }
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
566
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
567 def __init__(self, state, controller, view, entry):
87
0e5b6826a4ef Use footer of EntryList to display the editable description of an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 76
diff changeset
568 view.set_footer_text(self.msg('edit_entry'),
0e5b6826a4ef Use footer of EntryList to display the editable description of an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 76
diff changeset
569 'question', True)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
570 super(EditEntryState, self).__init__(controller, view,
87
0e5b6826a4ef Use footer of EntryList to display the editable description of an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 76
diff changeset
571 None, view.footer)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
572 self.footer.set_edit_text(entry.desc)
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
573 self.footer.set_edit_pos(len(self.footer.edit_text))
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
574 self.view.frame.set_focus('footer')
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
575 self.entry = entry
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
576 self.state = state
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
577 logger.debug("EditEntryState: Entry %s" % entry)
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
578
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
579 def enter(self):
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
580 entry_desc = self.footer.get_edit_text()
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
581 if entry_desc == '':
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
582 return self
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
583 entry = self.entry
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
584 entry.desc = entry_desc
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
585 self.controller.update_entry(entry)
87
0e5b6826a4ef Use footer of EntryList to display the editable description of an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 76
diff changeset
586 self.view.node_in_focus().update()
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
587 return self.exit()
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
588
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
589 def exit(self):
87
0e5b6826a4ef Use footer of EntryList to display the editable description of an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 76
diff changeset
590 self.view.set_footer_text("", 'entry_footer', False)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
591 return DefaultEntryListState(self.state, self.controller, self.view)
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
592
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
593
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)