Mercurial > getan > getan
annotate getan/states.py @ 194:cf98dc7f9354
Move mainloop related code to GetanController
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Wed, 23 Jan 2013 15:04:43 +0100 |
parents | 3374ff7e7388 |
children | 0c0d88ec53f9 |
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> |
138
bb6ddef4f88f
Update copyright and add my name
Björn Ricks <bjoern.ricks@intevation.de>
parents:
137
diff
changeset
|
5 # (c) 2011, 2012 by Björn Ricks <bjoern.ricks@intevation.de> |
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
|
6 # |
9c4e8ba3c4fa
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 # 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
|
8 # 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
|
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 |
145
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
12 import locale |
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
|
13 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
|
14 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
|
15 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
|
16 |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
17 from getan.resources import gettext as _ |
37 | 18 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
|
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 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
|
21 |
9c4e8ba3c4fa
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 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
|
23 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
|
24 } |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
27 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
|
28 self.view = view |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
29 self.config = controller.get_config() |
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
|
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 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
|
32 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
|
33 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
36 def keypress(self, key): |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
37 keys = self.config.get_keybinding() |
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
|
38 logger.debug("ProjectState: handle key '%r'" % key) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
39 if keys.get_switch_time_mode() in key: |
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
|
40 self.view.switch_time_mode() |
96
8c7e0fd31e88
Return the current state if F1 is pressed
Björn Ricks <bjoern.ricks@intevation.de>
parents:
95
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 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
43 if keys.get_switch_project_order() in key: |
142
d88240a3a065
Add global key to switch sorting of the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents:
139
diff
changeset
|
44 self.view.switch_project_order() |
d88240a3a065
Add global key to switch sorting of the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents:
139
diff
changeset
|
45 return self |
d88240a3a065
Add global key to switch sorting of the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents:
139
diff
changeset
|
46 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
47 if keys.get_switch_lists() 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
|
48 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
|
49 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
|
50 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
|
51 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
|
52 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
|
53 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
|
54 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
55 if keys.get_entry_up() in key: |
88
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.up() |
6dc52940dde0
Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents:
87
diff
changeset
|
57 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
58 if keys.get_entry_down() in key: |
88
6dc52940dde0
Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents:
87
diff
changeset
|
59 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
|
60 |
6dc52940dde0
Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents:
87
diff
changeset
|
61 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
|
62 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
|
63 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
|
64 return self |
6dc52940dde0
Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents:
87
diff
changeset
|
65 |
6dc52940dde0
Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents:
87
diff
changeset
|
66 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
|
67 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
|
68 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
|
69 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
|
70 |
170 | 71 |
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
|
72 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
|
73 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
74 '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
|
75 } |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
77 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
|
78 logger.debug("PausedProjectsState: handle key '%r'" % key) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
79 keys = self.config.get_keybinding() |
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 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
|
81 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
|
82 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
|
83 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
84 if keys.get_enter() in key: |
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
|
85 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
|
86 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
87 if keys.get_insert() in key: |
172
b8abca7714fd
Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
171
diff
changeset
|
88 return AddProjectKeyState(self.controller, self.view) |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
89 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
90 if keys.get_escape() in key: |
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
|
91 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
|
92 |
179
3374ff7e7388
Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
177
diff
changeset
|
93 if keys.get_project_edit() in key: |
3374ff7e7388
Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
177
diff
changeset
|
94 proj = self.view.item_in_focus() |
3374ff7e7388
Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
177
diff
changeset
|
95 if not proj: |
3374ff7e7388
Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
177
diff
changeset
|
96 return self |
3374ff7e7388
Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
177
diff
changeset
|
97 return ProjectEditKeyState(self.controller, self.view, proj) |
3374ff7e7388
Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
177
diff
changeset
|
98 |
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
|
99 else: |
98
7c3f43bfc0a8
Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
97
diff
changeset
|
100 if len(key) > 0 and len(key[0]) == 1: |
167
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
101 select_proj = SelectProjectState(self.controller, self.view) |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
102 return select_proj.keypress(key) |
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
|
103 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
|
104 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
105 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
106 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
|
107 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
|
108 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
|
109 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
|
110 |
170 | 111 |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
112 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
|
113 |
167
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
114 def __init__(self, controller, view): |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
115 super(SelectProjectState, self).__init__(controller, view) |
167
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
116 self.proj_keys = "" |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
117 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
|
118 |
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
119 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
|
120 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
|
121 |
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
122 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
|
123 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
|
124 |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
125 def check_key(self, key): |
167
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
126 return len(self.controller.find_projects_by_key(key)) |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
127 |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
128 def select_project(self): |
95
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
129 proj = self.controller.project_by_key(self.proj_keys) |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
130 if proj: |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
131 self.reset() |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
132 self.view.select_project(proj) |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
133 self.controller.start_project(self.view.item_in_focus()) |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
134 self.controller.update_entries( |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
135 self.view.item_in_focus()) |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
136 return RunningProjectsState(self.controller, self.view, proj) |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
137 return self |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
138 |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
139 def keypress(self, key): |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
140 keys = self.config.get_keybinding() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
141 if keys.get_escape() in key: |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
142 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
|
143 return PausedProjectsState(self.controller, self.view) |
139
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
144 |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
145 if 'backspace' in key: |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
146 if len(self.proj_keys) > 0: |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
147 self.proj_keys = self.proj_keys[:-1] |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
148 self.set_footer_text() |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
149 return self |
167
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
150 |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
151 if keys.get_enter() in key: |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
152 return self.select_project() |
167
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
153 |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
154 else: |
98
7c3f43bfc0a8
Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
97
diff
changeset
|
155 if len(key) > 0 and len(key[0]) == 1: |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
156 proj_key = self.proj_keys + key[0] |
167
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
157 num = self.check_key(proj_key) |
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
158 if num > 0: |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
159 self.proj_keys += key[0] |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
160 self.set_footer_text() |
167
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
161 if num == 1: |
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
162 # run project directly |
be9acb00cd97
Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
155
diff
changeset
|
163 return self.select_project() |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
164 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
|
165 |
170 | 166 |
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 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
|
168 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
169 'quit' : _(" Really quit? (y/n)"), |
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
170 '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
|
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 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
173 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
|
174 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
|
175 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
|
176 |
9c4e8ba3c4fa
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 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 |
9c4e8ba3c4fa
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 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
|
184 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
|
185 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
186 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
|
187 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
|
188 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
|
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 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
|
191 |
9c4e8ba3c4fa
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 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
|
194 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
195 'description': _("Enter a description: "), |
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
196 '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
|
197 'min_time' : _("Enter time to subtract [min]: "), |
152
7ffcd2ea92e3
Fix messages when a project is paused
Björn Ricks <bjoern.ricks@intevation.de>
parents:
151
diff
changeset
|
198 'continue' : _("Press '%s' to continue."), |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
199 'running' : _("Running ( %s ) on '%s'."), |
152
7ffcd2ea92e3
Fix messages when a project is paused
Björn Ricks <bjoern.ricks@intevation.de>
parents:
151
diff
changeset
|
200 '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
|
201 } |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
203 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
|
204 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
|
205 |
89
3bea335c0f30
Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents:
88
diff
changeset
|
206 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 |
9c4e8ba3c4fa
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 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
|
213 proj = self.project |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
214 keys = self.config.get_keybinding() |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
215 if not proj: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
216 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
|
217 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
|
218 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
|
219 (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
|
220 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
|
221 'running') |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
179
diff
changeset
|
222 self.controller.loop.draw_screen() |
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
|
223 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
|
224 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
|
225 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
|
226 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
|
227 (human_time((datetime.now()-self.break_start).seconds), |
171
a34693c5905f
Use common name scheme for keybinding key names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
170
diff
changeset
|
228 self.msg('continue') % keys.get_project_pause()), |
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
|
229 'paused_running') |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
179
diff
changeset
|
230 self.controller.loop.draw_screen() |
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
|
231 |
9c4e8ba3c4fa
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 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
|
233 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
|
234 |
9c4e8ba3c4fa
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 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
|
236 logger.debug("RunningProjectsState: handle key '%r'" % key) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
237 keys = self.config.get_keybinding() |
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
|
238 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
|
239 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
|
240 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
|
241 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
242 if keys.get_enter() in key: |
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
|
243 return self.stop() |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
244 if keys.get_add_time() in key: |
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
|
245 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
|
246 '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
|
247 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
|
248 return AddTimeState(self.controller, self.view, self) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
249 if keys.get_subtract_time() in key: |
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
|
250 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
|
251 '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
|
252 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
|
253 return SubtractTimeState(self.controller, self.view, self) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
254 |
171
a34693c5905f
Use common name scheme for keybinding key names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
170
diff
changeset
|
255 if keys.get_project_pause() in key: |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
256 if not self.break_start: |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
257 self.break_start = datetime.now() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
258 return self |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
259 else: |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
260 self.view._total_time() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
261 proj = self.project |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
262 if proj: |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
263 proj.start += datetime.now() - self.break_start |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
264 self.break_start = None |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
265 signal.signal(signal.SIGALRM, self.handle_signal) |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
266 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
|
267 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
|
268 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
269 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
|
270 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
|
271 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
|
272 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
|
273 proj = self.project |
42
a5439795ef09
More checks againts empty projects.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
41
diff
changeset
|
274 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
|
275 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
|
276 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
|
277 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
|
278 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
|
279 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
|
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 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
|
283 def __init__(self, controller, view, state, footer): |
150
7ab5b887a7c5
Always call super constructor of states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
145
diff
changeset
|
284 super(HandleUserInputState, self).__init__(controller, 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
|
285 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
|
286 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
|
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 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
|
289 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
|
290 pos = self.footer.edit_pos |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
291 keys = self.config.get_keybinding() |
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
|
292 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
293 if keys.get_escape() in key: |
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
|
294 return self.exit() |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
295 elif keys.get_enter() in key: |
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
|
296 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 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
|
302 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
|
303 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
|
304 '%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
|
305 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
|
306 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
|
307 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
|
308 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
|
309 '%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
|
310 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
|
311 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
|
312 return self.insert(key) |
39
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
313 return self |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
314 |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
315 def enter(self): |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
316 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
|
317 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
318 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
|
319 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
|
320 |
9c4e8ba3c4fa
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 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
|
322 logger.debug("Enter key: %r" % key) |
145
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
323 text = "".join(key) |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
324 # check for unicode here |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
325 # urwid (at least up to version 1.0.2) will crash if a non-unicode |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
326 # string with a char > 128 is passed here |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
327 if not isinstance(text, unicode): |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
328 text = unicode(text, locale.getpreferredencoding()) |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
329 self.footer.insert_text(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
|
330 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
|
331 |
9c4e8ba3c4fa
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 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
|
334 def __init__(self, controller, view, running_state): |
44
f10126519797
Fixed super call
Sascha L. Teichmann <teichmann@intevation.de>
parents:
43
diff
changeset
|
335 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
|
336 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
|
337 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
|
338 |
9c4e8ba3c4fa
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 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
|
340 self.view._total_time() |
39
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
341 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
|
342 |
9c4e8ba3c4fa
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 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
|
344 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
|
345 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
|
346 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
|
347 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
|
348 "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
|
349 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
|
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 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
|
353 def enter(self): |
37 | 354 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
|
355 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
|
356 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
|
357 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
|
358 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
|
359 % (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
|
360 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
|
361 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
|
362 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
365 def enter(self): |
37 | 366 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
|
367 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
|
368 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
|
369 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
|
370 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
|
371 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
|
372 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
|
373 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
|
374 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
|
375 % (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
|
376 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
|
377 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
|
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 |
9c4e8ba3c4fa
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 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
|
381 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
382 '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
|
383 } |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
386 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
|
387 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
|
388 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
|
389 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
|
390 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
|
391 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
|
392 |
9c4e8ba3c4fa
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 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
|
394 project = self.view.item_in_focus() |
43 | 395 if project: |
396 time = (datetime.now() - project.start).seconds | |
397 self.state.sec = time | |
398 signal.signal(signal.SIGALRM, self.state.handle_signal) | |
399 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
|
400 return self.state |
106 | 401 |
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
|
402 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
403 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
|
404 def __init__(self, state, controller, view): |
150
7ab5b887a7c5
Always call super constructor of states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
145
diff
changeset
|
405 super(EntryListState, self).__init__(controller, 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
|
406 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
|
407 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
408 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
|
409 logger.debug("EntryListState: pressed key '%r'" % key) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
410 keys = self.config.get_keybinding() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
411 if keys.get_switch_lists() in key: |
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
|
412 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
|
413 return self.projectlist_state |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
414 if keys.get_entry_up() in key: |
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
|
415 return self.up() |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
416 if keys.get_entry_down() in key: |
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
|
417 return self.down() |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
418 if keys.get_enter() in key: |
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
|
419 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
|
420 return None |
130 | 421 |
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
|
422 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
|
423 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
|
424 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
|
425 |
9c4e8ba3c4fa
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 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
|
427 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
|
428 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
|
429 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
430 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
|
431 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
|
432 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
|
433 |
9c4e8ba3c4fa
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 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
|
435 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
|
436 f = self.view.focused |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
437 if f >= e_len: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
438 f = e_len - 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
|
439 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
|
440 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
|
441 |
9c4e8ba3c4fa
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 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
|
444 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
|
445 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
|
446 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
|
447 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
|
448 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
449 keys = self.config.get_keybinding() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
450 if keys.get_escape() in key: |
105
4bf17975acca
Also move back to ProjectListState if esc is pressed not only when tab
Björn Ricks <bjoern.ricks@intevation.de>
parents:
104
diff
changeset
|
451 self.view.clear() |
4bf17975acca
Also move back to ProjectListState if esc is pressed not only when tab
Björn Ricks <bjoern.ricks@intevation.de>
parents:
104
diff
changeset
|
452 return self.projectlist_state |
4bf17975acca
Also move back to ProjectListState if esc is pressed not only when tab
Björn Ricks <bjoern.ricks@intevation.de>
parents:
104
diff
changeset
|
453 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
454 if keys.get_entry_delete() in key: |
25
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
455 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
|
456 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
|
457 self.controller, self.view) |
102
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
458 else: |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
459 entry = self.view.item_in_focus() |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
460 return DeleteEntryState(self.projectlist_state, |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
461 self.controller, self.view, [entry]) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
462 if keys.get_entry_move() in key: |
25
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
463 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
|
464 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
|
465 self.controller, self.view) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
466 if keys.get_entry_edit() in key: |
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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 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
|
472 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
475 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
476 '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
|
477 } |
9c4e8ba3c4fa
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 |
100
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
479 def __init__(self, state, controller, view, entries=None): |
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
|
480 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
|
481 self.view.set_footer_text(self.msg('delete'), 'question') |
100
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
482 self.entries = entries |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
483 if not self.entries: |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
484 self.entries = [x.item for x in self.view.selection] |
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
|
485 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
486 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
|
487 if 'y' in key: |
100
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
488 if self.entries: |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
489 self.controller.delete_entries(self.entries) |
25
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
490 self.renew_focus() |
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
491 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
|
492 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
|
493 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
|
494 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
495 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
|
496 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
|
497 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
|
498 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
|
499 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
500 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
|
501 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
502 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
503 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
|
504 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
505 'project': _(" Into which project do you want to move these entries?"), |
103 | 506 'really': _(" Are you sure? (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
|
507 } |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
508 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
509 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
|
510 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
511 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
|
512 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
|
513 self.view.set_footer_text(self.msg('project'), 'question') |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
514 self.proj_keys = "" |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
515 self.project_view = controller.project_view |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
516 |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
517 def set_project_footer(self): |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
518 self.project_view.set_footer_text("Selecting project from " \ |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
519 "key: %s" % self.proj_keys, "running") |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
520 |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
521 def reset_project_footer(self): |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
522 self.project_view.reset_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
|
523 |
169
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
524 def check_key(self, key): |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
525 return len(self.controller.find_projects_by_key(key)) |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
526 |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
527 def select_project(self): |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
528 proj = self.controller.project_by_key(self.proj_keys) |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
529 if proj: |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
530 self.proj = proj |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
531 self.reset_project_footer() |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
532 logger.debug("MoveEntryState: prepared entries to be " \ |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
533 "moved to project '%s'" % self.proj.desc) |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
534 self.view.set_footer_text(self.msg('really'), 'question') |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
535 |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
536 |
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
|
537 def keypress(self, key): |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
538 keys = self.config.get_keybinding() |
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
|
539 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
|
540 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
|
541 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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 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
|
547 |
25
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
548 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
|
549 self.view.set_footer_text('', 'entry_footer') |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
550 self.reset_project_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
|
551 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
|
552 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
|
553 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
554 if keys.get_escape() in key: |
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
|
555 self.view.set_footer_text('', 'entry_footer') |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
556 self.reset_project_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
|
557 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
|
558 self.controller, self.view) |
134
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
559 if 'backspace' in key: |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
560 if len(self.proj_keys) > 0: |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
561 self.proj_keys = self.proj_keys[:-1] |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
562 self.set_project_footer() |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
563 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
|
564 |
169
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
565 if keys.get_enter() in key and self.proj is None: |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
566 self.select_project() |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
567 |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
568 if len(key) > 0 and len(key[0]) == 1 and self.proj is None: |
169
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
569 proj_key = self.proj_keys + key[0] |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
570 num = self.check_key(proj_key) |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
571 if num > 0: |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
572 self.proj_keys = proj_key |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
573 self.set_project_footer() |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
574 if num == 1: |
d10a0e35b982
Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents:
167
diff
changeset
|
575 self.select_project() |
170 | 576 |
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
|
577 return self |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
578 |
170 | 579 |
173
a5319bb1ac13
Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
172
diff
changeset
|
580 class AlterProjectState(HandleUserInputState): |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
581 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
582 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
583 'choose_proj': _(' Choose a project.'), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
584 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
585 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
586 def __init__(self, controller, view): |
173
a5319bb1ac13
Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
172
diff
changeset
|
587 super(AlterProjectState, self).__init__(controller, view, None, |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
588 controller.view.view.get_footer()) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
589 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
590 def exit(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
591 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
|
592 return PausedProjectsState(self.controller, self.view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
593 |
170 | 594 |
173
a5319bb1ac13
Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
172
diff
changeset
|
595 class AddProjectKeyState(AlterProjectState): |
172
b8abca7714fd
Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
171
diff
changeset
|
596 |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
597 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
598 'choose_proj': _(' Choose a project.'), |
172
b8abca7714fd
Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
171
diff
changeset
|
599 'proj_key': _('Insert key for new project: '), |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
600 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
601 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
602 def __init__(self, controller, view): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
603 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
|
604 'question', 1) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
605 super(AddProjectKeyState, self).__init__(controller, view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
606 self.view.frame.set_focus('footer') |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
607 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
608 def enter(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
609 key = self.footer.get_edit_text() |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
610 if key == '': |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
611 return self |
172
b8abca7714fd
Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
171
diff
changeset
|
612 return AddProjectDescriptionState(self.controller, self.view, key) |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
613 |
170 | 614 |
173
a5319bb1ac13
Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
172
diff
changeset
|
615 class AddProjectDescriptionState(AlterProjectState): |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
616 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
617 'proj_description': _('Insert a description for project: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
618 'choose_proj': _(" Choose a project.") |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
619 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
620 |
172
b8abca7714fd
Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
171
diff
changeset
|
621 def __init__(self, controller, view, key): |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
622 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
|
623 'question', 1) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
624 super(AddProjectDescriptionState, self).__init__(controller, view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
625 self.view.frame.set_focus('footer') |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
626 self.key = key |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
627 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
628 def enter(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
629 description = self.footer.get_edit_text() |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
630 if description == '': |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
631 return self |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
632 self.controller.add_project(self.key, description) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
633 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
|
634 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
|
635 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
636 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
637 class EditEntryState(HandleUserInputState): |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
638 messages = { |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
639 'edit_entry': _('Edit entry text: '), |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
640 } |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
641 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
642 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
|
643 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
|
644 'question', True) |
73
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
645 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
|
646 None, view.footer) |
73
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
647 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
|
648 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
|
649 self.view.frame.set_focus('footer') |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
650 self.entry = entry |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
651 self.state = state |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
652 logger.debug("EditEntryState: Entry %s" % entry) |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
653 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
654 def enter(self): |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
655 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
|
656 if entry_desc == '': |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
657 return self |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
658 entry = self.entry |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
659 entry.desc = entry_desc |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
660 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
|
661 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
|
662 return self.exit() |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
663 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
664 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
|
665 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
|
666 return DefaultEntryListState(self.state, self.controller, self.view) |
177
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
667 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
668 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
669 class ProjectEditKeyState(AlterProjectState): |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
670 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
671 messages = { |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
672 'proj_key': _('Insert key for project: '), |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
673 'proj_description': _('Insert description for project: '), |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
674 'choose_proj': _(" Choose a project.") |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
675 } |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
676 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
677 def __init__(self, controller, view, project): |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
678 controller.view.set_footer_text(self.msg('proj_key'), |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
679 'question', 1) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
680 super(ProjectEditKeyState, self).__init__(controller, view) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
681 self.project = project |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
682 self.view.frame.set_focus('footer') |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
683 self.footer.set_edit_text(project.key) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
684 self.footer.set_edit_pos(len(self.footer.edit_text)) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
685 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
686 def enter(self): |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
687 key = self.footer.get_edit_text() |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
688 if key == '': |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
689 return self |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
690 self.project.key = key |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
691 return ProjectEditDescriptionState(self.controller, self.view, |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
692 self.project) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
693 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
694 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
695 class ProjectEditDescriptionState(AlterProjectState): |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
696 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
697 messages = { |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
698 "proj_description" : _("Insert description for project: "), |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
699 "choose_proj" : _(" Choose a project.") |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
700 } |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
701 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
702 def __init__(self, controller, view, project): |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
703 controller.view.set_footer_text(self.msg("proj_description"), |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
704 "question", 1) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
705 super(ProjectEditDescriptionState, self).__init__(controller, view) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
706 self.project = project |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
707 self.view.frame.set_focus("footer") |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
708 self.footer.set_edit_text(project.desc) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
709 self.footer.set_edit_pos(len(self.footer.edit_text)) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
710 |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
711 def enter(self): |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
712 description = self.footer.get_edit_text() |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
713 if description == '': |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
714 return self |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
715 self.project.desc = description |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
716 self.controller.update_project(self.project) |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
717 self.controller.view.set_footer_text(self.msg('choose_proj'), 'question') |
c37fb8223762
Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents:
173
diff
changeset
|
718 return PausedProjectsState(self.controller, self.view) |