Ignore:
Timestamp:
11/19/13 14:36:17 (5 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added node title background highlights for selected nodes.

File:
1 edited

Legend:

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

    r11733 r11768  
    691691 
    692692 
     693class NameTextItem(QGraphicsTextItem): 
     694    def __init__(self, *args, **kwargs): 
     695        super(NameTextItem, self).__init__(*args, **kwargs) 
     696        self.__selected = False 
     697        self.__palette = None 
     698 
     699    def paint(self, painter, option, widget=None): 
     700        if self.__selected: 
     701            painter.save() 
     702            painter.setPen(QPen(Qt.NoPen)) 
     703            painter.setBrush(self.palette().color(QPalette.Highlight)) 
     704            doc = self.document() 
     705            margin = doc.documentMargin() 
     706            painter.translate(margin, margin) 
     707            offset = min(margin, 2) 
     708            for line in self._lines(doc): 
     709                rect = line.naturalTextRect() 
     710                painter.drawRoundedRect( 
     711                    rect.adjusted(-offset, -offset, offset, offset), 
     712                    3, 3 
     713                ) 
     714 
     715            painter.restore() 
     716 
     717        super(NameTextItem, self).paint(painter, option, widget) 
     718 
     719    def _blocks(self, doc): 
     720        block = doc.begin() 
     721        while block != doc.end(): 
     722            yield block 
     723            block = block.next() 
     724 
     725    def _lines(self, doc): 
     726        for block in self._blocks(doc): 
     727            blocklayout = block.layout() 
     728            for i in range(blocklayout.lineCount()): 
     729                yield blocklayout.lineAt(i) 
     730 
     731    def setSelectionState(self, state): 
     732        if self.__selected != state: 
     733            self.__selected = state 
     734            self.__updateDefaultTextColor() 
     735            self.update() 
     736 
     737    def setPalatte(self, palette): 
     738        if self.__palette != palette: 
     739            self.__palette = palette 
     740            self.__updateDefaultTextColor() 
     741            self.update() 
     742 
     743    def palette(self): 
     744        if self.__palette is None: 
     745            scene = self.scene() 
     746            if scene is not None: 
     747                return scene.palette() 
     748            else: 
     749                return QPalette() 
     750        else: 
     751            return self.__palette 
     752 
     753    def __updateDefaultTextColor(self): 
     754        if self.__selected: 
     755            role = QPalette.HighlightedText 
     756        else: 
     757            role = QPalette.WindowText 
     758        self.setDefaultTextColor(self.palette().color(role)) 
     759 
     760 
    693761class NodeItem(QGraphicsObject): 
    694762    """ 
     
    805873 
    806874        # Title caption item 
    807         self.captionTextItem = QGraphicsTextItem(self) 
     875        self.captionTextItem = NameTextItem(self) 
     876 
    808877        self.captionTextItem.setPlainText("") 
    809878        self.captionTextItem.setPos(0, 33) 
     
    11771246        if change == QGraphicsItem.ItemSelectedChange: 
    11781247            self.shapeItem.setSelected(value.toBool()) 
     1248            self.captionTextItem.setSelectionState(value.toBool()) 
    11791249        elif change == QGraphicsItem.ItemPositionHasChanged: 
    11801250            self.positionChanged.emit() 
Note: See TracChangeset for help on using the changeset viewer.