Changeset 11154:80b9d1bd579b in orange


Ignore:
Timestamp:
10/24/12 19:56:42 (18 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added context menu event handler in SchemeEditWidget.

Location:
Orange/OrangeCanvas/document
Files:
2 edited

Legend:

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

    r11151 r11154  
    183183    def undo(self): 
    184184        self.annotation.text = self.old 
     185 
     186 
     187class SetAttrCommand(QUndoCommand): 
     188    def __init__(self, obj, attrname, newvalue, name=None, parent=None): 
     189        if name is None: 
     190            name = "Set %r" % attrname 
     191        QUndoCommand.__init__(self, name, parent) 
     192        self.obj = obj 
     193        self.attrname = attrname 
     194        self.newvalue = newvalue 
     195        self.oldvalue = getattr(obj, attrname) 
     196 
     197    def redo(self): 
     198        setattr(self.obj, self.attrname, self.newvalue) 
     199 
     200    def undo(self): 
     201        setattr(self.obj, self.attrname, self.oldvalue) 
  • Orange/OrangeCanvas/document/schemeedit.py

    r11151 r11154  
    77 
    88from PyQt4.QtGui import ( 
    9     QWidget, QVBoxLayout, QInputDialog, QUndoStack, QGraphicsItem, QPainter, 
    10     QGraphicsObject 
     9    QWidget, QVBoxLayout, QInputDialog, QMenu, QAction, QUndoStack, 
     10    QGraphicsItem, QGraphicsObject, QPainter 
    1111) 
    1212 
     
    7373        self.__possibleMouseItemsMove = False 
    7474        self.__itemsMoving = {} 
     75        self.__contextMenuTarget = None 
    7576 
    7677        self.__editFinishedMapper = QSignalMapper(self) 
     
    8384        self.__setupUi() 
    8485 
     86        self.__linkEnableAction = \ 
     87            QAction(self.tr("Enabled"), self, 
     88                    objectName="link-enable-action", 
     89                    triggered=self.__toogleLinkEnabled, 
     90                    checkable=True, 
     91                    ) 
     92 
     93        self.__linkRemoveAction = \ 
     94            QAction(self.tr("Remove"), self, 
     95                    objectName="link-remove-action", 
     96                    triggered=self.__linkRemove, 
     97                    toolTip=self.tr("Remove link."), 
     98                    ) 
     99 
     100        self.__linkResetAction = \ 
     101            QAction(self.tr("Reset Signals"), self, 
     102                    objectName="link-reset-action", 
     103                    triggered=self.__linkReset, 
     104                    ) 
     105 
     106        self.__linkMenu = QMenu(self) 
     107        self.__linkMenu.addAction(self.__linkEnableAction) 
     108        self.__linkMenu.addSeparator() 
     109        self.__linkMenu.addAction(self.__linkRemoveAction) 
     110        self.__linkMenu.addAction(self.__linkResetAction) 
     111 
    85112    def __setupUi(self): 
    86113        layout = QVBoxLayout() 
     
    91118        view = CanvasView(scene) 
    92119        view.setRenderHint(QPainter.Antialiasing) 
     120        view.setContextMenuPolicy(Qt.CustomContextMenu) 
     121        view.customContextMenuRequested.connect( 
     122            self.__onCustomContextMenuRequested 
     123        ) 
     124 
    93125        self.__view = view 
    94126        self.__scene = scene 
     
    307339 
    308340    def openSelected(self): 
    309         pass 
     341        selected = self.scene().selected_node_items() 
     342        for item in selected: 
     343            self.__onNodeActivate(item) 
    310344 
    311345    def editNodeTitle(self, node): 
     
    462496            return True 
    463497 
     498        item = scene.item_at(event.scenePos(), items.LinkItem) 
     499        if item is not None: 
     500            link = self.scene().link_for_item(item) 
     501            action = interactions.EditNodeLinksAction(self, link.source_node, 
     502                                                      link.sink_node) 
     503            action.edit_links() 
     504            event.accept() 
     505            return True 
     506 
    464507        return False 
    465508 
     
    542585            ) 
    543586 
     587    def __onCustomContextMenuRequested(self, pos): 
     588        scenePos = self.view().mapToScene(pos) 
     589        globalPos = self.view().mapToGlobal(pos) 
     590 
     591        item = self.scene().item_at(scenePos, items.NodeItem) 
     592        if item is not None: 
     593            self.window().widget_menu.popup(globalPos) 
     594            return 
     595 
     596        item = self.scene().item_at(scenePos, items.LinkItem) 
     597        if item is not None: 
     598            link = self.scene().link_for_item(item) 
     599            self.__linkEnableAction.setChecked(link.enabled) 
     600            self.__contextMenuTarget = link 
     601            self.__linkMenu.popup(globalPos) 
     602            return 
     603 
     604    def __toogleLinkEnabled(self, enabled): 
     605        if self.__contextMenuTarget: 
     606            link = self.__contextMenuTarget 
     607            command = commands.SetAttrCommand( 
     608                link, "enabled", enabled, name=self.tr("Set enabled"), 
     609            ) 
     610            self.__undoStack.push(command) 
     611 
     612    def __linkRemove(self): 
     613        if self.__contextMenuTarget: 
     614            self.removeLink(self.__contextMenuTarget) 
     615 
     616    def __linkReset(self): 
     617        if self.__contextMenuTarget: 
     618            link = self.__contextMenuTarget 
     619            action = interactions.EditNodeLinksAction( 
     620                self, link.source_node, link.sink_node 
     621            ) 
     622            action.edit_links() 
     623 
    544624 
    545625def geometry_from_annotation_item(item): 
Note: See TracChangeset for help on using the changeset viewer.