Quellcode durchsuchen

Enable a "minimal rerender"

Yentl Van Tendeloo vor 7 Jahren
Ursprung
Commit
194f743d58

+ 2 - 2
classes/canvas/canvas.xml

@@ -322,7 +322,7 @@
 
                             <transition event="mv_response" target="../../../waiting_for_clear">
                                 <parameter name="ID"/>
-                                <raise event="rerender_model" scope="narrow" target="'parent'"/>
+                                <raise event="minimal_rerender_model" scope="narrow" target="'parent'"/>
                             </transition>
                         </state>
                     </state>
@@ -375,7 +375,7 @@
                         <script>
                             self.to_move[ID] = self.create_location
                         </script>
-                        <raise event="rerender_model" scope="narrow" target="'parent'"/>
+                        <raise event="minimal_rerender_model" scope="narrow" target="'parent'"/>
                     </transition>
                 </state>
 

+ 2 - 2
classes/canvas/canvas_element.xml

@@ -301,7 +301,7 @@
                 <state id="check">
                     <transition cond="current_rendered_model" target="../do"/>
                     <transition cond="not current_rendered_model" target="../../../main">
-                        <raise event="rerender_model" scope="narrow" target="'parent/parent'"/>
+                        <raise event="minimal_rerender_model" scope="narrow" target="'parent/parent'"/>
                     </transition>
                 </state>
 
@@ -313,7 +313,7 @@
                         </raise>
                     </onentry>
                     <transition event="mv_response" target="../../../main">
-                        <raise event="rerender_model" scope="narrow" target="'parent/parent'"/>
+                        <raise event="minimal_rerender_model" scope="narrow" target="'parent/parent'"/>
                     </transition>
                 </state>
             </state>

+ 3 - 3
classes/canvas/connecting_line.xml

@@ -173,7 +173,7 @@
                 <transition event="mv_response" target="../prompt">
                     <parameter name="result"/>
                     <script>
-                        self.prev_results = result
+                        self.prev_results = {k: json.dumps(v) for k, v in result.items()}
                     </script>
                 </transition>
             </state>
@@ -230,7 +230,7 @@
                     </script>
                     <raise event="mv_request" scope="broad">
                         <parameter expr="'attr_assign'"/>
-                        <parameter expr="[current_model, self.as_element, k, v]"/>
+                        <parameter expr="[current_model, self.as_element, k, json.loads(v)]"/>
                     </raise>
                 </transition>
                 <transition cond="self.remaining_responses == 0" target="../mark_dirty"/>
@@ -249,7 +249,7 @@
                     </raise>
                 </onentry>
                 <transition event="mv_response" target="../../main">
-                    <raise event="rerender_model" scope="narrow" target="'parent/parent'"/>
+                    <raise event="minimal_rerender_model" scope="narrow" target="'parent/parent'"/>
                 </transition>
             </state>
         </state>

+ 2 - 1
classes/window/main_window.xml

@@ -117,6 +117,7 @@
                         <transition event="create_new_model" target="../create_new_model"/>
                         <transition event="open_model" target="../open_model"/>
                         <transition event="rerender_model" target="../rerender_model"/>
+                        <transition event="minimal_rerender_model" target="../rerender_model/request_render"/>
                         <transition event="new_rendered" cond="current_mapper is not None" target="../new_rendered"/>
                         <transition event="verify" target="../verify_model"/>
                         <transition event="conf_bottom" target="../conf_bottom"/>
@@ -213,7 +214,7 @@
                                 </raise>
                             </onentry>
 
-                            <transition event="mv_response" target="../../rerender_model"/>
+                            <transition event="mv_response" target="../../rerender_model/request_render"/>
                         </state>
                     </state>
 

+ 58 - 52
frontend.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 May 28 11:45:20 2018
+Date:   Mon May 28 12:44:43 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -3509,8 +3509,11 @@ class Modelverse(RuntimeClassBase):
     
     def _initialized_behaviour_operations_read_attrs_0_exec(self, parameters):
         response = self.responses.pop(0).split(": ", 1)[1].strip()
-        values = {line.split(" : ", 1)[0]: line.split(" : ", 1)[1] for line in response.split("\n")}
-        values = {key: json.loads(values[key].split(" = ", 1)[1]) for key in values}
+        if "\n" in response:
+            values = {line.split(" : ", 1)[0]: line.split(" : ", 1)[1] for line in response.split("\n")}
+            values = {key: json.loads(values[key].split(" = ", 1)[1]) for key in values}
+        else:
+            values = {}
         self.raiseInternalEvent(Event("result", None, [values]))
     
     def _initialized_behaviour_operations_read_attrs_0_guard(self, parameters):
@@ -5688,59 +5691,62 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _init_init_running_idle_2 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/rerender_model"]])
         _init_init_running_idle_2.setTrigger(Event("rerender_model", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_2)
-        _init_init_running_idle_3 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/new_rendered"]])
-        _init_init_running_idle_3.setTrigger(Event("new_rendered", None))
-        _init_init_running_idle_3.setGuard(self._init_init_running_idle_3_guard)
+        _init_init_running_idle_3 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/rerender_model/request_render"]])
+        _init_init_running_idle_3.setTrigger(Event("minimal_rerender_model", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_3)
-        _init_init_running_idle_4 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/verify_model"]])
-        _init_init_running_idle_4.setTrigger(Event("verify", None))
+        _init_init_running_idle_4 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/new_rendered"]])
+        _init_init_running_idle_4.setTrigger(Event("new_rendered", None))
+        _init_init_running_idle_4.setGuard(self._init_init_running_idle_4_guard)
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_4)
-        _init_init_running_idle_5 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/conf_bottom"]])
-        _init_init_running_idle_5.setTrigger(Event("conf_bottom", None))
+        _init_init_running_idle_5 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/verify_model"]])
+        _init_init_running_idle_5.setTrigger(Event("verify", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_5)
-        _init_init_running_idle_6 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/custom_MM"]])
-        _init_init_running_idle_6.setTrigger(Event("custom_MM", None))
+        _init_init_running_idle_6 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/conf_bottom"]])
+        _init_init_running_idle_6.setTrigger(Event("conf_bottom", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_6)
-        _init_init_running_idle_7 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/upload_MVC"]])
-        _init_init_running_idle_7.setTrigger(Event("upload_MVC", None))
+        _init_init_running_idle_7 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/custom_MM"]])
+        _init_init_running_idle_7.setTrigger(Event("custom_MM", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_7)
-        _init_init_running_idle_8 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/add_object_diagrams"]])
-        _init_init_running_idle_8.setTrigger(Event("add_object_diagrams", None))
+        _init_init_running_idle_8 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/upload_MVC"]])
+        _init_init_running_idle_8.setTrigger(Event("upload_MVC", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_8)
-        _init_init_running_idle_9 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/execute_activity"]])
-        _init_init_running_idle_9.setTrigger(Event("activity", None))
+        _init_init_running_idle_9 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/add_object_diagrams"]])
+        _init_init_running_idle_9.setTrigger(Event("add_object_diagrams", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_9)
-        _init_init_running_idle_10 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/create_activity"]])
-        _init_init_running_idle_10.setTrigger(Event("create_activity", None))
+        _init_init_running_idle_10 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/execute_activity"]])
+        _init_init_running_idle_10.setTrigger(Event("activity", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_10)
-        _init_init_running_idle_11 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/enact_process"]])
-        _init_init_running_idle_11.setTrigger(Event("enact_process", None))
+        _init_init_running_idle_11 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/create_activity"]])
+        _init_init_running_idle_11.setTrigger(Event("create_activity", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_11)
-        _init_init_running_idle_12 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/modify_defined_attrs"]])
-        _init_init_running_idle_12.setAction(self._init_init_running_idle_12_exec)
-        _init_init_running_idle_12.setTrigger(Event("modify_defined_attrs", None))
+        _init_init_running_idle_12 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/enact_process"]])
+        _init_init_running_idle_12.setTrigger(Event("enact_process", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_12)
-        _init_init_running_idle_13 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/change_metamodel"]])
+        _init_init_running_idle_13 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/modify_defined_attrs"]])
         _init_init_running_idle_13.setAction(self._init_init_running_idle_13_exec)
-        _init_init_running_idle_13.setTrigger(Event("change_metamodel", None))
+        _init_init_running_idle_13.setTrigger(Event("modify_defined_attrs", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_13)
-        _init_init_running_idle_14 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/change_mapper"]])
+        _init_init_running_idle_14 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/change_metamodel"]])
         _init_init_running_idle_14.setAction(self._init_init_running_idle_14_exec)
-        _init_init_running_idle_14.setTrigger(Event("change_mapper", None))
+        _init_init_running_idle_14.setTrigger(Event("change_metamodel", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_14)
-        _init_init_running_idle_15 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/change_rendered"]])
+        _init_init_running_idle_15 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/change_mapper"]])
         _init_init_running_idle_15.setAction(self._init_init_running_idle_15_exec)
-        _init_init_running_idle_15.setTrigger(Event("change_rendered", None))
+        _init_init_running_idle_15.setTrigger(Event("change_mapper", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_15)
-        _init_init_running_idle_16 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/idle"]])
+        _init_init_running_idle_16 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/change_rendered"]])
         _init_init_running_idle_16.setAction(self._init_init_running_idle_16_exec)
-        _init_init_running_idle_16.setTrigger(Event("select_for_creation", None))
+        _init_init_running_idle_16.setTrigger(Event("change_rendered", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_16)
-        _init_init_running_idle_17 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/open_model/search_metamodels"]])
+        _init_init_running_idle_17 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/idle"]])
         _init_init_running_idle_17.setAction(self._init_init_running_idle_17_exec)
-        _init_init_running_idle_17.setTrigger(None)
-        _init_init_running_idle_17.setGuard(self._init_init_running_idle_17_guard)
+        _init_init_running_idle_17.setTrigger(Event("select_for_creation", None))
         self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_17)
+        _init_init_running_idle_18 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/open_model/search_metamodels"]])
+        _init_init_running_idle_18.setAction(self._init_init_running_idle_18_exec)
+        _init_init_running_idle_18.setTrigger(None)
+        _init_init_running_idle_18.setGuard(self._init_init_running_idle_18_guard)
+        self.states["/init/init/running/idle"].addTransition(_init_init_running_idle_18)
         
         # transition /init/init/running/modify_defined_attrs/create_window
         _init_init_running_modify_defined_attrs_create_window_0 = Transition(self, self.states["/init/init/running/modify_defined_attrs/create_window"], [self.states["/init/init/running/modify_defined_attrs/wait_for_finished"]])
@@ -5755,7 +5761,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/init/init/running/modify_defined_attrs/wait_for_finished"].addTransition(_init_init_running_modify_defined_attrs_wait_for_finished_0)
         
         # transition /init/init/running/modify_defined_attrs/mark_dirty
-        _init_init_running_modify_defined_attrs_mark_dirty_0 = Transition(self, self.states["/init/init/running/modify_defined_attrs/mark_dirty"], [self.states["/init/init/running/rerender_model"]])
+        _init_init_running_modify_defined_attrs_mark_dirty_0 = Transition(self, self.states["/init/init/running/modify_defined_attrs/mark_dirty"], [self.states["/init/init/running/rerender_model/request_render"]])
         _init_init_running_modify_defined_attrs_mark_dirty_0.setTrigger(Event("mv_response", None))
         self.states["/init/init/running/modify_defined_attrs/mark_dirty"].addTransition(_init_init_running_modify_defined_attrs_mark_dirty_0)
         
@@ -6335,21 +6341,21 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         tk_elem = parameters[0]
         tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
     
-    def _init_init_running_idle_3_guard(self, parameters):
+    def _init_init_running_idle_4_guard(self, parameters):
         return current_mapper is not None
     
-    def _init_init_running_idle_12_exec(self, parameters):
+    def _init_init_running_idle_13_exec(self, parameters):
         as_element = parameters[0]
         cs_element = parameters[1]
         self.as_element = as_element
         self.cs_element = cs_element
     
-    def _init_init_running_idle_13_exec(self, parameters):
+    def _init_init_running_idle_14_exec(self, parameters):
         new_metamodel = parameters[0]
         global current_metamodel
         current_metamodel = new_metamodel
     
-    def _init_init_running_idle_14_exec(self, parameters):
+    def _init_init_running_idle_15_exec(self, parameters):
         new_mapper = parameters[0]
         global current_mapper
         if new_mapper == "(none)":
@@ -6357,22 +6363,22 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         else:
             current_mapper = new_mapper
     
-    def _init_init_running_idle_15_exec(self, parameters):
+    def _init_init_running_idle_16_exec(self, parameters):
         new_rendered = parameters[0]
         global current_rendered_model
         current_rendered_model = new_rendered
     
-    def _init_init_running_idle_16_exec(self, parameters):
+    def _init_init_running_idle_17_exec(self, parameters):
         element_name = parameters[0]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'canvas', Event("select_for_creation", None, [element_name])]))
     
-    def _init_init_running_idle_17_exec(self, parameters):
+    def _init_init_running_idle_18_exec(self, parameters):
         global current_model
         current_model = self.preload_model
         self.preload_model = None
         self.locations = {}
     
-    def _init_init_running_idle_17_guard(self, parameters):
+    def _init_init_running_idle_18_guard(self, parameters):
         return self.preload_model is not None
     
     def _init_init_running_modify_defined_attrs_create_window_0_exec(self, parameters):
@@ -13702,7 +13708,7 @@ class Canvas(RuntimeClassBase, tk.Canvas, SCCDWidget):
     
     def _ready_process_events_creating_line_create_in_mv_create_0_exec(self, parameters):
         ID = parameters[0]
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("rerender_model", None, [])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("minimal_rerender_model", None, [])]))
     
     def _ready_process_events_creating_group_0_exec(self, parameters):
         assoc_name = parameters[0]
@@ -13721,7 +13727,7 @@ class Canvas(RuntimeClassBase, tk.Canvas, SCCDWidget):
     def _ready_process_events_creating_element_0_exec(self, parameters):
         ID = parameters[0]
         self.to_move[ID] = self.create_location
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("rerender_model", None, [])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("minimal_rerender_model", None, [])]))
     
     def _ready_update_loading_updating_0_exec(self, parameters):
         for i in self.elems:
@@ -14032,7 +14038,7 @@ class ConnectingLine(RuntimeClassBase, SCCDWidget):
     
     def _update_attrs_query_0_exec(self, parameters):
         result = parameters[0]
-        self.prev_results = result
+        self.prev_results = {k: json.dumps(v) for k, v in result.items()}
     
     def _update_attrs_prompt_0_exec(self, parameters):
         name = parameters[0]
@@ -14060,7 +14066,7 @@ class ConnectingLine(RuntimeClassBase, SCCDWidget):
     
     def _update_attrs_process_results_0_exec(self, parameters):
         k, v = self.diff_results.popitem()
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_model, self.as_element, k, v]])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_model, self.as_element, k, json.loads(v)]])]))
     
     def _update_attrs_process_results_0_guard(self, parameters):
         return len(self.diff_results) > 0
@@ -14072,7 +14078,7 @@ class ConnectingLine(RuntimeClassBase, SCCDWidget):
         self.remaining_responses -= 1
     
     def _update_attrs_mark_dirty_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/parent', Event("rerender_model", None, [])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/parent', Event("minimal_rerender_model", None, [])]))
     
     def initializeStatechart(self):
         # enter default state
@@ -14579,13 +14585,13 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         return current_rendered_model
     
     def _update_attrs_mark_dirty_check_1_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/parent', Event("rerender_model", None, [])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/parent', Event("minimal_rerender_model", None, [])]))
     
     def _update_attrs_mark_dirty_check_1_guard(self, parameters):
         return not current_rendered_model
     
     def _update_attrs_mark_dirty_do_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/parent', Event("rerender_model", None, [])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/parent', Event("minimal_rerender_model", None, [])]))
     
     def _update_mv_check_0_guard(self, parameters):
         return current_rendered_model