Package Gnumed :: Package timelinelib :: Package db :: Package objects :: Module event |
[frames] | no frames]

# Source Code for Module Gnumed.timelinelib.db.objects.event

      1  # Copyright (C) 2009, 2010, 2011  Rickard Lindberg, Roger Lindberg
      2  #
      3  # This file is part of Timeline.
      4  #
      5  # Timeline is free software: you can redistribute it and/or modify
      6  # it under the terms of the GNU General Public License as published by
      7  # the Free Software Foundation, either version 3 of the License, or
      8  # (at your option) any later version.
      9  #
     10  # Timeline is distributed in the hope that it will be useful,
     11  # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  # GNU General Public License for more details.
     14  #
     15  # You should have received a copy of the GNU General Public License
     16  # along with Timeline.  If not, see <http://www.gnu.org/licenses/>.
     17
     18
     19  from timelinelib.db.objects.timeperiod import TimePeriod
     20
     21
     22 -class Event(object):
     23
     24 -    def __init__(self, time_type, start_time, end_time, text, category=None,
     25                   fuzzy=False, locked=False, ends_today=False):
     26          self.time_type = time_type
     27          self.fuzzy = fuzzy
     28          self.locked = locked
     29          self.ends_today = ends_today
     30          self.id = None
     31          self.selected = False
     32          self.draw_ballon = False
     33          self.update(start_time, end_time, text, category)
     34          self.data = {}
     35
     36 -    def has_id(self):
     37          return self.id is not None
     38
     39 -    def set_id(self, id):
     40          self.id = id
     41
     42 -    def update(self, start_time, end_time, text, category=None, fuzzy=None,
     43                 locked=None, ends_today=None):
     44          """Change the event data."""
     45          self.time_period = TimePeriod(self.time_type, start_time, end_time)
     46          self.text = text
     47          self.category = category
     48          if ends_today is not None:
     49              if not self.locked:
     50                  self.ends_today = ends_today
     51          if fuzzy is not None:
     52              self.fuzzy = fuzzy
     53          if locked is not None:
     54              self.locked = locked
     55
     56 -    def update_period(self, start_time, end_time):
     57          """Change the event period."""
     58          self.time_period = TimePeriod(self.time_type, start_time, end_time)
     59
     60 -    def update_period_o(self, new_period):
     61          self.update_period(new_period.start_time, new_period.end_time)
     62
     63 -    def update_start(self, start_time):
     64          """Change the event data."""
     65          if start_time <= self.time_period.end_time:
     66              self.time_period = TimePeriod(
     67                  self.time_type, start_time, self.time_period.end_time)
     68              return True
     69          return False
     70
     71 -    def update_end(self, end_time):
     72          """Change the event data."""
     73          if end_time >= self.time_period.start_time:
     74              self.time_period = TimePeriod(
     75                  self.time_type, self.time_period.start_time, end_time)
     76              return True
     77          return False
     78
     79 -    def inside_period(self, time_period):
     80          """Wrapper for time period method."""
     81          return self.time_period.overlap(time_period)
     82
     83 -    def is_period(self):
     84          """Wrapper for time period method."""
     85          return self.time_period.is_period()
     86
     87 -    def mean_time(self):
     88          """Wrapper for time period method."""
     89          return self.time_period.mean_time()
     90
     91 -    def get_data(self, id):
     92          """
     93          Return data with the given id or None if no data with that id exists.
     94
     95          See set_data for information how ids map to data.
     96          """
     97          return self.data.get(id, None)
     98
     99 -    def set_data(self, id, data):
    100          """
    101          Set data with the given id.
    102
    103          Here is how ids map to data:
    104
    105              description - string
    106              icon - wx.Bitmap
    107          """
    108          self.data[id] = data
    109
    110 -    def has_data(self):
    111          """Return True if the event has associated data, or False if not."""
    112          for id in self.data:
    113              if self.data[id] != None:
    114                  return True
    115          return False
    116
    117 -    def get_label(self):
    118          """Returns a unicode label describing the event."""
    119          return u"%s (%s)" % (self.text, self.time_period.get_label())
    120
    121 -    def clone(self):
    122          # Objects of type datetime are immutable.
    123          new_event = Event(self.time_type, self.time_period.start_time,
    124                            self.time_period.end_time, self.text, self.category)
    125          # Description is immutable
    126          new_event.set_data("description", self.get_data("description") )
    127          # Icon is immutable in the sense that it is never changed by our
    128          # application.
    129          new_event.set_data("icon", self.get_data("icon"))
    130          new_event.set_data("hyperlink", self.get_data("hyperlink"))
    131          return new_event
    132
    133 -    def is_container(self):
    134          return False
    135
    136 -    def is_subevent(self):
    137          return False
    138
    139 -    def time_span(self):
    140          return self.time_period.end_time - self.time_period.start_time
    141