Browse Source

Fixed several bugs

Yentl Van Tendeloo 8 years ago
parent
commit
787f0636a1

+ 4 - 1
classes/modelverse/modelverse.xml

@@ -503,7 +503,7 @@
                     <state id="transformation_between">
                     <state id="transformation_between">
                         <onentry>
                         <onentry>
                             <raise event="request">
                             <raise event="request">
-                                <parameter expr="['transformation_between', self.parameters[0], self.parameters[1]]"/>
+                                <parameter expr="['transformation_between'] + self.dict_to_list(self.parameters[0]) + self.dict_to_list(self.parameters[1])"/>
                             </raise>
                             </raise>
                         </onentry>
                         </onentry>
 
 
@@ -690,6 +690,9 @@
                                     <raise event="result">
                                     <raise event="result">
                                         <parameter expr="True if self.responses.pop(0) == 'Success' else False"/>
                                         <parameter expr="True if self.responses.pop(0) == 'Success' else False"/>
                                     </raise>
                                     </raise>
+                                    <script>
+                                        print("RAISING FINISHED")
+                                    </script>
                                 </transition>
                                 </transition>
 
 
                                 <transition cond="not (self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)) and self.expect_response_partial('', pop=False)" target=".">
                                 <transition cond="not (self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)) and self.expect_response_partial('', pop=False)" target=".">

+ 2 - 1
classes/toolbar/dsl_toolbar.xml

@@ -107,7 +107,8 @@
                 </script>
                 </script>
             </transition>
             </transition>
 
 
-            <transition event="close" target="../closing"/>
+            <transition event="close" cond="self.buttons" target="../closing"/>
+            <transition event="close" cond="not self.buttons" target="../close"/>
         </state>
         </state>
 
 
         <state id="closing">
         <state id="closing">

+ 6 - 0
classes/widgets/entry.xml

@@ -75,6 +75,12 @@
                         self.strvar.set(new_value)
                         self.strvar.set(new_value)
                     </script>
                     </script>
                 </transition>
                 </transition>
+
+                <transition event="disable" target=".">
+                    <script>
+                        self.entry.config(state=tk.DISABLED)
+                    </script>
+                </transition>
             </state>
             </state>
         </state>
         </state>
     </scxml>
     </scxml>

+ 19 - 21
classes/window/activity.xml

@@ -177,12 +177,9 @@
                     <parameter name="event_name"/>
                     <parameter name="event_name"/>
                     <parameter name="value"/>
                     <parameter name="value"/>
                     <script>
                     <script>
-                        print("Setting " + str(event_name) + " to " + str(value))
                         if event_name.startswith('input_'):
                         if event_name.startswith('input_'):
-                            print("INP")
                             self.exec_input_signature[event_name.split("input_", 1)[1]] = value
                             self.exec_input_signature[event_name.split("input_", 1)[1]] = value
                         else:
                         else:
-                            print("OUTP")
                             self.exec_output_signature[event_name.split("output_", 1)[1]] = value
                             self.exec_output_signature[event_name.split("output_", 1)[1]] = value
                     </script>
                     </script>
                 </transition>
                 </transition>
@@ -199,19 +196,12 @@
                         </raise>
                         </raise>
                     </onentry>
                     </onentry>
                     <transition cond="set(self.exec_input_signature.keys()) == set(self.input_signature.keys())" target="../execute">
                     <transition cond="set(self.exec_input_signature.keys()) == set(self.input_signature.keys())" target="../execute">
-                        <raise event="change_bg" scope="narrow" target="'model_browse_entry'">
-                            <parameter expr="'light grey'"/>
-                        </raise>
-                        <script>
-                            print("Start execution")
-                        </script>
+                        <raise event="disable" scope="narrow" target="'model_browse_entry'"/>
                     </transition>
                     </transition>
                     <transition cond="set(self.exec_input_signature.keys()) != set(self.input_signature.keys())" target="../../ready">
                     <transition cond="set(self.exec_input_signature.keys()) != set(self.input_signature.keys())" target="../../ready">
                         <script>
                         <script>
                             actual = set(self.exec_input_signature.keys())
                             actual = set(self.exec_input_signature.keys())
                             formal = set(self.input_signature.keys())
                             formal = set(self.input_signature.keys())
-                            print("Actual: " + str(actual))
-                            print("Formal: " + str(formal))
                             missing = formal - actual
                             missing = formal - actual
                             print("Missing input values for: " + str(missing))
                             print("Missing input values for: " + str(missing))
                         </script>
                         </script>
@@ -228,6 +218,7 @@
                             print("   Inputs  " + str(self.exec_input_signature))
                             print("   Inputs  " + str(self.exec_input_signature))
                             print("   Outputs " + str(self.exec_output_signature))
                             print("   Outputs " + str(self.exec_output_signature))
                         </script>
                         </script>
+
                         <raise event="mv_request" scope="broad">
                         <raise event="mv_request" scope="broad">
                             <parameter expr="'transformation_execute'"/>
                             <parameter expr="'transformation_execute'"/>
                             <parameter expr="[self.activity, self.exec_input_signature, self.exec_output_signature]"/>
                             <parameter expr="[self.activity, self.exec_input_signature, self.exec_output_signature]"/>
@@ -244,6 +235,18 @@
 
 
                 <state id="in_context">
                 <state id="in_context">
                     <!-- TODO Add data_input and data_output -->
                     <!-- TODO Add data_input and data_output -->
+                    <onentry>
+                        <script>
+                            print("Waiting in context: " + str(self.current_context))
+                        </script>
+                    </onentry>
+
+                    <onexit>
+                        <script>
+                            print("Finished context: " + str(self.current_context))
+                        </script>
+                    </onexit>
+
                     <transition event="mv_response" cond="result == True" target="../alter_context_result">
                     <transition event="mv_response" cond="result == True" target="../alter_context_result">
                         <parameter name="result"/>
                         <parameter name="result"/>
                     </transition>
                     </transition>
@@ -255,17 +258,19 @@
                 <state id="alter_context_result" initial="check_next">
                 <state id="alter_context_result" initial="check_next">
                     <state id="check_next">
                     <state id="check_next">
                         <transition cond="self.exec_output_signature" target="../add"/>
                         <transition cond="self.exec_output_signature" target="../add"/>
-                        <transition cond="not self.exec_output_signature" target="../../../ready"/>
+                        <transition cond="not self.exec_output_signature" target="../../../closing"/>
                     </state>
                     </state>
 
 
                     <state id="add">
                     <state id="add">
                         <onentry>
                         <onentry>
                             <script>
                             <script>
-                                key, value = self.exec_output_signature.popitem()
+                                tag, model = self.exec_output_signature.popitem()
+                                metamodel = self.output_signature[tag]
+                                print("Setting context for " + str((model, metamodel)))
                             </script>
                             </script>
                             <raise event="mv_request" scope="broad">
                             <raise event="mv_request" scope="broad">
                                 <parameter expr="'alter_context'"/>
                                 <parameter expr="'alter_context'"/>
-                                <parameter expr="[key, value]"/>
+                                <parameter expr="[model, metamodel]"/>
                             </raise>
                             </raise>
                         </onentry>
                         </onentry>
 
 
@@ -384,8 +389,6 @@
                             <parameter name="tk_widget"/>
                             <parameter name="tk_widget"/>
                             <script>
                             <script>
                                 tk_widget.grid(row=self.counter,column=0)
                                 tk_widget.grid(row=self.counter,column=0)
-                                print("Adding input for " + str(self.current))
-                                print("At row " + str(self.counter))
                             </script>
                             </script>
                         </transition>
                         </transition>
                     </state>
                     </state>
@@ -415,8 +418,6 @@
                             <parameter name="tk_widget"/>
                             <parameter name="tk_widget"/>
                             <script>
                             <script>
                                 tk_widget.grid(row=self.counter, column=1)
                                 tk_widget.grid(row=self.counter, column=1)
-                                print("Adding input for " + str(self.current))
-                                print("At row " + str(self.counter))
                             </script>
                             </script>
                         </transition>
                         </transition>
                     </state>
                     </state>
@@ -582,9 +583,6 @@
                     </transition>
                     </transition>
 
 
                     <transition event="close_window" target="../../ready">
                     <transition event="close_window" target="../../ready">
-                        <script>
-                            print("Got window close")
-                        </script>
                         <raise event="delete_instance" scope="cd">
                         <raise event="delete_instance" scope="cd">
                             <parameter expr="'browsers'"/>
                             <parameter expr="'browsers'"/>
                         </raise>
                         </raise>

+ 4 - 1
classes/window/main_window.xml

@@ -574,8 +574,11 @@
                             <onentry>
                             <onentry>
                                 <raise event="mv_request" scope="broad">
                                 <raise event="mv_request" scope="broad">
                                     <parameter expr="'transformation_between'"/>
                                     <parameter expr="'transformation_between'"/>
-                                    <parameter expr="[current_metamodel, 'formalisms/MM_render']"/>
+                                    <parameter expr="[{'abstract': current_metamodel, 'rendered': 'formalisms/MM_render'}, {'rendered': 'formalisms/MM_render'}]"/>
                                 </raise>
                                 </raise>
+                                <script>
+                                    print("Finding transformation with current MM: " + current_metamodel)
+                                </script>
                             </onentry>
                             </onentry>
 
 
                             <transition event="mv_response" target="../check_CS_mapper">
                             <transition event="mv_response" target="../check_CS_mapper">

+ 37 - 18
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 Oct 17 14:42:55 2017
+Date:   Wed Oct 18 09:07:30 2017
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -2342,7 +2342,7 @@ class Modelverse(RuntimeClassBase):
         self.raiseInternalEvent(Event("request", None, [['model_rendered', self.parameters[0], self.parameters[1]]]))
         self.raiseInternalEvent(Event("request", None, [['model_rendered', self.parameters[0], self.parameters[1]]]))
     
     
     def _initialized_behaviour_operations_transformation_between_enter(self):
     def _initialized_behaviour_operations_transformation_between_enter(self):
-        self.raiseInternalEvent(Event("request", None, [['transformation_between', self.parameters[0], self.parameters[1]]]))
+        self.raiseInternalEvent(Event("request", None, [['transformation_between'] + self.dict_to_list(self.parameters[0]) + self.dict_to_list(self.parameters[1])]))
     
     
     def _initialized_behaviour_operations_transformation_signature_enter(self):
     def _initialized_behaviour_operations_transformation_signature_enter(self):
         print("Signature of " + str(self.parameters[0]))
         print("Signature of " + str(self.parameters[0]))
@@ -2959,6 +2959,7 @@ class Modelverse(RuntimeClassBase):
     
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_0_exec(self, parameters):
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_0_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [True if self.responses.pop(0) == 'Success' else False]))
         self.raiseInternalEvent(Event("result", None, [True if self.responses.pop(0) == 'Success' else False]))
+        print("RAISING FINISHED")
     
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_0_guard(self, parameters):
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_0_guard(self, parameters):
         return self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)
         return self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)
@@ -5711,7 +5712,8 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [10, 'Querying existing metamodels...'])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [10, 'Querying existing metamodels...'])]))
     
     
     def _init_init_running_open_model_search_CS_mappers_enter(self):
     def _init_init_running_open_model_search_CS_mappers_enter(self):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_between', [current_metamodel, 'formalisms/MM_render']])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_between', [{'abstract': current_metamodel, 'rendered': 'formalisms/MM_render'}, {'rendered': 'formalisms/MM_render'}]])]))
+        print("Finding transformation with current MM: " + current_metamodel)
     
     
     def _init_init_running_open_model_search_CS_rendered_enter(self):
     def _init_init_running_open_model_search_CS_rendered_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['model_rendered', [current_model, current_mapper]])]))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['model_rendered', [current_model, current_mapper]])]))
@@ -7285,6 +7287,8 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         
         
         # state /all/execute/in_context
         # state /all/execute/in_context
         self.states["/all/execute/in_context"] = State(18, "/all/execute/in_context", self)
         self.states["/all/execute/in_context"] = State(18, "/all/execute/in_context", self)
+        self.states["/all/execute/in_context"].setEnter(self._all_execute_in_context_enter)
+        self.states["/all/execute/in_context"].setExit(self._all_execute_in_context_exit)
         
         
         # state /all/execute/alter_context_result
         # state /all/execute/alter_context_result
         self.states["/all/execute/alter_context_result"] = State(19, "/all/execute/alter_context_result", self)
         self.states["/all/execute/alter_context_result"] = State(19, "/all/execute/alter_context_result", self)
@@ -7553,7 +7557,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _all_execute_alter_context_result_check_next_0.setTrigger(None)
         _all_execute_alter_context_result_check_next_0.setTrigger(None)
         _all_execute_alter_context_result_check_next_0.setGuard(self._all_execute_alter_context_result_check_next_0_guard)
         _all_execute_alter_context_result_check_next_0.setGuard(self._all_execute_alter_context_result_check_next_0_guard)
         self.states["/all/execute/alter_context_result/check_next"].addTransition(_all_execute_alter_context_result_check_next_0)
         self.states["/all/execute/alter_context_result/check_next"].addTransition(_all_execute_alter_context_result_check_next_0)
-        _all_execute_alter_context_result_check_next_1 = Transition(self, self.states["/all/execute/alter_context_result/check_next"], [self.states["/all/ready"]])
+        _all_execute_alter_context_result_check_next_1 = Transition(self, self.states["/all/execute/alter_context_result/check_next"], [self.states["/all/closing"]])
         _all_execute_alter_context_result_check_next_1.setTrigger(None)
         _all_execute_alter_context_result_check_next_1.setTrigger(None)
         _all_execute_alter_context_result_check_next_1.setGuard(self._all_execute_alter_context_result_check_next_1_guard)
         _all_execute_alter_context_result_check_next_1.setGuard(self._all_execute_alter_context_result_check_next_1_guard)
         self.states["/all/execute/alter_context_result/check_next"].addTransition(_all_execute_alter_context_result_check_next_1)
         self.states["/all/execute/alter_context_result/check_next"].addTransition(_all_execute_alter_context_result_check_next_1)
@@ -7740,9 +7744,17 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         print("   Outputs " + str(self.exec_output_signature))
         print("   Outputs " + str(self.exec_output_signature))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_execute', [self.activity, self.exec_input_signature, self.exec_output_signature]])]))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_execute', [self.activity, self.exec_input_signature, self.exec_output_signature]])]))
     
     
+    def _all_execute_in_context_enter(self):
+        print("Waiting in context: " + str(self.current_context))
+    
+    def _all_execute_in_context_exit(self):
+        print("Finished context: " + str(self.current_context))
+    
     def _all_execute_alter_context_result_add_enter(self):
     def _all_execute_alter_context_result_add_enter(self):
-        key, value = self.exec_output_signature.popitem()
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [key, value]])]))
+        tag, model = self.exec_output_signature.popitem()
+        metamodel = self.output_signature[tag]
+        print("Setting context for " + str((model, metamodel)))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [model, metamodel]])]))
     
     
     def _all_browse_activity_create_browser_enter(self):
     def _all_browse_activity_create_browser_enter(self):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'browsers', 'Browser', 'Select activity to execute.', None]))
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'browsers', 'Browser', 'Select activity to execute.', None]))
@@ -7831,12 +7843,9 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_ready_2_exec(self, parameters):
     def _all_ready_2_exec(self, parameters):
         event_name = parameters[0]
         event_name = parameters[0]
         value = parameters[1]
         value = parameters[1]
-        print("Setting " + str(event_name) + " to " + str(value))
         if event_name.startswith('input_'):
         if event_name.startswith('input_'):
-            print("INP")
             self.exec_input_signature[event_name.split("input_", 1)[1]] = value
             self.exec_input_signature[event_name.split("input_", 1)[1]] = value
         else:
         else:
-            print("OUTP")
             self.exec_output_signature[event_name.split("output_", 1)[1]] = value
             self.exec_output_signature[event_name.split("output_", 1)[1]] = value
     
     
     def _all_ready_3_guard(self, parameters):
     def _all_ready_3_guard(self, parameters):
@@ -7844,8 +7853,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         return event_name == 'execute'
         return event_name == 'execute'
     
     
     def _all_execute_check_args_0_exec(self, parameters):
     def _all_execute_check_args_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'model_browse_entry', Event("change_bg", None, ['light grey'])]))
-        print("Start execution")
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'model_browse_entry', Event("disable", None, [])]))
     
     
     def _all_execute_check_args_0_guard(self, parameters):
     def _all_execute_check_args_0_guard(self, parameters):
         return set(self.exec_input_signature.keys()) == set(self.input_signature.keys())
         return set(self.exec_input_signature.keys()) == set(self.input_signature.keys())
@@ -7853,8 +7861,6 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_execute_check_args_1_exec(self, parameters):
     def _all_execute_check_args_1_exec(self, parameters):
         actual = set(self.exec_input_signature.keys())
         actual = set(self.exec_input_signature.keys())
         formal = set(self.input_signature.keys())
         formal = set(self.input_signature.keys())
-        print("Actual: " + str(actual))
-        print("Formal: " + str(formal))
         missing = formal - actual
         missing = formal - actual
         print("Missing input values for: " + str(missing))
         print("Missing input values for: " + str(missing))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, [self.stored_associations['input_%s' % i] for i in missing], Event("change_bg", None, ['red'])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, [self.stored_associations['input_%s' % i] for i in missing], Event("change_bg", None, ['red'])]))
@@ -7920,8 +7926,6 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_redraw_signature_add_input_pack_label_0_exec(self, parameters):
     def _all_redraw_signature_add_input_pack_label_0_exec(self, parameters):
         tk_widget = parameters[0]
         tk_widget = parameters[0]
         tk_widget.grid(row=self.counter,column=0)
         tk_widget.grid(row=self.counter,column=0)
-        print("Adding input for " + str(self.current))
-        print("At row " + str(self.counter))
     
     
     def _all_redraw_signature_add_input_create_entry_0_exec(self, parameters):
     def _all_redraw_signature_add_input_create_entry_0_exec(self, parameters):
         assoc_name = parameters[0]
         assoc_name = parameters[0]
@@ -7931,8 +7935,6 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_redraw_signature_add_input_pack_entry_0_exec(self, parameters):
     def _all_redraw_signature_add_input_pack_entry_0_exec(self, parameters):
         tk_widget = parameters[0]
         tk_widget = parameters[0]
         tk_widget.grid(row=self.counter, column=1)
         tk_widget.grid(row=self.counter, column=1)
-        print("Adding input for " + str(self.current))
-        print("At row " + str(self.counter))
     
     
     def _all_redraw_signature_add_input_create_button_0_exec(self, parameters):
     def _all_redraw_signature_add_input_create_button_0_exec(self, parameters):
         assoc_name = parameters[0]
         assoc_name = parameters[0]
@@ -7990,7 +7992,6 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.stored_associations[self.current], Event("change_value", None, [model])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.stored_associations[self.current], Event("change_value", None, [model])]))
     
     
     def _all_browse_model_waiting_for_decision_1_exec(self, parameters):
     def _all_browse_model_waiting_for_decision_1_exec(self, parameters):
-        print("Got window close")
         self.big_step.outputEventOM(Event("delete_instance", None, [self, 'browsers']))
         self.big_step.outputEventOM(Event("delete_instance", None, [self, 'browsers']))
     
     
     def _all_closing_0_exec(self, parameters):
     def _all_closing_0_exec(self, parameters):
@@ -8360,7 +8361,12 @@ class DSLToolbar(Toolbar):
         self.states["/root"].addTransition(_root_0)
         self.states["/root"].addTransition(_root_0)
         _root_1 = Transition(self, self.states["/root"], [self.states["/closing"]])
         _root_1 = Transition(self, self.states["/root"], [self.states["/closing"]])
         _root_1.setTrigger(Event("close", None))
         _root_1.setTrigger(Event("close", None))
+        _root_1.setGuard(self._root_1_guard)
         self.states["/root"].addTransition(_root_1)
         self.states["/root"].addTransition(_root_1)
+        _root_2 = Transition(self, self.states["/root"], [self.states["/close"]])
+        _root_2.setTrigger(Event("close", None))
+        _root_2.setGuard(self._root_2_guard)
+        self.states["/root"].addTransition(_root_2)
         
         
         # transition /closing
         # transition /closing
         _closing_0 = Transition(self, self.states["/closing"], [self.states["/closing"]])
         _closing_0 = Transition(self, self.states["/closing"], [self.states["/closing"]])
@@ -8431,6 +8437,12 @@ class DSLToolbar(Toolbar):
         event_name = parameters[0]
         event_name = parameters[0]
         return event_name != self.currently_active
         return event_name != self.currently_active
     
     
+    def _root_1_guard(self, parameters):
+        return self.buttons
+    
+    def _root_2_guard(self, parameters):
+        return not self.buttons
+    
     def _closing_0_guard(self, parameters):
     def _closing_0_guard(self, parameters):
         return len(self.buttons) > 0
         return len(self.buttons) > 0
     
     
@@ -8988,6 +9000,10 @@ class Entry(RuntimeClassBase):
         _main_ready_3.setAction(self._main_ready_3_exec)
         _main_ready_3.setAction(self._main_ready_3_exec)
         _main_ready_3.setTrigger(Event("change_value", None))
         _main_ready_3.setTrigger(Event("change_value", None))
         self.states["/main/ready"].addTransition(_main_ready_3)
         self.states["/main/ready"].addTransition(_main_ready_3)
+        _main_ready_4 = Transition(self, self.states["/main/ready"], [self.states["/main/ready"]])
+        _main_ready_4.setAction(self._main_ready_4_exec)
+        _main_ready_4.setTrigger(Event("disable", None))
+        self.states["/main/ready"].addTransition(_main_ready_4)
     
     
     def _main_initializing_0_exec(self, parameters):
     def _main_initializing_0_exec(self, parameters):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("tk_widget", None, [self.entry])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("tk_widget", None, [self.entry])]))
@@ -9016,6 +9032,9 @@ class Entry(RuntimeClassBase):
         print("CHANGE VALUE IN ENTRY")
         print("CHANGE VALUE IN ENTRY")
         self.strvar.set(new_value)
         self.strvar.set(new_value)
     
     
+    def _main_ready_4_exec(self, parameters):
+        self.entry.config(state=tk.DISABLED)
+    
     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()