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):
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)