Changeset 8221:d5a05b99eb72 in orange


Ignore:
Timestamp:
08/18/11 17:17:18 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
12c0f178f430efe66a22f084f22a30fbc2370d00
Message:

Fix legend positioning and synchronize its animations.

File:
1 edited

Legend:

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

    r8214 r8221  
    183183                self.scene().removeItem(i) 
    184184        self.items = {} 
    185         self.update() 
     185        self.update_items() 
    186186         
    187187 
     
    209209            self.items[category] = [OWLegendTitle(category, self)] 
    210210        self.items[category].append(OWLegendItem(str(value), point, self)) 
    211         self.update() 
     211        self.update_items() 
    212212         
    213213    def add_color_gradient(self, title, values): 
     
    219219        item = OWLegendGradient(self.graph.contPalette, [str(v) for v in values], self) 
    220220        self.items[title] = [OWLegendTitle(title, self), item] 
    221         self.update() 
     221        self.update_items() 
    222222         
    223223    def remove_category(self, category): 
     
    231231        del self.items[category] 
    232232         
    233     def update(self): 
     233    def update_items(self): 
    234234        """ 
    235235            Updates the legend, repositioning the items according to the legend's orientation.  
    236236        """ 
    237237        self.box_rect = QRectF() 
    238         x, y = 0, 0 
     238        x = y = 0 
    239239         
    240240        for lst in self.items.itervalues(): 
     
    244244                if hasattr(item, 'rect_item'): 
    245245                    item.rect_item.setBrush(self.graph.color(OWPalette.Canvas)) 
     246                if hasattr(item, 'set_orientation'): 
     247                    item.set_orientation(self._orientation) 
     248                     
    246249        if self._orientation == Qt.Vertical: 
    247250            for lst in self.items.itervalues(): 
    248251                for item in lst: 
    249                     if isinstance(item, OWLegendGradient): 
    250                         item.set_orientation(self._orientation) 
    251252                    if self.max_size.height() and y and y + item.boundingRect().height() > self.max_size.height(): 
    252253                        y = 0 
    253254                        x = x + item.boundingRect().width() 
    254                     self.box_rect = self.box_rect | item.boundingRect().translated(0, y) 
     255                    self.box_rect = self.box_rect | item.boundingRect().translated(x, y) 
    255256                    move_item_xy(item, x, y, self.graph.animate_plot) 
    256257                    y = y + item.boundingRect().height() 
     
    258259            for lst in self.items.itervalues(): 
    259260                max_h = max(item.boundingRect().height() for item in lst) 
    260                 if lst: 
    261                     x = 0 
    262                     y = y + max_h 
    263261                for item in lst: 
    264                     if isinstance(item, OWLegendGradient): 
    265                         item.set_orientation(self._orientation) 
    266262                    if self.max_size.width() and x and x + item.boundingRect().width() > self.max_size.width(): 
    267263                        x = 0 
     
    270266                    move_item_xy(item, x, y, self.graph.animate_plot) 
    271267                    x = x + item.boundingRect().width()                 
     268                if lst: 
     269                    x = 0 
     270                    y = y + max_h 
    272271        else: 
    273272            qDebug('A bad orientation of the legend') 
     
    305304            Sets the legend's orientation to ``orientation``.  
    306305        """ 
    307         if self._orientation != orientation: 
    308             self._orientation = orientation 
    309             self.update() 
     306        self._orientation = orientation 
     307        self.update_items() 
    310308             
    311309    def orientation(self): 
     
    321319                self._floating_animation.stop() 
    322320            self._floating_animation = QPropertyAnimation(self, 'pos') 
    323             self._floating_animation.setStartValue(self.pos()) 
    324321            self._floating_animation.setEndValue(pos) 
    325322            self._floating_animation.setDuration(t) 
     
    341338            else: 
    342339                self.set_pos_animated(pos) 
     340         
Note: See TracChangeset for help on using the changeset viewer.