annotate getan/view.py @ 163:1c01c061dfb3

Add new project mode to display a project tree The project tree is sorted by the key
author Björn Ricks <bjoern.ricks@intevation.de>
date Thu, 06 Dec 2012 14:57:55 +0100
parents 7e6f92773b03
children eead2420b8bc
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) 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 import logging
43
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 41
diff changeset
12 import locale
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
13
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
14 import urwid
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
15 import urwid.raw_display
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
16
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
17 from getan.resources import gettext as _
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
18 from getan.states import *
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
19 from getan.utils import short_time, format_datetime, format_time
23
9c4e8ba3c4fa 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 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
22
9c4e8ba3c4fa 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 class ListWidget(urwid.BoxWidget):
9c4e8ba3c4fa 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 def _update_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
25 logger.debug("ListWidget: update view now.")
62
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
26 if self.size and len(self.rows) > self.size[1]:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
27 start_idx = self.top
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
28 end_idx = start_idx + self.size[1] - 6
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
29 else:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
30 start_idx = self.top
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
31 end_idx = start_idx + len(self.rows)
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
32 listbox = urwid.LineBox(urwid.Padding(
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
33 urwid.ListBox(urwid.SimpleListWalker(self.rows[start_idx:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
34 end_idx])),
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
35 ('fixed left', 1),
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
36 ('fixed right', 1)))
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
37
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
38 self.body = urwid.AttrWrap(listbox, 'body')
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
39
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
40 self.frame.set_body(self.body)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
41 self.frame.set_footer(self.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
42 self.frame.set_header(self.header)
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 def update_focus(self, focus, unfocus=-1):
70
a70e7f381922 Only update the focus of a List if it has some rows.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 65
diff changeset
45 if self.rows:
a70e7f381922 Only update the focus of a List if it has some rows.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 65
diff changeset
46 self.focused = focus
a70e7f381922 Only update the focus of a List if it has some rows.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 65
diff changeset
47 if focus >= 0 and focus <= len(self.rows)-1:
a70e7f381922 Only update the focus of a List if it has some rows.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 65
diff changeset
48 self.rows[focus].focus = True
a70e7f381922 Only update the focus of a List if it has some rows.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 65
diff changeset
49 self.rows[focus].update_w()
a70e7f381922 Only update the focus of a List if it has some rows.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 65
diff changeset
50 if unfocus >= 0:
a70e7f381922 Only update the focus of a List if it has some rows.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 65
diff changeset
51 self.rows[unfocus].focus = False
a70e7f381922 Only update the focus of a List if it has some rows.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 65
diff changeset
52 self.rows[unfocus].update_w()
62
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
53 if self.size:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
54 self.validate_view()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
55
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
56 def render(self, size, focus=False):
62
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
57 self.size = size
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
58 maxcol, maxrow = size
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
59 return self.frame.render((maxcol, maxrow), focus)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
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
61 def set_footer_text(self, text, attr, edit=False):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
62 if edit:
9c4e8ba3c4fa 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 logger.debug("ListWidget: set footer text (edit) = '%s'" % text)
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 24
diff changeset
64 self.footer = urwid.AttrWrap(urwid.Edit(text),attr)
23
9c4e8ba3c4fa 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 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
66 logger.debug("ListWidget: set footer text = '%s'" % text)
25
155b23da504b Bugfix and improvements in the process to move/delete entries.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 24
diff changeset
67 self.footer = urwid.AttrWrap(urwid.Text(text),attr)
63
652149e7ef09 Improve code path
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
68 self._update_view()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
69
9c4e8ba3c4fa 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 def row_count(self):
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
71 if not self.rows:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
72 return 0
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
73 return len(self.rows)
9c4e8ba3c4fa 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 def item_in_focus(self):
41
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
76 if self.rows:
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
77 return self.rows[self.focused].get_item()
f44f808e7d47 Make getan runnable if there is no project in database.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 36
diff changeset
78 return 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
79
86
c9684f6d54ea Add new method in ListWidget to get the current node element
Björn Ricks <bjoern.ricks@intevation.de>
parents: 71
diff changeset
80 def node_in_focus(self):
c9684f6d54ea Add new method in ListWidget to get the current node element
Björn Ricks <bjoern.ricks@intevation.de>
parents: 71
diff changeset
81 if self.rows:
c9684f6d54ea Add new method in ListWidget to get the current node element
Björn Ricks <bjoern.ricks@intevation.de>
parents: 71
diff changeset
82 return self.rows[self.focused]
c9684f6d54ea Add new method in ListWidget to get the current node element
Björn Ricks <bjoern.ricks@intevation.de>
parents: 71
diff changeset
83 return None
c9684f6d54ea Add new method in ListWidget to get the current node element
Björn Ricks <bjoern.ricks@intevation.de>
parents: 71
diff changeset
84
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
85 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
86 if self.focused > 0:
62
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
87 logger.debug("ListWidget: navigate to upper row.")
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
88 self.update_focus(self.focused-1, self.focused)
23
9c4e8ba3c4fa 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 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
91 if self.focused < len(self.rows) - 1:
62
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
92 logger.debug("ListWidget: navigate to lower row.")
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
93 self.update_focus(self.focused+1, self.focused)
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
94
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
95 def validate_view(self):
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
96 if self.focused < self.top:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
97 self.top = self.focused
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
98 self._update_view()
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
99 if self.focused + 8 >= self.top + self.size[1]:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
100 self.top = self.focused - (self.size[1]) + 9
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
101 if self.top < 0:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
102 self.top = 0
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
103 self._update_view()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
104
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
105 def select(self):
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
106 if not self.rows:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
107 return 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
108 node = self.rows[self.focused]
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
109 logger.debug("ListWidget: select row '%s'" % self.focused)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
110 node.select()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
111 if node.selected:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
112 self.selection.append(node)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
113 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
114 if node in self.selection:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
115 self.selection.pop()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
116 logger.debug("ListWidget: all selected rows: %r" % self.selection)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
117 return node
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
118
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
119 def clear(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
120 logger.debug("EntryList: clear focus and selection of all 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
121 for node in self.selection:
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
122 if node.selected:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
123 node.select()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
124 self.update_focus(-1, self.focused)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
125 self.focused = False
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
126
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
127
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
128 class ProjectNode(urwid.WidgetWrap):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
129 MODES = [
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
130 (0, _('Total')),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
131 (1, _('Year')),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
132 (2, _('Month')),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
133 (3, _('Week')),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
134 (4, _('Day'))
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
135 ]
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
136
157
4553b724c57e Add indent to the project class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 156
diff changeset
137 def __init__(self, proj, mode=3, indent=0):
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
138 self.selected = False
9c4e8ba3c4fa 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 self.focus = False
157
4553b724c57e Add indent to the project class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 156
diff changeset
140 self.indent = indent
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
141 self.mode = self.MODES[mode]
9c4e8ba3c4fa 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 self.item = 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
143 w = self.update()
9c4e8ba3c4fa 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 self.__super.__init__(w)
9c4e8ba3c4fa 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 self.update_w()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
146
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
147 def update(self):
158
626d50342094 Log project key instead of description
Björn Ricks <bjoern.ricks@intevation.de>
parents: 157
diff changeset
148 logger.debug("Update ProjectNode '%s'" % self.item.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
149 time_str = self._get_formatted_time()
159
3f547b1d8322 Print indent of the project in the project list.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 158
diff changeset
150 description = urwid.Text([' ' * self.indent,
3f547b1d8322 Print indent of the project in the project list.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 158
diff changeset
151 ('project_key', self.item.key),
3f547b1d8322 Print indent of the project in the project list.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 158
diff changeset
152 (' '),
3f547b1d8322 Print indent of the project in the project list.
Björn Ricks <bjoern.ricks@intevation.de>
parents: 158
diff changeset
153 (self.item.desc)])
160
04ac384a9525 Only show the sum time if a project has entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 159
diff changeset
154 if self._get_time():
04ac384a9525 Only show the sum time if a project has entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 159
diff changeset
155 time = urwid.Text('%s (%s)' % (self.mode[1], time_str))
04ac384a9525 Only show the sum time if a project has entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 159
diff changeset
156 else:
04ac384a9525 Only show the sum time if a project has entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 159
diff changeset
157 time = urwid.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
158 self.widget = urwid.AttrWrap(urwid.Columns([description, time]),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
159 self._w = self.widget
9c4e8ba3c4fa 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 return self._w
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
161
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
162 def _get_formatted_time(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
163 return human_time(self._get_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
164
9c4e8ba3c4fa 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 def _get_time(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
166 if self.mode == self.MODES[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
167 return self.item.total
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
168 if self.mode == self.MODES[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
169 return self.item.year()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
170 if self.mode == self.MODES[2]:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
171 return self.item.month()
9c4e8ba3c4fa 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 if self.mode == self.MODES[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
173 return self.item.week()
9c4e8ba3c4fa 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 if self.mode == self.MODES[4]:
9c4e8ba3c4fa 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 return self.item.day()
9c4e8ba3c4fa 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 return self.item.week()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
177
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
178 def get_item(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
179 return self.item
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 def switch_time_mode(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
182 tmp = self.mode[0] + 1
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
183 if tmp > 4:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
184 self.mode = self.MODES[0]
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
185 else:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 132
diff changeset
186 self.mode = self.MODES[tmp]
23
9c4e8ba3c4fa 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 self.update()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
188
9c4e8ba3c4fa 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 def update_w(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
190 if self.focus:
9c4e8ba3c4fa 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 if self.selected:
9c4e8ba3c4fa 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._w.focus_attr = 'selected focus'
9c4e8ba3c4fa 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._w.attr = 'selected focus'
9c4e8ba3c4fa 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._w.focus_attr = 'focus'
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
196 self._w.attr = 'focus'
9c4e8ba3c4fa 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 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
198 if self.selected:
9c4e8ba3c4fa 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 self._w.focus_attr = 'selected'
9c4e8ba3c4fa 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._w.attr = 'selected'
9c4e8ba3c4fa 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 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
202 self._w.focus_attr = 'body'
9c4e8ba3c4fa 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 self._w.attr = 'body'
9c4e8ba3c4fa 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 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
206 self.selected = not self.selected
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
207 self.update_w()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
208
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
209
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
210 class ProjectList(ListWidget):
141
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
211
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
212 PROJECT_MODES = {
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
213 0: "id",
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
214 1: "key",
163
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
215 2: "desc",
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
216 3: "tree",
141
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
217 }
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
218
23
9c4e8ba3c4fa 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 def __init__(self, controller, rows):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
220 self.selection = []
9c4e8ba3c4fa 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.focused = 0
62
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
222 self.size = ()
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
223 self.top = 0
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
224 self.controller = controller
141
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
225 self.project_mode = 0
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
226
107
a23e8191c6bc Update project list when a new project was created
Björn Ricks <bjoern.ricks@intevation.de>
parents: 86
diff changeset
227 self.load_rows(rows)
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
228 self.header = urwid.LineBox(urwid.AttrWrap(urwid.Text("\n%s\n" %
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
229 _('List of registered projects')),'project_header'))
28
60c0bcdf01ab Unified parameter names of ProjectList and EntryList.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 27
diff changeset
230 self.footer = urwid.Edit()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
231 self.body = urwid.LineBox(urwid.Padding(urwid.AttrWrap(
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
232 self.listbox, 'entries'),('fixed left',1),('fixed right',1)))
28
60c0bcdf01ab Unified parameter names of ProjectList and EntryList.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 27
diff changeset
233 self.frame = urwid.Frame(self.body, header=self.header,
60c0bcdf01ab Unified parameter names of ProjectList and EntryList.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 27
diff changeset
234 footer=self.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
235 self.update_focus(self.focused)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
236 self._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
237
107
a23e8191c6bc Update project list when a new project was created
Björn Ricks <bjoern.ricks@intevation.de>
parents: 86
diff changeset
238 def load_rows(self, rows):
a23e8191c6bc Update project list when a new project was created
Björn Ricks <bjoern.ricks@intevation.de>
parents: 86
diff changeset
239 self.raw_rows = rows
141
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
240 self.update_rows()
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
241
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
242 def update_rows(self):
163
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
243 if self.project_mode == 3:
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
244 self.rows = self.create_project_tree()
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
245 else:
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
246 self.rows = self.create_project_list()
107
a23e8191c6bc Update project list when a new project was created
Björn Ricks <bjoern.ricks@intevation.de>
parents: 86
diff changeset
247 self.listbox = urwid.ListBox(urwid.SimpleListWalker(self.rows))
a23e8191c6bc Update project list when a new project was created
Björn Ricks <bjoern.ricks@intevation.de>
parents: 86
diff changeset
248
163
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
249 def create_project_list(self):
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
250 return [ProjectNode(x) for x in sorted(self.raw_rows,
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
251 key=lambda row: self._get_project_sort_key(row))]
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
252
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
253 def create_project_tree(self):
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
254 # create a simple one child tree until now
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
255 # this should be extended and improved in future
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
256 nodes = []
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
257 keys = []
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
258 for proj in sorted(self.raw_rows, key=lambda proj: proj.key):
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
259 k = proj.key[0]
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
260 if k in keys:
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
261 nodes.append(ProjectNode(proj, indent=3))
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
262 else:
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
263 keys.append(k)
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
264 nodes.append(ProjectNode(proj))
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
265 return nodes
1c01c061dfb3 Add new project mode to display a project tree
Björn Ricks <bjoern.ricks@intevation.de>
parents: 162
diff changeset
266
141
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
267 def _get_project_sort_key(self, proj):
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
268 return getattr(proj, self.PROJECT_MODES[self.project_mode])
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
269
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
270 def _total_time(self):
129
c8ae4ec4ba61 Put return statement on the next line
Björn Ricks <bjoern.ricks@intevation.de>
parents: 107
diff changeset
271 if not self.rows:
c8ae4ec4ba61 Put return statement on the next line
Björn Ricks <bjoern.ricks@intevation.de>
parents: 107
diff changeset
272 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
273 logger.debug("ProjectList: update projects 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
274 total = 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
275 for proj in self.rows:
34
a9f2e8fd8970 'NoneType' time values don't break getan while switching time mode anymore (issue1575).
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 28
diff changeset
276 tmp = proj._get_time()
a9f2e8fd8970 'NoneType' time values don't break getan while switching time mode anymore (issue1575).
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 28
diff changeset
277 if tmp and type(tmp) == int:
a9f2e8fd8970 'NoneType' time values don't break getan while switching time mode anymore (issue1575).
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 28
diff changeset
278 total += tmp
131
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
279 self.set_footer_info("All projects: %s %s"
64
94c2c3eeac9a Use set_footer_text method to set the footer text instead of
Björn Ricks <bjoern.ricks@intevation.de>
parents: 63
diff changeset
280 % (proj.mode[1], human_time(total)),
94c2c3eeac9a Use set_footer_text method to set the footer text instead of
Björn Ricks <bjoern.ricks@intevation.de>
parents: 63
diff changeset
281 "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
282
131
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
283 def set_footer_info(self, text, attr):
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
284 logger.debug("ProjectList: set_footer_info to '%s'" % text)
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
285 self._footer_info = (text, attr)
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
286 self.set_footer_text(text, attr, False)
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
287
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
288 def reset_footer(self):
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
289 logger.debug("ProjectList: reset_footer to '%s'" % self._footer_info[0])
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
290 self.set_footer_text(*self._footer_info)
3d5232dad59a Add methods to reset the ProjectList footer
Björn Ricks <bjoern.ricks@intevation.de>
parents: 129
diff changeset
291
23
9c4e8ba3c4fa 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 def update(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
293 logger.debug("ProjectList: update focused project row now.")
140
7413197aba45 Avoid traceback if no projects are available
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
294 if len(self.rows) > 0:
7413197aba45 Avoid traceback if no projects are available
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
295 self.rows[self.focused].update()
7413197aba45 Avoid traceback if no projects are available
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
296 self._total_time()
7413197aba45 Avoid traceback if no projects are available
Björn Ricks <bjoern.ricks@intevation.de>
parents: 138
diff changeset
297 self.controller.view.loop.draw_screen()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
298
9c4e8ba3c4fa 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 def update_all(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
300 logger.debug("ProjectList: update all project rows 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
301 for proj in self.rows:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
302 proj.update()
9c4e8ba3c4fa 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 self._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
304 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
305
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
306 def switch_time_mode(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
307 logger.debug("ProjectList: switch time mode 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
308 for proj in self.rows:
9c4e8ba3c4fa 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 proj.switch_time_mode()
24
c89721a3f0f8 Bugfix: switching the time mode in ProjectList will also update the displayed total time in the footer of ProjectList.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 23
diff changeset
310 self._total_time()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
311 self.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
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 def unhandled_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
314 logger.debug("ProjectList: unhandled keypress '%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
315
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
316 def select_project(self, project):
9c4e8ba3c4fa 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 for proj_node in self.rows:
27
1a90a126c415 Bugfix: fixed wrong attribute name while accessing raw projects of a ProjectNode.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 25
diff changeset
318 if proj_node.item.key == project.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
319 idx = self.rows.index(proj_node)
9c4e8ba3c4fa 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 self.update_focus(idx, self.focused)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
321 self.focused = idx
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
322 self.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
323 break
9c4e8ba3c4fa 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
141
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
325 def switch_project_order(self):
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
326 self.project_mode += 1
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
327 if self.project_mode >= len(self.PROJECT_MODES):
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
328 self.project_mode = 0
162
7e6f92773b03 Log when switching the project mode
Björn Ricks <bjoern.ricks@intevation.de>
parents: 161
diff changeset
329 logger.debug("Switching project mode to %s" % self.project_mode)
141
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
330 self.update_rows()
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
331 self.controller.update_project_list()
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
332 self.update_focus(0)
dafff6c3fa12 Add code to be able to sort the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 140
diff changeset
333
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
334
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
335 class EntryNode(urwid.WidgetWrap):
137
5a4946fd9e6d Update whitespace
Björn Ricks <bjoern.ricks@intevation.de>
parents: 135
diff changeset
336
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
337 def __init__(self, entry):
9c4e8ba3c4fa 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 self.selected = False
9c4e8ba3c4fa 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 self.focus = False
9c4e8ba3c4fa 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 self.item = entry
9c4e8ba3c4fa 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 w = self.update()
9c4e8ba3c4fa 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 self.__super.__init__(w)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
343 self.update_w()
9c4e8ba3c4fa 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 def update(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
346 logger.debug("EntryNode: update entry '%s'." % self.item.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
347 row = urwid.Text(' %s [%s] %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
348 % (format_datetime(self.item.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
349 short_time(self.item.duration().seconds),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
350 self.item.desc), wrap='clip')
9c4e8ba3c4fa 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.widget = urwid.AttrWrap(row, 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
352 self._w = self.widget
9c4e8ba3c4fa 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 self.update_w()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
354 return self._w
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
355
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
356 def update_w(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
357 if self.focus:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
358 if self.selected:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
359 self._w.focus_attr = 'selected focus entry'
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
360 self._w.attr = 'selected focus entry'
9c4e8ba3c4fa 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 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
362 self._w.focus_attr = 'focus entry'
9c4e8ba3c4fa 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 self._w.attr = 'focus entry'
9c4e8ba3c4fa 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 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
365 if self.selected:
9c4e8ba3c4fa 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._w.focus_attr = 'selected entry'
9c4e8ba3c4fa 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._w.attr = 'selected entry'
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
368 else:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
369 self._w.focus_attr = 'entry body'
9c4e8ba3c4fa 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 self._w.attr = 'entry body'
9c4e8ba3c4fa 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
9c4e8ba3c4fa 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 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
373 logger.debug("EntryNode: update selection of entry '%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
374 % self.item.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
375 self.selected = not self.selected
9c4e8ba3c4fa 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 self.update_w()
9c4e8ba3c4fa 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
71
c1664ea5a83b Add get_item method also for EntryNode to be able to receive an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 70
diff changeset
378 def get_item(self):
c1664ea5a83b Add get_item method also for EntryNode to be able to receive an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 70
diff changeset
379 return self.item
c1664ea5a83b Add get_item method also for EntryNode to be able to receive an entry
Björn Ricks <bjoern.ricks@intevation.de>
parents: 70
diff changeset
380
23
9c4e8ba3c4fa 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
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
382 class EntryList(ListWidget):
137
5a4946fd9e6d Update whitespace
Björn Ricks <bjoern.ricks@intevation.de>
parents: 135
diff changeset
383
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
384 def __init__(self, rows):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
385 self.selection = []
62
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
386 self.top = 0
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
387 self.size = ()
23
9c4e8ba3c4fa 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.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
389 self.rows = [EntryNode(x) for x in rows]
9c4e8ba3c4fa 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 listbox = urwid.ListBox(urwid.SimpleListWalker(self.rows))
9c4e8ba3c4fa 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 self.body = urwid.LineBox(urwid.Padding(urwid.AttrWrap(
9c4e8ba3c4fa 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 listbox, 'entry_body'),
9c4e8ba3c4fa 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 ('fixed left', 1), ('fixed right', 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
394 self.header = urwid.LineBox(urwid.AttrWrap(urwid.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
395 "\n%s\n"
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
396 % _('Last entries')),'entry_header'))
23
9c4e8ba3c4fa 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 self.footer = urwid.AttrWrap(urwid.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
398 self.frame = urwid.Frame(self.body, header=self.header,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
399 footer=self.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
400
9c4e8ba3c4fa 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 def set_rows(self, rows):
62
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
402 if rows:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
403 self.rows = [EntryNode(x) for x in rows]
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
404 else:
2b600cccf95e Add scrolling in entry list to be able to select all entries
Björn Ricks <bjoern.ricks@intevation.de>
parents: 43
diff changeset
405 self.rows = []
23
9c4e8ba3c4fa 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 self._update_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
407
9c4e8ba3c4fa 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
132
3b2a64542555 Use new style class for GetanView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 131
diff changeset
409 class GetanView(object):
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
410 palette = [
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
411 ('header', 'white', 'dark blue'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
412 ('project_header', 'white', 'dark cyan'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
413 ('entry_header', 'white', 'dark cyan'),
9c4e8ba3c4fa 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 ('footer', 'yellow', 'dark blue'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
415 ('entry_footer', 'white', 'dark blue'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
416 ('project_footer', 'white', 'dark blue'),
156
917ebd951741 Add color for the project_key in the project list
Björn Ricks <bjoern.ricks@intevation.de>
parents: 141
diff changeset
417 ('project_key', 'black', 'dark cyan'),
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
418 ('body', 'white', 'black'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
419 ('entry body', 'white', 'dark blue'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
420 ('entries', 'white', 'black'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
421 ('entry_body', 'white', 'dark blue'),
9c4e8ba3c4fa 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 ('focused entry', 'white', 'dark cyan'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
423 ('selected entry', 'yellow', 'light cyan'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
424 ('selected focus entry', 'yellow', 'dark cyan'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
425 ('info', 'white', 'dark red'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
426 ('focus', 'white', 'dark blue'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
427 ('selected', 'black', 'light green'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
428 ('selected focus', 'yellow', 'dark cyan'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
429 ('question', 'white', 'dark red'),
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
430 ('running', 'yellow', 'dark green'),
9c4e8ba3c4fa 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 ('paused_running', 'white', 'dark red'),
9c4e8ba3c4fa 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 def __init__(self, controller, proj_list, entr_list):
43
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 41
diff changeset
435 encoding = locale.getpreferredencoding()
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 41
diff changeset
436 urwid.set_encoding(encoding)
39d845d3fec4 Fix for #1638
Sascha L. Teichmann <teichmann@intevation.de>
parents: 41
diff changeset
437 logger.debug("used encoding: %s" % encoding)
23
9c4e8ba3c4fa 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 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
439 self.proj_list = proj_list
9c4e8ba3c4fa 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 self.entr_list = entr_list
9c4e8ba3c4fa 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.columns = urwid.Columns([
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
442 urwid.Padding(self.proj_list, ('fixed left',0),('fixed right',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
443 self.entr_list], 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
444
36
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
445 self.header = urwid.AttrWrap(urwid.Text('%s\n' % _('.: getan :.')),
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
446 'header')
e6f81aa329b1 Introduced i18n support; german and english translation available.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents: 34
diff changeset
447 self.footer = urwid.AttrWrap(urwid.Text(_('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
448 '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
449 self.col_list = self.columns.widget_list
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
450 view = urwid.AttrWrap(self.columns, 'body')
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
451 self.view = urwid.Frame(view, header=self.header,footer=self.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
452 self.state = PausedProjectsState(controller, self.proj_list)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
453
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
454 def update_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
455 logger.debug("GetanView: update view 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
456 view = urwid.AttrWrap(self.columns, 'body')
9c4e8ba3c4fa 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 self.view.set_body(view)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
458 self.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
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 def get_frame(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 return 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
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 def set_footer_text(self, text, attr, edit=False):
9c4e8ba3c4fa 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 if edit:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
465 logger.debug("GetanView: set footer text (edit): '%s'" % 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
466 self.view.set_footer(urwid.AttrWrap(urwid.Edit(text),attr))
9c4e8ba3c4fa 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 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
468 logger.debug("GetanView: set footer text: '%s'" % 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
469 self.view.set_footer(urwid.AttrWrap(urwid.Text(text),attr))
9c4e8ba3c4fa 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 run(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
472 self.loop = urwid.MainLoop(self.view, self.palette,
9c4e8ba3c4fa 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 screen=urwid.raw_display.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
474 unhandled_input=self.controller.unhandled_keypress,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
475 input_filter=self.controller.input_filter)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
476 self.loop.run()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
477
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
478 def unhandled_keypress(self, k):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
479 logger.warn("GetanView: unhandled keypress '%r'" % k)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
480
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
481 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
482 logger.info("GetanView: shutdown view.")
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
483 raise urwid.ExitMainLoop()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)