Changeset 11538:1c55aef55d7f in orange


Ignore:
Timestamp:
05/22/13 15:03:39 (11 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Implemented size hint caching for MenuPage widget.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/document/quickmenu.py

    r11526 r11538  
    7777        self.__title = title 
    7878        self.__icon = icon 
     79        self.__sizeHint = None 
    7980 
    8081        self.view().setItemDelegate(_MenuItemDelegate(self.view())) 
    8182        self.view().entered.connect(self.__onEntered) 
    8283        self.view().viewport().setMouseTracking(True) 
     84 
    8385        # Make sure the initial model is wrapped in a ItemDisableFilter. 
    8486        self.setModel(self.model()) 
     
    137139        ToolTree.setModel(self, proxyModel) 
    138140 
     141        self.__invalidateSizeHint() 
     142 
    139143    def setRootIndex(self, index): 
    140144        """ 
     
    145149        ToolTree.setRootIndex(self, mappedIndex) 
    146150 
     151        self.__invalidateSizeHint() 
     152 
    147153    def rootIndex(self): 
    148154        """ 
     
    153159 
    154160    def sizeHint(self): 
    155         view = self.view() 
    156         model = view.model() 
    157  
    158         # This will not work for nested items (tree). 
    159         count = model.rowCount(view.rootIndex()) 
    160  
    161         width = view.sizeHintForColumn(0) 
    162  
    163         if count: 
    164             height = view.sizeHintForRow(0) 
    165             height = height * count 
    166         else: 
    167             height = 0 
    168         return QSize(width, height) 
     161        """ 
     162        Reimplemented from :func:`QWidget.sizeHint`. 
     163        """ 
     164        if self.__sizeHint is None: 
     165            view = self.view() 
     166            model = view.model() 
     167 
     168            # This will not work for nested items (tree). 
     169            count = model.rowCount(view.rootIndex()) 
     170 
     171            # 'sizeHintForColumn' is the reason for size hint caching 
     172            # since it must traverse all items in the column. 
     173            width = view.sizeHintForColumn(0) 
     174 
     175            if count: 
     176                height = view.sizeHintForRow(0) 
     177                height = height * count 
     178            else: 
     179                height = 0 
     180            self.__sizeHint = QSize(width, height) 
     181 
     182        return self.__sizeHint 
     183 
     184    def __invalidateSizeHint(self): 
     185        self.__sizeHint = None 
     186        self.updateGeometry() 
    169187 
    170188    def __onEntered(self, index): 
Note: See TracChangeset for help on using the changeset viewer.