docs: def rebuildMonth( self ):
          """
          Rebuilds the current item in month mode.
          """
          scene = self.scene()
          if ( not scene ):
              return
          
          start_date  = self.dateStart()
          end_date    = self.dateEnd()
          min_date    = scene.minimumDate()
          max_date    = scene.maximumDate()
          
          # make sure our item is visible
          if ( not (min_date <= end_date and start_date <= max_date)):
              self.hide()
              self.setPath(QPainterPath())
              return
          
          # make sure we have valid range information
          if ( start_date < min_date ):
              start_date    = min_date
              start_inrange = False
          else:
              start_inrange = True
          
          if ( max_date < end_date ):
              end_date     = max_date
              end_inrange  = False
          else:
              end_inrange  = True
          
          start_rect = scene.dateRect(start_date)
          end_rect   = scene.dateRect(end_date)
          
          if ( not (start_rect.isValid() and end_rect.isValid()) ):
              self.hide()
              return
          
          # rebuild an all day path
          path = QPainterPath()
          self.setPos(0, 0)
          
          pad         = 2
          offset      = 18
          height      = 16
          
          min_left    = 10
          max_right   = scene.width() - 16
          delta_h     = start_rect.height()
          
          # draw the all day event
          if ( self.isAllDay() ):
              top   = start_rect.top()
              left  = start_rect.left() + 3
              first = start_inrange
              
              while ( top <= end_rect.top() ):
                  sub_path  = QPainterPath()
                  
                  # calculate the end position
                  if ( end_rect.top() - 2 <= top and end_inrange ):
                      at_end = True
                      right = end_rect.right() - pad
                  else:
                      at_end = False
                      right = max_right
                  
                  if ( first ):
                      sub_path.moveTo(left, top + offset)
                      text_left = left + 4
                  else:
                      sub_path.moveTo(left + height / 2, top + offset)
                      text_left = left + height / 2 + 2
                  
                  if ( at_end ):
                      sub_path.lineTo(right, top + offset)
                      sub_path.lineTo(right, top + offset + height)
                  else:
                      sub_path.lineTo(right - height / 2, top + offset)
                      sub_path.lineTo(right, top + offset + height / 2)
                      sub_path.lineTo(right - height / 2, top + offset + height)
                  
                  if ( first ):
                      sub_path.lineTo(left, top + offset + height)
                      sub_path.lineTo(left, top + offset)
                  else:
                      sub_path.lineTo(left + height / 2, top + offset + height)
                      sub_path.lineTo(left, top + offset + height / 2)
                      sub_path.lineTo(left + height / 2, top + offset)
                  
                  path.addPath(sub_path)
                  
                  data = (text_left,
                          top + offset + 1,
                          right,
                          height,
                          Qt.AlignLeft | Qt.AlignVCenter,
                          self.title())
                  
                  self._textData.append(data)
                  
                  left = min_left
                  top += delta_h
                  first = False
          else:
              text = '%s: (%s)' % (self.timeStart().toString('h:mm ap'), 
                                   self.title())
              
              font   = scene.font()
              left   = start_rect.left() + 2 * pad
              top    = start_rect.top() + offset
              
              path.addText(left, top + height / 2, font, text)
          
          # setup the path for this item
          self.setPath(path)
          self.show()
          
          # make sure there are no collisions
          while ( self.collidingItems() ):
              self.setPos(self.pos().x(), self.pos().y() + height + 2)
              
              # hide the item if out of the visible scope
              if ( delta_h - offset <= self.pos().y() + height ):
                  self.hide()
                  break