Changeset 8294:bdecde6b4b1e in orange


Ignore:
Timestamp:
06/02/11 14:26:54 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
e4b494bafec2383c89397de8927acf49d41f3cd1
Message:

Add legend, will need to clean up code in widgets

Location:
orange/OrangeWidgets
Files:
4 edited

Legend:

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

    r8291 r8294  
    2121        If true, the curve is drawn as a continuous line. Otherwise, it's drawn as a series of points 
    2222         
     23    .. method:: symbol(x,y,s=None,parent=None) 
     24        Returns a QGraphicsItem with this curve's symbol at position ``x'',``y'' with size ``s'' and parent ``parent'' 
     25         
    2326""" 
    2427 
    2528class Curve(QGraphicsItemGroup): 
    26     def __init__(self, data, style, graph, parent=None): 
     29    def __init__(self, name, data, style, graph, parent=None): 
    2730        QGraphicsItemGroup.__init__(self,  parent) 
     31        self.name = name 
    2832        self.data = data 
    2933        self.style = style 
     
    3741         
    3842    def update(self): 
    39         s = self.scene() 
     43        s = self.scene()             
     44 
    4045        if s: 
    4146            for i in self.point_items: 
     
    5863            self.path_item.show() 
    5964        else: 
    60             s = self.style.point_size 
    6165            shape = self.style.point_shape 
    6266            for p in self.data: 
    6367                (x, y) = self.graph.map_to_graph(p) 
    64                 if shape is CircleShape: 
    65                     i = QGraphicsEllipseItem(x-s/2, y-s/2, s, s, self) 
    66                 elif shape is SquareShape: 
    67                     i = QGraphicsRectItem(x-s/2, y-s/2, s, s, self) 
     68                i = self.symbol(x, y) 
    6869                self.point_items.append(i) 
    6970            p = self.style.pen() 
     
    7273            map((lambda i: i.setBrush(b)), self.point_items) 
    7374         
     75    def symbol(self, x, y, s=None, parent=None): 
     76        if not s: 
     77            s = self.style.point_size 
     78        if not parent: 
     79            parent = self 
     80        if self.style.point_shape is CircleShape: 
     81            i = QGraphicsEllipseItem(x-s/2, y-s/2, s, s, parent) 
     82        elif self.style.point_shape is SquareShape: 
     83            i = QGraphicsRectItem(x-s/2, y-s/2, s, s, parent) 
     84        i.setPen(self.style.pen()) 
     85        i.setBrush(self.style.brush()) 
     86        return i 
  • orange/OrangeWidgets/Graph/legend.py

    r8290 r8294  
    11 
    22 
    3 from PyQt4.QtGui import QGraphicsItemGroup 
    4  
    5 class LegendItem: 
    6     def __init__(self): 
    7         pass 
     3from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsTextItem, QGraphicsRectItem 
     4from PyQt4.QtCore import QPointF, QRectF 
    85 
    96class Legend(QGraphicsItemGroup): 
    107    def __init__(self, scene): 
    118        QGraphicsItemGroup.__init__(self, None, scene) 
     9        self.curves = [] 
    1210        self.items = [] 
    1311         
    1412    def clear(self): 
    15         self.items = [] 
     13        self.curves = [] 
     14        self.update() 
     15         
     16 
     17    def add_curve(self, curve): 
     18        self.curves.append(curve) 
     19        self.update() 
     20         
     21    def update(self): 
     22        for i in self.items: 
     23            self.scene().removeItem(i) 
     24        del self.items[:] 
     25        y = 10 
     26        length = 0 
     27        for curve in self.curves: 
     28            self.items.append(curve.symbol(10, y, parent=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) 
  • orange/OrangeWidgets/OWGraph.py

    r8042 r8294  
    363363    def addCurve(self, name, brushColor = Qt.black, penColor = Qt.black, size = 5, style = QwtPlotCurve.NoCurve, symbol = QwtSymbol.Ellipse, enableLegend = 0, xData = [], yData = [], showFilledSymbols = None, lineWidth = 1, pen = None, autoScale = 0, antiAlias = None, penAlpha = 255, brushAlpha = 255): 
    364364        curve = QwtPlotCurve(name) 
     365        qDebug('Adding curve ' + name + ' with ' + str(len(xData)) + ' points') 
    365366        curve.setRenderHint(QwtPlotItem.RenderAntialiased, antiAlias or self.useAntialiasing) 
    366367        curve.setItemAttribute(QwtPlotItem.Legend, enableLegend) 
  • orange/OrangeWidgets/QtGraph.py

    r8292 r8294  
    6262        self.parent_name = name 
    6363        self.show_legend = show_legend 
    64         self._legend = None 
    6564        self.title_item = None 
    6665         
     
    6867        self.setScene(self.canvas) 
    6968         
     69        self._legend = legend.Legend(self.canvas) 
    7070        self.axes = dict() 
    7171        self.axis_margin = 150 
     
    107107    def __setattr__(self, name, value): 
    108108        unisetattr(self, name, value, QGraphicsView) 
    109          
    110     def update(self): 
    111         if self.show_legend and not self._legend: 
    112             self._legend = legend.Legend(self.canvas) 
    113             self._legend.show() 
    114         if not self.show_legend and self._legend: 
    115             self._legend.hide() 
    116             self._legend = None 
    117         self.replot() 
    118109             
    119110    def graph_area_rect(self): 
     
    253244                 lineWidth = 1, pen = None, autoScale = 0, antiAlias = None, penAlpha = 255, brushAlpha = 255): 
    254245        data = [] 
     246        qDebug('Adding curve ' + name + ' with ' + str(len(xData)) + ' points' + (' to legend' if enableLegend else '')) 
    255247        for i in range(len(xData)): 
    256248            data.append( (xData[i], yData[i]) ) 
    257         c = curve.Curve(data, self.palette.line_style(len(self.curves)), self) 
     249        c = curve.Curve(name, data, self.palette.line_style(len(self.curves)), self) 
    258250        c.setPos(self.graph_area.bottomLeft()) 
    259251        c.continuous = (style is not Qt.NoPen) 
     
    261253        self.canvas.addItem(c) 
    262254        self.curves.append(c) 
     255        if enableLegend: 
     256            self.legend().add_curve(c) 
    263257        return c 
    264258         
     
    289283            self.canvas.addItem(self.title_item) 
    290284            graph_rect.setTop(graph_rect.top() + self.title_margin) 
     285         
     286        if self.show_legend: 
     287            self._legend.setPos(graph_rect.topRight() - QPointF(100, 0)) 
     288            self._legend.show() 
     289        else: 
     290            self._legend.hide() 
    291291         
    292292        axis_rects = dict() 
Note: See TracChangeset for help on using the changeset viewer.