1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 from timelinelib.canvas.data.base import ItemBase
20 from timelinelib.canvas.data.immutable import ImmutableEvent
21 from timelinelib.canvas.data.item import TimelineItem
22 from timelinelib.canvas.drawing.drawers import get_progress_color
23
24
25 DEFAULT_COLOR = (200, 200, 200)
26 EXPORTABLE_FIELDS = (_("Text"), _("Description"), _("Start"), _("End"), _("Category"),
27 _("Fuzzy"), _("Locked"), _("Ends Today"), _("Hyperlink"),
28 _("Progress"), _("Progress Color"), _("Done Color"), _("Alert"),
29 _("Is Container"), _("Is Subevent"))
30
31
32 -class Event(ItemBase, TimelineItem):
33
35 ItemBase.__init__(self, db, id_, immutable_value)
36 self._category = None
37 self._container = None
38 self._milestone = False
39
46
48 self._update_category_id()
49 self._update_container_id()
50 self._update_sort_order()
51 with self._db.transaction("Save event") as t:
52 t.save_event(self._immutable_value, self.ensure_id())
53 return self
54
57
69
81
85
90
107
109 return not (self == other)
110
112 raise NotImplementedError("I don't believe this is in use.")
113
115 raise NotImplementedError("I don't believe this is in use.")
116
118 raise NotImplementedError("I don't believe this is in use.")
119
121 raise NotImplementedError("I don't believe this is in use.")
122
124 return "%s<id=%r, text=%r, time_period=%r, ...>" % (
125 self.__class__.__name__,
126 self.get_id(),
127 self.get_text(),
128 self.get_time_period()
129 )
130
133
134 - def get_text(self):
135 return self._immutable_value.text
136
137 - def set_text(self, text):
138 self._immutable_value = self._immutable_value.update(text=text.strip())
139 return self
140
141 text = property(get_text, set_text)
142
144 return self._category
145
151
153 self._category = category
154 return self
155
156 category = property(get_category, set_category)
157
159 return self._container
160
168
169 container = property(get_container, set_container)
170
172 return self._immutable_value.fuzzy
173
175 self._immutable_value = self._immutable_value.update(fuzzy=fuzzy)
176 return self
177
178 fuzzy = property(get_fuzzy, set_fuzzy)
179
181 return self._immutable_value.locked
182
186
187 locked = property(get_locked, set_locked)
188
191
196
197 ends_today = property(get_ends_today, set_ends_today)
198
201
205
206 description = property(get_description, set_description)
207
209 return self._immutable_value.icon
210
212 self._immutable_value = self._immutable_value.update(icon=icon)
213 return self
214
215 icon = property(get_icon, set_icon)
216
219
223
224 hyperlink = property(get_hyperlink, set_hyperlink)
225
227 return self._immutable_value.alert
228
230 self._immutable_value = self._immutable_value.update(alert=alert)
231 return self
232
233 alert = property(get_alert, set_alert)
234
236 return self._immutable_value.progress
237
241
242 progress = property(get_progress, set_progress)
243
246
250
251 sort_order = property(get_sort_order, set_sort_order)
252
258
262
263 default_color = property(get_default_color, set_default_color)
264
270
280
281 - def update(self, start_time, end_time, text, category=None, fuzzy=None,
282 locked=None, ends_today=None):
295
297 """
298 Return data with the given id or None if no data with that id exists.
299
300 See set_data for information how ids map to data.
301 """
302 if event_id == "description":
303 return self.description
304 elif event_id == "icon":
305 return self.icon
306 elif event_id == "hyperlink":
307 return self.hyperlink
308 elif event_id == "alert":
309 return self.alert
310 elif event_id == "progress":
311 return self.progress
312 elif event_id == "default_color":
313 if "default_color" in self._immutable_value:
314 return self._immutable_value.default_color
315 else:
316 return None
317 else:
318 raise Exception("should not happen")
319
321 """
322 Set data with the given id.
323
324 Here is how ids map to data:
325
326 description - string
327 icon - wx.Bitmap
328 """
329 if event_id == "description":
330 self.description = data
331 elif event_id == "icon":
332 self.icon = data
333 elif event_id == "hyperlink":
334 self.hyperlink = data
335 elif event_id == "alert":
336 self.alert = data
337 elif event_id == "progress":
338 self.progress = data
339 elif event_id == "default_color":
340 self.default_color = data
341 else:
342 raise Exception("should not happen")
343
349
353
354 data = property(get_whole_data, set_whole_data)
355
357 """Return True if the event has associated data, or False if not."""
358 for event_id in DATA_FIELDS:
359 if self.get_data(event_id) is not None:
360 return True
361 return False
362
364 """Return True if the event has associated data to be displayed in a balloon."""
365 return (self.get_data("description") is not None or
366 self.get_data("icon") is not None)
367
369 """Returns a unicode label describing the event."""
370 event_label = u"%s (%s)" % (
371 self.text,
372 time_type.format_period(self.get_time_period()),
373 )
374 duration_label = self._get_duration_label(time_type)
375 if duration_label != "":
376 return u"%s %s: %s" % (event_label, _("Duration"), duration_label)
377 else:
378 return event_label
379
385
388
391
394
397
399 self._milestone = value
400
402 return self._milestone
403
404
405 DATA_FIELDS = [
406 "description",
407 "icon",
408 "hyperlink",
409 "alert",
410 "progress",
411 "default_color",
412 ]
413