annotate getan/states.py @ 528:210bd796829e

Updates the description of an entry * When describing an entry, you can now use the arrow keys to select and edit old descriptions. * bumps to 3.2.dev1
author Magnus Schieder <mschieder@intevation.de>
date Mon, 03 Jun 2019 20:19:17 +0200
parents f5e1a78173cb
children 93e740bc730f
rev   line source
482
999a438474f2 Changed Hashbangs to python3.
Magnus Schieder <mschieder@intevation.de>
parents: 479
diff changeset
1 #!/usr/bin/env python3
23
9c4e8ba3c4fa 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>
385
cf0406ed424a Update copyright and remove empty lines
Björn Ricks <bjoern.ricks@intevation.de>
parents: 384
diff changeset
5 # (c) 2011, 2012, 2014 by Björn Ricks <bjoern.ricks@intevation.de>
488
463894654d77 Prepares for release 3.0
Magnus Schieder <mschieder@intevation.de>
parents: 482
diff changeset
6 # (c) 2017, 2018 Intevation GmbH
463894654d77 Prepares for release 3.0
Magnus Schieder <mschieder@intevation.de>
parents: 482
diff changeset
7 # Authors:
463894654d77 Prepares for release 3.0
Magnus Schieder <mschieder@intevation.de>
parents: 482
diff changeset
8 # * Bernhard Reiter <Bernhard.Reiter@intevation.de>
463894654d77 Prepares for release 3.0
Magnus Schieder <mschieder@intevation.de>
parents: 482
diff changeset
9 # * Magnus Schieder <magnus.schieder@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
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 # 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
12 # 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
13
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
14 import 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
15 import signal
195
0c0d88ec53f9 Change coding style for imports
Björn Ricks <bjoern.ricks@intevation.de>
parents: 194
diff changeset
16
0c0d88ec53f9 Change coding style for imports
Björn Ricks <bjoern.ricks@intevation.de>
parents: 194
diff changeset
17 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
18
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
19 from getan.resources import gettext as _
195
0c0d88ec53f9 Change coding style for imports
Björn Ricks <bjoern.ricks@intevation.de>
parents: 194
diff changeset
20 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
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 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
23
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
24
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
25 class State(object):
197
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
26 """ Represents a State of Getan
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
27
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
28 A State can be used to handle user input. The user input handling is done
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
29 in three phases. First it is possible to filter keys that shouldn't be
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
30 passed to a widget in input_filter. Afterwards it is possible to redirect
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
31 a key to a specific widget in keypress. In the third phase it is possible
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
32 to act on user input which isn't handled by a widget yet. The corresponing
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
33 method is handle_input.
197
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
34
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
35 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
36 state.
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
37 """
196
2c4cfc79632c Fix coding style for State class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 195
diff changeset
38
23
9c4e8ba3c4fa 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 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
40 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
41
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
42 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
43 self.controller = controller
196
2c4cfc79632c Fix coding style for State class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 195
diff changeset
44 self.view = view
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
45 self.config = controller.get_config()
276
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
46 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
47
197
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
48 def input_filter(self, input, raw):
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
49 """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
50
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
51 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
52 """
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
53 return input
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
54
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
55 def keypress(self, size, key):
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
56 """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
57 self.view.keypress(size, key)
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
58
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
59 def handle_input(self, input):
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
60 """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
61 raise NotImplementedError()
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
62
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
63 def set_next_state(self, state):
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
64 """Sets the next state"""
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
65 self.controller.set_state(state)
2eb2bbf042b3 Inplement new State user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 196
diff changeset
66
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
67 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
68 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
69
276
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
70 def set_focus(self):
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
71 """ 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
72 pass
dd575513ee1b Add new State method set_focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 271
diff changeset
73
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
74
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
75 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
76
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 def handle_input(self, input):
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
78 keys = self.config.get_keybinding()
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 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
80 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
81 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
82 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
83
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
84 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
85 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
86 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
87
479
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
88 if 'ctrl l' in input:
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
89 self.controller.redraw()
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
90 return True
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
91
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
92 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
93 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
94 return True
469
050ffdec60d9 Fix the orientation problem
Magnus Schieder <mschieder@intevation.de>
parents: 468
diff changeset
95 self.view.highlight_open_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
96 new_state = DefaultEntryListState(self, self.controller,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
97 self.controller.entries_view)
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
98 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
99 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
100
277
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
101 def set_focus(self):
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
102 self.controller.view.set_focus("projects")
303
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
103 self.view.frame.set_focus("body")
277
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
104
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
105
23
9c4e8ba3c4fa 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 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
107
23
9c4e8ba3c4fa 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 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
109 '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
110 }
9c4e8ba3c4fa 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
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
112 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
113 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
114 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
115 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
116 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
117 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
118
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
119 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
120 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
121
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
122 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
123 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
124 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
125 return True
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
126
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
127 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
128 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
129 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
130 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
131
179
3374ff7e7388 Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 177
diff changeset
132 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
133 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
134 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
135 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
136 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
137 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
138 return True
179
3374ff7e7388 Bind project edit key to the actual ProjectEditKeyState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 177
diff changeset
139
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
140 else:
98
7c3f43bfc0a8 Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
141 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
142 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
143 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
144 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
145 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
146
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
147 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
148 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
149 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
150 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
151 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
152 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
153
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
154
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
155 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
156
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
157 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
158 super(SelectProjectState, self).__init__(controller, view)
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
159 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
160 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
161
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
162 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
163 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
164
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
165 def set_footer_text(self):
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
166 self.view.set_footer_text("Selecting project from key: %s" %
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
167 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
168
155
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
169 def check_key(self, key):
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
170 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
171
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
172 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
173 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
174 if proj:
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
175 self.reset()
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
176 self.view.select_project(proj)
307
b97d18d58f85 We already have the project here therefore pass it directly to the methods
Björn Ricks <bjoern.ricks@intevation.de>
parents: 303
diff changeset
177 self.controller.start_project(proj)
b97d18d58f85 We already have the project here therefore pass it directly to the methods
Björn Ricks <bjoern.ricks@intevation.de>
parents: 303
diff changeset
178 self.controller.update_entries(proj)
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
179 self.set_next_state(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
180 RunningProjectsState(self.controller, self.view,
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
181 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
182 return True
95
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
183
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
184 def handle_input(self, key):
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
185 keys = self.config.get_keybinding()
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
186 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
187 self.reset()
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
188 self.set_next_state(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
189 PausedProjectsState(self.controller, self.view))
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
190 return True
139
6a19e721fbd1 Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
191
479
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
192 if 'ctrl l' in key:
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
193 self.controller.redraw()
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
194 return True
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
195
139
6a19e721fbd1 Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
196 if 'backspace' in key:
6a19e721fbd1 Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
197 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
198 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
199 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
200 return True
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
201
155
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
202 if keys.get_enter() in key:
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
203 return self.select_project()
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
204
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
205 else:
98
7c3f43bfc0a8 Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
206 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
207 proj_key = self.proj_keys + key[0]
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
208 num = self.check_key(proj_key)
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
209 if num > 0:
155
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
210 self.proj_keys += key[0]
497ed1991e85 Modify project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 152
diff changeset
211 self.set_footer_text()
167
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
212 if num == 1:
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
213 # run project directly
be9acb00cd97 Update project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 155
diff changeset
214 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
215 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
216
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
217
23
9c4e8ba3c4fa 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 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
219
23
9c4e8ba3c4fa 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 messages = {
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
221 'quit': _(" Really quit? (y/n)"),
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
222 '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
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
9c4e8ba3c4fa 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 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
226 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
227 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
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 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
230 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
231 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
232 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
233 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
234
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
235 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
236 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
237 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
238
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
239 if 'n' in key or 'N' in key:
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
240 self.controller.view.set_footer_text(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
241 self.msg('choose'), 'question')
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
242 self.set_next_state(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
243 PausedProjectsState(self.controller, self.view))
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
244 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
245
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
246 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
247
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
248
9c4e8ba3c4fa 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 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
250
23
9c4e8ba3c4fa 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 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
252 'description': _("Enter a description: "),
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
253 'add_time': _("Enter time to add [min]: "),
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
254 'min_time': _("Enter time to subtract [min]: "),
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
255 'continue': _("Press '%s' to continue."),
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
256 'running': _("Running ( %s ) on '%s'."),
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
257 '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
258 }
9c4e8ba3c4fa 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
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
260 sec = 0
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
261 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
262
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
263 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
264 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
265 self.project = project
309
bff4877c3e58 Deactivate selection of projects when changing to RunningProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 308
diff changeset
266 self.view.deactivate_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
267 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
268 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
269
9c4e8ba3c4fa 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 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
271 proj = self.project
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
272 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
273
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 134
diff changeset
274 if not proj:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 134
diff changeset
275 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
276
23
9c4e8ba3c4fa 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 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
278 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
279 (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
280 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
281 'running')
194
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 179
diff changeset
282 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
283 self.sec = self.sec + 1
501
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
284 # The time is stored every minute to be able to restore them in
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
285 # case of a crash.
499
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 488
diff changeset
286 if self.sec % 60 == 0:
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 488
diff changeset
287 self.controller.save_recovery_data()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
288 else:
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
289 self.view.set_footer_text(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
290 self.msg('paused') %
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
291 (human_time((datetime.now() - self.break_start).seconds),
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
292 self.msg(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
293 '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
294 'paused_running')
194
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 179
diff changeset
295 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
296
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
297 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
298 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
299
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
300 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
301 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
302 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
303 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
304 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
305 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
306
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
307 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
308 return self.stop()
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
309
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
310 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
311 self.view.set_footer_text(self.msg('add_time'),
384
3d428f8d6ee5 Update calling set_footer_text
Björn Ricks <bjoern.ricks@intevation.de>
parents: 316
diff changeset
312 'question', edit=True)
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
313 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
314 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
315
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
316 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
317 self.view.set_footer_text(self.msg('min_time'),
384
3d428f8d6ee5 Update calling set_footer_text
Björn Ricks <bjoern.ricks@intevation.de>
parents: 316
diff changeset
318 'question', edit=True)
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
319 self.set_next_state(SubtractTimeState(self.controller, self.view,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
320 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
321 return True
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
322
171
a34693c5905f Use common name scheme for keybinding key names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 170
diff changeset
323 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
324 if not self.break_start:
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
325 self.break_start = datetime.now()
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
326 else:
278
96037ad10cff Fix showing the total time in the project list footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 277
diff changeset
327 self.view.show_total_time()
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
328 proj = self.project
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
329 if proj:
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
330 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
331 self.break_start = None
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
332 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
333 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
334 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
335 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
336
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
337 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
338 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
339 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
340 proj = self.project
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
341 if proj:
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
342 proj.start += datetime.now() - self.break_start
277
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
343 self.controller.view.set_footer_text(self.msg('description'),
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
344 'question', edit=True)
309
bff4877c3e58 Deactivate selection of projects when changing to RunningProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 308
diff changeset
345 self.view.enable_selection()
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
346 self.set_next_state(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
347 DescriptionProjectsState(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
348 self.controller, self.view,
308
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
349 self, self.controller.view.get_frame().get_footer(),
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
350 self.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
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 HandleUserInputState(State):
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, state, footer):
150
7ab5b887a7c5 Always call super constructor of states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 145
diff changeset
357 super(HandleUserInputState, self).__init__(controller, view)
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
358 self.state = state
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
359 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
360
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
361 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
362 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
363 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
364
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
365 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
366 return self.exit()
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
367 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
368 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
369 return False
39
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
370
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
371 def enter(self):
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
372 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
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 def exit(self):
303
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
375 # restore old focus
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
376 self.state.set_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
377 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
378 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
379
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
380
9c4e8ba3c4fa 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 class BaseTimeState(HandleUserInputState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
382
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
383 def __init__(self, controller, view, running_state):
44
f10126519797 Fixed super call
Sascha L. Teichmann <teichmann@intevation.de>
parents: 43
diff changeset
384 super(BaseTimeState, self).__init__(controller, view, running_state,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
385 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
386 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
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 def exit(self):
278
96037ad10cff Fix showing the total time in the project list footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 277
diff changeset
389 self.view.show_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
390 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
391
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
392 def insert(self, key):
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
393 if key[0] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
394 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
395 else:
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
396 logger.debug("BaseTimeState: invalid character for "
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
397 "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
398 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
399
277
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
400 def set_focus(self):
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
401 self.controller.view.set_focus("projects")
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
402 self.view.frame.set_focus("footer")
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
403
23
9c4e8ba3c4fa 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 class AddTimeState(BaseTimeState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
406
23
9c4e8ba3c4fa 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 def enter(self):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
408 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
409 project = self.project
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
410 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
411 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
412 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
413 % (minutes, project.desc))
278
96037ad10cff Fix showing the total time in the project list footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 277
diff changeset
414 self.view.show_total_time()
303
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
415 # set focus to the original element
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
416 self.state.set_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
417 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
418 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
419
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
420
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
421 class SubtractTimeState(BaseTimeState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
422
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
423 def enter(self):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
424 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
425 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
426 if sec > self.state.sec:
278
96037ad10cff Fix showing the total time in the project list footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 277
diff changeset
427 self.view.show_total_time()
303
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
428 # set focus to the original element
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
429 self.state.set_focus()
294
fdd086acdf9b Set correct next state if to be subtracted seconds are greater then the actual
Björn Ricks <bjoern.ricks@intevation.de>
parents: 286
diff changeset
430 self.set_next_state(self.state)
fdd086acdf9b Set correct next state if to be subtracted seconds are greater then the actual
Björn Ricks <bjoern.ricks@intevation.de>
parents: 286
diff changeset
431 return False
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
432 project = self.project
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
433 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
434 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
435 logger.info("SubtractTimeState: subtract %d minutes from project '%s'"
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
436 % (minutes, project.desc))
278
96037ad10cff Fix showing the total time in the project list footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 277
diff changeset
437 self.view.show_total_time()
303
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
438 # set focus to the original element
c75eed90ae01 Set focus to project list body when changing from adding and subtracting time
Björn Ricks <bjoern.ricks@intevation.de>
parents: 296
diff changeset
439 self.state.set_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
440 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
441 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
442
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
443
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
444 class DescriptionProjectsState(HandleUserInputState):
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
445
279
2cef4ba1207a Add docstring to DescriptionProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 278
diff changeset
446 """ Adds a description to a stopped running project """
2cef4ba1207a Add docstring to DescriptionProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 278
diff changeset
447
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
448 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
449 '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
450 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
451
308
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
452 def __init__(self, controller, view, state, footer, project):
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
453 super(DescriptionProjectsState, self).__init__(controller, view, state,
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
454 footer)
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
455 self.project = project
528
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
456 self.history_position = - 1
308
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
457
246
2b2738c8c130 Redirect key event to GetanView Frame in DescriptionProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 243
diff changeset
458 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
459 """ Direct key to frame of GetanView """
528
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
460
246
2b2738c8c130 Redirect key event to GetanView Frame in DescriptionProjectsState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 243
diff changeset
461 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
462
528
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
463 entries = self.project.backend.load_entries(self.project.id)
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
464 if key == 'up':
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
465 if self.history_position < len(entries) - 1:
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
466 self.history_position = self.history_position + 1
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
467 self.controller.view.frame.footer.set_edit_text(
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
468 entries[self.history_position].desc)
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
469 self.controller.view.frame.footer.set_edit_pos(
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
470 len(entries[self.history_position].desc))
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
471
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
472 if key == 'down':
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
473 if self.history_position >= 0:
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
474 self.history_position = self.history_position - 1
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
475 if self.history_position == -1:
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
476 self.controller.view.frame.footer.set_edit_text("")
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
477 self.controller.view.frame.footer.set_edit_pos(0)
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
478 else:
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
479 self.controller.view.frame.footer.set_edit_text(
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
480 entries[self.history_position].desc)
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
481 self.controller.view.frame.footer.set_edit_pos(
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
482 len(entries[self.history_position].desc))
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
483
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
484
210bd796829e Updates the description of an entry
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
485
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
486 def 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
487 text = self.footer.get_edit_text()
30
fea63a224065 Stop still running projects before getan quits - even if getan crashes.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 27
diff changeset
488 self.controller.stop_project(text)
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
489 self.controller.view.set_footer_text(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
490 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
491 self.set_next_state(PausedProjectsState(self.controller, self.view))
286
96843aedcf5e Update rows when stopping a running project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 282
diff changeset
492 self.view.update_rows()
280
44a5fe190ab6 Show total when a entry is changed
Björn Ricks <bjoern.ricks@intevation.de>
parents: 279
diff changeset
493 self.view.show_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
494 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
495
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
496 def exit(self):
308
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
497 if self.project:
a7ece2df59a2 Also don't use item_in_focus when adding a entry description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 307
diff changeset
498 time = (datetime.now() - self.project.start).seconds
43
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
499 self.state.sec = time
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
500 signal.signal(signal.SIGALRM, self.state.handle_signal)
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
501 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
502 return super(DescriptionProjectsState, self).exit()
106
a0779fb2ef4d Remove space
Björn Ricks <bjoern.ricks@intevation.de>
parents: 105
diff changeset
503
277
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
504 def set_focus(self):
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
505 self.controller.view.set_focus("footer")
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
506
23
9c4e8ba3c4fa 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 EntryListState(State):
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 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
511 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
512 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
513
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
514 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
515 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
516 keys = self.config.get_keybinding()
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
517
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
518 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
519 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
520 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
521 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
522 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
523
479
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
524 if 'ctrl l' in key:
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
525 self.controller.redraw()
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
526 return True
75131561d098 Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents: 478
diff changeset
527
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
528 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
529 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
530 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
531
9c4e8ba3c4fa 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 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
533 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
534 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
535
9c4e8ba3c4fa 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 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
537 e_len = self.view.row_count()
468
74e550aa3b6a Fixes focus error.
Magnus Schieder <mschieder@intevation.de>
parents: 447
diff changeset
538 if e_len == 0:
473
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
539 return False
235
263fe6ee0e4e Fix crash when deleting an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 232
diff changeset
540 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
541 if f >= e_len:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 134
diff changeset
542 f = e_len - 1
207
910136052631 Fix setting the focus
Björn Ricks <bjoern.ricks@intevation.de>
parents: 206
diff changeset
543 self.view.set_focus(f)
473
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
544 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
545
277
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
546 def set_focus(self):
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
547 self.controller.view.set_focus("entries")
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
548 self.controller.entries_view.set_focus(0)
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
549
23
9c4e8ba3c4fa 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
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
551 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
552
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
553 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
554 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
555 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
556 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
557 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
558
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
559 keys = self.config.get_keybinding()
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
560 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
561 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
562 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
563 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
564 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
565
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
566 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
567 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
568 self.set_next_state(DeleteEntryState(self.projectlist_state,
312
dc92981ec591 Avoid resetting the focus when changing from DeleteEntryState back to the
Björn Ricks <bjoern.ricks@intevation.de>
parents: 310
diff changeset
569 self,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
570 self.controller,
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
571 self.view))
102
cd2456d0589e Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents: 101
diff changeset
572 else:
cd2456d0589e Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents: 101
diff changeset
573 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
574 self.set_next_state(DeleteEntryState(self.projectlist_state,
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
575 self, self.controller,
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
576 self.view, [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
577 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
578
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
579 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
580 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
581 self.set_next_state(MoveEntryState(self.projectlist_state,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
582 self.controller, self.view))
439
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
583 else:
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
584 entry = self.view.item_in_focus()
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
585 self.set_next_state(MoveEntryState(self.projectlist_state,
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
586 self.controller,
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
587 self.view, [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
588 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
589
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
590 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
591 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
592 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
593 self.set_next_state(EditEntryState(self.projectlist_state,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
594 self.controller, self.view,
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
595 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
596 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
597
400
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
598 if keys.get_entry_adjust() in key:
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
599 entry = self.view.item_in_focus()
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
600 if entry:
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
601 self.set_next_state(AdjustEntryState(self.projectlist_state,
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
602 self.controller,
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
603 self.view, entry))
405
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
604 return True
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
605
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
606 if keys.get_entry_length() in key:
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
607 entry = self.view.item_in_focus()
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
608 if entry:
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
609 self.set_next_state(LengthEntryState(self.projectlist_state,
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
610 self.controller,
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
611 self.view, entry))
400
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
612 return True
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
613
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
614 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
615
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
616
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
617 class DeleteEntryState(EntryListState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
618
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
619 messages = {
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
620 '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
621 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
622
312
dc92981ec591 Avoid resetting the focus when changing from DeleteEntryState back to the
Björn Ricks <bjoern.ricks@intevation.de>
parents: 310
diff changeset
623 def __init__(self, state, old_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
624 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
625 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
626 self.entries = entries
312
dc92981ec591 Avoid resetting the focus when changing from DeleteEntryState back to the
Björn Ricks <bjoern.ricks@intevation.de>
parents: 310
diff changeset
627 self.old_state = old_state
100
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
628 if not self.entries:
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
629 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
630
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
631 def handle_input(self, key):
310
2667bdef021f Allow to abort deletion of entries with escape key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 309
diff changeset
632 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
633 if 'y' in key:
100
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
634 if self.entries:
8f433e3c2f21 Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 98
diff changeset
635 self.controller.delete_entries(self.entries)
473
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
636 new_focus = self.renew_focus()
470
d379f8098bb3 Update project time when deleting an entrie.
Magnus Schieder <mschieder@intevation.de>
parents: 469
diff changeset
637 self.projectlist_state.view.update_rows()
474
0d831a9f547b Better multi-selection bugfix. Solves mistakes from the old fix. (ca6d11781e2f)
Magnus Schieder <mschieder@intevation.de>
parents: 473
diff changeset
638 self.view.clear()
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
639 self.view.set_footer_text("", 'entry_footer')
312
dc92981ec591 Avoid resetting the focus when changing from DeleteEntryState back to the
Björn Ricks <bjoern.ricks@intevation.de>
parents: 310
diff changeset
640 # avoid creating new DefaultEntryListState and setting focus
473
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
641 if new_focus:
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
642 self.set_next_state(self.old_state)
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
643 else:
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
644 self.set_next_state(self.projectlist_state)
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
645 self.controller.view.set_focus(0)
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
646
280
44a5fe190ab6 Show total when a entry is changed
Björn Ricks <bjoern.ricks@intevation.de>
parents: 279
diff changeset
647 self.controller.project_view.show_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
648 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
649
310
2667bdef021f Allow to abort deletion of entries with escape key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 309
diff changeset
650 if 'n' in key or 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
651 self.view.set_footer_text("", 'entry_footer')
312
dc92981ec591 Avoid resetting the focus when changing from DeleteEntryState back to the
Björn Ricks <bjoern.ricks@intevation.de>
parents: 310
diff changeset
652 # avoid creating new DefaultEntryListState and setting focus
dc92981ec591 Avoid resetting the focus when changing from DeleteEntryState back to the
Björn Ricks <bjoern.ricks@intevation.de>
parents: 310
diff changeset
653 self.set_next_state(self.old_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
654 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
655
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
656 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
657
313
eb05d803249e Avoid resetting the focus in the entry list if the DeletEntryListState is
Björn Ricks <bjoern.ricks@intevation.de>
parents: 312
diff changeset
658 def set_focus(self):
eb05d803249e Avoid resetting the focus in the entry list if the DeletEntryListState is
Björn Ricks <bjoern.ricks@intevation.de>
parents: 312
diff changeset
659 self.controller.view.set_focus("entries")
eb05d803249e Avoid resetting the focus in the entry list if the DeletEntryListState is
Björn Ricks <bjoern.ricks@intevation.de>
parents: 312
diff changeset
660
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
661
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
662 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
663 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
664 '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
665 '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
666 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
667
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
668 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
669
439
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
670 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
671 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
672 self.view.set_footer_text(self.msg('project'), 'question')
439
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
673 self.entries = entries
104
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
674 self.proj_keys = ""
133
78992300f421 Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 130
diff changeset
675 self.project_view = controller.project_view
439
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
676 if not self.entries:
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
677 self.entries = [x.item for x in self.view.selection]
104
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
678
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
679 def set_project_footer(self):
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
680 self.project_view.set_footer_text("Selecting project from "
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
681 "key: %s" % self.proj_keys,
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
682 "running")
104
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
683
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
684 def reset_project_footer(self):
133
78992300f421 Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 130
diff changeset
685 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
686
169
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
687 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
688 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
689
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
690 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
691 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
692 if proj:
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
693 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
694 self.reset_project_footer()
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
695 logger.debug("MoveEntryState: prepared entries to be "
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
696 "moved to project '%s'" % self.proj.desc)
169
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
697 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
698
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
699 def handle_input(self, key):
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
700 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
701 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
702 logger.debug("MoveEntryState: move selected entries.")
439
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
703 self.controller.move_entries(self.entries, self.proj)
473
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
704 new_focus = self.renew_focus()
474
0d831a9f547b Better multi-selection bugfix. Solves mistakes from the old fix. (ca6d11781e2f)
Magnus Schieder <mschieder@intevation.de>
parents: 473
diff changeset
705 self.view.clear()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
706 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
707 self.proj = None
473
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
708 if new_focus:
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
709 self.set_next_state(DefaultEntryListState(self.projectlist_state,
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
710 self.controller,
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
711 self.view))
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
712 else:
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
713 self.set_next_state(self.projectlist_state)
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
714 self.controller.view.set_focus(0)
b9e30e556844 Switch to projects when entries are empty.
Magnus Schieder <mschieder@intevation.de>
parents: 472
diff changeset
715
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
716 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
717
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
718 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
719 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
720 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
721 self.set_next_state(DefaultEntryListState(self.projectlist_state,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
722 self.controller,
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
723 self.view))
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
724 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
725
151
1e35c24708dd Allow to configure the action keys
Björn Ricks <bjoern.ricks@intevation.de>
parents: 150
diff changeset
726 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
727 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
728 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
729 self.set_next_state(DefaultEntryListState(self.projectlist_state,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
730 self.controller,
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
731 self.view))
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
732 return True
243
9bf0ad952c68 Add newline
Björn Ricks <bjoern.ricks@intevation.de>
parents: 236
diff changeset
733
134
c80c7fc6a8fc Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 133
diff changeset
734 if 'backspace' in key:
c80c7fc6a8fc Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 133
diff changeset
735 if len(self.proj_keys) > 0:
c80c7fc6a8fc Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 133
diff changeset
736 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
737 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
738 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
739
169
d10a0e35b982 Fix: Allow to move entries to projects with similar names
Björn Ricks <bjoern.ricks@intevation.de>
parents: 167
diff changeset
740 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
741 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
742 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
743
104
36204a42bd79 Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 103
diff changeset
744 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
745 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
746 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
747 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
748 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
749 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
750 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
751 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
752 return True
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
753
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
754 return False
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
755
439
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
756 def set_focus(self):
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
757 self.controller.view.set_focus("entries")
3103429ec963 Makes 'move' operation more consistent.
Bernhard Reiter <bernhard@intevation.de>
parents: 411
diff changeset
758
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
759
173
a5319bb1ac13 Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 172
diff changeset
760 class AlterProjectState(HandleUserInputState):
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
761
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
762 messages = {
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
763 'choose_proj': _(' Choose a project.'),
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
764 }
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
765
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
766 def __init__(self, controller, view):
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
767 super(AlterProjectState, self).__init__(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
768 controller, view, None,
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
769 controller.view.get_frame().get_footer())
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
770
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
771 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
772 self.controller.view.set_footer_text(self.msg('choose_proj'),
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
773 '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
774 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
775 return True
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
776
267
9fce005e5fc6 Redirect keyinput to GetanView footer when adding a new project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 262
diff changeset
777 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
778 """ 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
779 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
780
277
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
781 def set_focus(self):
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
782 self.controller.view.set_focus("footer")
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
783
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
784
173
a5319bb1ac13 Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 172
diff changeset
785 class AddProjectKeyState(AlterProjectState):
172
b8abca7714fd Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 171
diff changeset
786
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
787 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
788 'choose_proj': _(' Choose a project.'),
172
b8abca7714fd Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 171
diff changeset
789 '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
790 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
791
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
792 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
793 controller.view.set_footer_text(self.msg('proj_key'), 'question',
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
794 edit=True)
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
795 super(AddProjectKeyState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
796
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
797 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
798 key = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
799 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
800 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
801 self.set_next_state(AddProjectDescriptionState(self.controller,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
802 self.view, 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
803 return True
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
804
170
fa3f6cd394db Formatting
Björn Ricks <bjoern.ricks@intevation.de>
parents: 169
diff changeset
805
173
a5319bb1ac13 Rename CreateProjectState into AlterProjectState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 172
diff changeset
806 class AddProjectDescriptionState(AlterProjectState):
206
9f1c45a2126e Update coding style for states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 205
diff changeset
807
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
808 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
809 'proj_description': _('Insert a description for project: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
810 'choose_proj': _(" Choose a project.")
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
811 }
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
812
172
b8abca7714fd Drop AddProjectNameState
Björn Ricks <bjoern.ricks@intevation.de>
parents: 171
diff changeset
813 def __init__(self, controller, view, key):
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
814 controller.view.set_footer_text(self.msg('proj_description'),
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
815 'question', edit=True)
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
816 super(AddProjectDescriptionState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
817 self.key = key
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
818
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
819 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
820 description = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
821 if description == '':
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
822 return self
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
823 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
824 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
825 return True
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
826
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
827
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
828 class EditEntryState(HandleUserInputState):
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
829 messages = {
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
830 'edit_entry': _('Edit entry text: '),
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
831 }
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
832
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
833 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
834 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
835 'question', True)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
836 super(EditEntryState, self).__init__(controller, view,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
837 None, view.footer)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
838 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
839 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
840 self.entry = entry
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
841 self.state = state
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
842 logger.debug("EditEntryState: Entry %s" % entry)
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
843
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
844 def enter(self):
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
845 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
846 if entry_desc == '':
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
847 return self
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
848 entry = self.entry
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
849 entry.desc = entry_desc
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
850 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
851 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
852 return self.exit()
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
853
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
854 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
855 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
856 self.set_next_state(DefaultEntryListState(self.state, self.controller,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
857 self.view))
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
858 return True
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
859
277
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
860 def set_focus(self):
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
861 self.controller.view.set_focus("entries")
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
862 self.view.frame.set_focus("footer")
3d6315be2251 Use new set_focus method in all States
Björn Ricks <bjoern.ricks@intevation.de>
parents: 276
diff changeset
863
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
864
400
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
865 class AdjustEntryState(HandleUserInputState):
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
866 messages = {
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
867 'adjust_entry': _('Adjust datetime of entry: '),
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
868 }
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
869
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
870 def __init__(self, state, controller, view, entry):
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
871 view.set_footer_text(self.msg('adjust_entry'),
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
872 'question', True)
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
873 super(AdjustEntryState, self).__init__(controller, view,
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
874 None, view.footer)
400
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
875
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
876 # we only care up to seconds (which is 19 characters).
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
877 # for usability the default value has to match the strptime fmt below.
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
878 self.footer.set_edit_text(str(entry.start)[:19])
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
879 self.footer.set_edit_pos(len(self.footer.edit_text))
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
880 self.entry = entry
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
881 self.state = state
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
882 logger.debug("AdjustEntryState: Entry %s" % entry)
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
883
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
884 def enter(self):
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
885 entry_datetime = self.footer.get_edit_text()
400
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
886
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
887 entry = self.entry
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
888 duration = entry.get_duration()
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
889
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
890 try:
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
891 entry.start = datetime.strptime(entry_datetime,
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
892 "%Y-%m-%d %H:%M:%S")
400
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
893 except:
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
894 return self
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
895
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
896 entry.end = entry.start + duration
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
897
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
898 self.controller.update_entry(entry)
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
899 self.view.node_in_focus().update()
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
900 return self.exit()
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
901
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
902 def exit(self):
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
903 self.view.set_footer_text("", 'entry_footer', False)
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
904 self.set_next_state(DefaultEntryListState(self.state, self.controller,
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
905 self.view))
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
906 return True
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
907
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
908 def set_focus(self):
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
909 self.controller.view.set_focus("entries")
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
910 self.view.frame.set_focus("footer")
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
911
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
912
405
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
913 class LengthEntryState(HandleUserInputState):
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
914 messages = {
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
915 'adjust_length_entry': _('Adjust length of entry: '),
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
916 }
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
917
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
918 def __init__(self, state, controller, view, entry):
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
919 view.set_footer_text(self.msg('adjust_length_entry'),
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
920 'question', True)
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
921 super(LengthEntryState, self).__init__(controller, view,
410
7e27d2145007 Code-cleanup: improves style.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
922 None, view.footer)
405
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
923
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
924 # format current duration as string that is also accepted by enter()
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
925 total_minutes = int(entry.get_duration().total_seconds()/60)
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
926 hours = int(total_minutes // 60)
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
927
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
928 if hours > 0:
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
929 self.footer.set_edit_text(
409
ac4dead31672 Improves editing of length for saved entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 407
diff changeset
930 "{:d}:{:02d}".format(hours, int(total_minutes % 60)))
405
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
931 else:
407
ee98d0b45967 Fixes ability to change length of saved entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 406
diff changeset
932 self.footer.set_edit_text("{:d}".format(total_minutes))
405
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
933
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
934 self.footer.set_edit_pos(len(self.footer.edit_text))
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
935 self.entry = entry
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
936 self.state = state
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
937 logger.debug("LengthEntryState: Entry %s" % entry)
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
938
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
939 def enter(self):
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
940 """Changed the length of an entry.
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
941
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
942 Works for total minutes or HH:MM.
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
943 """
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
944 entry_duration = self.footer.get_edit_text()
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
945
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
946 # avoid unexpected behavior if minus signs are given in the new length
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
947 if '-' in entry_duration:
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
948 return self
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
949
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
950 if ':' in entry_duration:
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
951 hours, minutes = entry_duration.split(':')
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
952 else:
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
953 hours = 0
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
954 minutes = entry_duration
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
955
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
956 try:
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
957 duration = timedelta(minutes=int(minutes), hours=int(hours))
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
958 except:
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
959 return self
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
960
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
961 entry = self.entry
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
962 entry.end = entry.start + duration
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
963
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
964 self.controller.update_entry(entry)
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
965 self.view.node_in_focus().update()
476
63ce8e017828 Updates the project time when the entrie time is adjusted.
Magnus Schieder <mschieder@intevation.de>
parents: 474
diff changeset
966 self.controller.view.proj_list.update_rows()
478
950bfe89ec3d Updates "All project" time when the entrie time is adjusted.
Magnus Schieder <mschieder@intevation.de>
parents: 476
diff changeset
967 self.controller.project_view.show_total_time()
405
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
968 return self.exit()
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
969
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
970 def exit(self):
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
971 self.view.set_footer_text("", 'entry_footer', False)
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
972 self.set_next_state(DefaultEntryListState(self.state, self.controller,
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
973 self.view))
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
974 return True
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
975
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
976 def set_focus(self):
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
977 self.controller.view.set_focus("entries")
150180e972d3 Adds ability to adjust the length of (saved) entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 400
diff changeset
978 self.view.frame.set_focus("footer")
400
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
979
527168c08ae4 Added possibility to move starting datetime of entries.
Bernhard Reiter <bernhard@intevation.de>
parents: 385
diff changeset
980
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
981 class ProjectEditKeyState(AlterProjectState):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
982
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
983 messages = {
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
984 '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
985 '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
986 '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
987 }
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
988
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
989 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
990 controller.view.set_footer_text(self.msg('proj_key'),
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
991 'question', 1)
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
992 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
993 self.project = project
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
994 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
995 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
996
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
997 def enter(self):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
998 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
999 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
1000 return True
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1001 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
1002 self.set_next_state(ProjectEditDescriptionState(self.controller,
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
1003 self.view,
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
1004 self.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
1005 return True
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1006
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1007
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1008 class ProjectEditDescriptionState(AlterProjectState):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1009
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1010 messages = {
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
1011 "proj_description": _("Insert description for project: "),
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
1012 "choose_proj": _(" Choose a project.")
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1013 }
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1014
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1015 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
1016 controller.view.set_footer_text(self.msg("proj_description"),
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
1017 "question", 1)
177
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1018 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
1019 self.project = project
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1020 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
1021 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
1022
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1023 def enter(self):
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1024 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
1025 if description == '':
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1026 return self
c37fb8223762 Add new States to edit project key and description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 173
diff changeset
1027 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
1028 self.controller.update_project(self.project)
296
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
1029 self.controller.view.set_footer_text(
c7a867c16ff2 Update codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 294
diff changeset
1030 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
1031 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
1032 return True
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)