Changeset 8320:9e10d9f5c2d4 in orange


Ignore:
Timestamp:
06/15/11 11:18:45 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
00eb6590f26304f9c9faafe070e1dcfc630179c6
Message:

A mechanism to auto-create a legend from specified attributes and values.

Location:
orange/OrangeWidgets
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Graph/__init__.py

    r8271 r8320  
    1 __all__ = ["curve", "legend", "palette", "axis" ] 
     1__all__ = [ "curve", "point", "legend", "palette", "axis" ] 
  • orange/OrangeWidgets/Graph/legend.py

    r8304 r8320  
    11 
    22 
    3 from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsTextItem, QGraphicsRectItem 
    4 from PyQt4.QtCore import QPointF, QRectF 
     3from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsTextItem, QGraphicsRectItem, QColor 
     4from PyQt4.QtCore import QPointF, QRectF, Qt 
     5 
     6from point import * 
     7 
     8PointColor = 1 
     9PointSize = 2 
     10PointSymbol = 4 
    511 
    612class Legend(QGraphicsItemGroup): 
     
    915        self.curves = [] 
    1016        self.items = [] 
     17        self.attributes = [] 
     18        self.point_attrs = {} 
     19        self.point_vals = {} 
     20        self.default_values = { 
     21                               PointColor : Qt.black,  
     22                               PointSize : 8,  
     23                               PointSymbol : Ellipse 
     24                               } 
    1125         
    1226    def clear(self): 
     
    1529         
    1630 
    17     def add_curve(self, curve): 
     31    def add_curve(self, curve, attributes = []): 
     32        for point_attribute, data_attribute, value in attributes: 
     33            if point_attribute not in self.point_attrs: 
     34                self.point_attrs[point_attribute] = data_attribute 
     35                 
     36            if point_attribute == PointColor: 
     37                point_val = curve.color() 
     38            elif point_attribute == PointSize: 
     39                point_val = curve.size() 
     40            else: 
     41                point_val = curve.symbol() 
     42 
     43            if not point_attribute in self.point_vals: 
     44                self.point_vals[point_attribute] = {} 
     45            self.point_vals[point_attribute][point_val] = value 
    1846        self.curves.append(curve) 
    1947        self.update() 
     
    2553        y = 10 
    2654        length = 0 
    27         for curve in self.curves: 
    28             self.items.append(curve.pointItem(10, y, curve.pointSize(), self)) 
    29             text = QGraphicsTextItem(curve.name, self) 
    30             length = max(length, text.boundingRect().width()) 
    31             text.setPos(QPointF(20, y-10)) 
    32             self.items.append(text) 
    33             y = y + 20 
    34         box_rect = QRectF(0, 0, 20 + length, y-10) 
    35         box_item = QGraphicsRectItem(box_rect, self) 
    36         self.items.append(box_item) 
     55        if self.point_attrs: 
     56            ## Using the OWGraph API to specify paremeters 
     57            for p_a, d_a in self.point_attrs: 
     58                ## We construct a separate box for each attribute  
     59                title_item = QGraphicsTextItem( d_a, self ) 
     60                title_item.setPos(QPointF(10, y-10)) 
     61                self.items.append(title_item) 
     62                y = y + 20 
     63                for p_v, d_v in self.point_vals[p_a]: 
     64                    color = p_v if p_a == PointColor else self.default_values[PointColor] 
     65                    symbol = p_v if p_a == PointSymbol else self.default_values[PointSymbol] 
     66                    size = p_v if p_a == PointSize else self.default_values[PointSize] 
     67                    self.items.append( point_item(10, y,  color, symbol, size, self) ) 
     68                    text = QGraphicsTextItem(d_v, self) 
     69                    text.setPos(QPointF(20, y-10)) 
     70                    self.items.append(text) 
     71                    y = y + 20 
     72                y = y + 10 
     73        else: 
     74            for curve in self.curves: 
     75                self.items.append(curve.pointItem(10, y, curve.pointSize(), self)) 
     76                text = QGraphicsTextItem(curve.name, self) 
     77                length = max(length, text.boundingRect().width()) 
     78                text.setPos(QPointF(20, y-10)) 
     79                self.items.append(text) 
     80                y = y + 20 
     81            if self.curves: 
     82                box_rect = QRectF(0, 0, 20 + length, y-10) 
     83                box_item = QGraphicsRectItem(box_rect, self) 
     84                self.items.append(box_item) 
  • orange/OrangeWidgets/Graph/palette.py

    r8299 r8320  
    3535""" 
    3636 
    37 from OWGraphQt import * 
     37from point import * 
    3838 
    3939from PyQt4.QtGui import QColor, QPen, QBrush 
  • orange/OrangeWidgets/OWGraphQt.py

    r8319 r8320  
    5050TopLegend = 3 
    5151ExternalLegend = 4 
    52  
    53 Ellipse = 0 
    54 Rect = 1 
    55 Diamond = 2 
    56 Triangle = 3 
    57 DTriangle = 4 
    58 UTriangle = 5 
    59 LTriangle = 6 
    60 RTriangle = 7 
    61 Cross = 8 
    62 XCross = 9 
    63 HLine = 10 
    64 VLine = 11 
    65 Star1 = 12 
    66 Star2 = 13 
    67 Hexagon = 14 
    68 UserStyle = 1000 
    69  
    70 PointColor = 1 
    71 PointSize = 2 
    72 PointSymbol = 4 
    7352 
    7453from Graph import * 
     
    274253        self.setAxisLabels(yRight, labels) 
    275254         
    276     def add_curve(self, name, brushColor = Qt.black, penColor = Qt.black, size = 5, style = Qt.NoPen,  
     255    def add_curve(self, name, attributes = [], brushColor = Qt.black, penColor = Qt.black, size = 5, style = Qt.NoPen,  
    277256                 symbol = Ellipse, enableLegend = 0, xData = [], yData = [], showFilledSymbols = None, 
    278257                 lineWidth = 1, pen = None, autoScale = 0, antiAlias = None, penAlpha = 255, brushAlpha = 255): 
     
    291270        self.canvas.addItem(c) 
    292271        self.curves.append(c) 
    293         if enableLegend: 
    294             self.legend().add_curve(c) 
     272        if attributes or enableLegend: 
     273            self.legend().add_curve(c, attributes) 
    295274        return c 
    296275         
Note: See TracChangeset for help on using the changeset viewer.