Changeset 11187:85b7562df753 in orange


Ignore:
Timestamp:
11/16/12 14:44:11 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Make sure the search list is displayed when the user presses a key.

File:
1 edited

Legend:

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

    r11164 r11187  
    99 
    1010from PyQt4.QtGui import ( 
    11     QWidget, QFrame, QToolButton, QAbstractButton, QAction, QIcon, 
     11    QWidget, QFrame, QToolButton, QAbstractButton, QAction, QIcon, QTreeView, 
    1212    QButtonGroup, QStackedWidget, QHBoxLayout, QVBoxLayout, QSizePolicy, 
    1313    QStandardItemModel, QSortFilterProxyModel, QStyleOptionToolButton, 
    14     QStylePainter, QStyle, QApplication 
     14    QStylePainter, QStyle, QApplication, QStyledItemDelegate, 
     15    QStyleOptionViewItemV4 
    1516) 
    1617 
     
    4344        icon = icon_loader().get("icons/Search.svg") 
    4445        action = QAction(icon, "Search", self) 
    45  
    4646        self.setAction(action, LineEdit.LeftPosition) 
    4747 
     
    481481 
    482482        self.__search.textEdited.connect( 
    483             self.__suggestPage.setFilterFixedString 
     483            self.__on_textEdited 
    484484        ) 
    485485 
     
    503503        page.triggered.connect(self.__onTriggered) 
    504504        page.hovered.connect(self.hovered) 
     505 
     506        # Install event filter to process key presses. 
     507        page.view().installEventFilter(self) 
     508 
    505509        return index 
    506510 
    507511    def createPage(self, index): 
    508512        page = ToolTree(self) 
     513        view = page.view() 
     514        delegate = WidgetItemDelegate(view) 
     515        view.setItemDelegate(delegate) 
     516 
    509517        page.setModel(index.model()) 
    510518        page.setRootIndex(index) 
     
    514522        if sys.platform == "darwin": 
    515523            view.verticalScrollBar().setAttribute(Qt.WA_MacMiniSize, True) 
     524            # Don't show the focus frame because it expands into the tab 
     525            # bar at the top. 
     526            view.setAttribute(Qt.WA_MacShowFocusRect, False) 
    516527 
    517528        name = unicode(index.data(Qt.DisplayRole)) 
     
    523534 
    524535        page.setToolTip(index.data(Qt.ToolTipRole).toPyObject()) 
    525  
    526536        return page 
    527537 
     
    637647        self.triggered.emit(action) 
    638648 
     649    def __on_textEdited(self, text): 
     650        self.__suggestPage.setFilterFixedString(text) 
     651        self.__pages.setCurrentPage(self.__suggestPage) 
     652 
    639653    def triggerSearch(self): 
    640         self.__pages.setCurrentWidget(self.__suggestPage) 
     654        self.__pages.setCurrentPage(self.__suggestPage) 
    641655        self.__search.setFocus(Qt.ShortcutFocusReason) 
    642656 
     
    646660    def keyPressEvent(self, event): 
    647661        if event.text(): 
    648             # Ignore modifiers etc. 
     662            # Ignore modifiers, ... 
    649663            self.__search.setFocus(Qt.ShortcutFocusReason) 
    650664            self.setCurrentIndex(0) 
     
    652666 
    653667        FramelessWindow.keyPressEvent(self, event) 
     668        event.accept() 
     669 
     670    def eventFilter(self, obj, event): 
     671        if isinstance(obj, QTreeView): 
     672            etype = event.type() 
     673            if etype == QEvent.KeyPress: 
     674                # ignore modifiers non printable characters, Enter, ... 
     675                if event.text() and event.key() not in \ 
     676                        [Qt.Key_Enter, Qt.Key_Return]: 
     677                    self.__search.setFocus(Qt.ShortcutFocusReason) 
     678                    self.setCurrentIndex(0) 
     679                    self.__search.keyPressEvent(event) 
     680                    return True 
     681 
     682        return FramelessWindow.eventFilter(self, obj, event) 
     683 
     684 
     685class WidgetItemDelegate(QStyledItemDelegate): 
     686    def __init__(self, parent=None): 
     687        QStyledItemDelegate.__init__(self, parent) 
     688 
     689    def sizeHint(self, option, index): 
     690        option = QStyleOptionViewItemV4(option) 
     691        self.initStyleOption(option, index) 
     692        size = QStyledItemDelegate.sizeHint(self, option, index) 
     693        size.setHeight(max(size.height(), 25)) 
     694        return size 
    654695 
    655696 
Note: See TracChangeset for help on using the changeset viewer.