Changeset 11182:70ae8e72389b in orange


Ignore:
Timestamp:
11/13/12 18:08:32 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Showing the dynamic link state in the canvas.

Location:
Orange/OrangeCanvas
Files:
5 edited

Legend:

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

    r11181 r11182  
    2121        QGraphicsPathItem.__init__(self, parent) 
    2222        assert(isinstance(parent, LinkItem)) 
     23 
    2324        self.__canvasLink = parent 
    2425        self.setAcceptHoverEvents(True) 
     
    4748    def setHoverState(self, state): 
    4849        self.__hover = state 
     50        self.__update() 
     51 
     52    def setCurvePenSet(self, pen, hoverPen): 
     53        if pen is not None: 
     54            self.normalPen = pen 
     55        if hoverPen is not None: 
     56            self.hoverPen = hoverPen 
    4957        self.__update() 
    5058 
     
    130138        self.__sourceName = "" 
    131139        self.__sinkName = "" 
     140 
     141        self.__dynamic = False 
     142        self.__dynamicEnabled = False 
    132143 
    133144        self.hover = False 
     
    328339    def setEnabled(self, enabled): 
    329340        QGraphicsObject.setEnabled(self, enabled) 
     341 
     342    def setDynamicEnabled(self, enabled): 
     343        if self.__dynamicEnabled != enabled: 
     344            self.__dynamicEnabled = enabled 
     345            if self.__dynamic: 
     346                self.__updatePen() 
     347 
     348    def isDynamicEnabled(self): 
     349        return self.__dynamicEnabled 
     350 
     351    def setDynamic(self, dynamic): 
     352        if self.__dynamic != dynamic: 
     353            self.__dynamic = dynamic 
     354            self.__updatePen() 
     355 
     356    def isDynamic(self): 
     357        return self.__dynamic 
     358 
     359    def __updatePen(self): 
     360        if self.__dynamic: 
     361            if self.__dynamicEnabled: 
     362                color = QColor(0, 150, 0, 150) 
     363            else: 
     364                color = QColor(150, 0, 0, 150) 
     365 
     366            normal = QPen(QBrush(color), 2.0) 
     367            hover = QPen(QBrush(color.darker(120)), 2.1) 
     368        else: 
     369            normal = QPen(QBrush(QColor("#9CACB4")), 2.0) 
     370            hover = QPen(QBrush(QColor("#7D7D7D")), 2.1) 
     371 
     372        self.curveItem.setCurvePenSet(normal, hover) 
  • Orange/OrangeCanvas/canvas/items/tests/test_linkitem.py

    r11138 r11182  
     1import time 
     2 
    13from ..linkitem import LinkItem 
    24 
     
    9092 
    9193        self.app.exec_() 
     94 
     95    def test_dynamic_link(self): 
     96        link = LinkItem() 
     97        anchor1 = AnchorPoint() 
     98        anchor2 = AnchorPoint() 
     99 
     100        self.scene.addItem(link) 
     101        self.scene.addItem(anchor1) 
     102        self.scene.addItem(anchor2) 
     103 
     104        link.setSourceItem(None, anchor1) 
     105        link.setSinkItem(None, anchor2) 
     106 
     107        anchor2.setPos(100, 100) 
     108 
     109        link.setSourceName("1") 
     110        link.setSinkName("2") 
     111 
     112        link.setDynamic(True) 
     113        self.assertTrue(link.isDynamic()) 
     114 
     115        link.setDynamicEnabled(True) 
     116        self.assertTrue(link.isDynamicEnabled()) 
     117 
     118        def advance(): 
     119            clock = time.clock() 
     120            link.setDynamic(clock > 3) 
     121            link.setDynamicEnabled(int(clock) % 2 == 0) 
     122            self.singleShot(0, advance) 
     123 
     124        advance() 
     125 
     126        self.app.exec_() 
  • Orange/OrangeCanvas/canvas/scene.py

    r11181 r11182  
    357357 
    358358        item.setEnabled(scheme_link.enabled) 
    359  
    360359        scheme_link.enabled_changed.connect(item.setEnabled) 
     360 
     361        if scheme_link.is_dynamic(): 
     362            item.setDynamic(True) 
     363            item.setDynamicEnabled(scheme_link.dynamic_enabled) 
     364            scheme_link.dynamic_enabled_changed.connect(item.setDynamicEnabled) 
    361365 
    362366        self.add_link_item(item) 
  • Orange/OrangeCanvas/scheme/link.py

    r11101 r11182  
    118118        """ 
    119119        return self.source_channel.dynamic and \ 
    120             issubclass(self.sink_type(), self.source_type()) 
     120            issubclass(self.sink_type(), self.source_type()) and \ 
     121            not (self.sink_type() is self.source_type()) 
    121122 
    122123    def enabled(self): 
  • Orange/OrangeCanvas/scheme/widgetsscheme.py

    r11135 r11182  
    22from functools import partial 
    33 
    4 from PyQt4.QtCore import QTimer 
     4from PyQt4.QtCore import QTimer, SIGNAL 
    55 
    66from .. import orngSignalManager 
     
    112112        widget.processingStateChanged.connect(node.set_processing_state) 
    113113 
     114        # TODO: Change how the signal is emitted in signal manager (should 
     115        # notify the SchemeLink directly). 
     116        widget.connect( 
     117           widget, 
     118           SIGNAL("dynamicLinkEnabledChanged(PyQt_PyObject, bool)"), 
     119           self.__on_dynamic_link_enabled_changed 
     120        ) 
     121 
    114122        return widget 
     123 
     124    def __on_dynamic_link_enabled_changed(self, link, enabled): 
     125        rev = dict(map(reversed, self.widget_for_node.items())) 
     126 
     127        source_node = rev[link.widgetFrom] 
     128        sink_node = rev[link.widgetTo] 
     129        source_channel = source_node.output_channel(link.signalNameFrom) 
     130        sink_channel = sink_node.input_channel(link.signalNameTo) 
     131 
     132        links = self.find_links(source_node, source_channel, 
     133                                sink_node, sink_channel) 
     134 
     135        if links: 
     136            link = links[0] 
     137            link.set_dynamic_enabled(enabled) 
    115138 
    116139    def close_all_open_widgets(self): 
Note: See TracChangeset for help on using the changeset viewer.