Changeset 8712:70a217e0dda8 in orange


Ignore:
Timestamp:
08/15/11 12:12:36 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
05b6054d8fe53d519a89875373f9d31a643f6dfc
Message:

Add support for a per-plot QPalette, that is equal to the application palette by default.

Location:
orange/OrangeWidgets
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Visualize Qt/OWLinProjQt.py

    r8696 r8712  
    199199        self.graph.contPalette = dlg.getContinuousPalette("contPalette") 
    200200        self.graph.discPalette = dlg.getDiscretePalette("discPalette") 
    201         self.graph.setCanvasBackground(dlg.getColor("Canvas")) 
     201         
     202        p = self.graph.palette() 
     203        p.setColor(QPalette.Base, dlg.getColor("Canvas")) 
     204        self.graph.set_palette(p) 
    202205 
    203206        apply([self.zoomSelectToolbar.actionZooming, self.zoomSelectToolbar.actionRectangleSelection, self.zoomSelectToolbar.actionPolygonSelection][self.toolbarSelection], []) 
     
    348351        c.createContinuousPalette("contPalette", "Continuous Palette") 
    349352        box = c.createBox("otherColors", "Other Colors") 
    350         c.createColorButton(box, "Canvas", "Canvas color", QColor(Qt.white)) 
     353        c.createColorButton(box, "Canvas", "Canvas color", self.graph.color(QPalette.Base)) 
    351354        c.setColorSchemas(self.colorSettings, self.selectedSchemaIndex) 
    352355        return c 
  • orange/OrangeWidgets/Visualize Qt/OWParallelCoordinatesQt.py

    r8710 r8712  
    260260        c.createContinuousPalette("contPalette", "Continuous Palette") 
    261261        box = c.createBox("otherColors", "Other Colors") 
    262         c.createColorButton(box, "Canvas", "Canvas color", QColor(Qt.white)) 
     262        c.createColorButton(box, "Canvas", "Canvas color", self.graph.color(QPalette.Base)) 
    263263        c.setColorSchemas(self.colorSettings, self.selectedSchemaIndex) 
    264264        return c 
  • orange/OrangeWidgets/Visualize Qt/OWScatterPlotGraphQt.py

    r8696 r8712  
    163163            Create a single curve with different points 
    164164        """ 
     165         
     166        def_color = self.color(QPalette.Text) 
     167        def_size = self.point_width 
     168        def_shape = self.curveSymbols[0] 
    165169 
    166170        if colorIndex != -1: 
     
    169173            else: 
    170174                colorData = [QColor(*self.discPalette.getRGB(i)) for i in self.originalData[colorIndex]] 
    171         else: colorData = [Qt.black] 
     175        else: colorData = [def_color] 
    172176 
    173177        if sizeIndex != -1: 
    174178            sizeData = [MIN_SHAPE_SIZE + round(i * self.pointWidth) for i in self.noJitteringScaledData[sizeIndex]] 
    175179        else: 
    176             sizeData = [self.pointWidth] 
     180            sizeData = [def_size] 
    177181             
    178182        if shapeIndex != -1 and self.dataDomain[shapeIndex].varType == orange.VarTypes.Discrete: 
    179183            shapeData = [self.curveSymbols[int(i)] for i in self.originalData[shapeIndex]] 
    180184        else: 
    181             shapeData = [self.curveSymbols[0]] 
     185            shapeData = [def_shape] 
    182186             
    183187        if labelAttr and labelAttr in [self.rawData.domain.getmeta(mykey).name for mykey in self.rawData.domain.getmetas().keys()] + [var.name for var in self.rawData.domain]: 
     
    209213            varValues = getVariableValuesSorted(self.dataDomain[discColorIndex]) 
    210214            for ind in range(num): 
    211                 self.legend().add_item(self.dataDomain[discColorIndex].name, varValues[ind], OWPoint(OWPoint.Ellipse, self.discPalette[ind], self.pointWidth)) 
     215                self.legend().add_item(self.dataDomain[discColorIndex].name, varValues[ind], OWPoint(def_shape, self.discPalette[ind], def_size)) 
    212216 
    213217        if discShapeIndex != -1: 
     
    215219            varValues = getVariableValuesSorted(self.dataDomain[discShapeIndex]) 
    216220            for ind in range(num): 
    217                 self.legend().add_item(self.dataDomain[discShapeIndex].name, varValues[ind], OWPoint(self.curveSymbols[ind], Qt.black, self.pointWidth)) 
     221                self.legend().add_item(self.dataDomain[discShapeIndex].name, varValues[ind], OWPoint(self.curveSymbols[ind], def_color, def_size)) 
    218222 
    219223        if discSizeIndex != -1: 
     
    221225            varValues = getVariableValuesSorted(self.dataDomain[discSizeIndex]) 
    222226            for ind in range(num): 
    223                 self.legend().add_item(self.dataDomain[discSizeIndex].name, varValues[ind], OWPoint(OWPoint.Ellipse, Qt.black, MIN_SHAPE_SIZE + round(ind*self.pointWidth/len(varValues)))) 
     227                self.legend().add_item(self.dataDomain[discSizeIndex].name, varValues[ind], OWPoint(def_shape, def_color, MIN_SHAPE_SIZE + round(ind*self.pointWidth/len(varValues)))) 
    224228 
    225229        # ############################################################## 
  • orange/OrangeWidgets/Visualize Qt/OWScatterPlotQt.py

    r8687 r8712  
    160160        self.graph.contPalette = dlg.getContinuousPalette("contPalette") 
    161161        self.graph.discPalette = dlg.getDiscretePalette("discPalette") 
    162         self.graph.setCanvasBackground(dlg.getColor("Canvas")) 
    163         self.graph.gridCurve.setPen(QPen(dlg.getColor("Grid"))) 
    164         self.graph.palette.grid_style.color = dlg.getColor("Grid") 
     162         
     163        p = self.graph.palette() 
     164        p.setColor(QPalette.Base, dlg.getColor("Canvas")) 
     165        p.setColor(QPalette.AlternateBase, dlg.getColor("Grid")) 
     166        self.graph.set_palette(p) 
    165167 
    166168        self.graph.enableGridXB(self.showGridlines) 
     
    379381        c.createContinuousPalette("contPalette", "Continuous Palette") 
    380382        box = c.createBox("otherColors", "Other Colors") 
    381         c.createColorButton(box, "Canvas", "Canvas color", Qt.white) 
     383        c.createColorButton(box, "Canvas", "Canvas color", self.graph.color(QPalette.Base)) 
    382384        box.layout().addSpacing(5) 
    383         c.createColorButton(box, "Grid", "Grid color", QColor(215,215,215)) 
     385        c.createColorButton(box, "Grid", "Grid color", self.graph.color(QPalette.AlternateBase)) 
    384386        box.layout().addSpacing(5) 
    385387        c.setColorSchemas(self.colorSettings, self.selectedSchemaIndex) 
  • orange/OrangeWidgets/plot/owaxis.py

    r8710 r8712  
    3636from math import * 
    3737 
    38 from PyQt4.QtGui import QGraphicsItem, QGraphicsLineItem, QGraphicsTextItem, QPainterPath, QGraphicsPathItem, QGraphicsScene, QTransform 
    39 from PyQt4.QtCore import QLineF, QPointF, qDebug, QRectF 
    40  
    41 from owpalette import * 
     38from PyQt4.QtGui import QGraphicsItem, QGraphicsLineItem, QGraphicsTextItem, QPainterPath, QGraphicsPathItem, QGraphicsScene, QTransform, QPalette 
     39from PyQt4.QtCore import QLineF, QPointF, qDebug, QRectF, Qt 
     40 
    4241from owconstants import * 
    4342from owtools import resize_plot_item_list 
    4443 
    4544class OWAxis(QGraphicsItem): 
     45     
     46    Role = QPalette.Text 
     47     
    4648    def __init__(self, id, title = '', title_above = False, title_location = AxisMiddle, line = None, arrows = AxisEnd, plot = None): 
    4749        QGraphicsItem.__init__(self) 
     
    5961        self.arrows = arrows 
    6062        self.title_above = title_above 
    61         self.style = shared_palette().axis_style 
    6263        self.line_item = QGraphicsLineItem(self) 
    6364        self.title_item = QGraphicsTextItem(self) 
     
    131132            return 
    132133        self.line_item.setLine(self.graph_line) 
    133         self.line_item.setPen(self.style.pen()) 
     134        self.line_item.setPen(self.plot.color(self.Role)) 
    134135        if self.title: 
    135136            self.title_item.setHtml('<b>' + self.title + '</b>') 
     
    171172            self.start_arrow_item.setPos(self.graph_line.p1()) 
    172173            self.start_arrow_item.setRotation(-self.graph_line.angle() + 180) 
    173             self.start_arrow_item.setBrush(self.style.brush()) 
     174            self.start_arrow_item.setBrush(self.plot.color(self.Role)) 
     175            self.start_arrow_item.setPen(self.plot.color(self.Role)) 
    174176        if self.arrows & AxisEnd: 
    175177            if not zoom_only or not self.end_arrow_item: 
     
    177179            self.end_arrow_item.setPos(self.graph_line.p2()) 
    178180            self.end_arrow_item.setRotation(-self.graph_line.angle()) 
    179             self.end_arrow_item.setBrush(self.style.brush()) 
     181            self.end_arrow_item.setBrush(self.plot.color(self.Role)) 
     182            self.end_arrow_item.setPen(self.plot.color(self.Role)) 
    180183             
    181184        ## Labels 
     
    230233                tick_line.setAngle(tick_line.angle() + 180) 
    231234            item.setLine( tick_line ) 
    232             item.setPen(self.style.pen()) 
     235            item.setPen(self.plot.color(self.Role)) 
    233236            item.setPos(self.map_to_graph(pos)) 
    234237             
     
    311314        else: 
    312315            return 0, 1 
    313          
  • orange/OrangeWidgets/plot/owlegend.py

    r8681 r8712  
    1313""" 
    1414 
    15 from PyQt4.QtGui import QGraphicsTextItem, QGraphicsRectItem, QGraphicsObject, QColor, QPen, QLinearGradient 
     15from PyQt4.QtGui import QGraphicsTextItem, QGraphicsRectItem, QGraphicsObject, QColor, QPen, QLinearGradient, QPalette 
    1616from PyQt4.QtCore import QPointF, QRectF, Qt, QPropertyAnimation, QSizeF, qDebug 
    1717 
     
    5656        self.rect_item = QGraphicsRectItem(self._rect, self) 
    5757        self.rect_item.setPen(QPen(Qt.NoPen)) 
    58         self.rect_item.setBrush(Qt.white) 
     58        self.rect_item.setBrush(parent.graph.color(QPalette.Base)) 
    5959        self.rect_item.stackBefore(self.text_item) 
    6060        if self.point_item: 
  • orange/OrangeWidgets/plot/owpalette.py

    r8473 r8712  
    1  
    2 """ 
    3     .. class:: OWLineStyle 
    4          
    5         .. attribute:: color 
    6          
    7         .. attribute:: width 
    8          
    9         .. attribute:: type 
    10          
    11         .. method:: pen 
    12             Returns a QPen matching this line style 
    13          
    14         .. attribute:: point_size 
    15          
    16         .. attribute:: point_shape 
    17  
    18     .. class:: OWPalette 
    19      
    20     This class represents a color palette that is used by Orange graphs 
    21     All graph can use a shared palette (the default), or they can specify a custom per-graph palette 
    22          
    23         .. attribute:: line_styles 
    24             An ordered list of preferred line styles, for continuous plots.  
    25              
    26         .. attribute:: point_styles 
    27             An ordered list of preferred point styles, for discrete plots. 
    28              
    29         .. attribute:: grid_style 
    30             A line style that is used for drawing the grid 
    31              
    32         .. attribute:: axis_style 
    33             A dict with keys "x", "y", "x2" and "y2" 
    34          
    35 """ 
    36  
    37 from owpoint import * 
    38  
    39 from PyQt4.QtGui import QColor, QPen, QBrush 
    40 from PyQt4.QtCore import Qt 
    41  
    42 _shared_palette = None 
    43  
    44 class OWLineStyle: 
    45     def __init__(self,  color=Qt.black,  width=1,  type=Qt.SolidLine,  point_shape=OWPoint.Ellipse, point_size=5): 
    46         self.color = color 
    47         self.width = width 
    48         self.type = type 
    49         self.point_shape = point_shape 
    50         self.point_size = point_size 
    51          
    52     def pen(self): 
    53         p = QPen() 
    54         p.setColor(self.color) 
    55         p.setStyle(self.type) 
    56         p.setWidth(self.width) 
    57         return p 
    58          
    59     def brush(self): 
    60         return QBrush(self.color) 
    61  
    62 class OWPalette: 
    63     def __init__(self): 
    64         self.grid_style = OWLineStyle(Qt.gray,  1,  Qt.SolidLine) 
    65         self.line_styles = [OWLineStyle(QColor(255, 127, 0), 1, Qt.SolidLine), ## Orange, of course 
    66                             OWLineStyle(Qt.green, 1, Qt.DashLine),  
    67                             OWLineStyle(Qt.red, 1, Qt.DotLine),  
    68                             OWLineStyle(Qt.blue, 1,  Qt.SolidLine)] 
    69         self.point_styles = [] 
    70         self.axis_style = OWLineStyle(Qt.black, 1, Qt.SolidLine) 
    71         self.curve_symbols = range(13) 
    72          
    73     def line_style(self, id): 
    74         id = id % len(self.line_styles) 
    75         return self.line_styles[id] 
    76  
    77 def shared_palette(): 
    78     global _shared_palette 
    79     if not _shared_palette: 
    80         _shared_palette = OWPalette() 
    81     return _shared_palette 
  • orange/OrangeWidgets/plot/owplot.py

    r8711 r8712  
    2828SelectionBrush = QBrush(QColor(168, 202, 236, 192)) 
    2929 
    30 from PyQt4.QtGui import QGraphicsView,  QGraphicsScene, QPainter, QTransform, QPolygonF, QGraphicsItem, QGraphicsPolygonItem, QGraphicsRectItem, QRegion 
     30from PyQt4.QtGui import QGraphicsView,  QGraphicsScene, QPainter, QTransform, QPolygonF, QGraphicsItem, QGraphicsPolygonItem, QGraphicsRectItem, QRegion, QPalette 
    3131from PyQt4.QtCore import QPointF, QPropertyAnimation, pyqtProperty 
    3232 
     
    284284        self.show_legend = show_legend 
    285285        self.title_item = None 
     286        self._palette = QPalette() 
    286287         
    287288        self.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing) 
     
    313314        self.show_grid = False 
    314315         
    315         self.palette = shared_palette() 
    316         self.curveSymbols = self.palette.curve_symbols 
     316        self.curveSymbols = range(13) 
    317317        self.tips = TooltipManager(self) 
    318318        self.setMouseTracking(True) 
     
    552552 
    553553    def setCanvasColor(self, c): 
    554         self.scene().setBackgroundBrush(c) 
     554        p = self.palette() 
     555        p.setColor(QPalette.Base, c) 
     556        p.set_palette(p) 
    555557         
    556558    def setData(self, data): 
     
    653655        return curve 
    654656         
    655     def add_curve(self, name, brushColor = Qt.black, penColor = Qt.black, size = 5, style = Qt.NoPen,  
     657    def add_curve(self, name, brushColor = None, penColor = None, size = 5, style = Qt.NoPen,  
    656658                 symbol = OWPoint.Ellipse, enableLegend = False, xData = [], yData = [], showFilledSymbols = None, 
    657659                 lineWidth = 1, pen = None, autoScale = 0, antiAlias = None, penAlpha = 255, brushAlpha = 255,  
     
    665667        c.name = name 
    666668        c.set_style(style) 
     669         
     670        if not brushColor: 
     671            brushColor = self.color(QPalette.Text) 
     672        if not penColor: 
     673            penColor = self.color(QPalette.Text) 
    667674         
    668675        c.set_color(penColor) 
     
    981988            This functions redraws everything on the graph, so it can be very slow 
    982989        ''' 
     990        self.setBackgroundBrush(self.color(QPalette.Base)) 
    983991        self._bounds_cache = {} 
    984992        self._transform_cache = {} 
     
    16321640        return line 
    16331641         
     1642    def palette(self): 
     1643        """ 
     1644            Returns the palette used for this plot.  
     1645             
     1646            If it hasn't been modified yet, it will use the QApplication's palette.  
     1647            This way, Orange plots match the appearance of other applications.  
     1648        """ 
     1649        return self._palette 
     1650         
     1651    def color(self, role, group = None): 
     1652        if group: 
     1653            return self.palette().color(group, role) 
     1654        else: 
     1655            return self.palette().color(role) 
     1656             
     1657    def set_palette(self, p): 
     1658        self._palette = p 
     1659        self.replot() 
  • orange/OrangeWidgets/plot/owtools.py

    r8710 r8712  
    449449        if plot: 
    450450            self.attach(plot) 
     451            self._path_item.setPen(plot.color(QPalette.AlternateBase)) 
    451452             
    452453    def set_x_enabled(self, b): 
Note: See TracChangeset for help on using the changeset viewer.