Browse Source

Process complex attributes

Yentl Van Tendeloo 7 years ago
parent
commit
34a8aaa27f

+ 2 - 2
classes/canvas/canvas_element.xml

@@ -229,7 +229,7 @@
                 <transition event="mv_response" target="../prompt">
                 <transition event="mv_response" target="../prompt">
                     <parameter name="result"/>
                     <parameter name="result"/>
                     <script>
                     <script>
-                        self.prev_results = {k: json.dumps(v) for k, v in result.items()}
+                        self.prev_results = {k: json.dumps(v) if v is not None else '' for k, v in result.items()}
                     </script>
                     </script>
                 </transition>
                 </transition>
             </state>
             </state>
@@ -286,7 +286,7 @@
                     </script>
                     </script>
                     <raise event="mv_request" scope="broad">
                     <raise event="mv_request" scope="broad">
                         <parameter expr="'attr_assign'"/>
                         <parameter expr="'attr_assign'"/>
-                        <parameter expr="[current_model, self.as_element, k, json.loads(v)]"/>
+                        <parameter expr="[current_model, self.as_element, k, json.loads(v) if v != '' else 'null']"/>
                     </raise>
                     </raise>
                 </transition>
                 </transition>
                 <transition cond="self.remaining_responses == 0" target="../mark_dirty"/>
                 <transition cond="self.remaining_responses == 0" target="../mark_dirty"/>

+ 0 - 2
classes/window/attribute_editor.xml

@@ -307,7 +307,6 @@
                     <parameter name="event_name"/>
                     <parameter name="event_name"/>
                     <script>
                     <script>
                         self.parameter = event_name.split("optional_", 1)[1]
                         self.parameter = event_name.split("optional_", 1)[1]
-                        print("OPTIONAL " + self.parameter)
                     </script>
                     </script>
                 </transition>
                 </transition>
 
 
@@ -315,7 +314,6 @@
                     <parameter name="event_name"/>
                     <parameter name="event_name"/>
                     <script>
                     <script>
                         self.parameter = event_name.split("mandatory_", 1)[1]
                         self.parameter = event_name.split("mandatory_", 1)[1]
-                        print("MANDATORY " + self.parameter)
                     </script>
                     </script>
                 </transition>
                 </transition>
 
 

+ 7 - 2
classes/window/main_window.xml

@@ -1111,6 +1111,7 @@
                                 <parameter name="result"/>
                                 <parameter name="result"/>
                                 <script>
                                 <script>
                                     self.rendered = []
                                     self.rendered = []
+                                    print("Got model: " + str(result))
 
 
                                     group_counter = 0
                                     group_counter = 0
                                     groups = {}
                                     groups = {}
@@ -1162,8 +1163,12 @@
                                             text_counter = 0
                                             text_counter = 0
                                             for key, value in attrs.items():
                                             for key, value in attrs.items():
                                                 cs_elem_id = str(uuid.uuid4())
                                                 cs_elem_id = str(uuid.uuid4())
-                                                self.rendered.append({"id": cs_elem_id, "type": "Text", "x": 10, "y": 25 + text_counter * 11, "text": "%s = %s" % (key, value), "lineWidth": 3, "lineColour": "black", "layer": 2})
-                                                max_text = max(len("%s = %s" % (key, value)), max_text)
+                                                if isinstance(value, dict):
+                                                    text = "%s = ^%s" % (key, value['AL'])
+                                                else:
+                                                    text = ("%s = %s" % (key, value)) if value is not None else ("(%s)" % key)
+                                                self.rendered.append({"id": cs_elem_id, "type": "Text", "x": 10, "y": 25 + text_counter * 11, "text": text, "lineWidth": 3, "lineColour": "black", "layer": 2})
+                                                max_text = max(len(text), max_text)
                                                 self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
                                                 self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
                                                 text_counter += 1
                                                 text_counter += 1
 
 

+ 1 - 0
classes/window/prompt_window.xml

@@ -21,6 +21,7 @@
             counter = 0
             counter = 0
             for k, v in entries.items():
             for k, v in entries.items():
                 label = tk.Label(self.frame, text=k)
                 label = tk.Label(self.frame, text=k)
+
                 entry = tk.Entry(self.frame, **options.get(k, {}))
                 entry = tk.Entry(self.frame, **options.get(k, {}))
                 entry.insert(0, v if v is not None else "")
                 entry.insert(0, v if v is not None else "")
 
 

+ 14 - 11
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:   Tue May 29 09:38:53 2018
+Date:   Tue May 29 13:33:09 2018
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -3059,7 +3059,7 @@ class Modelverse(RuntimeClassBase):
     def _initialized_http_mapper_init_0_exec(self, parameters):
     def _initialized_http_mapper_init_0_exec(self, parameters):
         value = parameters[0]
         value = parameters[0]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[0], Event("HTTP_input", None, [urlencode({"op": "set_input", "data": json.dumps(value), "taskname": self.taskname}), None])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[0], Event("HTTP_input", None, [urlencode({"op": "set_input", "data": json.dumps(value), "taskname": self.taskname}), None])]))
-        print("Request: " + str(value))
+        #print("Request: " + str(value))
     
     
     def _initialized_http_mapper_init_0_guard(self, parameters):
     def _initialized_http_mapper_init_0_guard(self, parameters):
         value = parameters[0]
         value = parameters[0]
@@ -3068,7 +3068,7 @@ class Modelverse(RuntimeClassBase):
     def _initialized_http_mapper_init_1_exec(self, parameters):
     def _initialized_http_mapper_init_1_exec(self, parameters):
         value = parameters[0]
         value = parameters[0]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[0], Event("HTTP_input", None, [urlencode({"op": "set_input", "value": json.dumps(value), "taskname": self.taskname}), None])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[0], Event("HTTP_input", None, [urlencode({"op": "set_input", "value": json.dumps(value), "taskname": self.taskname}), None])]))
-        print("Request: " + str(value))
+        #print("Request: " + str(value))
     
     
     def _initialized_http_mapper_init_1_guard(self, parameters):
     def _initialized_http_mapper_init_1_guard(self, parameters):
         value = parameters[0]
         value = parameters[0]
@@ -3218,7 +3218,7 @@ class Modelverse(RuntimeClassBase):
     
     
     def _initialized_behaviour_operations_alter_context_0_exec(self, parameters):
     def _initialized_behaviour_operations_alter_context_0_exec(self, parameters):
         self.registered_metamodel[self.parameters[0]] = self.parameters[1]
         self.registered_metamodel[self.parameters[0]] = self.parameters[1]
-        print("Alter context of " + str(self.parameters[0]) + " to " + str(self.parameters[1]))
+        #print("Alter context of " + str(self.parameters[0]) + " to " + str(self.parameters[1]))
     
     
     def _initialized_behaviour_operations_model_overwrite_init_0_guard(self, parameters):
     def _initialized_behaviour_operations_model_overwrite_init_0_guard(self, parameters):
         return self.parameters[0] in self.registered_metamodel
         return self.parameters[0] in self.registered_metamodel
@@ -4979,7 +4979,6 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_running_1_exec(self, parameters):
     def _all_running_1_exec(self, parameters):
         event_name = parameters[0]
         event_name = parameters[0]
         self.parameter = event_name.split("optional_", 1)[1]
         self.parameter = event_name.split("optional_", 1)[1]
-        print("OPTIONAL " + self.parameter)
     
     
     def _all_running_1_guard(self, parameters):
     def _all_running_1_guard(self, parameters):
         event_name = parameters[0]
         event_name = parameters[0]
@@ -4988,7 +4987,6 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_running_2_exec(self, parameters):
     def _all_running_2_exec(self, parameters):
         event_name = parameters[0]
         event_name = parameters[0]
         self.parameter = event_name.split("mandatory_", 1)[1]
         self.parameter = event_name.split("mandatory_", 1)[1]
-        print("MANDATORY " + self.parameter)
     
     
     def _all_running_2_guard(self, parameters):
     def _all_running_2_guard(self, parameters):
         event_name = parameters[0]
         event_name = parameters[0]
@@ -5104,6 +5102,7 @@ class PromptWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         counter = 0
         counter = 0
         for k, v in entries.items():
         for k, v in entries.items():
             label = tk.Label(self.frame, text=k)
             label = tk.Label(self.frame, text=k)
+        
             entry = tk.Entry(self.frame, **options.get(k, {}))
             entry = tk.Entry(self.frame, **options.get(k, {}))
             entry.insert(0, v if v is not None else "")
             entry.insert(0, v if v is not None else "")
         
         
@@ -6754,6 +6753,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _init_init_running_rerender_model_request_render_1_exec(self, parameters):
     def _init_init_running_rerender_model_request_render_1_exec(self, parameters):
         result = parameters[0]
         result = parameters[0]
         self.rendered = []
         self.rendered = []
+        print("Got model: " + str(result))
         
         
         group_counter = 0
         group_counter = 0
         groups = {}
         groups = {}
@@ -6805,8 +6805,12 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
                 text_counter = 0
                 text_counter = 0
                 for key, value in attrs.items():
                 for key, value in attrs.items():
                     cs_elem_id = str(uuid.uuid4())
                     cs_elem_id = str(uuid.uuid4())
-                    self.rendered.append({"id": cs_elem_id, "type": "Text", "x": 10, "y": 25 + text_counter * 11, "text": "%s = %s" % (key, value), "lineWidth": 3, "lineColour": "black", "layer": 2})
-                    max_text = max(len("%s = %s" % (key, value)), max_text)
+                    if isinstance(value, dict):
+                        text = "%s = ^%s" % (key, value['AL'])
+                    else:
+                        text = ("%s = %s" % (key, value)) if value is not None else ("(%s)" % key)
+                    self.rendered.append({"id": cs_elem_id, "type": "Text", "x": 10, "y": 25 + text_counter * 11, "text": text, "lineWidth": 3, "lineColour": "black", "layer": 2})
+                    max_text = max(len(text), max_text)
                     self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
                     self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
                     text_counter += 1
                     text_counter += 1
         
         
@@ -14552,7 +14556,6 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     
     
     def _main_0_exec(self, parameters):
     def _main_0_exec(self, parameters):
         element = parameters[0]
         element = parameters[0]
-        print("MM: " + str(current_metamodel))
         elem_x = self.coordinates[0] + element["x"]
         elem_x = self.coordinates[0] + element["x"]
         elem_y = self.coordinates[1] + element["y"]
         elem_y = self.coordinates[1] + element["y"]
         if element["type"] == "Rectangle":
         if element["type"] == "Rectangle":
@@ -14625,7 +14628,7 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     
     
     def _update_attrs_query_0_exec(self, parameters):
     def _update_attrs_query_0_exec(self, parameters):
         result = parameters[0]
         result = parameters[0]
-        self.prev_results = {k: json.dumps(v) for k, v in result.items()}
+        self.prev_results = {k: json.dumps(v) if v is not None else '' for k, v in result.items()}
     
     
     def _update_attrs_prompt_0_exec(self, parameters):
     def _update_attrs_prompt_0_exec(self, parameters):
         name = parameters[0]
         name = parameters[0]
@@ -14653,7 +14656,7 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     
     
     def _update_attrs_process_results_0_exec(self, parameters):
     def _update_attrs_process_results_0_exec(self, parameters):
         k, v = self.diff_results.popitem()
         k, v = self.diff_results.popitem()
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_model, self.as_element, k, json.loads(v)]])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_model, self.as_element, k, json.loads(v) if v != '' else 'null']])]))
     
     
     def _update_attrs_process_results_0_guard(self, parameters):
     def _update_attrs_process_results_0_guard(self, parameters):
         return len(self.diff_results) > 0
         return len(self.diff_results) > 0