Mercurial > getan > getan
comparison getan/view.py @ 226:f8571308abef
Move ProjectNode and EntryNode to its own module
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Fri, 05 Apr 2013 20:16:06 +0200 |
parents | c8f85809607b |
children | 1b29cc99f457 |
comparison
equal
deleted
inserted
replaced
225:f958ce12ba5a | 226:f8571308abef |
---|---|
126 self.set_focus(0) | 126 self.set_focus(0) |
127 | 127 |
128 def content_focus_changed(self): | 128 def content_focus_changed(self): |
129 pass | 129 pass |
130 | 130 |
131 class ProjectNode(urwid.WidgetWrap): | |
132 MODES = [ | |
133 (0, _('Total')), | |
134 (1, _('Year')), | |
135 (2, _('Month')), | |
136 (3, _('Week')), | |
137 (4, _('Day')) | |
138 ] | |
139 | |
140 def __init__(self, proj, mode=3, indent=0): | |
141 self.selected = False | |
142 self.focus = False | |
143 self.indent = indent | |
144 self.mode = self.MODES[mode] | |
145 self.item = proj | |
146 w = self.update() | |
147 self.__super.__init__(w) | |
148 self.update_w() | |
149 | |
150 def update(self): | |
151 logger.debug("Update ProjectNode '%s'" % self.item.key) | |
152 time_str = self._get_formatted_time() | |
153 proj_desc = self.item.desc | |
154 if proj_desc is None: | |
155 proj_desc = "" | |
156 | |
157 description = urwid.Text([' ' * self.indent, | |
158 ('project_key', self.item.key), | |
159 (' '), | |
160 (proj_desc)], wrap="clip") | |
161 if self._get_time(): | |
162 time = urwid.Text('%s (%s)' % (self.mode[1], time_str)) | |
163 else: | |
164 time = urwid.Text('') | |
165 self.widget = urwid.AttrWrap(urwid.Columns([description, time]),None) | |
166 self._w = self.widget | |
167 return self._w | |
168 | |
169 def _get_formatted_time(self): | |
170 return human_time(self._get_time()) | |
171 | |
172 def _get_time(self): | |
173 if self.mode == self.MODES[0]: | |
174 return self.item.total | |
175 if self.mode == self.MODES[1]: | |
176 return self.item.year() | |
177 if self.mode == self.MODES[2]: | |
178 return self.item.month() | |
179 if self.mode == self.MODES[3]: | |
180 return self.item.week() | |
181 if self.mode == self.MODES[4]: | |
182 return self.item.day() | |
183 return self.item.week() | |
184 | |
185 def get_item(self): | |
186 return self.item | |
187 | |
188 def switch_time_mode(self): | |
189 tmp = self.mode[0] + 1 | |
190 if tmp > 4: | |
191 self.mode = self.MODES[0] | |
192 else: | |
193 self.mode = self.MODES[tmp] | |
194 self.update() | |
195 | |
196 def update_w(self): | |
197 if self.focus: | |
198 if self.selected: | |
199 self._w.focus_attr = 'selected focus' | |
200 self._w.attr = 'selected focus' | |
201 else: | |
202 self._w.focus_attr = 'focus' | |
203 self._w.attr = 'focus' | |
204 else: | |
205 if self.selected: | |
206 self._w.focus_attr = 'selected' | |
207 self._w.attr = 'selected' | |
208 else: | |
209 self._w.focus_attr = 'body' | |
210 self._w.attr = 'body' | |
211 | |
212 def select(self): | |
213 self.selected = not self.selected | |
214 self.update_w() | |
215 | 131 |
216 | 132 |
217 class ProjectList(ListWidget): | 133 class ProjectList(ListWidget): |
218 | 134 |
219 PROJECT_MODES = { | 135 PROJECT_MODES = { |
320 self.project_mode = 0 | 236 self.project_mode = 0 |
321 logger.debug("Switching project mode to %s" % self.project_mode) | 237 logger.debug("Switching project mode to %s" % self.project_mode) |
322 self.update_rows() | 238 self.update_rows() |
323 self.set_focus(0) | 239 self.set_focus(0) |
324 | 240 |
325 | 241 def content_focus_changed(self): |
326 class EntryNode(urwid.WidgetWrap): | 242 item = self.item_in_focus() |
327 | 243 logger.info("Conten in focus changed %s" % item) |
328 def __init__(self, entry): | 244 if item: |
329 self.selected = False | 245 self.controller.update_entries(item) |
330 self.focus = False | |
331 self.item = entry | |
332 w = self.update() | |
333 self.__super.__init__(w) | |
334 self.update_w() | |
335 | |
336 def update(self): | |
337 logger.debug("EntryNode: update entry '%s'." % self.item.desc) | |
338 row = urwid.Text(' %s [%s] %s' \ | |
339 % (format_datetime(self.item.start), | |
340 short_time(self.item.duration().seconds), | |
341 self.item.desc), wrap='clip') | |
342 self.widget = urwid.AttrWrap(row, None) | |
343 self._w = self.widget | |
344 self.update_w() | |
345 return self._w | |
346 | |
347 def update_w(self): | |
348 if self.focus: | |
349 if self.selected: | |
350 self._w.focus_attr = 'selected focus entry' | |
351 self._w.attr = 'selected focus entry' | |
352 else: | |
353 self._w.focus_attr = 'focus entry' | |
354 self._w.attr = 'focus entry' | |
355 else: | |
356 if self.selected: | |
357 self._w.focus_attr = 'selected entry' | |
358 self._w.attr = 'selected entry' | |
359 else: | |
360 self._w.focus_attr = 'entry body' | |
361 self._w.attr = 'entry body' | |
362 | |
363 def select(self): | |
364 logger.debug("EntryNode: update selection of entry '%s'" | |
365 % self.item.desc) | |
366 self.selected = not self.selected | |
367 self.update_w() | |
368 | |
369 def get_item(self): | |
370 return self.item | |
371 | 246 |
372 | 247 |
373 class EntryList(ListWidget): | 248 class EntryList(ListWidget): |
374 | 249 |
375 def __init__(self, rows): | 250 def __init__(self, rows): |