Changeset 11176:4ed54725b91a in orange


Ignore:
Timestamp:
11/07/12 18:29:40 (18 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added keyboard directional navigation to ToolGrid.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/gui/toolgrid.py

    r11103 r11176  
    5252        curr_line_word_count = 0 
    5353 
    54         # TODO: Get margins from the style 
    55         width = self.width() - 4 
     54        option = QStyleOptionToolButton() 
     55        option.initFrom(self) 
     56 
     57        margin = self.style().pixelMetric(QStyle.PM_ButtonMargin, option, self) 
     58        width = self.width() - 2 * margin 
    5659 
    5760        while words: 
     
    209212        button.clicked.connect(self.__mapper.map) 
    210213        button.installEventFilter(self._buttonListener) 
     214        button.installEventFilter(self) 
    211215 
    212216    def setActions(self, actions): 
     
    301305        return buttons.index(button) 
    302306 
     307    def _onButtonRightClick(self, button): 
     308        print button 
     309 
     310    def _onButtonEnter(self, button): 
     311        action = button.defaultAction() 
     312        self.actionHovered.emit(action) 
     313 
     314    def __onClicked(self, action): 
     315        self.actionTriggered.emit(action) 
     316 
    303317    def paintEvent(self, event): 
    304318        return utils.StyledWidget_paintEvent(self, event) 
    305319 
    306     def focusNextPrevChild(self, next): 
    307         focus = self.focusWidget() 
     320    def eventFilter(self, obj, event): 
     321        etype = event.type() 
     322        if etype == QEvent.KeyPress and obj.hasFocus(): 
     323            key = event.key() 
     324            if key in [Qt.Key_Up, Qt.Key_Down, Qt.Key_Left, Qt.Key_Right]: 
     325                if self.__focusMove(obj, key): 
     326                    event.accept() 
     327                    return True 
     328 
     329        return QWidget.eventFilter(self, obj, event) 
     330 
     331    def __focusMove(self, focus, key): 
     332        assert(focus is self.focusWidget()) 
    308333        try: 
    309334            index = self._indexOf(focus) 
     
    311336            return False 
    312337 
    313         if next: 
     338        if key == Qt.Key_Down: 
     339            index += self.columns 
     340        elif key == Qt.Key_Up: 
     341            index -= self.columns 
     342        elif key == Qt.Key_Left: 
     343            index -= 1 
     344        elif key == Qt.Key_Right: 
    314345            index += 1 
     346 
     347        if index >= 0 and index < self.count(): 
     348            button = self._gridSlots[index].button 
     349            button.setFocus(Qt.TabFocusReason) 
     350            return True 
    315351        else: 
    316             index -= 1 
    317         if index == -1 or index == self.count(): 
    318352            return False 
    319  
    320         button = self._gridSlots[index].button 
    321         button.setFocus(Qt.TabFocusReason if next else Qt.BacktabFocusReason) 
    322         return True 
    323  
    324     def _onButtonRightClick(self, button): 
    325         print button 
    326  
    327     def _onButtonEnter(self, button): 
    328         action = button.defaultAction() 
    329         self.actionHovered.emit(action) 
    330  
    331     def __onClicked(self, action): 
    332         self.actionTriggered.emit(action) 
    333  
    334 #    def keyPressEvent(self, event): 
    335 #        key = event.key() 
    336 #        focus = self.focusWidget() 
    337 #        print key, focus 
    338 #        if key == Qt.Key_Down or key == Qt.Key_Up: 
    339 #            try: 
    340 #                index = self._indexOf(focus) 
    341 #            except IndexError: 
    342 #                return 
    343 #            if key == Qt.Key_Down: 
    344 #                index += self.columns 
    345 #            else: 
    346 #                index -= self.columns 
    347 #            if index >= 0 and index < self.count(): 
    348 #                button = self._gridSlots[index].button 
    349 #                button.setFocus(Qt.TabFocusReason) 
    350 #            event.accept() 
    351 #        else: 
    352 #            return QWidget.keyPressEvent(self, event) 
    353353 
    354354 
Note: See TracChangeset for help on using the changeset viewer.