Ignore:
Timestamp:
11/28/12 17:57:08 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Moved widget actions definitions into SchemeEditWidget.

File:
1 edited

Legend:

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

    r11201 r11208  
    33 
    44""" 
     5import sys 
    56import logging 
    67from operator import attrgetter 
     
    1011    QKeySequence, QUndoStack, QGraphicsItem, QGraphicsObject, 
    1112    QGraphicsTextItem, QCursor, QFont, QPainter, QPixmap, QColor, 
    12     QIcon 
     13    QIcon, QDesktopServices 
    1314) 
    1415 
    15 from PyQt4.QtCore import Qt, QObject, QEvent, QSignalMapper, QRectF 
     16from PyQt4.QtCore import Qt, QObject, QEvent, QSignalMapper, QRectF, QUrl 
    1617from PyQt4.QtCore import pyqtProperty as Property, pyqtSignal as Signal 
    1718 
     19from ..gui.utils import message_information, disabled 
    1820from ..scheme import scheme 
    1921from ..canvas.scene import CanvasScene 
     
    3941 
    4042    def sceneEventFilter(self, obj, event): 
    41         print obj, event, event.type() 
    4243        if event.type() == QEvent.FocusIn and \ 
    4344                obj.flags() & QGraphicsItem.ItemIsFocusable: 
     
    102103        self.__setupUi() 
    103104 
    104         self.__linkMenu = QMenu(self) 
     105        self.__editMenu = QMenu(self.tr("&Edit"), self) 
     106        self.__editMenu.addAction(self.__undoAction) 
     107        self.__editMenu.addAction(self.__redoAction) 
     108        self.__editMenu.addSeparator() 
     109        self.__editMenu.addAction(self.__selectAllAction) 
     110 
     111        self.__widgetMenu = QMenu(self.tr("&Widget"), self) 
     112        self.__widgetMenu.addAction(self.__openSelectedAction) 
     113        self.__widgetMenu.addSeparator() 
     114        self.__widgetMenu.addAction(self.__removeSelectedAction) 
     115        self.__widgetMenu.addAction(self.__renameAction) 
     116        self.__widgetMenu.addSeparator() 
     117        self.__widgetMenu.addAction(self.__helpAction) 
     118 
     119        self.__linkMenu = QMenu(self.tr("Link"), self) 
    105120        self.__linkMenu.addAction(self.__linkEnableAction) 
    106121        self.__linkMenu.addSeparator() 
     
    112127        self.__zoomAction = \ 
    113128            QAction(self.tr("Zoom"), self, 
    114                     objectName="zoom", 
     129                    objectName="zoom-action", 
    115130                    checkable=True, 
    116131                    shortcut=QKeySequence.ZoomIn, 
     
    121136        self.__cleanUpAction = \ 
    122137            QAction(self.tr("Clean Up"), self, 
    123                     objectName="cleanup", 
     138                    objectName="cleanup-action", 
    124139                    toolTip=self.tr("Align widget to a grid."), 
    125140                    triggered=self.alignToGrid, 
     
    128143        self.__newTextAnnotationAction = \ 
    129144            QAction(self.tr("Text"), self, 
    130                     objectName="new-text-annotation", 
     145                    objectName="new-text-action", 
    131146                    toolTip=self.tr("Add a text annotation to the scheme."), 
    132147                    checkable=True, 
     
    156171        self.__newArrowAnnotationAction = \ 
    157172            QAction(self.tr("Arrow"), self, 
    158                     objectName="new-arrow-annotation", 
     173                    objectName="new-arrow-action", 
    159174                    toolTip=self.tr("Add a arrow annotation to the scheme."), 
    160175                    checkable=True, 
     
    193208        self.__newArrowAnnotationAction.setMenu(self.__arrowColorMenu) 
    194209 
     210        self.__undoAction = self.__undoStack.createUndoAction(self) 
     211        self.__undoAction.setShortcut(QKeySequence.Undo) 
     212        self.__undoAction.setObjectName("undo-action") 
     213 
     214        self.__redoAction = self.__undoStack.createRedoAction(self) 
     215        self.__redoAction.setShortcut(QKeySequence.Redo) 
     216        self.__redoAction.setObjectName("redo-action") 
     217 
     218        self.__selectAllAction = \ 
     219            QAction(self.tr("Select all"), self, 
     220                    objectName="select-all-action", 
     221                    toolTip=self.tr("Select all items."), 
     222                    triggered=self.selectAll, 
     223                    shortcut=QKeySequence.SelectAll 
     224                    ) 
     225 
     226        self.__openSelectedAction = \ 
     227            QAction(self.tr("Open"), self, 
     228                    objectName="open-action", 
     229                    toolTip=self.tr("Open selected widget"), 
     230                    triggered=self.openSelected, 
     231                    enabled=False) 
     232 
     233        self.__removeSelectedAction = \ 
     234            QAction(self.tr("Remove"), self, 
     235                    objectName="remove-selected", 
     236                    toolTip=self.tr("Remove selected items"), 
     237                    triggered=self.removeSelected, 
     238                    enabled=False 
     239                    ) 
     240 
     241        shortcuts = [Qt.Key_Delete, 
     242                     Qt.ControlModifier + Qt.Key_Backspace] 
     243 
     244        if sys.platform == "darwin": 
     245            # Command Backspace should be the first 
     246            # (visible shortcut in the menu) 
     247            shortcuts.reverse() 
     248 
     249        self.__removeSelectedAction.setShortcuts(shortcuts) 
     250 
     251        self.__renameAction = \ 
     252            QAction(self.tr("Rename"), self, 
     253                    objectName="rename-action", 
     254                    toolTip=self.tr("Rename selected widget"), 
     255                    triggered=self.__onRenameAction, 
     256                    shortcut=QKeySequence(Qt.Key_F2), 
     257                    enabled=False) 
     258 
     259        self.__helpAction = \ 
     260            QAction(self.tr("Help"), self, 
     261                    objectName="help-action", 
     262                    toolTip=self.tr("Show widget help"), 
     263                    triggered=self.__onHelpAction, 
     264                    shortcut=QKeySequence.HelpContents 
     265                    ) 
     266 
    195267        self.__linkEnableAction = \ 
    196268            QAction(self.tr("Enabled"), self, 
     
    256328                self.__newArrowAnnotationAction] 
    257329 
     330    def menuBarActions(self): 
     331        """Return a list of actions that can be inserted into a QMenuBar. 
     332        These actions should have a menu. 
     333 
     334        """ 
     335        return [self.__editMenu.menuAction(), self.__widgetMenu.menuAction()] 
     336 
    258337    def isModified(self): 
    259338        return not self.__undoStack.isClean() 
     
    428507        self.__undoStack.beginMacro(self.tr("Remove")) 
    429508        for item in selected: 
    430             print item 
    431509            if isinstance(item, items.NodeItem): 
    432510                node = self.scene().node_for_item(item) 
     
    559637        if anchor_item and event.button() == Qt.LeftButton: 
    560638            # Start a new link starting at item 
     639            scene.clearSelection() 
    561640            handler = interactions.NewLinkAction(self) 
    562641            scene.set_user_interaction_handler(handler) 
     
    688767            return False 
    689768 
     769        handler = None 
    690770        if (event.key() == Qt.Key_Space and \ 
    691771                self.__quickMenuTriggers & SchemeEditWidget.SpaceKey): 
    692             action = interactions.NewNodeAction(self) 
    693             action.create_new(QCursor.pos()) 
     772            handler = interactions.NewNodeAction(self) 
     773 
     774        elif len(event.text()) and \ 
     775                self.__quickMenuTriggers & SchemeEditWidget.AnyKey: 
     776            handler = interactions.NewNodeAction(self) 
     777            # TODO: set the search text to event.text() and set focus on the 
     778            # search line 
     779 
     780        if handler is not None: 
     781            # Control + Backspace (remove widget action) conflicts with the 
     782            # 'Clear text action in the search widget, so we disable the 
     783            # remove widget action so the text editing follows standard 
     784            # 'look and feel' 
     785            with disabled(self.__removeSelectedAction): 
     786                handler.create_new(QCursor.pos()) 
     787 
    694788            event.accept() 
    695789            return True 
    696790 
    697         if len(event.text()) and \ 
    698                 self.__quickMenuTriggers & SchemeEditWidget.AnyKey: 
    699             action = interactions.NewNodeAction(self) 
    700             # TODO: set the search text to event.text() and set focus on the 
    701             # search line 
    702             action.create_new(QCursor.pos()) 
    703             event.accept() 
    704             return True 
    705  
    706791        return False 
    707792 
     
    713798 
    714799    def __onSelectionChanged(self): 
    715         pass 
     800        selected = self.selectedNodes() 
     801 
     802        enabled = bool(selected) 
     803        self.__openSelectedAction.setEnabled(enabled) 
     804        self.__removeSelectedAction.setEnabled(enabled) 
     805 
     806        if len(selected) == 0: 
     807            self.__openSelectedAction.setText(self.tr("Open")) 
     808            self.__removeSelectedAction.setText(self.tr("Remove")) 
     809 
     810        elif len(selected) == 1: 
     811            self.__openSelectedAction.setText(self.tr("Open")) 
     812            self.__removeSelectedAction.setText(self.tr("Remove")) 
     813 
     814            self.__renameAction.setEnabled(True) 
     815            self.__helpAction.setEnabled(True) 
     816 
     817        else: 
     818            self.__widgetMenu.setEnabled(enabled) 
     819            self.__openSelectedAction.setText(self.tr("Open All")) 
     820            self.__removeSelectedAction.setText(self.tr("Remove All")) 
     821 
     822            self.__renameAction.setEnabled(False) 
     823            self.__helpAction.setEnabled(False) 
    716824 
    717825    def __onNodeAdded(self, node): 
     
    8981006        item = self.scene().item_at(scenePos, items.NodeItem) 
    8991007        if item is not None: 
    900             self.window().widget_menu.popup(globalPos) 
     1008            self.__widgetMenu.popup(globalPos) 
    9011009            return 
    9021010 
     
    9081016            self.__linkMenu.popup(globalPos) 
    9091017            return 
     1018 
     1019    def __onRenameAction(self): 
     1020        selected = self.selectedNodes() 
     1021        if len(selected) == 1: 
     1022            self.editNodeTitle(selected[0]) 
     1023 
     1024    def __onHelpAction(self): 
     1025        nodes = self.selectedNodes() 
     1026        help_url = None 
     1027        if len(nodes) == 1: 
     1028            node = nodes[0] 
     1029            desc = node.description 
     1030            if desc.help: 
     1031                help_url = desc.help 
     1032 
     1033        if help_url is not None: 
     1034            QDesktopServices.openUrl(QUrl(help_url)) 
     1035        else: 
     1036            message_information( 
     1037                self.tr("Sorry there is documentation available for " 
     1038                        "this widget."), 
     1039                parent=self) 
    9101040 
    9111041    def __toggleLinkEnabled(self, enabled): 
Note: See TracChangeset for help on using the changeset viewer.