def send(self, widget, channelname, value, signal_id): """ send method compatible with OWBaseWidget. """ scheme = self.scheme() try: node = scheme.node_for_widget(widget) except KeyError: # The Node/Widget was already removed from the scheme. log.debug("Node for %r is not in the scheme.", widget) return try: channel = node.output_channel(channelname) except ValueError: log.error("%r is not valid signal name for %r", channelname, node.description.name) return # Expand the signal_id with the unique widget id and the # channel name. This is needed for OWBaseWidget's input # handlers (Multiple flag). signal_id = (widget.widget_id, channelname, signal_id) SignalManager.send(self, node, channel, value, signal_id)
def __init__(self, scheme): SignalManager.__init__(self, scheme) scheme.installEventFilter(self) self.__scheme_deleted = False scheme.destroyed.connect(self.__on_scheme_destroyed) scheme.node_added.connect(self.on_node_added) scheme.node_removed.connect(self.on_node_removed) scheme.link_added.connect(self.link_added) scheme.link_removed.connect(self.link_removed)
def event(self, event): if event.type() == QEvent.UpdateRequest: if self.__scheme_deleted: log.debug("Scheme has been/is being deleted. No more " "signals will be delivered to any nodes.") event.setAccepted(True) return True # Retain a reference to the scheme until the 'process_queued' finishes # in SignalManager.event. scheme = self.scheme() return SignalManager.event(self, event)
def eventFilter(self, receiver, event): if event.type() == QEvent.DeferredDelete and receiver is self.scheme(): try: state = self.runtime_state() except AttributeError: # If the scheme (which is a parent of this object) is # already being deleted the SignalManager can also be in # the process of destruction (noticeable by its __dict__ # being empty). There is nothing really to do in this # case. state = None if state == SignalManager.Processing: log.info("Deferring a 'DeferredDelete' event for the Scheme " "instance until SignalManager exits the current " "update loop.") event.setAccepted(False) self.processingFinished.connect(self.scheme().deleteLater) self.__scheme_deleted = True return True return SignalManager.eventFilter(self, receiver, event)
def eventFilter(self, receiver, event): if event.type() == QEvent.DeferredDelete and receiver is self.scheme(): try: state = self.runtime_state() except AttributeError: # If the scheme (which is a parent of this object) is # already being deleted the SignalManager can also be in # the process of destruction (noticeable by its __dict__ # being empty). There is nothing really to do in this # case. state = None if state == SignalManager.Processing: log.info( "Deferring a 'DeferredDelete' event for the Scheme " "instance until SignalManager exits the current " "update loop." ) event.setAccepted(False) self.processingFinished.connect(self.scheme().deleteLater) self.__scheme_deleted = True return True return SignalManager.eventFilter(self, receiver, event)