Mercurial > getan > getan
annotate getan/states.py @ 155:497ed1991e85
Modify project selection
The new project selection has two advantages:
1. It's possible to create and run e.g. projects a and aa
Therefore it is possible to create a hirarchy again.
2. When inserting the project key only letters for valid projects are accepted.
E.g. two projects exists aa and ab. In that case it is not possible to insert
ac. Only a will be shown in the footer.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Thu, 06 Dec 2012 13:14:22 +0100 |
parents | 7ffcd2ea92e3 |
children | be9acb00cd97 |
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 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
71 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
|
72 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
73 '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
|
74 } |
9c4e8ba3c4fa
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 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
|
77 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
|
78 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
|
79 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
|
80 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
|
81 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
|
82 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
83 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
|
84 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
|
85 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
86 if keys.get_insert() in key: |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
87 return AddProjectNameState(self.controller, self.view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
88 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
89 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
|
90 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
|
91 |
9c4e8ba3c4fa
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 else: |
98
7c3f43bfc0a8
Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
97
diff
changeset
|
93 if len(key) > 0 and len(key[0]) == 1: |
95
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
94 select_proj = SelectProjectState(self.controller, self.view, key[0]) |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
95 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
|
96 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
|
97 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
98 |
9c4e8ba3c4fa
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 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
|
100 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
|
101 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
|
102 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
|
103 |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
104 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
|
105 |
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
106 def __init__(self, controller, view, key): |
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
107 super(SelectProjectState, self).__init__(controller, view) |
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
108 self.proj_keys = key |
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
109 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
|
110 |
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
111 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
|
112 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
|
113 |
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
114 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
|
115 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
|
116 |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
117 def check_key(self, key): |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
118 return len(self.controller.find_projects_by_key(key)) > 0 |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
119 |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
120 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
|
121 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
|
122 if proj: |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
123 self.reset() |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
124 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
|
125 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
|
126 self.controller.update_entries( |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
127 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
|
128 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
|
129 return self |
19e9d76a10fb
Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
94
diff
changeset
|
130 |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
131 def keypress(self, key): |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
132 keys = self.config.get_keybinding() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
133 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
|
134 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
|
135 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
|
136 |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
137 if 'backspace' in key: |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
138 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
|
139 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
|
140 self.set_footer_text() |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
141 return self |
155
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
142 if keys.get_enter() in key: |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
143 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
|
144 else: |
98
7c3f43bfc0a8
Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
97
diff
changeset
|
145 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
|
146 proj_key = self.proj_keys + key[0] |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
147 if self.check_key(proj_key): |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
148 self.proj_keys += key[0] |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
149 self.set_footer_text() |
497ed1991e85
Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
152
diff
changeset
|
150 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
|
151 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
|
152 |
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
|
153 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
|
154 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
155 'quit' : _(" Really quit? (y/n)"), |
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
156 '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
|
157 } |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
158 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
159 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
|
160 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
|
161 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
|
162 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
163 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
|
164 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
|
165 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
|
166 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
|
167 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
|
168 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
169 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
|
170 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
|
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 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
|
173 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
|
174 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
|
175 |
9c4e8ba3c4fa
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 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
|
177 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
180 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
181 'description': _("Enter a description: "), |
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
182 '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
|
183 '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
|
184 '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
|
185 '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
|
186 '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
|
187 } |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
190 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
|
191 |
89
3bea335c0f30
Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents:
88
diff
changeset
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
197 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
198 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
|
199 proj = self.project |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
200 keys = self.config.get_keybinding() |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
201 if not proj: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
202 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
|
203 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
|
204 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
|
205 (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
|
206 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
|
207 'running') |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
208 self.controller.view.loop.draw_screen() |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
209 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
|
210 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
|
211 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
|
212 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
|
213 (human_time((datetime.now()-self.break_start).seconds), |
152
7ffcd2ea92e3
Fix messages when a project is paused
Björn Ricks <bjoern.ricks@intevation.de>
parents:
151
diff
changeset
|
214 self.msg('continue') % keys.get_pause_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
|
215 'paused_running') |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
216 self.controller.view.loop.draw_screen() |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
217 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
218 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
|
219 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
|
220 |
9c4e8ba3c4fa
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 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
|
222 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
|
223 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
|
224 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
|
225 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
|
226 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
|
227 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
228 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
|
229 return self.stop() |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
230 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
|
231 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
|
232 '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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 '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
|
238 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
|
239 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
|
240 |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
241 if keys.get_pause_project() in key: |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
242 if not self.break_start: |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
243 self.break_start = datetime.now() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
244 return self |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
245 else: |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
246 self.view._total_time() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
247 proj = self.project |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
248 if proj: |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
249 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
|
250 self.break_start = None |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
251 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
|
252 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
|
253 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
|
254 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
255 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
|
256 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
|
257 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
|
258 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
|
259 proj = self.project |
42
a5439795ef09
More checks againts empty projects.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
41
diff
changeset
|
260 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
|
261 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
|
262 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
|
263 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
|
264 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
|
265 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
|
266 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
269 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
|
270 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
|
271 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
|
272 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
|
273 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
274 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
|
275 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
|
276 pos = self.footer.edit_pos |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
277 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
|
278 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
279 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
|
280 return self.exit() |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
281 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 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
|
289 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
|
290 '%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
|
291 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
|
292 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
|
293 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
|
294 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
|
295 '%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
|
296 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
|
297 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
|
298 return self.insert(key) |
39
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
299 return self |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
300 |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
301 def enter(self): |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
302 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
|
303 |
9c4e8ba3c4fa
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 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
|
305 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
|
306 |
9c4e8ba3c4fa
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 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
|
308 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
|
309 text = "".join(key) |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
310 # check for unicode here |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
311 # 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
|
312 # 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
|
313 if not isinstance(text, unicode): |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
314 text = unicode(text, locale.getpreferredencoding()) |
ccd47a2d37a6
Carefully handle non unicode strings for urwid
Björn Ricks <bjoern.ricks@intevation.de>
parents:
142
diff
changeset
|
315 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
|
316 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
|
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 |
9c4e8ba3c4fa
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 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
|
320 def __init__(self, controller, view, running_state): |
44
f10126519797
Fixed super call
Sascha L. Teichmann <teichmann@intevation.de>
parents:
43
diff
changeset
|
321 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
|
322 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
|
323 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
|
324 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
325 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
|
326 self.view._total_time() |
39
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
327 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
|
328 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
329 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
|
330 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
|
331 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
|
332 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
|
333 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
|
334 "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
|
335 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
|
336 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
337 |
9c4e8ba3c4fa
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 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
|
339 def enter(self): |
37 | 340 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
|
341 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
|
342 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
|
343 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
|
344 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
|
345 % (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
|
346 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
|
347 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
|
348 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
351 def enter(self): |
37 | 352 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
|
353 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
|
354 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
|
355 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
|
356 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
|
357 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
|
358 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
|
359 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
|
360 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
|
361 % (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
|
362 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
|
363 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
|
364 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
366 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
|
367 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
368 '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
|
369 } |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
370 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
371 def 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
|
372 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
|
373 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
|
374 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
|
375 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
|
376 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
|
377 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
|
378 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
379 def 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
|
380 project = self.view.item_in_focus() |
43 | 381 if project: |
382 time = (datetime.now() - project.start).seconds | |
383 self.state.sec = time | |
384 signal.signal(signal.SIGALRM, self.state.handle_signal) | |
385 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
|
386 return self.state |
106 | 387 |
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
|
388 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
389 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
|
390 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
|
391 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
|
392 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
|
393 |
9c4e8ba3c4fa
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 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
|
395 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
|
396 keys = self.config.get_keybinding() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
397 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
|
398 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
|
399 return self.projectlist_state |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
400 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
|
401 return self.up() |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
402 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
|
403 return self.down() |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
404 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
|
405 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
|
406 return None |
130 | 407 |
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
|
408 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
|
409 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
|
410 return self |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
411 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
412 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
|
413 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
|
414 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
|
415 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
416 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
|
417 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
|
418 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
|
419 |
9c4e8ba3c4fa
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 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
|
421 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
|
422 f = self.view.focused |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
423 if f >= e_len: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
424 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
|
425 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
|
426 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
|
427 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
430 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
|
431 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
|
432 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
|
433 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
|
434 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
435 keys = self.config.get_keybinding() |
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
436 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
|
437 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
|
438 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
|
439 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
440 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
|
441 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
|
442 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
|
443 self.controller, self.view) |
102
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
444 else: |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
445 entry = self.view.item_in_focus() |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
446 return DeleteEntryState(self.projectlist_state, |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
447 self.controller, self.view, [entry]) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
448 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
|
449 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
|
450 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
|
451 self.controller, self.view) |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
452 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
|
453 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
|
454 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
|
455 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
|
456 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
|
457 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
|
458 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
459 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
460 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
|
461 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
462 '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
|
463 } |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
464 |
100
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
465 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
|
466 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
|
467 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
|
468 self.entries = entries |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
469 if not self.entries: |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
470 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
|
471 |
9c4e8ba3c4fa
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 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
|
473 if 'y' in key: |
100
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
474 if self.entries: |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
475 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
|
476 self.renew_focus() |
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
477 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
|
478 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
|
479 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
|
480 |
9c4e8ba3c4fa
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 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
|
482 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
|
483 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
|
484 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
|
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 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
|
487 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
488 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
489 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
|
490 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
491 'project': _(" Into which project do you want to move these entries?"), |
103 | 492 '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
|
493 } |
9c4e8ba3c4fa
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 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
|
496 |
9c4e8ba3c4fa
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 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
|
498 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
|
499 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
|
500 self.proj_keys = "" |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
501 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
|
502 |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
503 def set_project_footer(self): |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
504 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
|
505 "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
|
506 |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
507 def reset_project_footer(self): |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
508 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
|
509 |
9c4e8ba3c4fa
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 def keypress(self, key): |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
511 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
|
512 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
|
513 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
|
514 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
|
515 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
|
516 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
|
517 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
|
518 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
|
519 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
|
520 |
25
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
521 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
|
522 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
|
523 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
|
524 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
|
525 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
|
526 |
151
1e35c24708dd
Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents:
150
diff
changeset
|
527 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
|
528 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
|
529 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
|
530 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
|
531 self.controller, self.view) |
134
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
532 if 'backspace' in key: |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
533 if len(self.proj_keys) > 0: |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
534 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
|
535 self.set_project_footer() |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
536 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
|
537 |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
538 if len(key) > 0 and len(key[0]) == 1 and self.proj is None: |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
539 self.proj_keys += key[0] |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
540 self.set_project_footer() |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
541 self.proj = self.controller.project_by_key(self.proj_keys) |
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
|
542 if self.proj: |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
543 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
|
544 logger.debug("MoveEntryState: prepared entries to be moved to "\ |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
545 "project '%s'" % self.proj.desc) |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
546 self.view.set_footer_text(self.msg('really'), 'question') |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
547 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
548 return self |
54
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
549 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
550 class CreateProjectState(HandleUserInputState): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
551 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
552 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
553 'choose_proj': _(' Choose a project.'), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
554 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
555 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
556 def __init__(self, controller, view): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
557 super(CreateProjectState, self).__init__(controller, view, None, |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
558 controller.view.view.get_footer()) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
559 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
560 def exit(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
561 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
|
562 return PausedProjectsState(self.controller, self.view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
563 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
564 class AddProjectNameState(CreateProjectState): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
565 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
566 'choose_proj': _(' Choose a project.'), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
567 'proj_name': _('Insert new project name: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
568 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
569 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
570 def __init__(self, controller, view): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
571 controller.view.set_footer_text(self.msg('proj_name'), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
572 'question', 1) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
573 super(AddProjectNameState, self).__init__(controller, view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
574 self.view.frame.set_focus('footer') |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
575 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
576 def enter(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
577 project = self.footer.get_edit_text() |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
578 if project == '': |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
579 return self |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
580 return AddProjectKeyState(self.controller, self.view, project) |
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 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
583 class AddProjectKeyState(CreateProjectState): |
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 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
586 'proj_name': _('Insert new project name: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
587 'proj_key': _('Insert key for new project: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
588 } |
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 __init__(self, controller, view, project): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
591 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
|
592 'question', 1) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
593 super(AddProjectKeyState, self).__init__(controller, view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
594 self.view.frame.set_focus('footer') |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
595 self.project = project |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
596 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
597 def enter(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
598 key = self.footer.get_edit_text() |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
599 if key == '': |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
600 return self |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
601 return AddProjectDescriptionState(self.controller, self.view, |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
602 self.project, key) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
603 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
604 class AddProjectDescriptionState(CreateProjectState): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
605 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
606 'proj_description': _('Insert a description for project: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
607 'choose_proj': _(" Choose a project.") |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
608 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
609 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
610 def __init__(self, controller, view, project, key): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
611 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
|
612 'question', 1) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
613 super(AddProjectDescriptionState, self).__init__(controller, view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
614 self.view.frame.set_focus('footer') |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
615 self.project = project |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
616 self.key = key |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
617 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
618 def enter(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
619 description = self.footer.get_edit_text() |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
620 if description == '': |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
621 return self |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
622 self.controller.add_project(self.key, description) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
623 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
|
624 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
|
625 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
626 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
627 class EditEntryState(HandleUserInputState): |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
628 messages = { |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
629 'edit_entry': _('Edit entry text: '), |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
630 } |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
631 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
632 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
|
633 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
|
634 'question', True) |
73
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
635 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
|
636 None, view.footer) |
73
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
637 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
|
638 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
|
639 self.view.frame.set_focus('footer') |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
640 self.entry = entry |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
641 self.state = state |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
642 logger.debug("EditEntryState: Entry %s" % entry) |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
643 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
644 def enter(self): |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
645 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
|
646 if entry_desc == '': |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
647 return self |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
648 entry = self.entry |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
649 entry.desc = entry_desc |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
650 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
|
651 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
|
652 return self.exit() |
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 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
|
655 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
|
656 return DefaultEntryListState(self.state, self.controller, self.view) |