'Create and add a :class:`.LinkItem` instance for a
:class:`SchemeLink` instance. If the link is already in the scene
do nothing and just return its :class:`.LinkItem`.'

def add_link(self, scheme_link):

    if (scheme_link in self.__item_for_link):
        return self.__item_for_link[scheme_link]
    source = self.__item_for_node[scheme_link.source_node]
    sink = self.__item_for_node[scheme_link.sink_node]
    item = self.new_link_item(source, scheme_link.source_channel, sink, scheme_link.sink_channel)
    item.setEnabled(scheme_link.enabled)
    scheme_link.enabled_changed.connect(item.setEnabled)
    if scheme_link.is_dynamic():
        item.setDynamic(True)
        item.setDynamicEnabled(scheme_link.dynamic_enabled)
        scheme_link.dynamic_enabled_changed.connect(item.setDynamicEnabled)
    item.setRuntimeState(scheme_link.runtime_state())
    scheme_link.state_changed.connect(item.setRuntimeState)
    self.add_link_item(item)
    self.__item_for_link[scheme_link] = item
    return item
