ソースを参照

Check the signature of input and output models

Yentl Van Tendeloo 7 年 前
コミット
776745556f
2 ファイル変更35 行追加25 行削除
  1. 17 12
      classes/window/activity.xml
  2. 18 13
      frontend.py

+ 17 - 12
classes/window/activity.xml

@@ -132,6 +132,10 @@
                 <parameter name="event_name"/>
                 <script>
                     self.current = event_name
+                    if event_name.startswith('input_'):
+                        self.required_type = self.input_signature[event_name.split("input_", 1)[1]]
+                    else:
+                        self.required_type = self.output_signature[event_name.split("output_", 1)[1]]
                 </script>
             </transition>
         </state>
@@ -198,7 +202,8 @@
                     <parameter name="result"/>
                     <script>
                         self.input_signature, self.output_signature = result
-                        print("Got signature: " + str(result))
+                        self.input_signature_iter = dict(self.input_signature)
+                        self.output_signature_iter = dict(self.output_signature)
                     </script>
                 </transition>
             </state>
@@ -211,13 +216,13 @@
                 </onentry>
 
                 <state id="check_next">
-                    <transition cond="self.input_signature" target="../create_label">
+                    <transition cond="self.input_signature_iter" target="../create_label">
                         <script>
                             self.counter += 1
-                            self.current = self.input_signature.popitem()
+                            self.current = self.input_signature_iter.popitem()
                         </script>
                     </transition>
-                    <transition cond="not self.input_signature" target="../../add_output"/>
+                    <transition cond="not self.input_signature_iter" target="../../add_output"/>
                 </state>
 
                 <state id="create_label">
@@ -225,7 +230,7 @@
                         <raise event="create_instance" scope="cd">
                             <parameter expr="'model_browse_label'"/>
                             <parameter expr="'Label'"/>
-                            <parameter expr="{'parent': self.input_frame, 'text': self.current[0]}"/>
+                            <parameter expr="{'parent': self.input_frame, 'text': '%s : %s' % self.current}"/>
                         </raise>
                     </onentry>
 
@@ -272,7 +277,7 @@
                     <transition event="tk_widget" target="../create_button">
                         <parameter name="tk_widget"/>
                         <script>
-                            tk_widget.grid(row=self.counter, column=0)
+                            tk_widget.grid(row=self.counter, column=1)
                             print("Adding input for " + str(self.current))
                             print("At row " + str(self.counter))
                         </script>
@@ -314,13 +319,13 @@
                 </onentry>
 
                 <state id="check_next">
-                    <transition cond="self.output_signature" target="../create_label">
+                    <transition cond="self.output_signature_iter" target="../create_label">
                         <script>
                             self.counter += 1
-                            self.current = self.output_signature.popitem()
+                            self.current = self.output_signature_iter.popitem()
                         </script>
                     </transition>
-                    <transition cond="not self.output_signature" target="../../../ready"/>
+                    <transition cond="not self.output_signature_iter" target="../../../ready"/>
                 </state>
 
                 <state id="create_label">
@@ -328,7 +333,7 @@
                         <raise event="create_instance" scope="cd">
                             <parameter expr="'model_browse_label'"/>
                             <parameter expr="'Label'"/>
-                            <parameter expr="{'parent': self.output_frame, 'text': self.current[0]}"/>
+                            <parameter expr="{'parent': self.output_frame, 'text': '%s : %s' % self.current}"/>
                         </raise>
                     </onentry>
 
@@ -375,7 +380,7 @@
                     <transition event="tk_widget" target="../create_button">
                         <parameter name="tk_widget"/>
                         <script>
-                            tk_widget.grid(row=self.counter, column=0)
+                            tk_widget.grid(row=self.counter, column=1)
                             print("Adding output for " + str(self.current))
                             print("At row " + str(self.counter))
                         </script>
@@ -417,7 +422,7 @@
                         <parameter expr="'browsers'"/>
                         <parameter expr="'Browser'"/>
                         <parameter expr="'Select model to use.'"/>
-                        <parameter expr="None"/>
+                        <parameter expr="[self.required_type]"/>
                     </raise>
                 </onentry>
 

+ 18 - 13
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:   Mon Oct 16 16:51:20 2017
+Date:   Tue Oct 17 08:24:03 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -7667,7 +7667,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_signature', [self.activity]])]))
     
     def _redraw_signature_add_input_create_label_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_browse_label', 'Label', {'parent': self.input_frame, 'text': self.current[0]}]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_browse_label', 'Label', {'parent': self.input_frame, 'text': '%s : %s' % self.current}]))
     
     def _redraw_signature_add_input_create_entry_enter(self):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_browse_entry', 'Entry', {'parent': self.input_frame, 'name': 'input_%s' % self.current[0], 'value': '(none)', 'readonly': True}]))
@@ -7676,7 +7676,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_browse_button', 'Button', {'parent': self.input_frame, 'visual': TextVisual('...'), 'tooltip_text': 'Select input model for tag %s.' % self.current[0], 'event_parameters': 'input_%s' % self.current[0]}]))
     
     def _redraw_signature_add_output_create_label_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_browse_label', 'Label', {'parent': self.output_frame, 'text': self.current[0]}]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_browse_label', 'Label', {'parent': self.output_frame, 'text': '%s : %s' % self.current}]))
     
     def _redraw_signature_add_output_create_entry_enter(self):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_browse_entry', 'Entry', {'parent': self.output_frame, 'name': 'output_%s' % self.current[0], 'value': '(none)', 'readonly': False}]))
@@ -7685,7 +7685,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_browse_button', 'Button', {'parent': self.output_frame, 'visual': TextVisual('...'), 'tooltip_text': 'Select output model for tag %s.' % self.current[0], 'event_parameters': 'output_%s' % self.current[0]}]))
     
     def _browse_model_create_browser_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'browsers', 'Browser', 'Select model to use.', None]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'browsers', 'Browser', 'Select model to use.', [self.required_type]]))
     
     def _closed_enter(self):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("window_close", None, [])]))
@@ -7722,6 +7722,10 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _ready_1_exec(self, parameters):
         event_name = parameters[0]
         self.current = event_name
+        if event_name.startswith('input_'):
+            self.required_type = self.input_signature[event_name.split("input_", 1)[1]]
+        else:
+            self.required_type = self.output_signature[event_name.split("output_", 1)[1]]
     
     def _ready_1_guard(self, parameters):
         event_name = parameters[0]
@@ -7746,17 +7750,18 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _redraw_signature_read_signature_0_exec(self, parameters):
         result = parameters[0]
         self.input_signature, self.output_signature = result
-        print("Got signature: " + str(result))
+        self.input_signature_iter = dict(self.input_signature)
+        self.output_signature_iter = dict(self.output_signature)
     
     def _redraw_signature_add_input_check_next_0_exec(self, parameters):
         self.counter += 1
-        self.current = self.input_signature.popitem()
+        self.current = self.input_signature_iter.popitem()
     
     def _redraw_signature_add_input_check_next_0_guard(self, parameters):
-        return self.input_signature
+        return self.input_signature_iter
     
     def _redraw_signature_add_input_check_next_1_guard(self, parameters):
-        return not self.input_signature
+        return not self.input_signature_iter
     
     def _redraw_signature_add_input_create_label_0_exec(self, parameters):
         assoc_name = parameters[0]
@@ -7775,7 +7780,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     
     def _redraw_signature_add_input_pack_entry_0_exec(self, parameters):
         tk_widget = parameters[0]
-        tk_widget.grid(row=self.counter, column=0)
+        tk_widget.grid(row=self.counter, column=1)
         print("Adding input for " + str(self.current))
         print("At row " + str(self.counter))
     
@@ -7789,13 +7794,13 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     
     def _redraw_signature_add_output_check_next_0_exec(self, parameters):
         self.counter += 1
-        self.current = self.output_signature.popitem()
+        self.current = self.output_signature_iter.popitem()
     
     def _redraw_signature_add_output_check_next_0_guard(self, parameters):
-        return self.output_signature
+        return self.output_signature_iter
     
     def _redraw_signature_add_output_check_next_1_guard(self, parameters):
-        return not self.output_signature
+        return not self.output_signature_iter
     
     def _redraw_signature_add_output_create_label_0_exec(self, parameters):
         assoc_name = parameters[0]
@@ -7814,7 +7819,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     
     def _redraw_signature_add_output_pack_entry_0_exec(self, parameters):
         tk_widget = parameters[0]
-        tk_widget.grid(row=self.counter, column=0)
+        tk_widget.grid(row=self.counter, column=1)
         print("Adding output for " + str(self.current))
         print("At row " + str(self.counter))