Browse Source

Correctly move lines as well; connecting lines seems problematic

Yentl Van Tendeloo 8 years ago
parent
commit
7fc949b566
3 changed files with 71 additions and 1 deletions
  1. 27 0
      classes/canvas/canvas_element.xml
  2. 42 1
      frontend.py
  3. 2 0
      models/render_SCD.alc

+ 27 - 0
classes/canvas/canvas_element.xml

@@ -106,6 +106,10 @@
                     <script>
                     <script>
                         tk_id, self.tmp["mv_id"] = self.to_update.popitem()
                         tk_id, self.tmp["mv_id"] = self.to_update.popitem()
                         self.tmp['x'], self.tmp['y'] = self.containing_canvas.coords(tk_id)[:2]
                         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>
                     </script>
                 </transition>
                 </transition>
 
 
@@ -131,6 +135,29 @@
                     </raise>
                     </raise>
                 </onentry>
                 </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']]"/>
+                    </raise>
+                </onentry>
+
                 <transition event="mv_response" target="../init"/>
                 <transition event="mv_response" target="../init"/>
             </state>
             </state>
         </state>
         </state>

+ 42 - 1
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:   Fri Sep 15 11:05:03 2017
+Date:   Fri Sep 15 11:39:26 2017
 
 
 Model author: Yentl Van Tendeloo and Addis Gebremichael
 Model author: Yentl Van Tendeloo and Addis Gebremichael
 Model name:   Modelverse Visual Editor - Tkinter Version 
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -5855,6 +5855,14 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         self.states["/update_mv/y"] = State(6, "/update_mv/y", self)
         self.states["/update_mv/y"] = State(6, "/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)
         
         
+        # 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
         # add children
         self.states[""].addChild(self.states["/main"])
         self.states[""].addChild(self.states["/main"])
         self.states[""].addChild(self.states["/dragging"])
         self.states[""].addChild(self.states["/dragging"])
@@ -5862,6 +5870,8 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         self.states["/update_mv"].addChild(self.states["/update_mv/init"])
         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/x"])
         self.states["/update_mv"].addChild(self.states["/update_mv/y"])
         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[""].fixTree()
         self.states[""].default_state = self.states["/main"]
         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/init"]
@@ -5908,7 +5918,22 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         # transition /update_mv/y
         # 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["/update_mv/init"]])
         _update_mv_y_0.setTrigger(Event("mv_response", None))
         _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)
         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):
     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.tmp['mv_id'], 'x', self.tmp['x']]])]))
@@ -5916,6 +5941,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _update_mv_y_enter(self):
     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']]])]))
         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']]])]))
+    
     def _main_0_exec(self, parameters):
     def _main_0_exec(self, parameters):
         element = parameters[0]
         element = parameters[0]
         elem_x = self.coordinates[0] + element["x"]
         elem_x = self.coordinates[0] + element["x"]
@@ -5987,6 +6018,10 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _update_mv_init_0_exec(self, parameters):
     def _update_mv_init_0_exec(self, parameters):
         tk_id, self.tmp["mv_id"] = self.to_update.popitem()
         tk_id, self.tmp["mv_id"] = self.to_update.popitem()
         self.tmp['x'], self.tmp['y'] = self.containing_canvas.coords(tk_id)[:2]
         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):
     def _update_mv_init_0_guard(self, parameters):
         return len(self.to_update) > 0
         return len(self.to_update) > 0
@@ -5994,6 +6029,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _update_mv_init_1_guard(self, parameters):
     def _update_mv_init_1_guard(self, parameters):
         return len(self.to_update) == 0
         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):
     def initializeStatechart(self):
         # enter default state
         # enter default state
         self.default_targets = self.states["/main"].getEffectiveTargetStates()
         self.default_targets = self.states["/main"].getEffectiveTargetStates()

+ 2 - 0
models/render_SCD.alc

@@ -29,6 +29,7 @@ Boolean function main(model : Element):
 		if (set_len(allOutgoingAssociationInstances(model, class, "TracabilityClass")) > 0):
 		if (set_len(allOutgoingAssociationInstances(model, class, "TracabilityClass")) > 0):
 			log("Skip draw of class")
 			log("Skip draw of class")
 			continue!
 			continue!
+		log("Drawing class")
 
 
 		attr_keys = dict_keys(getAttributeList(model, class))
 		attr_keys = dict_keys(getAttributeList(model, class))
 		text_loc = 5
 		text_loc = 5
@@ -104,6 +105,7 @@ Boolean function main(model : Element):
 		if (set_len(allOutgoingAssociationInstances(model, class, "TracabilityAssociation")) > 0):
 		if (set_len(allOutgoingAssociationInstances(model, class, "TracabilityAssociation")) > 0):
 			log("Skip draw of association")
 			log("Skip draw of association")
 			continue!
 			continue!
+		log("Drawing association for " + class)
 
 
 		attr_keys = dict_keys(getAttributeList(model, class))
 		attr_keys = dict_keys(getAttributeList(model, class))