annotate getan/states.py @ 145:ccd47a2d37a6

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