Forráskód Böngészése

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

Yentl Van Tendeloo 8 éve
szülő
commit
7b7c029e20
4 módosított fájl, 24 hozzáadás és 34 törlés
  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>
     </constructor>
     <destructor>
-        for f in self.elements:
-            self.containing_canvas.delete(f)
+        <body>
+            for f in self.elements:
+                self.containing_canvas.delete(f)
+        </body>
     </destructor>
 
     <scxml initial="main">
@@ -185,22 +187,13 @@
                         <parameter expr="[current_rendered_model, self.cs_element, 'dirty', True]"/>
                     </raise>
                 </onentry>
-                <transition target="../../main"/>
+                <transition event="mv_response" target="../../main">
+                    <raise event="rerender_model" scope="narrow" target="'parent/parent'"/>
+                </transition>
             </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">
                 <onentry>
                     <raise event="mv_request" scope="broad">

+ 1 - 0
classes/window/main_window.xml

@@ -119,6 +119,7 @@
                 </onentry>
                 <transition event="create_new_model" target="../create_new_model"/>
                 <transition event="open_model" target="../open_model"/>
+                <transition event="rerender_model" target="../rerender_model"/>
             </state>
 
             <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)
 
-Date:   Wed Sep 27 15:50:59 2017
+Date:   Wed Sep 27 16:23:55 2017
 
 Model author: Yentl Van Tendeloo
 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.setTrigger(Event("open_model", None))
         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
         _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 = {}
     
     def user_defined_destructor(self):
+        for f in self.elements:
+            self.containing_canvas.delete(f)
         # call super class destructors
         if hasattr(SCCDWidget, "__del__"):
             SCCDWidget.__del__(self)
@@ -5866,16 +5871,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         # state /update_mv
         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
-        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)
         
         # 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)
         
         # 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/process_results"])
         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/y"])
         self.states[""].fixTree()
         self.states[""].default_state = self.states["/main"]
         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
         _main_0 = Transition(self, self.states["/main"], [self.states["/main"]])
@@ -5962,14 +5962,10 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         
         # 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.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)
         
-        # 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
         _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))
@@ -5989,9 +5985,6 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     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]])]))
     
-    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):
         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):
         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):
         # enter default state
         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"):
 							set_add(to_remove, elem_to_remove)
 						else:
-							model_delete_element(model, to_remove)
+							model_delete_element(model, elem_to_remove)
 
 		attr_keys = dict_keys(getAttributeList(model, class))
 		text_loc = 5