Ignore:
Timestamp:
10/29/12 19:35:17 (18 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Filter suggested widgets by compatible channel types.

File:
1 edited

Legend:

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

    r11163 r11164  
    1919 
    2020from PyQt4.QtCore import ( 
    21     Qt, QObject, QPoint, QSize, QRect, QEventLoop, QEvent 
     21    Qt, QObject, QPoint, QSize, QRect, QEventLoop, QEvent, QModelIndex 
    2222) 
    2323 
     
    363363 
    364364 
     365class SortFilterProxyModel(QSortFilterProxyModel): 
     366    def __init__(self, parent=None): 
     367        QSortFilterProxyModel.__init__(self, parent) 
     368        self.__filterFunc = None 
     369 
     370    def filterAcceptsRow(self, row, parent=QModelIndex()): 
     371        accepted = QSortFilterProxyModel.filterAcceptsRow(self, row, parent) 
     372        if accepted and self.__filterFunc is not None: 
     373            model = self.sourceModel() 
     374            index = model.index(row, self.filterKeyColumn(), parent) 
     375            return self.__filterFunc(index) 
     376        else: 
     377            return accepted 
     378 
     379    def filterFunc(self): 
     380        return self.__filterFunc 
     381 
     382    def setFilterFunc(self, func): 
     383        if self.__filterFunc is not func: 
     384            self.__filterFunc = func 
     385            self.invalidateFilter() 
     386 
     387 
    365388class SuggestMenuPage(ToolTree): 
    366389    def __init__(self, *args, **kwargs): 
     
    375398        flat.setSourceModel(model) 
    376399        flat.setFlatteningMode(flat.InternalNodesDisabled) 
    377         proxy = QSortFilterProxyModel(self) 
     400        proxy = SortFilterProxyModel(self) 
    378401        proxy.setFilterCaseSensitivity(False) 
    379402        proxy.setSourceModel(flat) 
     
    395418        filter_proxy.setFilterWildCard(pattern) 
    396419        self.ensureCurrent() 
     420 
     421    def setFilterFunc(self, func): 
     422        filter_proxy = self.view().model() 
     423        filter_proxy.setFilterFunc(func) 
    397424 
    398425 
     
    451478        self.__suggestPage.setIcon(icon_loader().get("icons/Search.svg")) 
    452479 
    453         self.addPage(self.tr("Quick Access"), self.__suggestPage) 
     480        self.addPage(self.tr("Quick Search"), self.__suggestPage) 
    454481 
    455482        self.__search.textEdited.connect( 
     
    528555        self.__model = model 
    529556        self.__suggestPage.setModel(model) 
     557 
     558    def setFilterFunc(self, func): 
     559        self.__suggestPage.setFilterFunc(func) 
    530560 
    531561    def popup(self, pos=None): 
Note: See TracChangeset for help on using the changeset viewer.