|
@@ -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)
|