Changeset 11131:984471b6fa6e in orange


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

Improved keyboard control and styling in quick menu.

Location:
Orange/OrangeCanvas
Files:
3 edited

Legend:

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

    r11110 r11131  
    33 
    44""" 
    5  
     5import sys 
    66import logging 
     7 
    78from collections import namedtuple 
    89 
     
    167168        """ 
    168169        button = TabButton(self, objectName="tab-button") 
     170        button.setSizePolicy(QSizePolicy.Expanding, 
     171                             QSizePolicy.Expanding) 
    169172 
    170173        self.__group.addButton(button) 
     
    219222        if self.__currentIndex != index: 
    220223            self.__currentIndex = index 
     224 
     225            if index != -1: 
     226                self.__tabs[index].button.setChecked(True) 
     227 
    221228            self.currentChanged.emit(index) 
    222229 
     
    298305        self.__stack.insertWidget(index, page) 
    299306        self.__tab.insertTab(index, title, icon, toolTip) 
     307        return index 
    300308 
    301309    def page(self, index): 
     
    348356        """ 
    349357        return self.__stack.indexOf(page) 
     358 
     359    def tabButton(self, index): 
     360        """Return the tab button instance for index. 
     361        """ 
     362        return self.__tab.button(index) 
    350363 
    351364 
     
    470483        page.setRootIndex(index) 
    471484 
     485        view = page.view() 
     486 
     487        if sys.platform == "darwin": 
     488            view.verticalScrollBar().setAttribute(Qt.WA_MacMiniSize, True) 
     489 
    472490        name = unicode(index.data(Qt.DisplayRole)) 
    473491        page.setTitle(name) 
     
    479497        page.setToolTip(index.data(Qt.ToolTipRole).toPyObject()) 
    480498 
    481         brush = index.data(Qt.BackgroundRole) 
    482         if brush.isValid(): 
    483             brush = brush.toPyObject() 
    484499        return page 
    485500 
     
    488503        for i in range(root.rowCount()): 
    489504            item = root.child(i) 
    490             page = self.createPage(item.index()) 
     505            index = item.index() 
     506            page = self.createPage(index) 
    491507            page.setActionRole(QtWidgetRegistry.WIDGET_ACTION_ROLE) 
    492             self.addPage(page.title(), page) 
     508            i = self.addPage(page.title(), page) 
     509 
     510            brush = index.data(Qt.BackgroundRole) 
     511            if brush.isValid(): 
     512                brush = brush.toPyObject() 
     513                button = self.__pages.tabButton(i) 
     514                palette = button.palette() 
     515                button.setStyleSheet( 
     516                    "QToolButton {\n" 
     517                    "    qproperty-flat_: false;" 
     518                    "    background-color: %s;\n" 
     519                    "    border: none;\n" 
     520                    "}\n" 
     521                    "QToolButton:checked {\n" 
     522                    "    border: 1px solid %s;\n" 
     523                    "}" % (brush.color().name(), 
     524                           palette.color(palette.Mid).name()) 
     525                ) 
     526 
    493527        self.__model = model 
    494528        self.__suggestPage.setModel(model) 
     
    499533        if pos is None: 
    500534            pos = QPoint() 
     535 
     536        self.__search.setText("") 
     537        self.__suggestPage.setFilterFixedString("") 
    501538 
    502539        self.ensurePolished() 
     
    537574    def exec_(self, pos=None): 
    538575        self.popup(pos) 
     576        self.setFocus(Qt.PopupFocusReason) 
     577 
    539578        self.__triggeredAction = None 
    540579        self.__loop = QEventLoop(self) 
     
    570609        self.__pages.setCurrentWidget(self.__suggestPage) 
    571610        self.__search.setFocus(Qt.ShortcutFocusReason) 
     611 
    572612        # Make sure that the first enabled item is set current. 
    573613        self.__suggestPage.ensureCurrent() 
    574614 
    575615    def keyPressEvent(self, event): 
    576         self.__search.setFocus(Qt.ShortcutFocusReason) 
    577         self.setCurrentIndex(0) 
    578         self.__search.keyPressEvent(event) 
     616        if event.text(): 
     617            # Ignore modifiers etc. 
     618            self.__search.setFocus(Qt.ShortcutFocusReason) 
     619            self.setCurrentIndex(0) 
     620            self.__search.keyPressEvent(event) 
     621 
    579622        FramelessWindow.keyPressEvent(self, event) 
    580623 
  • Orange/OrangeCanvas/gui/tests/test_tooltree.py

    r11106 r11131  
    77 
    88from ..tooltree import ToolTree 
     9 
     10from ...registry.qt import QtWidgetRegistry 
     11from ...registry.tests import small_testing_registry 
    912 
    1013from ..test import QAppTestCase 
     
    3134        model.appendRow([cat]) 
    3235 
     36        def p(action): 
     37            print "triggered", action.text() 
     38 
     39        tree.triggered.connect(p) 
     40 
    3341        tree.show() 
    3442 
     
    3644 
    3745    def test_tooltree_registry(self): 
    38         from ...registry.qt import QtWidgetRegistry 
    39         from ...registry.tests import small_testing_registry 
    4046        reg = QtWidgetRegistry(small_testing_registry()) 
    4147 
     
    4551        tree.show() 
    4652 
     53        def p(action): 
     54            print "triggered", action.text() 
     55        tree.triggered.connect(p) 
     56 
    4757        self.app.exec_() 
  • Orange/OrangeCanvas/gui/tooltree.py

    r11106 r11131  
    55""" 
    66 
    7 import sys 
    87import logging 
    98 
    109from PyQt4.QtGui import ( 
    1110    QTreeView, QWidget, QVBoxLayout, QSizePolicy, QStandardItemModel, 
    12     QAbstractProxyModel, QStyledItemDelegate, QAction, QIcon 
     11    QAbstractProxyModel, QStyledItemDelegate, QStyle, QAction, QIcon 
    1312) 
    1413 
    15 from PyQt4.QtCore import Qt, QModelIndex 
     14from PyQt4.QtCore import Qt, QEvent, QModelIndex 
    1615from PyQt4.QtCore import pyqtSignal as Signal, pyqtProperty as Property 
    1716 
     
    6463        view.entered.connect(self.__onEntered) 
    6564 
     65        view.installEventFilter(self) 
     66 
    6667        self.__view = view 
    67  
    68         if sys.platform == "darwin": 
    69             view.verticalScrollBar().setAttribute(Qt.WA_MacMiniSize, True) 
    7068 
    7169        layout.addWidget(view) 
     
    182180            action = self.__actionForIndex(index) 
    183181            if action is not None: 
     182                action.hover() 
    184183                self.hovered.emit(action) 
    185184 
     
    195194                    self.__view.setCurrentIndex(index) 
    196195                    break 
     196 
     197    def eventFilter(self, obj, event): 
     198        if obj is self.__view and event.type() == QEvent.KeyPress: 
     199            key = event.key() 
     200 
     201            space_activates = \ 
     202                self.style().styleHint( 
     203                        QStyle.SH_Menu_SpaceActivatesItem, 
     204                        None, None) 
     205 
     206            if key in [Qt.Key_Enter, Qt.Key_Return, Qt.Key_Select] or \ 
     207                    (key == Qt.Key_Space and space_activates): 
     208                index = self.__view.currentIndex() 
     209                if index.isValid() and index.flags() & Qt.ItemIsEnabled: 
     210                    # Emit activated on behalf of QTreeView. 
     211                    self.__view.activated.emit(index) 
     212                return True 
     213 
     214        return QWidget.eventFilter(self, obj, event) 
    197215 
    198216 
Note: See TracChangeset for help on using the changeset viewer.