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>
                         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>
 
@@ -131,6 +135,29 @@
                     </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']]"/>
+                    </raise>
+                </onentry>
+
                 <transition event="mv_response" target="../init"/>
             </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)
 
-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 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"].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"])
@@ -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/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"]
@@ -5908,7 +5918,22 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         # transition /update_mv/y
         _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.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']]])]))
@@ -5916,6 +5941,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     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']]])]))
+    
     def _main_0_exec(self, parameters):
         element = parameters[0]
         elem_x = self.coordinates[0] + element["x"]
@@ -5987,6 +6018,10 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     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
@@ -5994,6 +6029,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     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()

+ 2 - 0
models/render_SCD.alc

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