text: 
  # vim: set ts=4 sw=4 expandtab:
  
  from ApplicationConstants import Notification
  
  from pyjamas.ui.VerticalPanel import VerticalPanel
  from pyjamas.ui.FlexTable import FlexTable
  from pyjamas.ui.Label import Label
  
  from Grid import Grid
  
  import time
  
  class Summary(FlexTable):
  
      columns = [("Time", 5, 5), 
                 ("Description", None, 60),
                ]
      rows = 0
      cols = 0
      date = None
  
      def __init__(self):
          try:
              FlexTable.__init__(self)
              self.cols = len(self.columns)
              self.setVisible(False)
          except:
              raise
  
      def setEntries(self, entries):
        try:
          #tt = time.localtime(time.time())
          #tt = [0] * 9 # This needs --operator-funcs compile option
          tt = [0,0,0,0,0,0,0,0,0]
          if self.date:
              tt[0] = int(self.date[:4])
              tt[1] = int(self.date[4:6])
              tt[2] = int(self.date[6:8])
          tt[3] = 0
          tt[4] = 0
          tt[5] = 0
          tt[6] = -1
          tt[7] = -1
          tt[8] = -1
          timelines = {}
          for timeVO in entries:
              t1 = tt[0:]
              t2 = tt[0:]
              if not timeVO.start or not timeVO.end:
                  continue
              t1[3] = int(timeVO.start[:2])
              t1[4] = int(timeVO.start[3:])
              t2[3] = int(timeVO.end[:2])
              t2[4] = int(timeVO.end[3:])
              t1 = time.mktime(t1)
              t2 = time.mktime(t2)
              dt = t2 - t1
              project = timelines.get(timeVO.project.lower(), [0, timeVO.project, {}])
              project[0] = project[0] + dt
              descr = project[2].get(timeVO.description.lower(), [0, timeVO.description])
              descr[0] = descr[0] + dt
              project[2][timeVO.description.lower()] = descr
              timelines[timeVO.project.lower()] = project
          for row in range(self.getRowCount()):
              self.removeRow(0)
          self.rows = 0
          self.addHeader()
          projects = timelines.keys()
          projects.sort()
          for project in projects:
              self.addRow([self.HHMM(timelines[project][0]), timelines[project][1]])
              descriptions = timelines[project][2]
              descriptions = descriptions.keys()
              descriptions.sort()
              for desc in descriptions:
                  if timelines[project][2][desc][1]:
                      self.addRow(['', self.HHMM(timelines[project][2][desc][0]) + " " + timelines[project][2][desc][1]])
        except:
          raise
  
      def HHMM(self, t):
          t = t / 60  # From seconds to minutes
          hh = t / 60
          mm = t % 60
          return "%02d:%02d" % (hh, mm)
  
      def addHeader(self):
          # HH:MM|Description
          col = 0
          for label, maxLength, visibleLength in self.columns:
              self.setWidget(0, col, Label(label, wordWrap=False))
              col += 1
  
      def addRow(self, values):
          self.rows += 1
          col = -1
          for name, maxLength, visibleLength in self.columns:
              col += 1
              label = Label()
              label.setText(values[col])
              self.setWidget(self.rows, col, label)
  
  
  
  