Changeset 11185:528087d3f1bb in orange


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

Indicate annotation items's selection state.

Location:
Orange/OrangeCanvas
Files:
3 edited

Legend:

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

    r11172 r11185  
    33 
    44from PyQt4.QtGui import ( 
    5     QGraphicsItem, QGraphicsPathItem, QGraphicsWidget, 
    6     QGraphicsTextItem, QPainterPath, QPainterPathStroker, 
    7     QPen, QPolygonF 
     5    QGraphicsItem, QGraphicsPathItem, QGraphicsWidget, QGraphicsTextItem, 
     6    QGraphicsDropShadowEffect, QPainterPath, QPainterPathStroker, 
     7    QPolygonF, QColor, QPen, QBrush 
    88) 
    99 
    1010from PyQt4.QtCore import ( 
    11     Qt, QSizeF, QRectF, QLineF, QEvent, qVersion 
     11    Qt, QPointF, QSizeF, QRectF, QLineF, QEvent, qVersion 
    1212) 
    1313 
     
    4646        Annotation.__init__(self, parent, **kwargs) 
    4747        self.setFlag(QGraphicsItem.ItemIsMovable) 
     48        self.setFlag(QGraphicsItem.ItemIsSelectable) 
    4849 
    4950        self.setFocusPolicy(Qt.ClickFocus) 
     
    8990        """ 
    9091        return self.__framePathItem.pen() 
     92 
     93    def setFrameBrush(self, brush): 
     94        """Set the frame brush. 
     95        """ 
     96        self.__framePathItem.setBrush(brush) 
     97 
     98    def frameBrush(self): 
     99        """Return the frame brush. 
     100        """ 
     101        return self.__framePathItem.brush() 
    91102 
    92103    def setPlainText(self, text): 
     
    220231        return Annotation.sceneEventFilter(self, obj, event) 
    221232 
     233    def itemChange(self, change, value): 
     234        if change == QGraphicsItem.ItemSelectedHasChanged: 
     235            if self.isSelected(): 
     236                self.setFramePen(QPen(Qt.DashDotLine)) 
     237            else: 
     238                self.setFramePen(QPen(Qt.NoPen)) 
     239 
     240        return Annotation.itemChange(self, change, value) 
     241 
    222242 
    223243class ArrowItem(GraphicsPathObject): 
     
    290310        Annotation.__init__(self, parent, **kwargs) 
    291311        self.setFlag(QGraphicsItem.ItemIsMovable) 
     312        self.setFlag(QGraphicsItem.ItemIsSelectable) 
     313 
    292314        self.setFocusPolicy(Qt.ClickFocus) 
    293315 
     
    296318 
    297319        self.__line = line 
     320        self.__color = QColor(Qt.red) 
    298321        self.__arrowItem = ArrowItem(self) 
    299322        self.__arrowItem.setLine(line) 
    300         self.__arrowItem.setBrush(Qt.red) 
     323        self.__arrowItem.setBrush(self.__color) 
    301324        self.__arrowItem.setPen(QPen(Qt.NoPen)) 
     325 
     326        self.__shadow = QGraphicsDropShadowEffect( 
     327            blurRadius=5, offset=QPointF(0.05, 0.05) 
     328        ) 
     329 
     330        self.__arrowItem.setGraphicsEffect(self.__shadow) 
     331        self.__shadow.setEnabled(True) 
    302332 
    303333    def setLine(self, line): 
     
    323353            geom.translate(self.pos()) 
    324354            self.setGeometry(geom) 
     355 
     356    def setColor(self, color): 
     357        if self.__color != color: 
     358            self.__color = QColor(color) 
     359            self.__updateBrush() 
     360 
     361    def color(self): 
     362        return QColor(self.__color) 
    325363 
    326364    def adjustGeometry(self): 
     
    347385 
    348386    def setLineWidth(self, lineWidth): 
     387        """Set the arrow line width. 
     388        """ 
    349389        self.__arrowItem.setLineWidth(lineWidth) 
    350390 
    351391    def lineWidth(self): 
     392        """Return the arrow line width. 
     393        """ 
    352394        return self.__arrowItem.lineWidth() 
    353395 
     
    356398        return self.mapFromItem(self.__arrowItem, arrow_shape) 
    357399 
    358 #    def paint(self, painter, option, widget=None): 
    359 #        painter.drawRect(self.geometry().translated(-self.pos())) 
    360 #        return Annotation.paint(self, painter, option, widget) 
     400    def itemChange(self, change, value): 
     401        if change == QGraphicsItem.ItemSelectedHasChanged: 
     402            self.__updateBrush() 
     403 
     404        return Annotation.itemChange(self, change, value) 
     405 
     406    def __updateBrush(self): 
     407        """Update the arrow brush. 
     408        """ 
     409        if self.isSelected(): 
     410            color = self.__color.darker(150) 
     411        else: 
     412            color = self.__color 
     413 
     414        self.__arrowItem.setBrush(color) 
  • Orange/OrangeCanvas/canvas/items/tests/test_annotationitem.py

    r11160 r11185  
     1import math 
     2import time 
     3 
     4from PyQt4.QtGui import QColor 
    15from PyQt4.QtCore import Qt, QRectF, QLineF 
    26 
     
    4246        item = ArrowAnnotation() 
    4347        item.setPos(10, 10) 
    44         item.setLine(QLineF(10, 10, 200, 400)) 
     48        item.setLine(QLineF(10, 10, 200, 200)) 
    4549 
    4650        self.scene.addItem(item) 
    4751        item.setLineWidth(5) 
    4852 
     53        def advance(): 
     54            clock = time.clock() * 10 
     55            item.setLineWidth(5 + math.sin(clock) * 5) 
     56            item.setColor(QColor(Qt.red).lighter(100 + 30 * math.cos(clock))) 
     57            self.singleShot(0, advance) 
     58 
     59        advance() 
     60 
    4961        self.app.exec_() 
  • Orange/OrangeCanvas/document/interactions.py

    r11164 r11185  
    758758        control.rectEdited.connect(item.setGeometry) 
    759759 
    760         item.setFramePen(QPen(Qt.DashLine)) 
     760        item.setFramePen(QPen(Qt.DashDotLine)) 
    761761 
    762762        self.item = item 
     
    810810        if self.item is None: 
    811811            item = self.scene.item_at(pos, items.ArrowAnnotation) 
    812             if item is not None: 
     812            if item is not None and not item.hasFocus(): 
    813813                self.editItem(item) 
    814814                return True 
Note: See TracChangeset for help on using the changeset viewer.