Changeset 11153:a53287e0dc74 in orange


Ignore:
Timestamp:
10/24/12 17:56:12 (18 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Allow links to be dropped on anchor handles.

Location:
Orange/OrangeCanvas
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/canvas/items/nodeitem.py

    r11138 r11153  
    250250    """ 
    251251 
    252     def __init__(self, parentWidgetItem, *args): 
    253         QGraphicsPathItem.__init__(self, parentWidgetItem, *args) 
    254         self.parentWidgetItem = parentWidgetItem 
     252    def __init__(self, parent, *args): 
     253        QGraphicsPathItem.__init__(self, parent, *args) 
    255254        self.setAcceptHoverEvents(True) 
    256255        self.setPen(QPen(Qt.NoPen)) 
     
    271270        self.anchored = False 
    272271 
     272        if isinstance(parent, NodeItem): 
     273            self.__parentNodeItem = parent 
     274        else: 
     275            self.__parentNodeItem = None 
     276 
    273277        self.__anchorPath = QPainterPath() 
    274278        self.__points = [] 
     
    279283 
    280284        self.__layoutRequested = False 
     285 
     286    def parentNodeItem(self): 
     287        """Return a parent `NodeItem` or `None` if this anchor's 
     288        parent is not a `NodeItem` instance. 
     289 
     290        """ 
     291        return self.__parentNodeItem 
    281292 
    282293    def setAnchorPath(self, path): 
  • Orange/OrangeCanvas/document/interactions.py

    r11151 r11153  
    123123            self.tmp_link_item.setSourceItem(None, anchor) 
    124124 
     125    def target_node_item_at(self, pos): 
     126        """Return a suitable NodeItem on which a link can be dropped. 
     127        """ 
     128        # Test for a suitable NodeAnchorItem or NodeItem at pos. 
     129        if self.direction == self.FROM_SOURCE: 
     130            anchor_type = items.SinkAnchorItem 
     131        else: 
     132            anchor_type = items.SourceAnchorItem 
     133 
     134        item = self.scene.item_at(pos, (anchor_type, items.NodeItem)) 
     135 
     136        if isinstance(item, anchor_type): 
     137            item = item.parentNodeItem() 
     138 
     139        return item 
     140 
    125141    def mousePressEvent(self, event): 
    126142        anchor_item = self.scene.item_at(event.scenePos(), 
     
    128144        if anchor_item and event.button() == Qt.LeftButton: 
    129145            # Start a new link starting at item 
    130             self.from_item = anchor_item.parentWidgetItem 
     146            self.from_item = anchor_item.parentNodeItem() 
    131147            if isinstance(anchor_item, items.SourceAnchorItem): 
    132148                self.direction = NewLinkAction.FROM_SOURCE 
     
    162178 
    163179        # `NodeItem` at the cursor position 
    164         item = self.scene.item_at(event.scenePos(), items.NodeItem) 
     180        item = self.target_node_item_at(event.scenePos()) 
    165181 
    166182        if self.current_target_item is not None and \ 
     
    199215    def mouseReleaseEvent(self, event): 
    200216        if self.tmp_link_item: 
    201             item = self.scene.item_at(event.scenePos(), items.NodeItem) 
     217            item = self.target_node_item_at(event.scenePos()) 
    202218            node = None 
    203219            stack = self.document.undoStack() 
Note: See TracChangeset for help on using the changeset viewer.