|
@@ -8,6 +8,7 @@ from sketchUI.graphics_node_item import GraphicsNodeItem
|
|
|
from sketchUI.graphics_edge_item import GraphicsEdgeItem
|
|
|
from wrappers.modelverse import element_list_nice
|
|
|
import commons
|
|
|
+from evolution.node_ops import NodeDelete
|
|
|
|
|
|
|
|
|
class EXMMainWindow(QMainWindow, Ui_MainWindow):
|
|
@@ -29,6 +30,8 @@ class EXMMainWindow(QMainWindow, Ui_MainWindow):
|
|
|
self._setup_toolbar()
|
|
|
self._setup_statemachine()
|
|
|
|
|
|
+ self.menuActionDeleteModel.triggered.connect(self._on_delete_model_clicked)
|
|
|
+
|
|
|
# load model
|
|
|
self._load_model()
|
|
|
|
|
@@ -207,12 +210,16 @@ class EXMMainWindow(QMainWindow, Ui_MainWindow):
|
|
|
# empty
|
|
|
return
|
|
|
|
|
|
+ x_pos = -150
|
|
|
+ y_pos = 70
|
|
|
for item in model:
|
|
|
typ = item["type"]
|
|
|
if typ == "Node":
|
|
|
# first, draw all nodes
|
|
|
node_type = item["typeID"]
|
|
|
- self._add_node_to_scene(item["id"], node_type)
|
|
|
+ self._add_node_to_scene(item["id"], node_type, x=x_pos, y=y_pos)
|
|
|
+ x_pos += 80
|
|
|
+ y_pos *= -1
|
|
|
|
|
|
for item in model:
|
|
|
typ = item["type"]
|
|
@@ -291,3 +298,21 @@ class EXMMainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
|
# add to modelverse
|
|
|
mvops.add_attribute(self._cur_model, selected_node.node_id, key, val)
|
|
|
+
|
|
|
+ def _on_delete_model_clicked(self, event):
|
|
|
+ # delete the open example model
|
|
|
+ self.plainTextEdit.appendPlainText("Deleting model ...")
|
|
|
+ self.plainTextEdit.repaint()
|
|
|
+
|
|
|
+ delhander = NodeDelete()
|
|
|
+ for item in self._scene.items():
|
|
|
+ if not isinstance(item, GraphicsNodeItem):
|
|
|
+ continue
|
|
|
+ print("Deleting node {}".format(item.node_id))
|
|
|
+ delhander.execute(self._cur_model, item.node_id, local=True, check_if_last=True)
|
|
|
+
|
|
|
+ # delete the empty model from the Modelverse
|
|
|
+ if mvops.delete_example_model(self._cur_model):
|
|
|
+ self.close()
|
|
|
+ else:
|
|
|
+ self.plainTextEdit.appendPlainText("Error: Delete failed")
|