'Add and return a default constructed :class:`.NodeItem` for a
:class:`SchemeNode` instance `node`. If the `node` is already in
the scene do nothing and just return its item.'

def add_node(self, node):

    if (node in self.__item_for_node):
        return self.__item_for_node[node]
    item = self.new_node_item(node.description)
    if node.position:
        pos = QPointF(*node.position)
        item.setPos(pos)
    item.setTitle(node.title)
    item.setProcessingState(node.processing_state)
    item.setProgress(node.progress)
    for message in node.state_messages():
        item.setStateMessage(message)
    item.setStatusMessage(node.status_message())
    self.__item_for_node[node] = item
    node.position_changed.connect(self.__on_node_pos_changed)
    node.title_changed.connect(item.setTitle)
    node.progress_changed.connect(item.setProgress)
    node.processing_state_changed.connect(item.setProcessingState)
    node.state_message_changed.connect(item.setStateMessage)
    node.status_message_changed.connect(item.setStatusMessage)
    return self.add_node_item(item)
