Changeset 11296:207c96a59fe3 in orange


Ignore:
Timestamp:
01/31/13 15:43:04 (15 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Capturing help requests ("F1" key press) from OWBaseWidget.

Location:
Orange
Files:
3 edited

Legend:

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

    r11279 r11296  
    1616    QKeySequence, QUndoStack, QGraphicsItem, QGraphicsObject, 
    1717    QGraphicsTextItem, QCursor, QFont, QPainter, QPixmap, QColor, 
    18     QIcon, QDesktopServices, QWhatsThisClickedEvent 
     18    QIcon, QWhatsThisClickedEvent 
    1919) 
    2020 
    2121from PyQt4.QtCore import ( 
    22     Qt, QObject, QEvent, QSignalMapper, QRectF, QUrl, QCoreApplication 
     22    Qt, QObject, QEvent, QSignalMapper, QRectF, QCoreApplication 
    2323) 
    2424 
     
    448448                self.__scheme.node_added.disconnect(self.__onNodeAdded) 
    449449                self.__scheme.node_removed.disconnect(self.__onNodeRemoved) 
     450                self.__scheme.removeEventFilter(self) 
    450451 
    451452            self.__scheme = scheme 
     
    525526                for node in self.__scheme.nodes: 
    526527                    self.__onNodeAdded(node) 
     528 
     529                self.__scheme.installEventFilter(self) 
    527530 
    528531    def scheme(self): 
     
    827830                return self.sceneContextMenuEvent(event) 
    828831 
     832        elif obj is self.__scheme: 
     833            if event.type() == QEvent.WhatsThisClicked: 
     834                # Re post the event 
     835                self.__showHelpFor(event.href()) 
     836 
    829837        return QWidget.eventFilter(self, obj, event) 
    830838 
     
    12911299 
    12921300            help_url = "help://search?" + urlencode({"id": desc.id}) 
    1293  
    1294             # Notify the parent chain and let them respond 
    1295             ev = QWhatsThisClickedEvent(help_url) 
    1296             handled = QCoreApplication.sendEvent(self, ev) 
    1297  
    1298             if not handled: 
    1299                 message_information( 
    1300                     self.tr("Sorry there is no documentation available for " 
    1301                             "this widget."), 
    1302                     parent=self) 
     1301            self.__showHelpFor(help_url) 
     1302 
     1303    def __showHelpFor(self, help_url): 
     1304        """ 
     1305        Show help for an "help" url. 
     1306        """ 
     1307        # Notify the parent chain and let them respond 
     1308        ev = QWhatsThisClickedEvent(help_url) 
     1309        handled = QCoreApplication.sendEvent(self, ev) 
     1310 
     1311        if not handled: 
     1312            message_information( 
     1313                self.tr("Sorry there is no documentation available for " 
     1314                        "this widget."), 
     1315                parent=self) 
    13031316 
    13041317    def __toggleLinkEnabled(self, enabled): 
  • Orange/OrangeCanvas/scheme/widgetsscheme.py

    r11269 r11296  
    2020 
    2121import sip 
     22from PyQt4.QtGui import QShortcut, QKeySequence, QWhatsThisClickedEvent 
    2223from PyQt4.QtCore import Qt, QCoreApplication, QEvent 
    2324 
     
    125126        widget.processingStateChanged.connect(node.set_processing_state) 
    126127 
     128        # Install a help shortcut on the widget 
     129        help_shortcut = QShortcut(QKeySequence("F1"), widget) 
     130        help_shortcut.activated.connect(self.__on_help_request) 
    127131        return widget 
    128132 
     
    167171        Scheme.save_to(self, stream) 
    168172 
     173    def __on_help_request(self): 
     174        """ 
     175        Help shortcut was pressed. We send a `QWhatsThisClickedEvent` and 
     176        hope someone responds to it. 
     177 
     178        """ 
     179        # Sender is the QShortcut, and parent the OWBaseWidget 
     180        widget = self.sender().parent() 
     181        node = self.node_for_widget.get(widget) 
     182        if node: 
     183            url = "help://search?id={0}".format(node.description.id) 
     184            event = QWhatsThisClickedEvent(url) 
     185            QCoreApplication.sendEvent(self, event) 
     186 
    169187 
    170188class WidgetsSignalManager(SignalManager): 
  • Orange/OrangeWidgets/OWBaseWidget.py

    r11292 r11296  
    801801 
    802802    def openWidgetHelp(self): 
    803         if "widgetInfo" in self.__dict__:  # This widget is on a canvas. 
     803        if "widgetInfo" in self.__dict__ and \ 
     804                hasattr(qApp, "canvasDlg"): 
     805            # This widget is on a canvas. 
    804806            qApp.canvasDlg.helpWindow.showHelpFor(self.widgetInfo, True) 
    805807 
     
    807809        if e.key() in (Qt.Key_Help, Qt.Key_F1): 
    808810            self.openWidgetHelp() 
    809 #            e.ignore() 
    810811        elif (int(e.modifiers()), e.key()) in OWBaseWidget.defaultKeyActions: 
    811812            OWBaseWidget.defaultKeyActions[int(e.modifiers()), e.key()](self) 
Note: See TracChangeset for help on using the changeset viewer.