Changeset 11243:e788addef69c in orange


Ignore:
Timestamp:
12/18/12 13:30:45 (16 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Implemented a different way to handle toolbox/canvas hover/selection help text.

Now using a QStatusTip subclass to notify the top level window.

Location:
Orange/OrangeCanvas
Files:
1 added
5 edited

Legend:

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

    r11242 r11243  
    2626from ..gui.dropshadow import DropShadowFrame 
    2727from ..gui.dock import CollapsibleDockWidget 
     28from ..gui.quickhelp import QuickHelpTipEvent 
    2829from ..gui.utils import message_critical, message_question, message_information 
    2930 
     
    196197        ) 
    197198 
    198         self.widgets_tool_box.hovered.connect( 
    199             self.on_tool_box_widget_hovered 
    200         ) 
    201  
    202199        self.dock_help = canvas_tool_dock.help 
    203200        self.dock_help.setMaximumHeight(150) 
     
    643640            if scheme_widget: 
    644641                scheme_widget.createNewNode(widget_desc) 
    645  
    646     def on_tool_box_widget_hovered(self, action): 
    647         """Mouse is over a widget in the widget toolbox 
    648         """ 
    649         widget_desc = action.data().toPyObject() 
    650         title = "" 
    651         help_text = "" 
    652         if widget_desc: 
    653             title = widget_desc.name 
    654             description = widget_desc.help 
    655             if not help_text: 
    656                 description = widget_desc.description 
    657  
    658             template = "<h3>{title}</h3>" + \ 
    659                        "<p>{description}</p>" + \ 
    660                        "<a href=''>more...</a>" 
    661             help_text = template.format(title=title, description=description) 
    662             # TODO: 'More...' link 
    663         self.set_quick_help_text(help_text) 
    664642 
    665643    def on_quick_category_action(self, action): 
     
    14051383        return QMainWindow.showEvent(self, event) 
    14061384 
     1385    def event(self, event): 
     1386        if event.type() == QEvent.StatusTip and \ 
     1387                isinstance(event, QuickHelpTipEvent): 
     1388            if event.priority() == QuickHelpTipEvent.Normal: 
     1389                self.dock_help.showHelp(event.html()) 
     1390            elif event.priority() == QuickHelpTipEvent.Temporary: 
     1391                self.dock_help.showHelp(event.html(), event.timeout()) 
     1392            elif event.priority() == QuickHelpTipEvent.Permanent: 
     1393                self.dock_help.showPermanentHelp(event.html()) 
     1394            return True 
     1395 
     1396        return QMainWindow.event(self, event) 
     1397 
    14071398    # Mac OS X 
    14081399    if sys.platform == "darwin": 
  • Orange/OrangeCanvas/application/canvastooldock.py

    r11242 r11243  
    1313from ..gui.toolgrid import ToolGrid 
    1414from ..gui.toolbar import DynamicResizeToolBar 
     15from ..gui.quickhelp import QuickHelp 
    1516from .widgettoolbox import WidgetToolBox, iter_item 
     17 
    1618from ..registry.qt import QtWidgetRegistry 
    1719 
     
    174176 
    175177 
    176 class QuickHelpWidget(QTextEdit): 
    177     def __init__(self, *args, **kwargs): 
    178         QTextEdit.__init__(self, *args, **kwargs) 
    179  
    180         self.setReadOnly(True) 
    181  
     178class QuickHelpWidget(QuickHelp): 
    182179    def minimumSizeHint(self): 
    183180        """Reimplemented to allow the Splitter to resize the widget 
  • Orange/OrangeCanvas/application/widgettoolbox.py

    r11224 r11243  
    2323from ..gui.toolbox import ToolBox, create_tab_gradient 
    2424from ..gui.toolgrid import ToolGrid 
    25  
     25from ..gui.quickhelp import StatusTipPromoter 
    2626from ..registry.qt import QtWidgetRegistry 
     27 
    2728 
    2829log = logging.getLogger(__name__) 
     
    5455            self.__startDrag 
    5556        ) 
     57        self.__statusTipPromoter = StatusTipPromoter(self) 
    5658 
    5759    def setModel(self, model, rootIndex=QModelIndex()): 
     
    102104            button = self.buttonForAction(event.action()) 
    103105            button.installEventFilter(self.__dragListener) 
     106            button.installEventFilter(self.__statusTipPromoter) 
    104107            return 
    105108        elif event.type() == QEvent.ActionRemoved: 
    106109            button = self.buttonForAction(event.action()) 
    107110            button.removeEventFilter(self.__dragListener) 
    108  
     111            button.removeEventFilter(self.__statusTipPromoter) 
    109112            # Removes the button 
    110113            ToolGrid.actionEvent(self, event) 
  • Orange/OrangeCanvas/document/schemeedit.py

    r11241 r11243  
    1717) 
    1818 
    19 from PyQt4.QtCore import Qt, QObject, QEvent, QSignalMapper, QRectF, QUrl 
     19from PyQt4.QtCore import ( 
     20    Qt, QObject, QEvent, QSignalMapper, QRectF, QUrl, QCoreApplication 
     21) 
     22 
    2023from PyQt4.QtCore import pyqtProperty as Property, pyqtSignal as Signal 
    2124 
     25from ..registry.qt import whats_this_helper 
     26from ..gui.quickhelp import QuickHelpTipEvent 
    2227from ..gui.utils import message_information, disabled 
    2328from ..scheme import scheme 
     
    95100        self.__contextMenuTarget = None 
    96101        self.__quickMenu = None 
     102        self.__quickTip = "" 
    97103 
    98104        self.__undoStack = QUndoStack(self) 
     
    964970            self.__removeSelectedAction.setText(self.tr("Remove")) 
    965971 
     972        focus = self.__scene.focusItem() 
     973        if isinstance(focus, items.NodeItem): 
     974            node = self.__scene.node_for_item(focus) 
     975            desc = node.description 
     976            tip = whats_this_helper(desc) 
     977        else: 
     978            tip = "" 
     979 
     980        if tip != self.__quickTip: 
     981            self.__quickTip = tip 
     982            ev = QuickHelpTipEvent("", self.__quickTip, 
     983                                   priority=QuickHelpTipEvent.Permanent) 
     984 
     985            QCoreApplication.sendEvent(self, ev) 
     986 
    966987    def __onNodeAdded(self, node): 
    967988        widget = self.__scheme.widget_for_node[node] 
  • Orange/OrangeCanvas/registry/qt.py

    r11133 r11243  
    144144        name = item.text() 
    145145        tooltip = item.toolTip() 
     146        whatsThis = item.whatsThis() 
    146147        icon = item.icon() 
    147148        if icon: 
    148             action = QAction(icon, name, self, toolTip=tooltip) 
    149         else: 
    150             action = QAction(name, self, toolTip=tooltip) 
     149            action = QAction(icon, name, self, toolTip=tooltip, 
     150                             whatsThis=whatsThis, 
     151                             statusTip=name) 
     152        else: 
     153            action = QAction(name, self, toolTip=tooltip, 
     154                             whatsThis=whatsThis, 
     155                             statusTip=name) 
    151156 
    152157        widget_desc = item.data(self.WIDGET_DESC_ROLE) 
     
    246251        tooltip = TOOLTIP_TEMPLATE.format(style=style, tooltip=tooltip) 
    247252        item.setToolTip(tooltip) 
     253        item.setWhatsThis(whats_this_helper(desc)) 
    248254        item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) 
    249255        item.setData(QVariant(desc), self.WIDGET_DESC_ROLE) 
     
    304310 
    305311 
     312def whats_this_helper(desc): 
     313    """What's this construction helper. 
     314    """ 
     315    title = desc.name 
     316    help_url = desc.help 
     317    description = desc.description 
     318 
     319    template = "<h3>{title}</h3>" + \ 
     320               "<p>{description}</p>" + \ 
     321               ("<a href='{url}'>more...</a>" if help_url else "") 
     322    help_text = template.format(title=title, description=description, 
     323                                url=help_url) 
     324    return help_text 
     325 
     326 
    306327def run_discovery(cached=False): 
    307328    """Run the default discovery and return an instance 
Note: See TracChangeset for help on using the changeset viewer.