Changeset 11264:a5c2117750d3 in orange


Ignore:
Timestamp:
01/16/13 18:32:53 (15 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Children:
11265:698f59d642c2, 11289:4f67585127bc
Message:

Providing help for widgets.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/application/canvasmain.py

    r11259 r11264  
    1414    QMainWindow, QWidget, QAction, QActionGroup, QMenu, QMenuBar, QDialog, 
    1515    QFileDialog, QMessageBox, QVBoxLayout, QSizePolicy, QColor, QKeySequence, 
    16     QIcon, QToolBar, QToolButton, QDockWidget, QDesktopServices, 
    17     QApplication 
     16    QIcon, QToolBar, QToolButton, QDockWidget, QDesktopServices, QApplication 
    1817) 
    1918 
     
    2221) 
    2322 
     23from PyQt4.QtWebKit import QWebView 
     24 
    2425from PyQt4.QtCore import pyqtProperty as Property 
    2526 
     
    2829from ..gui.dock import CollapsibleDockWidget 
    2930from ..gui.quickhelp import QuickHelpTipEvent 
    30 from ..gui.utils import message_critical, message_question, message_information 
     31from ..gui.utils import message_critical, message_question 
     32 
     33from ..help import HelpManager 
    3134 
    3235from .canvastooldock import CanvasToolDock, QuickCategoryToolbar 
     
    111114        self.recent_schemes = config.recent_schemes() 
    112115 
     116        self.help = HelpManager(self) 
     117 
    113118        self.setup_actions() 
    114119        self.setup_ui() 
     
    199204        self.dock_help = canvas_tool_dock.help 
    200205        self.dock_help.setMaximumHeight(150) 
    201         self.dock_help.document().setDefaultStyleSheet("h3 {color: orange;}") 
     206        self.dock_help.document().setDefaultStyleSheet("h3, a {color: orange;}") 
    202207 
    203208        self.dock_help_action = canvas_tool_dock.toogleQuickHelpAction() 
     
    268273        self.output_dock = QDockWidget(self.tr("Output"), 
    269274                                       objectName="output-dock") 
     275 
    270276        self.output_dock.setAllowedAreas(Qt.BottomDockWidgetArea) 
    271277 
     
    277283        output_view = OutputView() 
    278284        self.output_dock.setWidget(output_view) 
     285 
     286        self.help_dock = QDockWidget(self.tr("Help"), 
     287                                     objectName="help-dock") 
     288        self.addDockWidget(Qt.LeftDockWidgetArea, self.help_dock) 
     289        self.help_dock.setFloating(True) 
     290        self.help_dock.setAllowedAreas(Qt.NoDockWidgetArea) 
     291 
     292        self.help_dock.hide() 
     293 
     294        self.help_view = QWebView() 
     295        self.help_dock.setWidget(self.help_view) 
    279296 
    280297        self.setMinimumSize(600, 500) 
     
    623640 
    624641        self.scheme_widget.setRegistry(widget_registry) 
     642 
     643        self.help.set_registry(widget_registry) 
    625644 
    626645        # Restore possibly saved widget toolbox tab states 
     
    12091228        if len(nodes) == 1: 
    12101229            doc.editNodeTitle(nodes[0]) 
    1211  
    1212     def widget_help(self): 
    1213         """Open widget help page. 
    1214         """ 
    1215         doc = self.current_document() 
    1216         nodes = doc.selectedNodes() 
    1217         help_url = None 
    1218         if len(nodes) == 1: 
    1219             node = nodes[0] 
    1220             desc = node.description 
    1221             if desc.help: 
    1222                 help_url = desc.help 
    1223  
    1224         if help_url is not None: 
    1225             QDesktopServices.openUrl(QUrl(help_url)) 
    1226         else: 
    1227             message_information( 
    1228                 self.tr("Sorry there is documentation available for " 
    1229                         "this widget."), 
    1230                 parent=self) 
    12311230 
    12321231    def open_canvas_settings(self): 
     
    14181417            return True 
    14191418 
     1419        elif event.type() == QEvent.WhatsThisClicked: 
     1420            ref = event.href() 
     1421            url = QUrl(ref) 
     1422 
     1423            if url.scheme() == "help" and url.authority() == "search": 
     1424                try: 
     1425                    url = self.help.search(url) 
     1426                except KeyError: 
     1427                    log.info("No help topic found for %r", url) 
     1428                    return False 
     1429 
     1430            if url: 
     1431                log.info("Setting help to url: %r", url) 
     1432                self.help_view.setUrl(QUrl(url)) 
     1433                self.help_dock.show() 
     1434                return True 
     1435 
    14201436        return QMainWindow.event(self, event) 
    14211437 
     
    15071523def index(sequence, *what, **kwargs): 
    15081524    """index(sequence, what, [key=None, [predicate=None]]) 
     1525 
    15091526    Return index of `what` in `sequence`. 
     1527 
    15101528    """ 
    15111529    what = what[0] 
  • Orange/OrangeCanvas/document/schemeedit.py

    r11259 r11264  
    99from operator import attrgetter 
    1010from contextlib import nested 
     11from urllib import urlencode 
    1112 
    1213from PyQt4.QtGui import ( 
     
    1415    QKeySequence, QUndoStack, QGraphicsItem, QGraphicsObject, 
    1516    QGraphicsTextItem, QCursor, QFont, QPainter, QPixmap, QColor, 
    16     QIcon, QDesktopServices 
     17    QIcon, QDesktopServices, QWhatsThisClickedEvent 
    1718) 
    1819 
     
    12161217 
    12171218    def __onHelpAction(self): 
     1219        """Help was requested for the selected widget. 
     1220        """ 
    12181221        nodes = self.selectedNodes() 
    12191222        help_url = None 
     
    12211224            node = nodes[0] 
    12221225            desc = node.description 
    1223             if desc.help: 
    1224                 help_url = desc.help 
    1225  
    1226         if help_url is not None: 
    1227             QDesktopServices.openUrl(QUrl(help_url)) 
    1228         else: 
    1229             message_information( 
    1230                 self.tr("Sorry there is documentation available for " 
    1231                         "this widget."), 
    1232                 parent=self) 
     1226 
     1227            help_url = "help://search?" + urlencode({"id": desc.id}) 
     1228 
     1229            # Notify the parent chain and let them respond 
     1230            ev = QWhatsThisClickedEvent(help_url) 
     1231            handled = QCoreApplication.sendEvent(self, ev) 
     1232 
     1233            if not handled: 
     1234                message_information( 
     1235                    self.tr("Sorry there is no documentation available for " 
     1236                            "this widget."), 
     1237                    parent=self) 
    12331238 
    12341239    def __toggleLinkEnabled(self, enabled): 
  • Orange/OrangeCanvas/gui/quickhelp.py

    r11243 r11264  
    11from collections import Callable 
    22 
    3 from PyQt4.QtGui import QTextBrowser, QStatusTipEvent 
    4 from PyQt4.QtCore import QObject, QCoreApplication, QEvent, QTimer 
     3from PyQt4.QtGui import QTextBrowser, QStatusTipEvent, QWhatsThisClickedEvent 
     4from PyQt4.QtCore import QObject, QCoreApplication, QEvent, QTimer, QUrl 
    55from PyQt4.QtCore import pyqtSignal as Signal 
    66 
     
    2020        self.__timer = QTimer(self, timeout=self.__on_timeout, 
    2121                              singleShot=True) 
     22        self.anchorClicked.connect(self.__on_anchorClicked) 
    2223 
    2324    def showHelp(self, text, timeout=0): 
     
    6869            self.textChanged.emit() 
    6970 
     71    def __on_anchorClicked(self, anchor): 
     72        ev = QuickHelpDetailRequestEvent(anchor.toString(), anchor) 
     73        QCoreApplication.postEvent(self, ev) 
     74 
    7075 
    7176class QuickHelpTipEvent(QStatusTipEvent): 
     
    8691    def timeout(self): 
    8792        return self.__timeout 
     93 
     94 
     95class QuickHelpDetailRequestEvent(QWhatsThisClickedEvent): 
     96    def __init__(self, href, url): 
     97        QWhatsThisClickedEvent.__init__(self, href) 
     98        self.__url = QUrl(url) 
     99 
     100    def url(self): 
     101        return QUrl(self.__url) 
    88102 
    89103 
  • Orange/OrangeWidgets/__init__.py

    r11095 r11264  
    1515                Associate, Prototypes]: 
    1616        discovery.process_category_package(pkg, distribution=dist) 
     17 
     18 
     19# Intersphinx documentation root's (registered in setup.py) 
     20intersphinx = ( 
     21     # root in development mode 
     22     ("{DEVELOP_ROOT}/docs/build/html/", None), 
     23     # URL is taken from PKG-INFO (Home-page) 
     24     ("{URL}/docs/latest/", 
     25      "{URL}/docs/latest/_objects/") 
     26) 
  • setup.cfg

    r9618 r11264  
    11[build_sphinx] 
    2 source-dir = docs/reference/rst 
    3 build-dir = docs/reference/build 
     2source-dir = docs 
     3build-dir = docs/build 
    44all_files = 1 
  • setup.py

    r11216 r11264  
    747747) 
    748748 
    749 # TODO: Use entry points for automatic script creation 
    750 # http://packages.python.org/distribute/setuptools.html#automatic-script-creation 
    751749ENTRY_POINTS = { 
    752750    'gui_scripts': ( 
    753751            'orange-canvas = Orange.OrangeCanvas.main:main', 
     752    ), 
     753    'orange.canvas.help': ( 
     754            'intersphinx = Orange.OrangeWidgets:intersphinx', 
    754755    ) 
    755756} 
     757 
    756758 
    757759def setup_package(): 
     
    779781        zip_safe = False, 
    780782 
    781         # TODO: Should migrate those for distribute (using entry points) 
    782783        cmdclass = cmdclass, 
    783784        ext_modules = ext_modules, 
    784 #        scripts = ( 
    785 #            "bin/orange-canvas", 
    786 #        ), 
    787785    ) 
    788786 
Note: See TracChangeset for help on using the changeset viewer.