annotate getan/states.py @ 98:7c3f43bfc0a8

Only accept single keys for project selection Avoids inserting e.g. del key
author Björn Ricks <bjoern.ricks@intevation.de>
date Mon, 12 Sep 2011 13:32:15 +0200
parents 99639833968d
children 8f433e3c2f21
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>
97
99639833968d Add me as author in files that I did touch
Björn Ricks <bjoern.ricks@intevation.de>
parents: 96
diff changeset
5 # (c) 2011 by Björn Ricks <bjoern.ricks@intevation.de>
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
6 #
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
7 # This is Free Software licensed under the terms of GPLv3 or later.
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
8 # For details see LICENSE coming with the source of 'getan'.
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
9 #
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
10
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
11
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
12 import logging
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
13 import signal
9c4e8ba3c4fa 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 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
15
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
16 from getan.resources import gettext as _
37
68cc10d082ab Fix for #1569
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
17 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
18
9c4e8ba3c4fa 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 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
20
9c4e8ba3c4fa 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 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
22 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
23 }
9c4e8ba3c4fa 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 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
26 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
27 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
28
9c4e8ba3c4fa 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 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
30 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
31
9c4e8ba3c4fa 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 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
34 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
35 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
36 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
37 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
38 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
39
9c4e8ba3c4fa 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 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
41 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
42 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
43 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
44 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
45 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
46 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
47
88
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
48 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
49 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
50
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
51 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
52 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
53
6dc52940dde0 Move 'up' and 'down' keypress handling to general ProjectState class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 87
diff changeset
54 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
55 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
56 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
57 return self
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 down(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.down()
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
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
63
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
64 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
65 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
66 '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
67 }
9c4e8ba3c4fa 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 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
70 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
71 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
72 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
73 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
74
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
75 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
76 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
77
56
1f7c9371b648 use insert key instead of a to create a new project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 54
diff changeset
78 if 'insert' in key:
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
79 return AddProjectNameState(self.controller, self.view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
80
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
81 if '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
82 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
83
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
84 else:
98
7c3f43bfc0a8 Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
85 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
86 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
87 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
88 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
89
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
90
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
91 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
92 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
93 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
94 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
95
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
96 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
97
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
98 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
99 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
100 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
101 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
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 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
104 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
105
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
106 def 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
107 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
108
95
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
109 def check_key(self):
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
110 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
111 if proj:
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
112 self.reset()
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
113 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
114 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
115 self.controller.update_entries(
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
116 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
117 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
118 return self
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
119
19e9d76a10fb Fix: Recognize first letter to choose a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 94
diff changeset
120
94
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
121 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
122 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
123 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
124 return PausedProjectsState(self.controller, self.view)
159a1ef0fd7c Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents: 93
diff changeset
125 else:
98
7c3f43bfc0a8 Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
126 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
127 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
128 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
129 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
130 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
131
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
132 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
133 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
134 'quit' : _(" Really quit? (y/n)"),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
135 '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
136 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
137
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
138 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
139 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
140 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
141
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
142 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
143 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
144 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
145 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
146 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
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 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
149 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
150
9c4e8ba3c4fa 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 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
152 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
153 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
154
9c4e8ba3c4fa 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 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
156
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
157
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
158 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
159 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
160 'description': _("Enter a description: "),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
161 '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
162 '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
163 'continue' : _("Press 'Space' to continue."),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
164 'running' : _("Running ( %s ) on '%s'."),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
165 '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
166 }
9c4e8ba3c4fa 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 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
169 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
170
89
3bea335c0f30 Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents: 88
diff changeset
171 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
172 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
173 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
174 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
175 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
176
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
177 def 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
178 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
179 if not proj: 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
180 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
181 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
182 (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
183 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
184 '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
185 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
186 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
187 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
188 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
189 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
190 (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
191 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
192 '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
193 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
194
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
195 signal.signal(signal.SIGALRM, self.handle_signal)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
196 signal.alarm(1)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
197
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
198 def 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
199 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
200 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
201 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
202 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
203
9c4e8ba3c4fa 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 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
205 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
206 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
207 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
208 '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
209 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
210 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
211 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
212 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
213 '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
214 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
215 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
216 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
217 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
218 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
219 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
220 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
221 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
222 if proj:
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 39
diff changeset
223 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
224 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
225 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
226 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
227 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
228
9c4e8ba3c4fa 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 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
230 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
231 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
232 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
233 proj = self.project
42
a5439795ef09 More checks againts empty projects.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 41
diff changeset
234 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
235 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
236 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
237 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
238 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
239 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
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
9c4e8ba3c4fa 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 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
243 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
244 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
245 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
246 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
247 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
248
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
249 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
250 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
251 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
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 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
254 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
255 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
256 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
257 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
258 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
259 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
260 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
261 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
262 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
263 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
264 '%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
265 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
266 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
267 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
268 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
269 '%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
270 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
271 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
272 return self.insert(key)
39
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
273 return self
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
274
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
275 def enter(self):
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
276 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
277
9c4e8ba3c4fa 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 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
279 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
280
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
281 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
282 logger.debug("Enter 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
283 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
284 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
285
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
286
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
287 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
288 def __init__(self, controller, view, running_state):
44
f10126519797 Fixed super call
Sascha L. Teichmann <teichmann@intevation.de>
parents: 43
diff changeset
289 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
290 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
291 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
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 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
294 self.view._total_time()
39
d4ce02a33acd Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 37
diff changeset
295 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
296
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
297 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
298 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
299 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
300 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
301 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
302 "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
303 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
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
9c4e8ba3c4fa 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 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
307 def enter(self):
37
68cc10d082ab Fix for #1569
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
308 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
309 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
310 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
311 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
312 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
313 % (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
314 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
315 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
316
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
317
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
318 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
319 def enter(self):
37
68cc10d082ab Fix for #1569
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
320 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
321 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
322 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
323 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
324 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
325 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
326 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
327 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
328 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
329 % (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
330 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
331 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
332
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
333
9c4e8ba3c4fa 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 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
335 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
336 '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
337 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
338
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
339 def enter(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
340 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
341 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
342 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
343 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
344 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
345 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
346
9c4e8ba3c4fa 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 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
348 project = self.view.item_in_focus()
43
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
349 if project:
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
350 time = (datetime.now() - project.start).seconds
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
351 self.state.sec = time
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
352 signal.signal(signal.SIGALRM, self.state.handle_signal)
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 42
diff changeset
353 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
354 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
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 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
358 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
359 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
360 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
361 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
362
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
363 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
364 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
365 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
366 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
367 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
368 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
369 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
370 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
371 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
372 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
373 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
374 return 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
375
9c4e8ba3c4fa 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 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
377 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
378 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
379
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
380 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
381 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
382 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
383
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
384 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
385 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
386 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
387
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
388 def 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
389 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
390 f = self.view.focused
9c4e8ba3c4fa 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 if f >= e_len: f = e_len - 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
392 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
393 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
394
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 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
397 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
398 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
399 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
400 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
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 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
403 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
404 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
405 self.controller, self.view)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
406 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
407 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
408 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
409 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
410 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
411 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
412 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
413 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
414 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
415 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
416
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 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
419 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
420 '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
421 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
422
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
423 def __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
424 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
425 self.view.set_footer_text(self.msg('delete'), '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
426
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
427 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
428 ret = super(DeleteEntryState, 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
429 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
430 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
431
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
432 if 'y' in key:
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
433 entries = [x.item for x in self.view.selection]
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
434 if entries:
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
435 self.controller.delete_entries(entries)
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
436 self.renew_focus()
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
437 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
438 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
439 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
440
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
441 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
442 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
443 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
444 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
445
9c4e8ba3c4fa 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 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
447
9c4e8ba3c4fa 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 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
450 messages = {
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
451 'project': _(" Into which project do you want to move these entries?"),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 30
diff changeset
452 'really': _(" Are you sure? (> %s) (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
453 }
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
454
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
455 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
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 __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
458 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
459 self.view.set_footer_text(self.msg('project'), '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
460
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
461 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
462 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
463 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
464 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
465 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
466 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
467 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
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
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
471 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
472 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
473 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
474 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
475
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
476 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
477 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
478 return DefaultEntryListState(self.projectlist_state,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
479 self.controller, self.view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
480
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
481 if len(key) > 0 and self.proj is 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
482 self.proj = self.controller.project_by_key(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
483 if 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
484 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
485 "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
486 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
487
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
488 return self
54
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
489
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
490 class CreateProjectState(HandleUserInputState):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
491
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
492 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
493 'choose_proj': _(' Choose a project.'),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
494 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
495
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
496 def __init__(self, controller, view):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
497 super(CreateProjectState, self).__init__(controller, view, None,
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
498 controller.view.view.get_footer())
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
499
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
500 def exit(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
501 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
502 return PausedProjectsState(self.controller, self.view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
503
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
504 class AddProjectNameState(CreateProjectState):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
505 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
506 'choose_proj': _(' Choose a project.'),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
507 'proj_name': _('Insert new project name: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
508 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
509
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
510 def __init__(self, controller, view):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
511 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
512 'question', 1)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
513 super(AddProjectNameState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
514 self.view.frame.set_focus('footer')
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
515
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
516 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
517 project = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
518 if project == '':
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
519 return self
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
520 return AddProjectKeyState(self.controller, self.view, project)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
521
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
522
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
523 class AddProjectKeyState(CreateProjectState):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
524
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
525 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
526 'proj_name': _('Insert new project name: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
527 'proj_key': _('Insert key for new project: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
528 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
529
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
530 def __init__(self, controller, view, project):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
531 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
532 'question', 1)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
533 super(AddProjectKeyState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
534 self.view.frame.set_focus('footer')
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
535 self.project = project
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
536
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
537 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
538 key = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
539 if key == '':
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
540 return self
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
541 return AddProjectDescriptionState(self.controller, self.view,
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
542 self.project, key)
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 class AddProjectDescriptionState(CreateProjectState):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
545 messages = {
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
546 'proj_description': _('Insert a description for project: '),
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
547 'choose_proj': _(" Choose a project.")
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
548 }
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
549
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
550 def __init__(self, controller, view, project, key):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
551 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
552 'question', 1)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
553 super(AddProjectDescriptionState, self).__init__(controller, view)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
554 self.view.frame.set_focus('footer')
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
555 self.project = project
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
556 self.key = key
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
557
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
558 def enter(self):
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
559 description = self.footer.get_edit_text()
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
560 if description == '':
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
561 return self
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
562 self.controller.add_project(self.key, description)
d747563dff03 add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents: 44
diff changeset
563 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
564 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
565
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
566
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
567 class EditEntryState(HandleUserInputState):
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
568 messages = {
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
569 'edit_entry': _('Edit entry text: '),
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
570 }
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
571
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
572 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
573 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
574 'question', True)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
575 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
576 None, view.footer)
73
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
577 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
578 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
579 self.view.frame.set_focus('footer')
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
580 self.entry = entry
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
581 self.state = state
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
582 logger.debug("EditEntryState: Entry %s" % entry)
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
583
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
584 def enter(self):
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
585 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
586 if entry_desc == '':
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
587 return self
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
588 entry = self.entry
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
589 entry.desc = entry_desc
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
590 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
591 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
592 return self.exit()
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
593
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
594 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
595 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
596 return DefaultEntryListState(self.state, self.controller, self.view)
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
597
745c644d9564 Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 72
diff changeset
598
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)