Changeset 8641:3fd09974c4b5 in orange


Ignore:
Timestamp:
08/09/11 14:43:14 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
d3990f847bdba7e1a139a87e4c800a41d5f4b784
Message:

Show attribute names in the legend

Location:
orange/OrangeWidgets
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWLinProjGraphQt.py

    r8618 r8641  
    363363                    else:                             curveSymbol = self.curveSymbols[index] 
    364364 
    365                     self.addCurve(classVariableValues[index], color, color, self.pointWidth, symbol = curveSymbol, xData = [], yData = [], penAlpha = self.alphaValue, brushAlpha = self.alphaValue, enableLegend = True) 
     365                    self.legend().add_item(self.dataDomain.classVar.name, classVariableValues[index], OWPoint(curveSymbol, color, self.pointWidth)) 
    366366            # show legend for continuous class 
    367367            elif self.dataHasContinuousClass: 
  • orange/OrangeWidgets/Prototypes/OWScatterPlotGraphQt.py

    r8635 r8641  
    338338        # ############################################################## 
    339339        # show legend if necessary 
    340         qDebug("Updating, legend is " + repr(self.showLegend)) 
    341340        if self.showLegend == 1: 
    342341            legendKeys = {} 
     
    344343            shapeIndex = shapeIndex if shapeIndex != -1 and self.dataDomain[shapeIndex].varType == orange.VarTypes.Discrete else -1 
    345344            sizeIndex = sizeIndex if sizeIndex != -1 and self.dataDomain[sizeIndex].varType == orange.VarTypes.Discrete else -1 
    346              
     345                         
    347346            singleLegend = len([index for index in [colorIndex, shapeIndex, sizeIndex] if index != -1]) == 1 
    348347            if singleLegend: 
     
    354353            if colorIndex != -1: 
    355354                num = len(self.dataDomain[colorIndex].values) 
    356                 val = [[], [], [self.pointWidth]*num, [OWPoint.Ellipse]*num] 
    357355                varValues = getVariableValuesSorted(self.dataDomain[colorIndex]) 
    358356                for ind in range(num): 
    359                     val[0].append(legendJoin(self.dataDomain[colorIndex].name, varValues[ind])) 
    360                     val[1].append(self.discPalette[ind]) 
    361                 legendKeys[colorIndex] = val 
     357                    self.legend().add_item(self.dataDomain[colorIndex].name, varValues[ind], OWPoint(OWPoint.Ellipse, self.discPalette[ind], self.pointWidth)) 
    362358 
    363359            if shapeIndex != -1: 
    364360                num = len(self.dataDomain[shapeIndex].values) 
    365                 if legendKeys.has_key(shapeIndex):  val = legendKeys[shapeIndex] 
    366                 else:                               val = [[], [Qt.black]*num, [self.pointWidth]*num, []] 
    367361                varValues = getVariableValuesSorted(self.dataDomain[shapeIndex]) 
    368                 val[3] = []; val[0] = [] 
    369362                for ind in range(num): 
    370                     val[3].append(self.curveSymbols[ind]) 
    371                     val[0].append(legendJoin(self.dataDomain[shapeIndex].name, varValues[ind])) 
    372                 legendKeys[shapeIndex] = val 
     363                    self.legend().add_item(self.dataDomain[shapeIndex].name, varValues[ind], OWPoint(self.curveSymbols[ind], Qt.black, self.pointWidth)) 
    373364 
    374365            if sizeIndex != -1: 
    375366                num = len(self.dataDomain[sizeIndex].values) 
    376                 if legendKeys.has_key(sizeIndex):  val = legendKeys[sizeIndex] 
    377                 else:                               val = [[], [Qt.black]*num, [], [OWPoint.Ellipse]*num] 
    378                 val[2] = []; val[0] = [] 
    379367                varValues = getVariableValuesSorted(self.dataDomain[sizeIndex]) 
    380368                for ind in range(num): 
    381                     val[0].append(legendJoin(self.dataDomain[sizeIndex].name, varValues[ind])) 
    382                     val[2].append(MIN_SHAPE_SIZE + round(ind*self.pointWidth/len(varValues))) 
    383                 legendKeys[sizeIndex] = val 
    384         else: 
    385             legendKeys = {} 
    386  
    387         for val in legendKeys.values():       # add new curve keys 
    388             for i in range(len(val[1])): 
    389                 self.addCurve(val[0][i], val[1][i], val[1][i], val[2][i], symbol = val[3][i], enableLegend = 1) 
     369                    self.legend().add_item(self.dataDomain[sizeIndex].name, varValues[ind], OWPoint(OWPoint.Ellipse, Qt.black, MIN_SHAPE_SIZE + round(ind*self.pointWidth/len(varValues)))) 
    390370 
    391371        # ############################################################## 
  • orange/OrangeWidgets/plot/owlegend.py

    r8508 r8641  
    1313 
    1414class OWLegendItem(QGraphicsObject): 
    15     def __init__(self, curve, parent): 
     15    def __init__(self, name, point, parent): 
    1616        QGraphicsObject.__init__(self, parent) 
    17         self.text_item = QGraphicsTextItem(curve.name, self) 
    18         s = curve.point_size() 
     17        self.text_item = QGraphicsTextItem(name, self) 
     18        s = point.size() 
    1919        height = max(2*s, self.text_item.boundingRect().height()) 
    2020        p = 0.5 * height 
    2121        self.text_item.setPos(height, 0) 
    22         self.point_item = curve.point_item(p, p, s, self) 
     22        self.point_item = point 
     23        self.point_item.setParentItem(self) 
     24        self.point_item.setPos(p, p) 
    2325        self._rect = QRectF(0, 0, height + self.text_item.boundingRect().width(), height ) 
    2426        self.rect_item = QGraphicsRectItem(self._rect, self) 
     
    3335    def paint(self, painter, option, widget): 
    3436        pass 
     37     
     38class OWLegendTitle(QGraphicsObject): 
     39    def __init__(self, text, parent): 
     40        QGraphicsObject.__init__(self, parent) 
     41        self.text_item = QGraphicsTextItem(text + ':', self) 
     42        f = self.text_item.font() 
     43        f.setBold(True) 
     44        self.text_item.setFont(f) 
     45         
     46    def boundingRect(self): 
     47        return self.text_item.boundingRect() 
     48         
     49    def paint(self, painter, option, widget): 
     50        pass 
    3551         
    3652class OWLegend(QGraphicsObject): 
     
    4157        self.graph = graph 
    4258        self.curves = [] 
    43         self.items = [] 
     59        self.items = {} 
    4460        self.attributes = [] 
    4561        self.point_attrs = {} 
     
    6076 
    6177    def clear(self): 
    62         for i in self.items: 
    63             i.setParentItem(None) 
    64             self.scene().removeItem(i) 
    65         self.items = [] 
     78        for lst in self.items.itervalues(): 
     79            for i in lst: 
     80                i.setParentItem(None) 
     81                self.scene().removeItem(i) 
     82        self.items = {} 
    6683        self.update() 
    6784         
    6885 
    6986    def add_curve(self, curve, attributes = []): 
    70         self.items.append(OWLegendItem(curve, self)) 
     87        i = curve.name.find('=') 
     88        if i == -1: 
     89            cat = '' 
     90            name = curve.name 
     91        else: 
     92            cat = curve.name[:i] 
     93            name = curve.name[i+1:] 
     94        self.add_item('', curve.name, curve.point_item(0, 0, 0)) 
     95         
     96    def add_item(self, category, value, point): 
     97        if category not in self.items: 
     98            self.items[category] = [OWLegendTitle(category, self)] 
     99        self.items[category].append(OWLegendItem(str(value), point, self)) 
    71100        self.update() 
    72101         
     
    74103        self.box_rect = QRectF() 
    75104        x, y = 0, 0 
     105         
    76106        if self._orientation == Qt.Vertical: 
    77             for item in self.items: 
    78                 if self.max_size.height() and y and y + item.boundingRect().height() > self.max_size.height(): 
    79                     y = 0 
     107            for lst in self.items.itervalues(): 
     108                for item in lst: 
     109                    if self.max_size.height() and y and y + item.boundingRect().height() > self.max_size.height(): 
     110                        y = 0 
     111                        x = x + item.boundingRect().width() 
     112                    self.box_rect = self.box_rect | item.boundingRect().translated(0, y) 
     113                    move_item_xy(item, x, y) 
     114                    y = y + item.boundingRect().height() 
     115        elif self._orientation == Qt.Horizontal: 
     116            for lst in self.items.itervalues(): 
     117                for item in lst: 
     118                    if self.max_size.width() and x and x + item.boundingRect().width() > self.max_size.width(): 
     119                        x = 0 
     120                        y = y + item.boundingRect().height() 
     121                    self.box_rect = self.box_rect | item.boundingRect().translated(x, y) 
     122                    move_item_xy(item, x, y) 
    80123                    x = x + item.boundingRect().width() 
    81                 self.box_rect = self.box_rect | item.boundingRect().translated(0, y) 
    82                 move_item_xy(item, x, y) 
    83                 y = y + item.boundingRect().height() 
    84         elif self._orientation == Qt.Horizontal: 
    85             for item in self.items: 
    86                 if self.max_size.width() and x and x + item.boundingRect().width() > self.max_size.width(): 
    87                     x = 0 
    88                     y = y + item.boundingRect().height() 
    89                 self.box_rect = self.box_rect | item.boundingRect().translated(x, y) 
    90                 move_item_xy(item, x, y) 
    91                 x = x + item.boundingRect().width() 
    92124        else: 
    93125            qDebug('A bad orientation of the legend') 
  • orange/OrangeWidgets/plot/owplot.py

    r8640 r8641  
    12761276        offset = 20 
    12771277        if pos.x() > g.right() - offset: 
    1278             rect.setRight(l.width()) 
     1278            self._legend.set_orientation(Qt.Vertical) 
     1279            rect.setRight(self._legend.boundingRect().width()) 
    12791280            p = g.topRight() - self._legend.boundingRect().topRight() 
    12801281        elif pos.x() < g.left() + offset: 
    1281             rect.setLeft(l.width()) 
     1282            self._legend.set_orientation(Qt.Vertical) 
     1283            rect.setLeft(self._legend.boundingRect().width()) 
    12821284            p = g.topLeft() 
    12831285        elif pos.y() < g.top() + offset: 
    1284             rect.setTop(l.height()) 
     1286            self._legend.set_orientation(Qt.Horizontal) 
     1287            rect.setTop(self._legend.boundingRect().height()) 
    12851288            p = g.topLeft() 
    12861289        elif pos.y() > g.bottom() - offset: 
    1287             rect.setBottom(l.height()) 
     1290            self._legend.set_orientation(Qt.Horizontal) 
     1291            rect.setBottom(self._legend.boundingRect().height()) 
    12881292            p = g.bottomLeft() - self._legend.boundingRect().bottomLeft() 
    12891293             
Note: See TracChangeset for help on using the changeset viewer.