Yentl Van Tendeloo преди 7 години
родител
ревизия
01ca412ed5
променени са 3 файла, в които са добавени 116 реда и са изтрити 37 реда
  1. 30 1
      classes/window/attribute_editor.xml
  2. 1 1
      classes/window/main_window.xml
  3. 85 35
      frontend.py

+ 30 - 1
classes/window/attribute_editor.xml

@@ -57,14 +57,43 @@
                         </raise>
                     </onentry>
 
-                    <transition event="mv_response" target="../get_defined_attrs">
+                    <transition event="mv_response" target="../resolve_name_of_attr_type">
                         <parameter name="result"/>
                         <script>
+                            print("Resolving " + str(self.allowed_types))
                             self.allowed_types = result
+                            self.resolved_allowed_types = set()
                         </script>
                     </transition>
                 </state>
 
+                <state id="resolve_name_of_attr_type" initial="request">
+                    <state id="request">
+                        <transition cond="self.allowed_types" target="../response">
+                            <raise event="mv_request" scope="broad">
+                                <parameter expr="'read_attrs'"/>
+                                <parameter expr="[current_model, self.allowed_types.pop()]"/>
+                            </raise>
+                        </transition>
+
+                        <transition cond="not self.allowed_types" target="../../get_defined_attrs">
+                            <script>
+                                self.allowed_types = self.resolved_allowed_types
+                            </script>
+                        </transition>
+                    </state>
+
+                    <state id="response">
+                        <transition event="mv_response" target="../request">
+                            <parameter name="result"/>
+                            <script>
+                                print("Got attrs: " + str(result))
+                                self.resolved_allowed_types.add(result["name"])
+                            </script>
+                        </transition>
+                    </state>
+                </state>
+
                 <state id="get_defined_attrs">
                     <onentry>
                         <raise event="mv_request" scope="broad">

+ 1 - 1
classes/window/main_window.xml

@@ -710,7 +710,7 @@
                                 <script>
                                     self.allowed_rendered = list(result)
 
-                                    self.allowed_rendered.append("(none)")
+                                    #self.allowed_rendered.append("(none)")
                                     global current_rendered_model
 
                                     if (len(result) > 0):

+ 85 - 35
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 May 28 12:44:43 2018
+Date:   Mon May 28 13:02:47 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -3059,7 +3059,7 @@ class Modelverse(RuntimeClassBase):
     def _initialized_http_mapper_init_0_exec(self, parameters):
         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])]))
-        print("Request: " + str(value))
+        #print("Request: " + str(value))
     
     def _initialized_http_mapper_init_0_guard(self, parameters):
         value = parameters[0]
@@ -3068,7 +3068,7 @@ class Modelverse(RuntimeClassBase):
     def _initialized_http_mapper_init_1_exec(self, parameters):
         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])]))
-        print("Request: " + str(value))
+        #print("Request: " + str(value))
     
     def _initialized_http_mapper_init_1_guard(self, parameters):
         value = parameters[0]
@@ -4447,113 +4447,122 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/all/init/get_attr_types"] = State(3, "/all/init/get_attr_types", self)
         self.states["/all/init/get_attr_types"].setEnter(self._all_init_get_attr_types_enter)
         
+        # state /all/init/resolve_name_of_attr_type
+        self.states["/all/init/resolve_name_of_attr_type"] = State(4, "/all/init/resolve_name_of_attr_type", self)
+        
+        # state /all/init/resolve_name_of_attr_type/request
+        self.states["/all/init/resolve_name_of_attr_type/request"] = State(5, "/all/init/resolve_name_of_attr_type/request", self)
+        
+        # state /all/init/resolve_name_of_attr_type/response
+        self.states["/all/init/resolve_name_of_attr_type/response"] = State(6, "/all/init/resolve_name_of_attr_type/response", self)
+        
         # state /all/init/get_defined_attrs
-        self.states["/all/init/get_defined_attrs"] = State(4, "/all/init/get_defined_attrs", self)
+        self.states["/all/init/get_defined_attrs"] = State(7, "/all/init/get_defined_attrs", self)
         self.states["/all/init/get_defined_attrs"].setEnter(self._all_init_get_defined_attrs_enter)
         
         # state /all/init/create_entries
-        self.states["/all/init/create_entries"] = State(5, "/all/init/create_entries", self)
+        self.states["/all/init/create_entries"] = State(8, "/all/init/create_entries", self)
         
         # state /all/init/create_entries/check_list
-        self.states["/all/init/create_entries/check_list"] = State(6, "/all/init/create_entries/check_list", self)
+        self.states["/all/init/create_entries/check_list"] = State(9, "/all/init/create_entries/check_list", self)
         
         # state /all/init/create_entries/create_entry
-        self.states["/all/init/create_entries/create_entry"] = State(7, "/all/init/create_entries/create_entry", self)
+        self.states["/all/init/create_entries/create_entry"] = State(10, "/all/init/create_entries/create_entry", self)
         self.states["/all/init/create_entries/create_entry"].setEnter(self._all_init_create_entries_create_entry_enter)
         self.states["/all/init/create_entries/create_entry"].setExit(self._all_init_create_entries_create_entry_exit)
         
         # state /all/init/create_entries/create_entry/name_entry
-        self.states["/all/init/create_entries/create_entry/name_entry"] = State(8, "/all/init/create_entries/create_entry/name_entry", self)
+        self.states["/all/init/create_entries/create_entry/name_entry"] = State(11, "/all/init/create_entries/create_entry/name_entry", self)
         
         # state /all/init/create_entries/create_entry/name_entry/create
-        self.states["/all/init/create_entries/create_entry/name_entry/create"] = State(9, "/all/init/create_entries/create_entry/name_entry/create", self)
+        self.states["/all/init/create_entries/create_entry/name_entry/create"] = State(12, "/all/init/create_entries/create_entry/name_entry/create", self)
         self.states["/all/init/create_entries/create_entry/name_entry/create"].setEnter(self._all_init_create_entries_create_entry_name_entry_create_enter)
         
         # state /all/init/create_entries/create_entry/name_entry/pack
-        self.states["/all/init/create_entries/create_entry/name_entry/pack"] = State(10, "/all/init/create_entries/create_entry/name_entry/pack", self)
+        self.states["/all/init/create_entries/create_entry/name_entry/pack"] = State(13, "/all/init/create_entries/create_entry/name_entry/pack", self)
         
         # state /all/init/create_entries/create_entry/type_dropdown
-        self.states["/all/init/create_entries/create_entry/type_dropdown"] = State(11, "/all/init/create_entries/create_entry/type_dropdown", self)
+        self.states["/all/init/create_entries/create_entry/type_dropdown"] = State(14, "/all/init/create_entries/create_entry/type_dropdown", self)
         
         # state /all/init/create_entries/create_entry/type_dropdown/create
-        self.states["/all/init/create_entries/create_entry/type_dropdown/create"] = State(12, "/all/init/create_entries/create_entry/type_dropdown/create", self)
+        self.states["/all/init/create_entries/create_entry/type_dropdown/create"] = State(15, "/all/init/create_entries/create_entry/type_dropdown/create", self)
         self.states["/all/init/create_entries/create_entry/type_dropdown/create"].setEnter(self._all_init_create_entries_create_entry_type_dropdown_create_enter)
         
         # state /all/init/create_entries/create_entry/type_dropdown/pack
-        self.states["/all/init/create_entries/create_entry/type_dropdown/pack"] = State(13, "/all/init/create_entries/create_entry/type_dropdown/pack", self)
+        self.states["/all/init/create_entries/create_entry/type_dropdown/pack"] = State(16, "/all/init/create_entries/create_entry/type_dropdown/pack", self)
         
         # state /all/init/create_entries/create_entry/optional_button
-        self.states["/all/init/create_entries/create_entry/optional_button"] = State(14, "/all/init/create_entries/create_entry/optional_button", self)
+        self.states["/all/init/create_entries/create_entry/optional_button"] = State(17, "/all/init/create_entries/create_entry/optional_button", self)
         
         # state /all/init/create_entries/create_entry/optional_button/create
-        self.states["/all/init/create_entries/create_entry/optional_button/create"] = State(15, "/all/init/create_entries/create_entry/optional_button/create", self)
+        self.states["/all/init/create_entries/create_entry/optional_button/create"] = State(18, "/all/init/create_entries/create_entry/optional_button/create", self)
         self.states["/all/init/create_entries/create_entry/optional_button/create"].setEnter(self._all_init_create_entries_create_entry_optional_button_create_enter)
         
         # state /all/init/create_entries/create_entry/optional_button/pack
-        self.states["/all/init/create_entries/create_entry/optional_button/pack"] = State(16, "/all/init/create_entries/create_entry/optional_button/pack", self)
+        self.states["/all/init/create_entries/create_entry/optional_button/pack"] = State(19, "/all/init/create_entries/create_entry/optional_button/pack", self)
         
         # state /all/init/create_entries/create_entry/delete_button
-        self.states["/all/init/create_entries/create_entry/delete_button"] = State(17, "/all/init/create_entries/create_entry/delete_button", self)
+        self.states["/all/init/create_entries/create_entry/delete_button"] = State(20, "/all/init/create_entries/create_entry/delete_button", self)
         
         # state /all/init/create_entries/create_entry/delete_button/create
-        self.states["/all/init/create_entries/create_entry/delete_button/create"] = State(18, "/all/init/create_entries/create_entry/delete_button/create", self)
+        self.states["/all/init/create_entries/create_entry/delete_button/create"] = State(21, "/all/init/create_entries/create_entry/delete_button/create", self)
         self.states["/all/init/create_entries/create_entry/delete_button/create"].setEnter(self._all_init_create_entries_create_entry_delete_button_create_enter)
         
         # state /all/init/create_entries/create_entry/delete_button/pack
-        self.states["/all/init/create_entries/create_entry/delete_button/pack"] = State(19, "/all/init/create_entries/create_entry/delete_button/pack", self)
+        self.states["/all/init/create_entries/create_entry/delete_button/pack"] = State(22, "/all/init/create_entries/create_entry/delete_button/pack", self)
         
         # state /all/init/add_new_attribute
-        self.states["/all/init/add_new_attribute"] = State(20, "/all/init/add_new_attribute", self)
+        self.states["/all/init/add_new_attribute"] = State(23, "/all/init/add_new_attribute", self)
         
         # state /all/init/add_new_attribute/create
-        self.states["/all/init/add_new_attribute/create"] = State(21, "/all/init/add_new_attribute/create", self)
+        self.states["/all/init/add_new_attribute/create"] = State(24, "/all/init/add_new_attribute/create", self)
         self.states["/all/init/add_new_attribute/create"].setEnter(self._all_init_add_new_attribute_create_enter)
         
         # state /all/init/add_new_attribute/pack
-        self.states["/all/init/add_new_attribute/pack"] = State(22, "/all/init/add_new_attribute/pack", self)
+        self.states["/all/init/add_new_attribute/pack"] = State(25, "/all/init/add_new_attribute/pack", self)
         
         # state /all/running
-        self.states["/all/running"] = State(23, "/all/running", self)
+        self.states["/all/running"] = State(26, "/all/running", self)
         
         # state /all/change_type
-        self.states["/all/change_type"] = State(24, "/all/change_type", self)
+        self.states["/all/change_type"] = State(27, "/all/change_type", self)
         self.states["/all/change_type"].setEnter(self._all_change_type_enter)
         
         # state /all/change_name
-        self.states["/all/change_name"] = State(25, "/all/change_name", self)
+        self.states["/all/change_name"] = State(28, "/all/change_name", self)
         self.states["/all/change_name"].setEnter(self._all_change_name_enter)
         
         # state /all/change_name/waiting
-        self.states["/all/change_name/waiting"] = State(26, "/all/change_name/waiting", self)
+        self.states["/all/change_name/waiting"] = State(29, "/all/change_name/waiting", self)
         self.states["/all/change_name/waiting"].setEnter(self._all_change_name_waiting_enter)
         self.states["/all/change_name/waiting"].setExit(self._all_change_name_waiting_exit)
         
         # state /all/change_name/commit
-        self.states["/all/change_name/commit"] = State(27, "/all/change_name/commit", self)
+        self.states["/all/change_name/commit"] = State(30, "/all/change_name/commit", self)
         self.states["/all/change_name/commit"].setEnter(self._all_change_name_commit_enter)
         
         # state /all/create_new_entry
-        self.states["/all/create_new_entry"] = State(28, "/all/create_new_entry", self)
+        self.states["/all/create_new_entry"] = State(31, "/all/create_new_entry", self)
         self.states["/all/create_new_entry"].setEnter(self._all_create_new_entry_enter)
         
         # state /all/make_optional
-        self.states["/all/make_optional"] = State(29, "/all/make_optional", self)
+        self.states["/all/make_optional"] = State(32, "/all/make_optional", self)
         self.states["/all/make_optional"].setEnter(self._all_make_optional_enter)
         
         # state /all/make_mandatory
-        self.states["/all/make_mandatory"] = State(30, "/all/make_mandatory", self)
+        self.states["/all/make_mandatory"] = State(33, "/all/make_mandatory", self)
         self.states["/all/make_mandatory"].setEnter(self._all_make_mandatory_enter)
         
         # state /all/delete_entry
-        self.states["/all/delete_entry"] = State(31, "/all/delete_entry", self)
+        self.states["/all/delete_entry"] = State(34, "/all/delete_entry", self)
         self.states["/all/delete_entry"].setEnter(self._all_delete_entry_enter)
         
         # state /all/closing
-        self.states["/all/closing"] = State(32, "/all/closing", self)
+        self.states["/all/closing"] = State(35, "/all/closing", self)
         self.states["/all/closing"].setEnter(self._all_closing_enter)
         
         # state /all/close
-        self.states["/all/close"] = State(33, "/all/close", self)
+        self.states["/all/close"] = State(36, "/all/close", self)
         self.states["/all/close"].setEnter(self._all_close_enter)
         
         # add children
@@ -4569,9 +4578,12 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/all"].addChild(self.states["/all/closing"])
         self.states["/all"].addChild(self.states["/all/close"])
         self.states["/all/init"].addChild(self.states["/all/init/get_attr_types"])
+        self.states["/all/init"].addChild(self.states["/all/init/resolve_name_of_attr_type"])
         self.states["/all/init"].addChild(self.states["/all/init/get_defined_attrs"])
         self.states["/all/init"].addChild(self.states["/all/init/create_entries"])
         self.states["/all/init"].addChild(self.states["/all/init/add_new_attribute"])
+        self.states["/all/init/resolve_name_of_attr_type"].addChild(self.states["/all/init/resolve_name_of_attr_type/request"])
+        self.states["/all/init/resolve_name_of_attr_type"].addChild(self.states["/all/init/resolve_name_of_attr_type/response"])
         self.states["/all/init/create_entries"].addChild(self.states["/all/init/create_entries/check_list"])
         self.states["/all/init/create_entries"].addChild(self.states["/all/init/create_entries/create_entry"])
         self.states["/all/init/create_entries/create_entry"].addChild(self.states["/all/init/create_entries/create_entry/name_entry"])
@@ -4594,6 +4606,7 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states[""].default_state = self.states["/all"]
         self.states["/all"].default_state = self.states["/all/init"]
         self.states["/all/init"].default_state = self.states["/all/init/get_attr_types"]
+        self.states["/all/init/resolve_name_of_attr_type"].default_state = self.states["/all/init/resolve_name_of_attr_type/request"]
         self.states["/all/init/create_entries"].default_state = self.states["/all/init/create_entries/check_list"]
         self.states["/all/init/create_entries/create_entry"].default_state = self.states["/all/init/create_entries/create_entry/name_entry"]
         self.states["/all/init/create_entries/create_entry/name_entry"].default_state = self.states["/all/init/create_entries/create_entry/name_entry/create"]
@@ -4604,11 +4617,29 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/all/change_name"].default_state = self.states["/all/change_name/waiting"]
         
         # transition /all/init/get_attr_types
-        _all_init_get_attr_types_0 = Transition(self, self.states["/all/init/get_attr_types"], [self.states["/all/init/get_defined_attrs"]])
+        _all_init_get_attr_types_0 = Transition(self, self.states["/all/init/get_attr_types"], [self.states["/all/init/resolve_name_of_attr_type"]])
         _all_init_get_attr_types_0.setAction(self._all_init_get_attr_types_0_exec)
         _all_init_get_attr_types_0.setTrigger(Event("mv_response", None))
         self.states["/all/init/get_attr_types"].addTransition(_all_init_get_attr_types_0)
         
+        # transition /all/init/resolve_name_of_attr_type/request
+        _all_init_resolve_name_of_attr_type_request_0 = Transition(self, self.states["/all/init/resolve_name_of_attr_type/request"], [self.states["/all/init/resolve_name_of_attr_type/response"]])
+        _all_init_resolve_name_of_attr_type_request_0.setAction(self._all_init_resolve_name_of_attr_type_request_0_exec)
+        _all_init_resolve_name_of_attr_type_request_0.setTrigger(None)
+        _all_init_resolve_name_of_attr_type_request_0.setGuard(self._all_init_resolve_name_of_attr_type_request_0_guard)
+        self.states["/all/init/resolve_name_of_attr_type/request"].addTransition(_all_init_resolve_name_of_attr_type_request_0)
+        _all_init_resolve_name_of_attr_type_request_1 = Transition(self, self.states["/all/init/resolve_name_of_attr_type/request"], [self.states["/all/init/get_defined_attrs"]])
+        _all_init_resolve_name_of_attr_type_request_1.setAction(self._all_init_resolve_name_of_attr_type_request_1_exec)
+        _all_init_resolve_name_of_attr_type_request_1.setTrigger(None)
+        _all_init_resolve_name_of_attr_type_request_1.setGuard(self._all_init_resolve_name_of_attr_type_request_1_guard)
+        self.states["/all/init/resolve_name_of_attr_type/request"].addTransition(_all_init_resolve_name_of_attr_type_request_1)
+        
+        # transition /all/init/resolve_name_of_attr_type/response
+        _all_init_resolve_name_of_attr_type_response_0 = Transition(self, self.states["/all/init/resolve_name_of_attr_type/response"], [self.states["/all/init/resolve_name_of_attr_type/request"]])
+        _all_init_resolve_name_of_attr_type_response_0.setAction(self._all_init_resolve_name_of_attr_type_response_0_exec)
+        _all_init_resolve_name_of_attr_type_response_0.setTrigger(Event("mv_response", None))
+        self.states["/all/init/resolve_name_of_attr_type/response"].addTransition(_all_init_resolve_name_of_attr_type_response_0)
+        
         # transition /all/init/get_defined_attrs
         _all_init_get_defined_attrs_0 = Transition(self, self.states["/all/init/get_defined_attrs"], [self.states["/all/init/create_entries"]])
         _all_init_get_defined_attrs_0.setAction(self._all_init_get_defined_attrs_0_exec)
@@ -4852,7 +4883,26 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     
     def _all_init_get_attr_types_0_exec(self, parameters):
         result = parameters[0]
+        print("Resolving " + str(self.allowed_types))
         self.allowed_types = result
+        self.resolved_allowed_types = set()
+    
+    def _all_init_resolve_name_of_attr_type_request_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['read_attrs', [current_model, self.allowed_types.pop()]])]))
+    
+    def _all_init_resolve_name_of_attr_type_request_0_guard(self, parameters):
+        return self.allowed_types
+    
+    def _all_init_resolve_name_of_attr_type_request_1_exec(self, parameters):
+        self.allowed_types = self.resolved_allowed_types
+    
+    def _all_init_resolve_name_of_attr_type_request_1_guard(self, parameters):
+        return not self.allowed_types
+    
+    def _all_init_resolve_name_of_attr_type_response_0_exec(self, parameters):
+        result = parameters[0]
+        print("Got attrs: " + str(result))
+        self.resolved_allowed_types.add(result["name"])
     
     def _all_init_get_defined_attrs_0_exec(self, parameters):
         result = parameters[0]
@@ -6549,7 +6599,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         result = parameters[0]
         self.allowed_rendered = list(result)
         
-        self.allowed_rendered.append("(none)")
+        #self.allowed_rendered.append("(none)")
         global current_rendered_model
         
         if (len(result) > 0):