浏览代码

More or less working attribute change with rerendering. Lines not updated nor working.

Yentl Van Tendeloo 8 年之前
父节点
当前提交
7b7c029e20
共有 4 个文件被更改,包括 24 次插入34 次删除
  1. 8 15
      classes/canvas/canvas_element.xml
  2. 1 0
      classes/window/main_window.xml
  3. 14 18
      frontend.py
  4. 1 1
      models/render_SCD.alc

+ 8 - 15
classes/canvas/canvas_element.xml

@@ -24,8 +24,10 @@
         </body>
         </body>
     </constructor>
     </constructor>
     <destructor>
     <destructor>
-        for f in self.elements:
-            self.containing_canvas.delete(f)
+        <body>
+            for f in self.elements:
+                self.containing_canvas.delete(f)
+        </body>
     </destructor>
     </destructor>
 
 
     <scxml initial="main">
     <scxml initial="main">
@@ -185,22 +187,13 @@
                         <parameter expr="[current_rendered_model, self.cs_element, 'dirty', True]"/>
                         <parameter expr="[current_rendered_model, self.cs_element, 'dirty', True]"/>
                     </raise>
                     </raise>
                 </onentry>
                 </onentry>
-                <transition target="../../main"/>
+                <transition event="mv_response" target="../../main">
+                    <raise event="rerender_model" scope="narrow" target="'parent/parent'"/>
+                </transition>
             </state>
             </state>
         </state>
         </state>
 
 
-        <state id="update_mv" initial="mark_dirty">
-            <state id="mark_dirty">
-                <onentry>
-                    <raise event="mv_request" scope="broad">
-                        <parameter expr="'attr_assign'"/>
-                        <parameter expr="[current_rendered_model, self.cs_element, 'dirty', True]"/>
-                    </raise>
-                </onentry>
-
-                <transition event="mv_response" target="../x"/>
-            </state>
-
+        <state id="update_mv" initial="x">
             <state id="x">
             <state id="x">
                 <onentry>
                 <onentry>
                     <raise event="mv_request" scope="broad">
                     <raise event="mv_request" scope="broad">

+ 1 - 0
classes/window/main_window.xml

@@ -119,6 +119,7 @@
                 </onentry>
                 </onentry>
                 <transition event="create_new_model" target="../create_new_model"/>
                 <transition event="create_new_model" target="../create_new_model"/>
                 <transition event="open_model" target="../open_model"/>
                 <transition event="open_model" target="../open_model"/>
+                <transition event="rerender_model" target="../rerender_model"/>
             </state>
             </state>
 
 
             <state id="open_model" initial="query_model">
             <state id="open_model" initial="query_model">

+ 14 - 18
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)
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
 
-Date:   Wed Sep 27 15:50:59 2017
+Date:   Wed Sep 27 16:23:55 2017
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -4130,6 +4130,9 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _running_idle_1 = Transition(self, self.states["/running/idle"], [self.states["/running/open_model"]])
         _running_idle_1 = Transition(self, self.states["/running/idle"], [self.states["/running/open_model"]])
         _running_idle_1.setTrigger(Event("open_model", None))
         _running_idle_1.setTrigger(Event("open_model", None))
         self.states["/running/idle"].addTransition(_running_idle_1)
         self.states["/running/idle"].addTransition(_running_idle_1)
+        _running_idle_2 = Transition(self, self.states["/running/idle"], [self.states["/running/rerender_model"]])
+        _running_idle_2.setTrigger(Event("rerender_model", None))
+        self.states["/running/idle"].addTransition(_running_idle_2)
         
         
         # transition /running/open_model/query_model
         # transition /running/open_model/query_model
         _running_open_model_query_model_0 = Transition(self, self.states["/running/open_model/query_model"], [self.states["/running/open_model/wait_for_model"]])
         _running_open_model_query_model_0 = Transition(self, self.states["/running/open_model/query_model"], [self.states["/running/open_model/wait_for_model"]])
@@ -5825,6 +5828,8 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         self.diff_results = {}
         self.diff_results = {}
     
     
     def user_defined_destructor(self):
     def user_defined_destructor(self):
+        for f in self.elements:
+            self.containing_canvas.delete(f)
         # call super class destructors
         # call super class destructors
         if hasattr(SCCDWidget, "__del__"):
         if hasattr(SCCDWidget, "__del__"):
             SCCDWidget.__del__(self)
             SCCDWidget.__del__(self)
@@ -5866,16 +5871,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         # state /update_mv
         # state /update_mv
         self.states["/update_mv"] = State(9, "/update_mv", self)
         self.states["/update_mv"] = State(9, "/update_mv", self)
         
         
-        # state /update_mv/mark_dirty
-        self.states["/update_mv/mark_dirty"] = State(10, "/update_mv/mark_dirty", self)
-        self.states["/update_mv/mark_dirty"].setEnter(self._update_mv_mark_dirty_enter)
-        
         # state /update_mv/x
         # state /update_mv/x
-        self.states["/update_mv/x"] = State(11, "/update_mv/x", self)
+        self.states["/update_mv/x"] = State(10, "/update_mv/x", self)
         self.states["/update_mv/x"].setEnter(self._update_mv_x_enter)
         self.states["/update_mv/x"].setEnter(self._update_mv_x_enter)
         
         
         # state /update_mv/y
         # state /update_mv/y
-        self.states["/update_mv/y"] = State(12, "/update_mv/y", self)
+        self.states["/update_mv/y"] = State(11, "/update_mv/y", self)
         self.states["/update_mv/y"].setEnter(self._update_mv_y_enter)
         self.states["/update_mv/y"].setEnter(self._update_mv_y_enter)
         
         
         # add children
         # add children
@@ -5888,13 +5889,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         self.states["/update_attrs"].addChild(self.states["/update_attrs/wait_for_results"])
         self.states["/update_attrs"].addChild(self.states["/update_attrs/wait_for_results"])
         self.states["/update_attrs"].addChild(self.states["/update_attrs/process_results"])
         self.states["/update_attrs"].addChild(self.states["/update_attrs/process_results"])
         self.states["/update_attrs"].addChild(self.states["/update_attrs/mark_dirty"])
         self.states["/update_attrs"].addChild(self.states["/update_attrs/mark_dirty"])
-        self.states["/update_mv"].addChild(self.states["/update_mv/mark_dirty"])
         self.states["/update_mv"].addChild(self.states["/update_mv/x"])
         self.states["/update_mv"].addChild(self.states["/update_mv/x"])
         self.states["/update_mv"].addChild(self.states["/update_mv/y"])
         self.states["/update_mv"].addChild(self.states["/update_mv/y"])
         self.states[""].fixTree()
         self.states[""].fixTree()
         self.states[""].default_state = self.states["/main"]
         self.states[""].default_state = self.states["/main"]
         self.states["/update_attrs"].default_state = self.states["/update_attrs/query"]
         self.states["/update_attrs"].default_state = self.states["/update_attrs/query"]
-        self.states["/update_mv"].default_state = self.states["/update_mv/mark_dirty"]
+        self.states["/update_mv"].default_state = self.states["/update_mv/x"]
         
         
         # transition /main
         # transition /main
         _main_0 = Transition(self, self.states["/main"], [self.states["/main"]])
         _main_0 = Transition(self, self.states["/main"], [self.states["/main"]])
@@ -5962,14 +5962,10 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         
         
         # transition /update_attrs/mark_dirty
         # transition /update_attrs/mark_dirty
         _update_attrs_mark_dirty_0 = Transition(self, self.states["/update_attrs/mark_dirty"], [self.states["/main"]])
         _update_attrs_mark_dirty_0 = Transition(self, self.states["/update_attrs/mark_dirty"], [self.states["/main"]])
-        _update_attrs_mark_dirty_0.setTrigger(None)
+        _update_attrs_mark_dirty_0.setAction(self._update_attrs_mark_dirty_0_exec)
+        _update_attrs_mark_dirty_0.setTrigger(Event("mv_response", None))
         self.states["/update_attrs/mark_dirty"].addTransition(_update_attrs_mark_dirty_0)
         self.states["/update_attrs/mark_dirty"].addTransition(_update_attrs_mark_dirty_0)
         
         
-        # transition /update_mv/mark_dirty
-        _update_mv_mark_dirty_0 = Transition(self, self.states["/update_mv/mark_dirty"], [self.states["/update_mv/x"]])
-        _update_mv_mark_dirty_0.setTrigger(Event("mv_response", None))
-        self.states["/update_mv/mark_dirty"].addTransition(_update_mv_mark_dirty_0)
-        
         # transition /update_mv/x
         # transition /update_mv/x
         _update_mv_x_0 = Transition(self, self.states["/update_mv/x"], [self.states["/update_mv/y"]])
         _update_mv_x_0 = Transition(self, self.states["/update_mv/x"], [self.states["/update_mv/y"]])
         _update_mv_x_0.setTrigger(Event("mv_response", None))
         _update_mv_x_0.setTrigger(Event("mv_response", None))
@@ -5989,9 +5985,6 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _update_attrs_mark_dirty_enter(self):
     def _update_attrs_mark_dirty_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.cs_element, 'dirty', True]])]))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.cs_element, 'dirty', True]])]))
     
     
-    def _update_mv_mark_dirty_enter(self):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.cs_element, 'dirty', True]])]))
-    
     def _update_mv_x_enter(self):
     def _update_mv_x_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.cs_element, 'x', self.coordinates[0]]])]))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.cs_element, 'x', self.coordinates[0]]])]))
     
     
@@ -6100,6 +6093,9 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _update_attrs_process_results_2_exec(self, parameters):
     def _update_attrs_process_results_2_exec(self, parameters):
         self.remaining_responses -= 1
         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, [])]))
+    
     def initializeStatechart(self):
     def initializeStatechart(self):
         # enter default state
         # enter default state
         self.default_targets = self.states["/main"].getEffectiveTargetStates()
         self.default_targets = self.states["/main"].getEffectiveTargetStates()

+ 1 - 1
models/render_SCD.alc

@@ -53,7 +53,7 @@ Boolean function main(model : Element):
 						if (read_type(model, elem_to_remove) == "rendered/Group"):
 						if (read_type(model, elem_to_remove) == "rendered/Group"):
 							set_add(to_remove, elem_to_remove)
 							set_add(to_remove, elem_to_remove)
 						else:
 						else:
-							model_delete_element(model, to_remove)
+							model_delete_element(model, elem_to_remove)
 
 
 		attr_keys = dict_keys(getAttributeList(model, class))
 		attr_keys = dict_keys(getAttributeList(model, class))
 		text_loc = 5
 		text_loc = 5