Mercurial > getan > getan
annotate getan/states.py @ 139:6a19e721fbd1
Allow to use backspace to change selecting project
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Wed, 31 Oct 2012 15:31:20 +0100 |
parents | bb6ddef4f88f |
children | d88240a3a065 |
rev | line source |
---|---|
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
3 # |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
4 # (c) 2010 by Ingo Weinzierl <ingo.weinzierl@intevation.de> |
138
bb6ddef4f88f
Update copyright and add my name
Björn Ricks <bjoern.ricks@intevation.de>
parents:
137
diff
changeset
|
5 # (c) 2011, 2012 by Björn Ricks <bjoern.ricks@intevation.de> |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
6 # |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
7 # This is Free Software licensed under the terms of GPLv3 or later. |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
8 # For details see LICENSE coming with the source of 'getan'. |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
9 # |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
10 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
11 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
12 import logging |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
13 import signal |
9c4e8ba3c4fa
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 | 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 |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
120 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
|
121 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
|
122 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
|
123 return PausedProjectsState(self.controller, self.view) |
139
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
124 |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
125 if 'backspace' in key: |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
126 if len(self.proj_keys) > 0: |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
127 self.proj_keys = self.proj_keys[:-1] |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
128 self.set_footer_text() |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
129 return self |
6a19e721fbd1
Allow to use backspace to change selecting project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
138
diff
changeset
|
130 |
94
159a1ef0fd7c
Add new state to select projects with keys larger then one
Björn Ricks <bjoern.ricks@intevation.de>
parents:
93
diff
changeset
|
131 else: |
98
7c3f43bfc0a8
Only accept single keys for project selection
Björn Ricks <bjoern.ricks@intevation.de>
parents:
97
diff
changeset
|
132 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
|
133 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
|
134 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
|
135 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
|
136 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
|
137 |
23
9c4e8ba3c4fa
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 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
|
139 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
140 'quit' : _(" Really quit? (y/n)"), |
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
141 '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
|
142 } |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
145 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
|
146 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
|
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 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
|
149 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
|
150 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
|
151 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
|
152 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
|
153 |
9c4e8ba3c4fa
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 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
|
155 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
|
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 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
|
158 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
|
159 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
|
160 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
161 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
|
162 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
163 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
164 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
|
165 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
166 'description': _("Enter a description: "), |
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
167 '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
|
168 '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
|
169 'continue' : _("Press 'Space' to continue."), |
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
170 'running' : _("Running ( %s ) on '%s'."), |
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
171 '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
|
172 } |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
173 |
9c4e8ba3c4fa
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 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
|
175 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
|
176 |
89
3bea335c0f30
Save the current project when switching to Running state
Björn Ricks <bjoern.ricks@intevation.de>
parents:
88
diff
changeset
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 |
9c4e8ba3c4fa
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 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
|
184 proj = self.project |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
185 if not proj: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
186 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
|
187 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
|
188 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
|
189 (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
|
190 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
|
191 '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
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
197 (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
|
198 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
|
199 '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
|
200 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
|
201 |
9c4e8ba3c4fa
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 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
|
203 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
|
204 |
9c4e8ba3c4fa
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 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
|
206 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
|
207 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
|
208 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
|
209 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
|
210 |
9c4e8ba3c4fa
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 '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
|
212 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
|
213 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
|
214 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
|
215 '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
|
216 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
|
217 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
|
218 if '-' in key: |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
219 self.view.set_footer_text(self.msg('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
|
220 '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
|
221 self.view.frame.set_focus('footer') |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
222 return 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
|
223 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
|
224 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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 if proj: |
f44f808e7d47
Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
39
diff
changeset
|
230 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
|
231 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
|
232 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
|
233 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
|
234 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
|
235 |
9c4e8ba3c4fa
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 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
|
237 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
|
238 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
|
239 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
|
240 proj = self.project |
42
a5439795ef09
More checks againts empty projects.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
41
diff
changeset
|
241 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
|
242 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
|
243 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
|
244 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
|
245 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
|
246 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
|
247 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
248 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
249 class 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
|
250 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
|
251 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
|
252 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
|
253 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
|
254 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
|
255 |
9c4e8ba3c4fa
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 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
|
257 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
|
258 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
|
259 |
9c4e8ba3c4fa
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 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
|
261 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
|
262 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
|
263 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
|
264 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
|
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 '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
|
267 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
|
268 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
|
269 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
|
270 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
|
271 '%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
|
272 self.footer.set_edit_pos(pos-1) |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
273 elif '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
|
274 text = self.footer.edit_text |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
275 self.footer.set_edit_text( |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
276 '%s%s' % (text[0:pos], 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
|
277 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
|
278 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
|
279 return self.insert(key) |
39
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
280 return self |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
281 |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
282 def enter(self): |
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
283 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
|
284 |
9c4e8ba3c4fa
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 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
|
286 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
|
287 |
9c4e8ba3c4fa
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 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
|
289 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
|
290 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
|
291 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
|
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 |
9c4e8ba3c4fa
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 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
|
295 def __init__(self, controller, view, running_state): |
44
f10126519797
Fixed super call
Sascha L. Teichmann <teichmann@intevation.de>
parents:
43
diff
changeset
|
296 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
|
297 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
|
298 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
|
299 |
9c4e8ba3c4fa
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 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
|
301 self.view._total_time() |
39
d4ce02a33acd
Minor fixes (logging, states)
Sascha L. Teichmann <teichmann@intevation.de>
parents:
37
diff
changeset
|
302 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
|
303 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
304 def 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
|
305 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
|
306 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
|
307 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
|
308 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
|
309 "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
|
310 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
|
311 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
314 def enter(self): |
37 | 315 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
|
316 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
|
317 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
|
318 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
|
319 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
|
320 % (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
|
321 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
|
322 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
|
323 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
324 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
325 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
|
326 def enter(self): |
37 | 327 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
|
328 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
|
329 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
|
330 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
|
331 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
|
332 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
|
333 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
|
334 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
|
335 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
|
336 % (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
|
337 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
|
338 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
|
339 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
342 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
343 '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
|
344 } |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
347 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
|
348 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
|
349 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
|
350 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
|
351 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
|
352 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
|
353 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
354 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
|
355 project = self.view.item_in_focus() |
43 | 356 if project: |
357 time = (datetime.now() - project.start).seconds | |
358 self.state.sec = time | |
359 signal.signal(signal.SIGALRM, self.state.handle_signal) | |
360 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
|
361 return self.state |
106 | 362 |
23
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
365 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
|
366 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
|
367 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
|
368 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
|
369 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
370 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
|
371 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
|
372 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
|
373 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
|
374 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
|
375 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
|
376 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
|
377 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
|
378 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
|
379 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
|
380 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
|
381 return None |
130 | 382 |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
383 def 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
|
384 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
|
385 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
|
386 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
387 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
|
388 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
|
389 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
|
390 |
9c4e8ba3c4fa
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 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
|
392 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
|
393 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
|
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 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
|
396 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
|
397 f = self.view.focused |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
398 if f >= e_len: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
134
diff
changeset
|
399 f = e_len - 1 |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
400 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
|
401 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
|
402 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
403 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
404 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
|
405 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
|
406 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
|
407 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
|
408 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
|
409 |
105
4bf17975acca
Also move back to ProjectListState if esc is pressed not only when tab
Björn Ricks <bjoern.ricks@intevation.de>
parents:
104
diff
changeset
|
410 if 'esc' in key: |
4bf17975acca
Also move back to ProjectListState if esc is pressed not only when tab
Björn Ricks <bjoern.ricks@intevation.de>
parents:
104
diff
changeset
|
411 self.view.clear() |
4bf17975acca
Also move back to ProjectListState if esc is pressed not only when tab
Björn Ricks <bjoern.ricks@intevation.de>
parents:
104
diff
changeset
|
412 return self.projectlist_state |
4bf17975acca
Also move back to ProjectListState if esc is pressed not only when tab
Björn Ricks <bjoern.ricks@intevation.de>
parents:
104
diff
changeset
|
413 |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
414 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
|
415 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
|
416 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
|
417 self.controller, self.view) |
102
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
418 else: |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
419 entry = self.view.item_in_focus() |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
420 return DeleteEntryState(self.projectlist_state, |
cd2456d0589e
Add single entry deletion
Björn Ricks <bjoern.ricks@intevation.de>
parents:
101
diff
changeset
|
421 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
|
422 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
|
423 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
|
424 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
|
425 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
|
426 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
|
427 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
|
428 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
|
429 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
|
430 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
|
431 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
|
432 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
433 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
434 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
|
435 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
436 '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
|
437 } |
9c4e8ba3c4fa
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 |
100
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
439 def __init__(self, state, controller, view, entries=None): |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
440 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
|
441 self.view.set_footer_text(self.msg('delete'), 'question') |
100
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
442 self.entries = entries |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
443 if not self.entries: |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
444 self.entries = [x.item for x in self.view.selection] |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
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 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
|
447 if 'y' in key: |
100
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
448 if self.entries: |
8f433e3c2f21
Allow to pass entries to the DeleteEntryState
Björn Ricks <bjoern.ricks@intevation.de>
parents:
98
diff
changeset
|
449 self.controller.delete_entries(self.entries) |
25
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
450 self.renew_focus() |
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
451 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
|
452 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
|
453 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
|
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 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
|
456 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
|
457 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
|
458 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
|
459 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
460 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
|
461 |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
464 messages = { |
36
e6f81aa329b1
Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
30
diff
changeset
|
465 'project': _(" Into which project do you want to move these entries?"), |
103 | 466 'really': _(" Are you sure? (y/n)"), |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
467 } |
9c4e8ba3c4fa
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 |
9c4e8ba3c4fa
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 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
|
470 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
471 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
|
472 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
|
473 self.view.set_footer_text(self.msg('project'), 'question') |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
474 self.proj_keys = "" |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
475 self.project_view = controller.project_view |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
476 |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
477 def set_project_footer(self): |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
478 self.project_view.set_footer_text("Selecting project from " \ |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
479 "key: %s" % self.proj_keys, "running") |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
480 |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
481 def reset_project_footer(self): |
133
78992300f421
Reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents:
130
diff
changeset
|
482 self.project_view.reset_footer() |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
483 |
9c4e8ba3c4fa
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 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
|
485 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
|
486 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
|
487 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
|
488 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
|
489 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
|
490 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
|
491 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
|
492 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
|
493 |
25
155b23da504b
Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
23
diff
changeset
|
494 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
|
495 self.view.set_footer_text('', 'entry_footer') |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
496 self.reset_project_footer() |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
497 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
|
498 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
|
499 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
500 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
|
501 self.view.set_footer_text('', 'entry_footer') |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
502 self.reset_project_footer() |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
503 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
|
504 self.controller, self.view) |
134
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
505 if 'backspace' in key: |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
506 if len(self.proj_keys) > 0: |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
507 self.proj_keys = self.proj_keys[:-1] |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
508 self.set_project_footer() |
c80c7fc6a8fc
Handle backspace when selecting a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
133
diff
changeset
|
509 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
|
510 |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
511 if len(key) > 0 and len(key[0]) == 1 and self.proj is None: |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
512 self.proj_keys += key[0] |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
513 self.set_project_footer() |
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
514 self.proj = self.controller.project_by_key(self.proj_keys) |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
515 if self.proj: |
104
36204a42bd79
Allow to select projects with keys > 1 letters while moving entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
103
diff
changeset
|
516 self.reset_project_footer() |
23
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
517 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
|
518 "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
|
519 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
|
520 |
9c4e8ba3c4fa
Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff
changeset
|
521 return self |
54
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 CreateProjectState(HandleUserInputState): |
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 'choose_proj': _(' Choose a project.'), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
527 } |
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 def __init__(self, controller, view): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
530 super(CreateProjectState, self).__init__(controller, view, None, |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
531 controller.view.view.get_footer()) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
532 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
533 def exit(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
534 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
|
535 return PausedProjectsState(self.controller, self.view) |
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 class AddProjectNameState(CreateProjectState): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
538 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
539 'choose_proj': _(' Choose a project.'), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
540 'proj_name': _('Insert new project name: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
541 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
542 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
543 def __init__(self, controller, view): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
544 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
|
545 'question', 1) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
546 super(AddProjectNameState, self).__init__(controller, view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
547 self.view.frame.set_focus('footer') |
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 def enter(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
550 project = self.footer.get_edit_text() |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
551 if project == '': |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
552 return self |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
553 return AddProjectKeyState(self.controller, self.view, project) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
554 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
555 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
556 class AddProjectKeyState(CreateProjectState): |
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 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
559 'proj_name': _('Insert new project name: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
560 'proj_key': _('Insert key for new project: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
561 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
562 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
563 def __init__(self, controller, view, project): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
564 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
|
565 'question', 1) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
566 super(AddProjectKeyState, self).__init__(controller, view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
567 self.view.frame.set_focus('footer') |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
568 self.project = project |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
569 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
570 def enter(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
571 key = self.footer.get_edit_text() |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
572 if key == '': |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
573 return self |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
574 return AddProjectDescriptionState(self.controller, self.view, |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
575 self.project, key) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
576 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
577 class AddProjectDescriptionState(CreateProjectState): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
578 messages = { |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
579 'proj_description': _('Insert a description for project: '), |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
580 'choose_proj': _(" Choose a project.") |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
581 } |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
582 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
583 def __init__(self, controller, view, project, key): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
584 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
|
585 'question', 1) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
586 super(AddProjectDescriptionState, self).__init__(controller, view) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
587 self.view.frame.set_focus('footer') |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
588 self.project = project |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
589 self.key = key |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
590 |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
591 def enter(self): |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
592 description = self.footer.get_edit_text() |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
593 if description == '': |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
594 return self |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
595 self.controller.add_project(self.key, description) |
d747563dff03
add create project related states
Björn Ricks <bjoern.ricks@intevation.de>
parents:
44
diff
changeset
|
596 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
|
597 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
|
598 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
599 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
600 class EditEntryState(HandleUserInputState): |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
601 messages = { |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
602 'edit_entry': _('Edit entry text: '), |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
603 } |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
604 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
605 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
|
606 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
|
607 'question', True) |
73
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
608 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
|
609 None, view.footer) |
73
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
610 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
|
611 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
|
612 self.view.frame.set_focus('footer') |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
613 self.entry = entry |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
614 self.state = state |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
615 logger.debug("EditEntryState: Entry %s" % entry) |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
616 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
617 def enter(self): |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
618 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
|
619 if entry_desc == '': |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
620 return self |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
621 entry = self.entry |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
622 entry.desc = entry_desc |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
623 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
|
624 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
|
625 return self.exit() |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
626 |
745c644d9564
Add new state for editing entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
72
diff
changeset
|
627 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
|
628 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
|
629 return DefaultEntryListState(self.state, self.controller, self.view) |