def addNode(self, cls=None, point=None):
        """
        Creates a new node instance in the scene.  If the optional \
        cls parameter is not supplied, then the default node class \
        will be used when creating the node.  If a point is \
        supplied, then the node will be created at that position, \
        otherwise the node will be created under the cursor.
        
        :param      node    subclass of <XNode>
        :param      point   <QPointF>
        
        :return     <XNode> || None
        """
        # make sure we have a valid class
        if not cls:
            cls = self.defaultNodeClass()
            
        if not cls:
            return None
        
        # create the new node
        node = cls(self)
        node.setLayer(self.currentLayer())
        node.rebuild()
        self.addItem(node)
        
        if point == 'center':
            x = self.sceneRect().width() / 2.0
            y = self.sceneRect().height() / 2.0
            
            x -= (node.rect().width() / 2.0)
            y -= (node.rect().height() / 2.0)
            
            node.setPos(x, y)
            
        elif not point:
            pos    = self._mainView.mapFromGlobal(QCursor.pos())
            point  = self._mainView.mapToScene(pos)
            if ( point ):
                x = point.x() - node.rect().width() / 2.0
                y = point.y() - node.rect().height() / 2.0
                node.setPos(x, y)
        else:
            x = float(point.x())
            y = float(point.y())
            node.setPos(x, y)
        
        return node