Changeset 8236:a8a92cb84b00 in orange


Ignore:
Timestamp:
08/19/11 13:40:27 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
4af81d9a19a294f107c2ed80034ab7c19564309f
Message:

Color gradient in legend can be horizontal as well.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/plot/owlegend.py

    r8234 r8236  
    9797        self.legend = parent 
    9898        self.label_items = [QGraphicsTextItem(text, self) for text in values] 
     99        for i in self.label_items: 
     100            i.setTextWidth(50) 
     101             
     102        self.rect = QRectF() 
     103             
    99104        self.gradient_item = QGraphicsRectItem(self) 
    100105        self.gradient = QLinearGradient() 
     
    109114        self.orientation = orientation 
    110115         
    111         if orientation == Qt.Vertical or True: ## TODO: Implement a horizontal version 
    112             height = self.label_items[0].boundingRect().height() 
     116        if self.orientation == Qt.Vertical: 
     117            height = max([item.boundingRect().height() for item in self.label_items]) 
    113118            total_height = height * max(5, len(self.label_items)) 
    114             interval = (total_height - self.label_items[0].boundingRect().height()) / (len(self.label_items) -1) 
     119            interval = (total_height - self.label_items[-1].boundingRect().height()) / (len(self.label_items) -1) 
    115120            self.gradient_item.setRect(10, 0, self.gradient_width, total_height) 
    116121            self.gradient.setStart(10, 0) 
     
    123128                move_item_xy(item, x, y) 
    124129                y += interval 
    125                  
     130            self.rect = QRectF(10, 0, self.gradient_width + max([item.boundingRect().width() for item in self.label_items]), self.label_items[0].boundingRect().height() * max(5, len(self.label_items))) 
     131        else: 
     132            width = 50 
     133            height = max([item.boundingRect().height() for item in self.label_items]) 
     134            total_width = width * max(5, len(self.label_items)) 
     135            interval = (total_width - self.label_items[-1].boundingRect().width()) / (len(self.label_items) -1) 
     136             
     137            self.gradient_item.setRect(0, 0, total_width, self.gradient_width) 
     138            self.gradient.setStart(0, 0) 
     139            self.gradient.setFinalStop(total_width, 0) 
     140            self.gradient_item.setBrush(QBrush(self.gradient)) 
     141            self.gradient_item.setPen(QPen(Qt.NoPen)) 
     142            x = 0 
     143            y = 30 
     144            for item in self.label_items: 
     145                move_item_xy(item, x, y) 
     146                x += interval 
     147            self.rect = QRectF(0, 0, total_width, self.gradient_width + height) 
     148   
    126149    def boundingRect(self): 
    127         if self.orientation == Qt.Vertical: 
    128             return QRectF(10, 0, self.gradient_width + max([item.boundingRect().width() for item in self.label_items]), self.label_items[0].boundingRect().height() * max(5, len(self.label_items))) 
    129         else: 
    130             return QRectF() 
     150        return getattr(self, 'rect', QRectF()) 
    131151         
    132152    def paint(self, painter, option, widget): 
Note: See TracChangeset for help on using the changeset viewer.