Browse Source

Working drag of elements, with propagation to MV

Yentl Van Tendeloo 8 years ago
parent
commit
eb09ca9d1f
2 changed files with 11 additions and 117 deletions
  1. 4 43
      classes/canvas/canvas_element.xml
  2. 7 74
      frontend.py

+ 4 - 43
classes/canvas/canvas_element.xml

@@ -95,32 +95,16 @@
                     delta_y = self.original_coords[1] - self.last_y
 
                     self.coordinates = self.coordinates[0] - delta_x, self.coordinates[1] - delta_y
-                    self.to_update = dict(self.elements)
                 </script>
             </transition>
         </state>
 
-        <state id="update_mv" initial="init">
-            <state id="init">
-                <transition cond="len(self.to_update) > 0" target="../x">
-                    <script>
-                        tk_id, self.tmp["mv_id"] = self.to_update.popitem()
-                        self.tmp['x'], self.tmp['y'] = self.containing_canvas.coords(tk_id)[:2]
-                        if self.containing_canvas.type(tk_id) == "line":
-                            self.tmp['targetX'], self.tmp['targetY'] = self.containing_canvas.coords(tk_id)[2:4]
-                        else:
-                            self.tmp['targetX'], self.tmp['targetY'] = None, None
-                    </script>
-                </transition>
-
-                <transition cond="len(self.to_update) == 0" target="../../main"/>
-            </state>
-
+        <state id="update_mv" initial="x">
             <state id="x">
                 <onentry>
                     <raise event="mv_request" scope="broad">
                         <parameter expr="'attr_assign'"/>
-                        <parameter expr="[current_rendered_model, self.tmp['mv_id'], 'x', self.tmp['x']]"/>
+                        <parameter expr="[current_rendered_model, self.group_element, 'x', self.coordinates[0]]"/>
                     </raise>
                 </onentry>
 
@@ -131,34 +115,11 @@
                 <onentry>
                     <raise event="mv_request" scope="broad">
                         <parameter expr="'attr_assign'"/>
-                        <parameter expr="[current_rendered_model, self.tmp['mv_id'], 'y', self.tmp['y']]"/>
-                    </raise>
-                </onentry>
-
-                <transition event="mv_response" cond="self.tmp['targetX'] is None" target="../init"/>
-                <transition event="mv_response" cond="self.tmp['targetX'] is not None" target="../targetX"/>
-            </state>
-
-            <state id="targetX">
-                <onentry>
-                    <raise event="mv_request" scope="broad">
-                        <parameter expr="'attr_assign'"/>
-                        <parameter expr="[current_rendered_model, self.tmp['mv_id'], 'targetX', self.tmp['targetX']]"/>
-                    </raise>
-                </onentry>
-
-                <transition event="mv_response" target="../targetY"/>
-            </state>
-
-            <state id="targetY">
-                <onentry>
-                    <raise event="mv_request" scope="broad">
-                        <parameter expr="'attr_assign'"/>
-                        <parameter expr="[current_rendered_model, self.tmp['mv_id'], 'targetY', self.tmp['targetY']]"/>
+                        <parameter expr="[current_rendered_model, self.group_element, 'y', self.coordinates[1]]"/>
                     </raise>
                 </onentry>
 
-                <transition event="mv_response" target="../init"/>
+                <transition event="mv_response" target="../../main"/>
             </state>
         </state>
     </scxml>

+ 7 - 74
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:   Fri Sep 15 11:39:26 2017
+Date:   Fri Sep 15 11:45:03 2017
 
 Model author: Yentl Van Tendeloo and Addis Gebremichael
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -5844,37 +5844,23 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         # state /update_mv
         self.states["/update_mv"] = State(3, "/update_mv", self)
         
-        # state /update_mv/init
-        self.states["/update_mv/init"] = State(4, "/update_mv/init", self)
-        
         # state /update_mv/x
-        self.states["/update_mv/x"] = State(5, "/update_mv/x", self)
+        self.states["/update_mv/x"] = State(4, "/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(6, "/update_mv/y", self)
+        self.states["/update_mv/y"] = State(5, "/update_mv/y", self)
         self.states["/update_mv/y"].setEnter(self._update_mv_y_enter)
         
-        # state /update_mv/targetX
-        self.states["/update_mv/targetX"] = State(7, "/update_mv/targetX", self)
-        self.states["/update_mv/targetX"].setEnter(self._update_mv_targetX_enter)
-        
-        # state /update_mv/targetY
-        self.states["/update_mv/targetY"] = State(8, "/update_mv/targetY", self)
-        self.states["/update_mv/targetY"].setEnter(self._update_mv_targetY_enter)
-        
         # add children
         self.states[""].addChild(self.states["/main"])
         self.states[""].addChild(self.states["/dragging"])
         self.states[""].addChild(self.states["/update_mv"])
-        self.states["/update_mv"].addChild(self.states["/update_mv/init"])
         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/targetX"])
-        self.states["/update_mv"].addChild(self.states["/update_mv/targetY"])
         self.states[""].fixTree()
         self.states[""].default_state = self.states["/main"]
-        self.states["/update_mv"].default_state = self.states["/update_mv/init"]
+        self.states["/update_mv"].default_state = self.states["/update_mv/x"]
         
         # transition /main
         _main_0 = Transition(self, self.states["/main"], [self.states["/main"]])
@@ -5899,53 +5885,21 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         _dragging_1.setGuard(self._dragging_1_guard)
         self.states["/dragging"].addTransition(_dragging_1)
         
-        # transition /update_mv/init
-        _update_mv_init_0 = Transition(self, self.states["/update_mv/init"], [self.states["/update_mv/x"]])
-        _update_mv_init_0.setAction(self._update_mv_init_0_exec)
-        _update_mv_init_0.setTrigger(None)
-        _update_mv_init_0.setGuard(self._update_mv_init_0_guard)
-        self.states["/update_mv/init"].addTransition(_update_mv_init_0)
-        _update_mv_init_1 = Transition(self, self.states["/update_mv/init"], [self.states["/main"]])
-        _update_mv_init_1.setTrigger(None)
-        _update_mv_init_1.setGuard(self._update_mv_init_1_guard)
-        self.states["/update_mv/init"].addTransition(_update_mv_init_1)
-        
         # 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))
         self.states["/update_mv/x"].addTransition(_update_mv_x_0)
         
         # transition /update_mv/y
-        _update_mv_y_0 = Transition(self, self.states["/update_mv/y"], [self.states["/update_mv/init"]])
+        _update_mv_y_0 = Transition(self, self.states["/update_mv/y"], [self.states["/main"]])
         _update_mv_y_0.setTrigger(Event("mv_response", None))
-        _update_mv_y_0.setGuard(self._update_mv_y_0_guard)
         self.states["/update_mv/y"].addTransition(_update_mv_y_0)
-        _update_mv_y_1 = Transition(self, self.states["/update_mv/y"], [self.states["/update_mv/targetX"]])
-        _update_mv_y_1.setTrigger(Event("mv_response", None))
-        _update_mv_y_1.setGuard(self._update_mv_y_1_guard)
-        self.states["/update_mv/y"].addTransition(_update_mv_y_1)
-        
-        # transition /update_mv/targetX
-        _update_mv_targetX_0 = Transition(self, self.states["/update_mv/targetX"], [self.states["/update_mv/targetY"]])
-        _update_mv_targetX_0.setTrigger(Event("mv_response", None))
-        self.states["/update_mv/targetX"].addTransition(_update_mv_targetX_0)
-        
-        # transition /update_mv/targetY
-        _update_mv_targetY_0 = Transition(self, self.states["/update_mv/targetY"], [self.states["/update_mv/init"]])
-        _update_mv_targetY_0.setTrigger(Event("mv_response", None))
-        self.states["/update_mv/targetY"].addTransition(_update_mv_targetY_0)
     
     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.tmp['mv_id'], 'x', self.tmp['x']]])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.group_element, 'x', self.coordinates[0]]])]))
     
     def _update_mv_y_enter(self):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.tmp['mv_id'], 'y', self.tmp['y']]])]))
-    
-    def _update_mv_targetX_enter(self):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.tmp['mv_id'], 'targetX', self.tmp['targetX']]])]))
-    
-    def _update_mv_targetY_enter(self):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.tmp['mv_id'], 'targetY', self.tmp['targetY']]])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_rendered_model, self.group_element, 'y', self.coordinates[1]]])]))
     
     def _main_0_exec(self, parameters):
         element = parameters[0]
@@ -6009,32 +5963,11 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         delta_y = self.original_coords[1] - self.last_y
         
         self.coordinates = self.coordinates[0] - delta_x, self.coordinates[1] - delta_y
-        self.to_update = dict(self.elements)
     
     def _dragging_1_guard(self, parameters):
         ID = parameters[0]
         return id(self) == ID
     
-    def _update_mv_init_0_exec(self, parameters):
-        tk_id, self.tmp["mv_id"] = self.to_update.popitem()
-        self.tmp['x'], self.tmp['y'] = self.containing_canvas.coords(tk_id)[:2]
-        if self.containing_canvas.type(tk_id) == "line":
-            self.tmp['targetX'], self.tmp['targetY'] = self.containing_canvas.coords(tk_id)[2:4]
-        else:
-            self.tmp['targetX'], self.tmp['targetY'] = None, None
-    
-    def _update_mv_init_0_guard(self, parameters):
-        return len(self.to_update) > 0
-    
-    def _update_mv_init_1_guard(self, parameters):
-        return len(self.to_update) == 0
-    
-    def _update_mv_y_0_guard(self, parameters):
-        return self.tmp['targetX'] is None
-    
-    def _update_mv_y_1_guard(self, parameters):
-        return self.tmp['targetX'] is not None
-    
     def initializeStatechart(self):
         # enter default state
         self.default_targets = self.states["/main"].getEffectiveTargetStates()