Changeset 11169:c0f13424584c in orange


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

Fixed connections in TypedSignalMapper and simplified PyQt 4.8 compatibility.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/canvas/scene.py

    r11163 r11169  
    99                        QGraphicsItem 
    1010 
    11 from PyQt4.QtCore import Qt, QPointF, QRectF, QSizeF, QLineF, \ 
     11from PyQt4.QtCore import Qt, QObject, QPointF, QRectF, QSizeF, QLineF, \ 
    1212                         QBuffer, QSignalMapper 
    1313 
     
    3030 
    3131    """ 
     32 
     33    def unwrap(obj): 
     34        return sip.unwrapinstance(sip.cast(obj, QObject)) 
     35 
    3236    class TypedSignalMapper(QSignalMapper): 
    3337        pyMapped = Signal(pyType) 
     
    3842 
    3943        def setPyMapping(self, sender, mapped): 
    40             self.__mapping[sender] = mapped 
    41             sender.destroyed.connect(self.removeMappings) 
     44            sender_id = unwrap(sender) 
     45            self.__mapping[sender_id] = mapped 
     46            sender.destroyed.connect(self.removePyMappings) 
    4247 
    4348        def removePyMappings(self, sender): 
    44             del self.__mapping[sender] 
    45             sender.destroyed.disconnect(self.removeMappings) 
     49            sender_id = unwrap(sender) 
     50            del self.__mapping[sender_id] 
     51            sender.destroyed.disconnect(self.removePyMappings) 
    4652 
    4753        def pyMap(self, sender=None): 
    4854            if sender is None: 
    4955                sender = self.sender() 
    50             mapped = self.__mapping[sender] 
     56 
     57            sender_id = unwrap(sender) 
     58            mapped = self.__mapping[sender_id] 
    5159            self.pyMapped.emit(mapped) 
    5260 
     
    582590 
    583591    if PYQT_VERSION_STR < "4.9": 
    584         # For QGraphicsObject subclasses items/itemAt return a QGraphicsItem 
     592        # For QGraphicsObject subclasses items/itemAt returns a QGraphicsItem 
    585593        # wrapper instance and not the actual class instance. 
     594        def _toGraphicsObjectIfPossible(self, item): 
     595            """Return the item instance as a QGraphicsObject (or subclass) 
     596            if possible, otherwise return item unmodified. 
     597 
     598            """ 
     599            graphicsObject = item.toGraphicsObject() 
     600            if graphicsObject is not None: 
     601                return graphicsObject 
     602            else: 
     603                return item 
     604 
    586605        def itemAt(self, *args, **kwargs): 
    587606            item = QGraphicsScene.itemAt(self, *args, **kwargs) 
    588             if type(item) is QGraphicsItem: 
    589                 for obj in self.__node_items: 
    590                     if sip.unwrapinstance(sip.cast(obj, QGraphicsItem)) == \ 
    591                             sip.unwrapinstance(item): 
    592                         return obj 
    593             return item 
     607            return self._toGraphicsObjectIfPossible(item) 
    594608 
    595609        def items(self, *args, **kwargs): 
    596610            items = QGraphicsScene.items(self, *args, **kwargs) 
    597             instance_map = \ 
    598                 dict((sip.unwrapinstance(sip.cast(obj, QGraphicsItem)), obj) 
    599                      for obj in self.__node_items) 
    600             for i, item in enumerate(items): 
    601                 if type(item) is QGraphicsItem and \ 
    602                         sip.unwrapinstance(item) in instance_map: 
    603                         items[i] = instance_map[sip.unwrapinstance(item)] 
    604             return items 
    605  
    606         def _unwrap_node(self, node): 
    607             unwrapped = sip.unwrapinstance(node) 
    608             for item in self.__node_items: 
    609                 unwrapped_item = \ 
    610                     sip.unwrapinstance(sip.cast(item, QGraphicsItem)) 
    611                 if unwrapped_item == unwrapped: 
    612                     return item 
    613             else: 
    614                 raise ValueError 
     611            return map(self._toGraphicsObjectIfPossible, items) 
    615612 
    616613    def mousePressEvent(self, event): 
Note: See TracChangeset for help on using the changeset viewer.