Changeset 11038:51e701fc9845 in orange


Ignore:
Timestamp:
11/19/12 12:20:29 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Change the node text color, if the background is to dark.

Fixes #1240

Location:
Orange/OrangeWidgets
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Classify/OWClassificationTreeGraph.py

    r10552 r11038  
    1818         
    1919    def setR(self, r): 
     20        self.prepareGeometryChange() 
    2021        self.r = r 
    2122         
  • Orange/OrangeWidgets/OWTreeViewer2D.py

    r10743 r11038  
    6161        if self.scene(): 
    6262            self.scene().fixPos() 
    63          
     63 
     64 
     65def luminance(color): 
     66    """Return the `luminance`_ (sRGB color space) of the color. 
     67 
     68    .. _luminance: http://en.wikipedia.org/wiki/Luminance_(colorimetry) 
     69 
     70    """ 
     71    r, g, b, _ = color.getRgb() 
     72    Y = 0.2126 * r + 0.7152 * g + 0.0722 * b 
     73    return Y 
     74 
     75 
    6476class TextTreeNode(QGraphicsTextItem, graph_node): 
    65      
    66     borderRadius = pyqtProperty("int", 
    67                 lambda self: getattr(self, "_borderRadius", 0), 
    68                 lambda self, val: (setattr(self, "_borderRadius", val), self.update()) and None, 
    69                 doc="Rounded rect's border radius" 
    70                 ) 
    71     backgroundBrush = pyqtProperty("QBrush", 
    72                 lambda self: getattr(self, "_backgroundBrush", getattr(self.scene(), "defaultItemBrush", Qt.NoBrush)), 
    73                 lambda self, brush: (setattr(self, "_backgroundBrush", brush), self.update()) and None, 
    74                 doc="Background brush" 
    75                 ) 
    76     truncateText = pyqtProperty("bool", 
    77                 lambda self: getattr(self, "_truncateText", False), 
    78                 lambda self, val: (setattr(self, "_truncateText", val), self.updateContents()), 
    79                 doc="Truncate text") 
    80      
     77    """A Tree node with text. 
     78    """ 
     79    def setBorderRadius(self, r): 
     80        if self._borderRadius != r: 
     81            self.prepareGeometryChange() 
     82            self._borderRadius = r 
     83            self.update() 
     84 
     85    def borderRadius(self): 
     86        return getattr(self, "_borderRadius", 0) 
     87 
     88    borderRadius = pyqtProperty("int", fget=borderRadius, fset=setBorderRadius, 
     89                                doc="Rounded rect's border radius") 
     90 
     91    def setBackgroundBrush(self, brush): 
     92        """Set node's background brush. 
     93        """ 
     94        if self._backgroundBrush != brush: 
     95            self._backgroundBrush = QBrush(brush) 
     96            color = brush.color() 
     97            if luminance(color) > 30: 
     98                self.setDefaultTextColor(Qt.black) 
     99            else: 
     100                self.setDefaultTextColor(Qt.white) 
     101            self.update() 
     102 
     103    def backgroundBrush(self): 
     104        """Return the node's background brush. 
     105        """ 
     106        brush = getattr(self, "_backgroundBrush", 
     107                        getattr(self.scene(), "defaultItemBrush", Qt.NoBrush)) 
     108        return QBrush(brush) 
     109 
     110    backgroundBrush = pyqtProperty("QBrush", fget=backgroundBrush, 
     111                                   fset=setBackgroundBrush, 
     112                                   doc="Background brush") 
     113 
     114    def setTruncateText(self, truncate): 
     115        """Set the truncateText to truncate. If true the text will 
     116        be truncated to fit inside the node's box, otherwise it will 
     117        overflow. 
     118 
     119        """ 
     120        if self._truncateText != truncate: 
     121            self._truncateText = truncate 
     122            self.updateContents() 
     123 
     124    def truncateText(self): 
     125        return getattr(self, "_truncateText", False) 
     126 
     127    truncateText = pyqtProperty("bool", fget=truncateText, 
     128                                fset=setTruncateText, 
     129                                doc="Truncate text") 
     130 
    81131    def __init__(self, tree, parent, *args, **kwargs): 
    82132        QGraphicsTextItem.__init__(self, *args) 
    83133        graph_node.__init__(self, **kwargs) 
     134        self._borderRadius = 0 
     135        self._backgroundBrush = None 
     136        self._truncateText = False 
     137 
    84138        self.tree = tree 
    85139        self.parent = parent 
     
    88142        self.setFont(font) 
    89143        self.droplet = GraphicsDroplet(-5, 0, 10, 10, self, self.scene()) 
    90          
     144 
    91145        self.droplet.setPos(self.rect().center().x(), self.rect().height()) 
    92          
    93         self.connect(self.document(), SIGNAL("contentsChanged()"), self.updateContents) 
     146 
     147        self.connect(self.document(), SIGNAL("contentsChanged()"), 
     148                     self.updateContents) 
    94149        self.isOpen = True 
    95150        self.setFlag(QGraphicsItem.ItemIsSelectable, True) 
    96          
     151 
    97152    def setHtml(self, html): 
    98153        if qVersion() < "4.5": 
Note: See TracChangeset for help on using the changeset viewer.