Overloads the default QGraphicsItem paint event to update the \
        node when necessary and call the draw method for the node.
        
        :param      painter     <QPainter>
        :param      option      <QStyleOptionGraphicsItem>
        :param      widget      <QWidget>

def paint(self, painter, option, widget):
        """
        Overloads the default QGraphicsItem paint event to update the \
        node when necessary and call the draw method for the node.
        
        :param      painter     <QPainter>
        :param      option      <QStyleOptionGraphicsItem>
        :param      widget      <QWidget>
        """
        # rebuild when dirty
        if self.isDirty():
            self.rebuild()
        
        painter.save()
        painter.setOpacity( self.opacity() )
        
        if self.drawHotspotsUnderneath():
            self.drawHotspots(painter)
        
        if self.isEnabled():
            painter.setPen(self.penColor())
            painter.setBrush(self.brush())
        else:
            painter.setPen(self.disabledPenColor())
            painter.setBrush(self.disabledBrush())
        
        # draw the item
        self.draw(painter, option, widget)
        
        if not self.drawHotspotsUnderneath():
            self.drawHotspots(painter)
        
        painter.restore()