浏览代码

implemented deleting model from UI

Lucas Heer 7 年之前
父节点
当前提交
edffd40bd9
共有 7 个文件被更改,包括 68 次插入2 次删除
  1. 2 0
      main.py
  2. 26 1
      sketchUI/exm_mainwindow.py
  3. 10 0
      sketchUI/im_mainwindow.py
  4. 19 0
      sketchUI/mvops.py
  5. 4 0
      sketchUI/ui.py
  6. 6 0
      sketchUI/ui.ui
  7. 1 1
      wrappers/modelverse_SCCD.py

+ 2 - 0
main.py

@@ -115,5 +115,7 @@ if __name__ == "__main__":
     print("Starting UI ...")
     run_ui(mode, model)
 
+    """
     print("verify ... ")
     print(mv.verify(model, "formalisms/graphMM"))
+    """

+ 26 - 1
sketchUI/exm_mainwindow.py

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

+ 10 - 0
sketchUI/im_mainwindow.py

@@ -30,6 +30,7 @@ class IMMainWindow(QMainWindow, Ui_MainWindow):
         self.setup_toolbar()
         self.setup_state_machine()
         self.menuActionVerify.triggered.connect(self._on_verify_clicked)
+        self.menuActionDeleteModel.triggered.connect(self._on_delete_model_clicked)
 
         # load the model
         self._load_model()
@@ -265,3 +266,12 @@ class IMMainWindow(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):
+        self.plainTextEdit.appendPlainText("Deleting model ...")
+        self.plainTextEdit.repaint()
+
+        if mvops.delete_instance_model(self._cur_model):
+            self.close()
+        else:
+            self.plainTextEdit.appendPlainText("Error: Delete failed")

+ 19 - 0
sketchUI/mvops.py

@@ -136,3 +136,22 @@ def delete_attribute_from_node(model, node_id, key):
         if attr_key == key:
             mv.delete_element(model, attr)
             break
+
+def delete_instance_model(model):
+    """
+    Deletes the instance model "model". Returns True on success, False otherwise.
+    """
+    if model not in commons.all_instance_models():
+        return False
+    mv.model_delete(model)
+    return True
+
+def delete_example_model(model):
+    """
+    Deletes the example model "model". Should be empty since no evolution handling is done here.
+    Returns True on success, False otherwise.
+    """
+    if model not in commons.all_example_models():
+        return False
+    mv.model_delete(model)
+    return True

+ 4 - 0
sketchUI/ui.py

@@ -86,7 +86,10 @@ class Ui_MainWindow(object):
         self.menuActionVerify.setObjectName("menuActionVerify")
         self.menuActionExit = QtWidgets.QAction(MainWindow)
         self.menuActionExit.setObjectName("menuActionExit")
+        self.menuActionDeleteModel = QtWidgets.QAction(MainWindow)
+        self.menuActionDeleteModel.setObjectName("menuActionDeleteModel")
         self.menuFile.addAction(self.menuActionVerify)
+        self.menuFile.addAction(self.menuActionDeleteModel)
         self.menuFile.addSeparator()
         self.menuFile.addAction(self.menuActionExit)
         self.menubar.addAction(self.menuFile.menuAction())
@@ -102,4 +105,5 @@ class Ui_MainWindow(object):
         self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
         self.menuActionVerify.setText(_translate("MainWindow", "Verify"))
         self.menuActionExit.setText(_translate("MainWindow", "Exit"))
+        self.menuActionDeleteModel.setText(_translate("MainWindow", "Delete model"))
 

+ 6 - 0
sketchUI/ui.ui

@@ -100,6 +100,7 @@
      <string>File</string>
     </property>
     <addaction name="menuActionVerify"/>
+    <addaction name="menuActionDeleteModel"/>
     <addaction name="separator"/>
     <addaction name="menuActionExit"/>
    </widget>
@@ -127,6 +128,11 @@
     <string>Exit</string>
    </property>
   </action>
+  <action name="menuActionDeleteModel">
+   <property name="text">
+    <string>Delete model</string>
+   </property>
+  </action>
  </widget>
  <resources/>
  <connections>

+ 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:   Fri Apr 27 21:17:57 2018
+Date:   Sat Apr 28 11:35:47 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server