Quellcode durchsuchen

in instance modeling, del key deletes node

Lucas Heer vor 7 Jahren
Ursprung
Commit
e6655aadcc
2 geänderte Dateien mit 28 neuen und 2 gelöschten Zeilen
  1. 27 1
      sketchUI/im_scene.py
  2. 1 1
      wrappers/modelverse_SCCD.py

+ 27 - 1
sketchUI/im_scene.py

@@ -4,7 +4,7 @@ from PyQt5.Qt import Qt, QTransform
 from sketchUI.graphics_edge_item import GraphicsEdgeItem
 from sketchUI.graphics_node_item import GraphicsNodeItem
 from sketchUI import mvops
-
+from evolution import node_ops
 
 class Mode(Enum):
     SELECT = 0
@@ -54,6 +54,14 @@ class CustomScene(QGraphicsScene):
 
         QGraphicsScene.mouseReleaseEvent(self, event)
 
+    def keyPressEvent(self, event):
+        if not self._mode == Mode.SELECT:
+            return
+
+        # del deletes elements
+        if event.key() == Qt.Key_Delete:
+            self._handle_keypress_delete(self.selectedItems())
+
     def draw_edge(self, from_item, to_item, is_new):
         # type: (GraphicsNodeItem, GraphicsNodeItem, bool) -> None
         """
@@ -76,3 +84,21 @@ class CustomScene(QGraphicsScene):
         if is_new:
             mvops.add_edge(self._cur_model, from_item.node_id, to_item.node_id)
             self._parent.plainTextEdit.appendPlainText("Added edge between {} and {} to model".format(from_type, to_type))
+
+    def _handle_keypress_delete(self, selected):
+        del_hander = node_ops.NodeDelete()
+        for item in selected:
+            # delete node in model (also deletes edges in model)
+            if isinstance(item, GraphicsNodeItem):
+                self._parent.plainTextEdit.appendPlainText("Deleting node of type {}".format(item.get_type()))
+                del_hander.execute(self._cur_model, item.node_id, local=True, check_if_last=False)
+
+                # in view, delete edges that were connected to this node as well
+                # modelverse does this on its own so do not delete edges explicitly here
+                for edge in self.items():
+                    if not isinstance(edge, GraphicsEdgeItem):
+                        continue
+                    if edge.from_item.node_id == item.node_id or edge.to_item.node_id == item.node_id:
+                        self.removeItem(edge)
+
+                self.removeItem(item)

+ 1 - 1
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Mon Apr 23 14:39:12 2018
+Date:   Mon Apr 23 19:00:40 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server