annotate getan/states.py @ 276:dd575513ee1b

Add new State method set_focus With most state changes a focus must be set to a different widget to receive the keyinput. This change will allow to override the set_focus method which is called when the State is created.
author Björn Ricks <bjoern.ricks@intevation.de>
date Fri, 12 Apr 2013 09:37:40 +0200
parents 60725e0bcddb
children 3d6315be2251
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
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
12 import 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
13 import signal
195
0c0d88ec53f9 Change coding style for imports
Björn Ricks <bjoern.ricks@intevation.de>
parents: 194
diff changeset
14
0c0d88ec53f9 Change coding style for imports
Björn Ricks <bjoern.ricks@intevation.de>
parents: 194
diff changeset
15 from datetime import datetime, timedelta
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
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 _
195
0c0d88ec53f9 Change coding style for imports
Björn Ricks <bjoern.ricks@intevation.de>
parents: 194
diff changeset
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):
197
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
23 """ Represents a State of Getan
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
24
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
25 A State can be used to handle user input. The user input handling is done in
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
26 three phases. First it is possible to filter keys that shouldn't be passed
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
27 to a widget in input_filter. Afterwards it is possible to redirect a key to
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
28 a specific widget in keypress. In the third phase it is possible to act on
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
29 user input which isn't handled by a widget yet. The corresponing method is
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
30 handle_input.
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
31
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
32 Normally handle_input should be used to act on user input and change a
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
33 state.
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
34 """
196
2c4cfc79632c Fix coding style for State class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 195
diff changeset
35
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
36 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
37 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
38
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
39 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
40 self.controller = controller
196
2c4cfc79632c Fix coding style for State class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 195
diff changeset
41 self.view = view
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
42 self.config = controller.get_config()
276
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
43 self.set_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
44
197
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
45 def input_filter(self, input, raw):
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
46 """Filters input that should not be passed to widget elements
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
47
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
48 By default no input is filtered and input is returned unchanged.
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
49 """
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
50 return input
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
51
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
52 def keypress(self, size, key):
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
53 """Redirects user input to the current view"""
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
54 self.view.keypress(size, key)
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
55
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
56 def handle_input(self, input):
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
57 """A derived State must implement handle_input"""
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
58 raise NotImplementedError()
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
59
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
60 def set_next_state(self, state):
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
61 """Sets the next state"""
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
62 self.controller.set_state(state)
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
63
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
64 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
65 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
66
276
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
67 def set_focus(self):
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
68 """ Override this method to set the focus when the state is created """
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
69 pass
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
70
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
71
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
72 class ProjectState(State):
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
73
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
74 def handle_input(self, input):
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
75 keys = self.config.get_keybinding()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
76 logger.debug("ProjectState: handle input '%r'" % input)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
77 if keys.get_switch_time_mode() in input:
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
78 self.view.switch_time_mode()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
79 return True
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
80
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
81 if keys.get_switch_project_order() in input:
142
d88240a3a065 Add global key to switch sorting of the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 139
diff changeset
82 self.view.switch_project_order()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
83 return True
142
d88240a3a065 Add global key to switch sorting of the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 139
diff changeset
84
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
85 if keys.get_switch_lists() in input:
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
86 if not self.controller.entries_view.rows:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
87 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
88 new_state = DefaultEntryListState(self, self.controller,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
89 self.controller.entries_view)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
90 self.set_next_state(new_state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
91 self.controller.view.set_focus(1)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
92 self.controller.entries_view.set_focus(0)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
93 return True
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
94
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
95
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 class PausedProjectsState(ProjectState):
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
97
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
98 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
99 '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
100 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
101
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
102 def handle_input(self, key):
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
103 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
104 keys = self.config.get_keybinding()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
105 ret = super(PausedProjectsState, self).handle_input(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
106 if ret:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
107 return True
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
108
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
109 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
110 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
111
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
112 if keys.get_insert() in key:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
113 state = AddProjectKeyState(self.controller, self.view)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
114 self.set_next_state(state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
115 return True
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
116
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
117 if keys.get_escape() in key:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
118 state = ExitState(self.controller, self.view)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
119 self.set_next_state(state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
120 return True
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
121
179
3374ff7e7388 Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 177
diff changeset
122 if keys.get_project_edit() in key:
3374ff7e7388 Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 177
diff changeset
123 proj = self.view.item_in_focus()
3374ff7e7388 Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 177
diff changeset
124 if not proj:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
125 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
126 state = ProjectEditKeyState(self.controller, self.view, proj)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
127 self.set_next_state(state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
128 return True
179
3374ff7e7388 Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 177
diff changeset
129
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
130 else:
98
7c3f43bfc0a8 Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
131 if len(key) > 0 and len(key[0]) == 1:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
132 state = SelectProjectState(self.controller, self.view)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
133 self.set_next_state(state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
134 return state.handle_input(key)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
135 return False
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
136
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
137 def select(self):
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
138 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
139 self.controller.start_project(proj)
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
140 state = RunningProjectsState(self.controller, self.view, proj)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
141 self.set_next_state(state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
142 return True
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
143
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
144
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
145 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
146
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
147 def __init__(self, controller, view):
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
148 super(SelectProjectState, self).__init__(controller, view)
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
149 self.proj_keys = ""
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
150 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
151
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
152 def reset(self):
231
2c944fd2cd0c Reset footer after project is selected instead of clearing the footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 207
diff changeset
153 self.view.reset_footer()
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
154
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
155 def set_footer_text(self):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
156 self.view.set_footer_text("Selecting project from key: %s" % \
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
157 self.proj_keys, "running")
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
158
155
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
159 def check_key(self, key):
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
160 return len(self.controller.find_projects_by_key(key))
155
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
161
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
162 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
163 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
164 if proj:
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
165 self.reset()
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
166 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
167 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
168 self.controller.update_entries(
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
169 self.view.item_in_focus())
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
170 self.set_next_state(RunningProjectsState(self.controller, self.view,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
171 proj))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
172 return True
95
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
173
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
174 def handle_input(self, key):
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
175 keys = self.config.get_keybinding()
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
176 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
177 self.reset()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
178 self.set_next_state(PausedProjectsState(self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
179 return True
139
6a19e721fbd1 Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
180
6a19e721fbd1 Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
181 if 'backspace' in key:
6a19e721fbd1 Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
182 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
183 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
184 self.set_footer_text()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
185 return True
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
186
155
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
187 if keys.get_enter() in key:
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
188 return self.select_project()
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
189
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
190 else:
98
7c3f43bfc0a8 Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
191 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
192 proj_key = self.proj_keys + key[0]
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
193 num = self.check_key(proj_key)
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
194 if num > 0:
155
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
195 self.proj_keys += key[0]
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
196 self.set_footer_text()
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
197 if num == 1:
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
198 # run project directly
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
199 return self.select_project()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
200 return False
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
201
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
202
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 class ExitState(ProjectState):
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
204
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 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
206 'quit' : _(" Really quit? (y/n)"),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
207 '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
208 }
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 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
211 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
212 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
213
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
214 def handle_input(self, 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
215 logger.debug("ExitState: handle key '%r'" % key)
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
216 ret = super(ExitState, self).handle_input(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
217 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
218 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
219
9c4e8ba3c4fa 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 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
221 self.controller.exit()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
222 return True
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
223
9c4e8ba3c4fa 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 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
225 self.controller.view.set_footer_text(self.msg('choose'), 'question')
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
226 self.set_next_state(PausedProjectsState(self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
227 return True
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
228
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
229 return False
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
230
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
231
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
232 class RunningProjectsState(ProjectState):
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
233
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
234 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
235 'description': _("Enter a description: "),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
236 '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
237 '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
238 '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
239 '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
240 '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
241 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
242
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
243 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
244 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
245
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
246 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
247 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
248 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
249 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
250 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
251
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
252 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
253 proj = self.project
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
254 keys = self.config.get_keybinding()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
255
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 134
diff changeset
256 if not proj:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 134
diff changeset
257 return
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
258
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
259 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
260 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
261 (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
262 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
263 'running')
194
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 179
diff changeset
264 self.controller.loop.draw_screen()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
265 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
266 else:
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
267 self.view.set_footer_text(self.msg('paused') %
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
268 (human_time((datetime.now() - self.break_start).seconds),
171
a34693c5905f Use common name scheme for keybinding key names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 170
diff changeset
269 self.msg('continue') % keys.get_project_pause()),
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
270 'paused_running')
194
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 179
diff changeset
271 self.controller.loop.draw_screen()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
272
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
273 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
274 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
275
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
276 def handle_input(self, 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
277 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
278 keys = self.config.get_keybinding()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
279 ret = super(RunningProjectsState, self).handle_input(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 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
281 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
282
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
283 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
284 return self.stop()
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
285
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
286 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
287 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
288 '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
289 self.view.frame.set_focus('footer')
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
290 self.set_next_state(AddTimeState(self.controller, self.view, self))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
291 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
292
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
293 if keys.get_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
294 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
295 '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
296 self.view.frame.set_focus('footer')
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
297 self.set_next_state(SubtractTimeState(self.controller, self.view,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
298 self))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
299 return True
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
300
171
a34693c5905f Use common name scheme for keybinding key names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 170
diff changeset
301 if keys.get_project_pause() in key:
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
302 if not self.break_start:
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
303 self.break_start = datetime.now()
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
304 else:
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
305 self.view._total_time()
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
306 proj = self.project
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
307 if proj:
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
308 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
309 self.break_start = None
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
310 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
311 signal.alarm(1)
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
312 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
313 return False
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
314
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
315 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
316 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
317 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
318 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
319 proj = self.project
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
320 if proj:
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
321 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
322 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
323 self.controller.view.get_frame().set_focus('footer')
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
324 self.set_next_state(DescriptionProjectsState(self.controller, self.view,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
325 self, self.controller.view.get_frame().get_footer()))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
326 return True
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
327
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
328
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
329 class HandleUserInputState(State):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
330
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
331 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
332 super(HandleUserInputState, self).__init__(controller, view)
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
333 self.state = state
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
334 self.footer = 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
335
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
336 def handle_input(self, 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
337 logger.debug("HandleUserInputState: handle key '%r'" % key)
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
338 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
339
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
340 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
341 return self.exit()
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
342 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
343 return self.enter()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
344 return False
39
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
345
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
346 def enter(self):
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
347 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
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 def exit(self):
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
350 self.set_next_state(self.state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
351 return True
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
352
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
353
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
354 class BaseTimeState(HandleUserInputState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
355
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
356 def __init__(self, controller, view, running_state):
44
f10126519797 Fixed super call
Sascha L. Teichmann <teichmann@intevation.de>
parents: 43
diff changeset
357 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
358 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
359 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
360
9c4e8ba3c4fa 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 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
362 self.view._total_time()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
363 return super(BaseTimeState, self).exit()
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
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 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
366 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
367 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
368 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
369 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
370 "adding/subtracting time: '%r'" % key)
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
371 return True
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
372
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 class AddTimeState(BaseTimeState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
375
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 def enter(self):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
377 minutes = safe_int(self.view.frame.get_footer().get_edit_text())
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
378 project = self.project
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
379 project.start -= timedelta(minutes=minutes)
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
380 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
381 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
382 % (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
383 self.view._total_time()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
384 self.set_next_state(self.state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
385 return True
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
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
387
9c4e8ba3c4fa 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 class SubtractTimeState(BaseTimeState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
389
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
390 def enter(self):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
391 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
392 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
393 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
394 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
395 return self.state
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
396 project = self.project
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
397 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
398 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
399 logger.info("SubtractTimeState: subtract %d minutes from project '%s'"
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
400 % (minutes, project.desc))
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 self.view._total_time()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
402 self.set_next_state(self.state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
403 return True
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
404
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 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
407 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
408 '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
409 }
9c4e8ba3c4fa 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
246
2b2738c8c130 Redirect key event to GetanView Frame in DescriptionProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 243
diff changeset
411 def keypress(self, size, key):
2b2738c8c130 Redirect key event to GetanView Frame in DescriptionProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 243
diff changeset
412 """ Direct key to frame of GetanView """
2b2738c8c130 Redirect key event to GetanView Frame in DescriptionProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 243
diff changeset
413 self.controller.view.frame.keypress(size, key)
2b2738c8c130 Redirect key event to GetanView Frame in DescriptionProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 243
diff changeset
414
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
415 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
416 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
417 if text == '':
247
ee04fc66891f Return True here instead of self
Björn Ricks <bjoern.ricks@intevation.de>
parents: 246
diff changeset
418 return True
30
fea63a224065 Stop still running projects before getan quits - even if getan crashes.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 27
diff changeset
419 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
420 self.controller.view.set_footer_text(self.msg('choose_proj'), 'question')
248
0219b1d63c6c Set focus to GetanView frame body when changing to PausedProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 247
diff changeset
421 self.controller.view.set_focus("body")
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
422 self.set_next_state(PausedProjectsState(self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
423 return True
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
424
9c4e8ba3c4fa 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 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
426 project = self.view.item_in_focus()
43
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
427 if project:
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
428 time = (datetime.now() - project.start).seconds
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
429 self.state.sec = time
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
430 signal.signal(signal.SIGALRM, self.state.handle_signal)
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
431 signal.alarm(1)
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
432 return super(DescriptionProjectsState, self).exit()
106
a0779fb2ef4d Remove space
Björn Ricks <bjoern.ricks@intevation.de>
parents: 105
diff changeset
433
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
434
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
435 class EntryListState(State):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
436
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
437 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
438 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
439 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
440
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
441 def handle_input(self, 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
442 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
443 keys = self.config.get_keybinding()
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
444
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
445 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
446 self.view.clear()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
447 self.set_next_state(self.projectlist_state)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
448 self.controller.view.set_focus(0)
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
449 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
450
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
451 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
452 return self.select()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
453 return False
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
454
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
455 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
456 self.view.select()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
457 return True
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
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 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
460 e_len = self.view.row_count()
235
263fe6ee0e4e Fix crash when deleting an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 232
diff changeset
461 f = self.view.get_focus_pos()
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 134
diff changeset
462 if f >= e_len:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 134
diff changeset
463 f = e_len - 1
207
910136052631 Fix setting the focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 206
diff changeset
464 self.view.set_focus(f)
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
465
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 class DefaultEntryListState(EntryListState):
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
468
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
469 def handle_input(self, key):
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
470 logger.info("Handling DefaultEntryListState input")
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
471 ret = super(DefaultEntryListState, self).handle_input(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
472 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
473 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
474
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
475 keys = self.config.get_keybinding()
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
476 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
477 self.view.clear()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
478 self.set_next_state(self.projectlist_state)
236
8caa74da6a53 Reset focus to project list when pressing escape in entry list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 235
diff changeset
479 self.controller.view.set_focus(0)
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
480 return True
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
481
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
482 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
483 if self.view.selection:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
484 self.set_next_state(DeleteEntryState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
485 self.controller, self.view))
102
cd2456d0589e Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents: 101
diff changeset
486 else:
cd2456d0589e Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents: 101
diff changeset
487 entry = self.view.item_in_focus()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
488 self.set_next_state(DeleteEntryState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
489 self.controller, self.view, [entry]))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
490 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
491
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
492 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
493 if self.view.selection:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
494 self.set_next_state(MoveEntryState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
495 self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
496 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
497
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
498 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
499 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
500 if entry:
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
501 self.set_next_state(EditEntryState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
502 self.controller, self.view, entry))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
503 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
504
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
505 return False
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
506
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
507
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
508 class DeleteEntryState(EntryListState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
509
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
510 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
511 '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
512 }
9c4e8ba3c4fa 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
100
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
514 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
515 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
516 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
517 self.entries = entries
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
518 if not self.entries:
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
519 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
520
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
521 def handle_input(self, 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
522 if 'y' in key:
100
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
523 if self.entries:
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
524 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
525 self.renew_focus()
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
526 self.view.set_footer_text("", 'entry_footer')
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
527 self.set_next_state(DefaultEntryListState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
528 self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
529 return True
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
9c4e8ba3c4fa 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 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
532 self.view.set_footer_text("", 'entry_footer')
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
533 self.set_next_state(DefaultEntryListState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
534 self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
535 return True
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
536
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
537 return False
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
538
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
539
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
540 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
541 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
542 'project': _(" Into which project do you want to move these entries?"),
103
9546120437c7 Fix question
Björn Ricks <bjoern.ricks@intevation.de>
parents: 102
diff changeset
543 '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
544 }
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 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
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 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
549 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
550 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
551 self.proj_keys = ""
133
78992300f421 Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 130
diff changeset
552 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
553
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
554 def set_project_footer(self):
133
78992300f421 Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 130
diff changeset
555 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
556 "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
557
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
558 def reset_project_footer(self):
133
78992300f421 Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 130
diff changeset
559 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
560
169
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
561 def check_key(self, key):
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
562 return len(self.controller.find_projects_by_key(key))
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
563
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
564 def select_project(self):
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
565 proj = self.controller.project_by_key(self.proj_keys)
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
566 if proj:
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
567 self.proj = proj
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
568 self.reset_project_footer()
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
569 logger.debug("MoveEntryState: prepared entries to be " \
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
570 "moved to project '%s'" % self.proj.desc)
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
571 self.view.set_footer_text(self.msg('really'), 'question')
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
572
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
573
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
574 def handle_input(self, key):
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
575 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
576 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
577 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
578 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
579 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
580 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
581 self.proj = None
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
582 self.set_next_state(DefaultEntryListState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
583 self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
584 return True
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
585
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
586 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
587 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
588 self.reset_project_footer()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
589 self.set_next_state(DefaultEntryListState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
590 self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
591 return True
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
592
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
593 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
594 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
595 self.reset_project_footer()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
596 self.set_next_state(DefaultEntryListState(self.projectlist_state,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
597 self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
598 return True
243
9bf0ad952c68 Add newline
Björn Ricks <bjoern.ricks@intevation.de>
parents: 236
diff changeset
599
134
c80c7fc6a8fc Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 133
diff changeset
600 if 'backspace' in key:
c80c7fc6a8fc Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 133
diff changeset
601 if len(self.proj_keys) > 0:
c80c7fc6a8fc Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 133
diff changeset
602 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
603 self.set_project_footer()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
604 return True
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
605
169
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
606 if keys.get_enter() in key and self.proj is None:
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
607 self.select_project()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
608 return True
169
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
609
104
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
610 if len(key) > 0 and len(key[0]) == 1 and self.proj is None:
169
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
611 proj_key = self.proj_keys + key[0]
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
612 num = self.check_key(proj_key)
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
613 if num > 0:
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
614 self.proj_keys = proj_key
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
615 self.set_project_footer()
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
616 if num == 1:
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
617 self.select_project()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
618 return True
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
619
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
620 return False
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
621
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
622
173
a5319bb1ac13 Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 172
diff changeset
623 class AlterProjectState(HandleUserInputState):
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
624
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
625 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
626 'choose_proj': _(' Choose a project.'),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
627 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
628
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
629 def __init__(self, controller, view):
173
a5319bb1ac13 Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 172
diff changeset
630 super(AlterProjectState, self).__init__(controller, view, None,
262
438f6ce81e3d Fix don't crash when adding a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 253
diff changeset
631 controller.view.get_frame().get_footer())
267
9fce005e5fc6 Redirect keyinput to GetanView footer when adding a new project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 262
diff changeset
632 self.controller.view.set_focus('footer')
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
633
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
634 def exit(self):
268
06157568d287 Use kwarg for edit and boolean instead of int
Björn Ricks <bjoern.ricks@intevation.de>
parents: 267
diff changeset
635 self.controller.view.set_footer_text(self.msg('choose_proj'),
06157568d287 Use kwarg for edit and boolean instead of int
Björn Ricks <bjoern.ricks@intevation.de>
parents: 267
diff changeset
636 'question')
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
637 self.set_next_state(PausedProjectsState(self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
638 return True
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
639
267
9fce005e5fc6 Redirect keyinput to GetanView footer when adding a new project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 262
diff changeset
640 def keypress(self, size, key):
9fce005e5fc6 Redirect keyinput to GetanView footer when adding a new project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 262
diff changeset
641 """ Direct key to frame of GetanView """
9fce005e5fc6 Redirect keyinput to GetanView footer when adding a new project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 262
diff changeset
642 self.controller.view.frame.keypress(size, key)
9fce005e5fc6 Redirect keyinput to GetanView footer when adding a new project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 262
diff changeset
643
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
644
173
a5319bb1ac13 Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 172
diff changeset
645 class AddProjectKeyState(AlterProjectState):
172
b8abca7714fd Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 171
diff changeset
646
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
647 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
648 'choose_proj': _(' Choose a project.'),
172
b8abca7714fd Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 171
diff changeset
649 'proj_key': _('Insert key for new project: '),
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
650 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
651
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
652 def __init__(self, controller, view):
268
06157568d287 Use kwarg for edit and boolean instead of int
Björn Ricks <bjoern.ricks@intevation.de>
parents: 267
diff changeset
653 controller.view.set_footer_text(self.msg('proj_key'), 'question',
06157568d287 Use kwarg for edit and boolean instead of int
Björn Ricks <bjoern.ricks@intevation.de>
parents: 267
diff changeset
654 edit=True)
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
655 super(AddProjectKeyState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
656
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
657 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
658 key = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
659 if key == '':
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
660 return True
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
661 self.set_next_state(AddProjectDescriptionState(self.controller,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
662 self.view, key))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
663 return True
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
664
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
665
173
a5319bb1ac13 Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 172
diff changeset
666 class AddProjectDescriptionState(AlterProjectState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
667
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
668 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
669 'proj_description': _('Insert a description for project: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
670 'choose_proj': _(" Choose a project.")
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
671 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
672
172
b8abca7714fd Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 171
diff changeset
673 def __init__(self, controller, view, key):
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
674 controller.view.set_footer_text(self.msg('proj_description'),
270
8a3dd18a0b61 Update coding style
Björn Ricks <bjoern.ricks@intevation.de>
parents: 269
diff changeset
675 'question', edit=True)
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
676 super(AddProjectDescriptionState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
677 self.key = key
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
678
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
679 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
680 description = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
681 if description == '':
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
682 return self
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
683 self.controller.add_project(self.key, description)
271
60725e0bcddb Use exit when returning from adding a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 270
diff changeset
684 self.exit()
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
685 return True
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
686
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
687
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
688 class EditEntryState(HandleUserInputState):
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
689 messages = {
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
690 'edit_entry': _('Edit entry text: '),
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
691 }
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
692
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
693 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
694 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
695 'question', True)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
696 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
697 None, view.footer)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
698 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
699 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
700 self.view.frame.set_focus('footer')
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
701 self.entry = entry
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
702 self.state = state
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
703 logger.debug("EditEntryState: Entry %s" % entry)
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
704
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
705 def enter(self):
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
706 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
707 if entry_desc == '':
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
708 return self
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
709 entry = self.entry
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
710 entry.desc = entry_desc
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
711 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
712 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
713 return self.exit()
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
714
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
715 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
716 self.view.set_footer_text("", 'entry_footer', False)
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
717 self.set_next_state(DefaultEntryListState(self.state, self.controller,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
718 self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
719 return True
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
720
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
721
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
722 class ProjectEditKeyState(AlterProjectState):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
723
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
724 messages = {
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
725 'proj_key': _('Insert key for project: '),
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
726 'proj_description': _('Insert description for project: '),
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
727 'choose_proj': _(" Choose a project.")
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
728 }
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
729
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
730 def __init__(self, controller, view, project):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
731 controller.view.set_footer_text(self.msg('proj_key'),
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
732 'question', 1)
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
733 super(ProjectEditKeyState, self).__init__(controller, view)
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
734 self.project = project
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
735 self.view.frame.set_focus('footer')
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
736 self.footer.set_edit_text(project.key)
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
737 self.footer.set_edit_pos(len(self.footer.edit_text))
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
738
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
739 def enter(self):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
740 key = self.footer.get_edit_text()
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
741 if key == '':
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
742 return True
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
743 self.project.key = key
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
744 self.set_next_state(ProjectEditDescriptionState(self.controller,
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
745 self.view, self.project))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
746 return True
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
747
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
748
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
749 class ProjectEditDescriptionState(AlterProjectState):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
750
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
751 messages = {
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
752 "proj_description" : _("Insert description for project: "),
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
753 "choose_proj" : _(" Choose a project.")
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
754 }
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
755
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
756 def __init__(self, controller, view, project):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
757 controller.view.set_footer_text(self.msg("proj_description"),
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
758 "question", 1)
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
759 super(ProjectEditDescriptionState, self).__init__(controller, view)
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
760 self.project = project
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
761 self.view.frame.set_focus("footer")
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
762 self.footer.set_edit_text(project.desc)
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
763 self.footer.set_edit_pos(len(self.footer.edit_text))
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
764
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
765 def enter(self):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
766 description = self.footer.get_edit_text()
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
767 if description == '':
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
768 return self
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
769 self.project.desc = description
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
770 self.controller.update_project(self.project)
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
771 self.controller.view.set_footer_text(self.msg('choose_proj'), 'question')
205
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
772 self.set_next_state(PausedProjectsState(self.controller, self.view))
a1b00ffea269 Use handle_input instead of keypress to act on user input in States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 197
diff changeset
773 return True
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)