Jelajahi Sumber

Make sure that all classes compile

Yentl Van Tendeloo 8 tahun lalu
induk
melakukan
3be313062c
4 mengubah file dengan 939 tambahan dan 19 penghapusan
  1. 2 2
      classes/widgets/entry.xml
  2. 11 5
      classes/widgets/toggle_button.xml
  3. 11 11
      classes/window/attribute_editor.xml
  4. 915 1
      frontend.py

+ 2 - 2
classes/widgets/entry.xml

@@ -9,8 +9,8 @@
         <parameter name="constructor_parameters" type='dict' default='{}' />
         <body>
             self.strvar = tk.StringVar(self)
-            self.strvar.set(constructor_parameters['initial']
-            self.strvar.trace('w', lambda _, _, _: self.controller.addInput(Event("change_entry", "input", [id(self), self.strvar.get()])))
+            self.strvar.set(constructor_parameters['initial'])
+            self.strvar.trace('w', lambda a, b, c: self.controller.addInput(Event("change_entry", "input", [id(self), self.strvar.get()])))
             self.name = constructor_parameters['name']
         </body>
         <super class="tk.Entry">

+ 11 - 5
classes/widgets/toggle_button.xml

@@ -14,12 +14,13 @@
         <super class="SCCDWidget">
         </super>
         <body>
-            self.on_activate = self.constructor_parameters["on_activate"]
-            self.on_deactivate = self.constructor_parameters["on_deactivate"]
+            self.on_activate = constructor_parameters["on_activate"]
+            self.on_deactivate = constructor_parameters["on_deactivate"]
             if "tooltip_text" in constructor_parameters:
                 self.tooltip = ToolTip(self, constructor_parameters["tooltip_text"])
             else:
                 self.tooltip = None
+            self.initial_active = self.constructor_parameters["initial_active"]
         </body>
     </constructor>
     <destructor>
@@ -37,7 +38,12 @@
                 </transition>
             </state>
 
-            <state id="ready">
+            <state id="ready" initial="decide">
+                <state id="decide">
+                    <transition cond="self.initial_active" target="../active"/>
+                    <transition cond="not self.initial_active" target="../active"/>
+                </state>
+
                 <state id="active">
                     <onentry>
                         <script>
@@ -74,14 +80,14 @@
 
                 <history id="history"/>
 
-                <transition port='input' event="enter" target='../history' cond='tagorid == id(self) and self.tooltip is not None'>
+                <transition port='input' event="enter" target='history' cond='tagorid == id(self) and self.tooltip is not None'>
                     <parameter name='tagorid' type='int' default='None' />
                     <script>
                         self.tooltip.showtip()
                     </script>
                 </transition>
 
-                <transition port='input' event="leave" target='../history' cond='tagorid == id(self) and self.tooltip is not None'>
+                <transition port='input' event="leave" target='history' cond='tagorid == id(self) and self.tooltip is not None'>
                     <parameter name='tagorid' type='int' default='None' />
                     <script>
                         self.tooltip.hidetip()

+ 11 - 11
classes/window/attribute_editor.xml

@@ -80,7 +80,7 @@
                         <transition cond="not self.attrs_modify" target="../../add_new_attribute"/>
                     </state>
 
-                    <state id="create_entry">
+                    <state id="create_entry" initial="name_entry">
                         <onentry>
                             <script>
                                 current_attr = self.attrs_modify.popitem()
@@ -317,7 +317,7 @@
                 <transition event="mv_response" target="../running"/>
             </state>
 
-            <state id="change_name">
+            <state id="change_name" initial="waiting">
                 <onentry>
                     <raise event="mark_uncommitted" scope="narrow" target="self.associations_name[self.parameter[0]]"/>
                 </onentry>
@@ -353,7 +353,7 @@
                         </script>
                     </transition>
 
-                    <transition event="mv_response" target="../running">
+                    <transition event="mv_response" target="../../running">
                         <raise event="change_event_name" scope="narrow" target="self.associations_type[self.parameter[0]]">
                             <parameter expr="self.parameter[1]"/>
                         </raise>
@@ -397,11 +397,11 @@
                         <parameter expr="'attr_optional'"/>
                         <parameter expr="[current_model, self.as_element, self.parameter]"/>
                     </raise>
-
-                    <transition event="mv_response" target="../running">
-                        <raise event="activate" scope="narrow" target="self.associations_optional[self.parameter]"/>
-                    </transition>
                 </onentry>
+
+                <transition event="mv_response" target="../running">
+                    <raise event="activate" scope="narrow" target="self.associations_optional[self.parameter]"/>
+                </transition>
             </state>
 
             <state id="make_mandatory">
@@ -410,11 +410,11 @@
                         <parameter expr="'attr_mandatory'"/>
                         <parameter expr="[current_model, self.as_element, self.parameter]"/>
                     </raise>
-
-                    <transition event="mv_response" target="../running">
-                        <raise event="deactivate" scope="narrow" target="self.associations_optional[self.parameter]"/>
-                    </transition>
                 </onentry>
+
+                <transition event="mv_response" target="../running">
+                    <raise event="deactivate" scope="narrow" target="self.associations_optional[self.parameter]"/>
+                </transition>
             </state>
 
             <state id="delete_entry">

+ 915 - 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:   Thu Oct 12 14:24:42 2017
+Date:   Thu Oct 12 16:26:49 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -3841,6 +3841,612 @@ class HTTPClient(RuntimeClassBase):
         self.default_targets = self.states["/init"].getEffectiveTargetStates()
         RuntimeClassBase.initializeStatechart(self)
 
+class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
+    def __init__(self, controller, as_element, allowed_types):
+        RuntimeClassBase.__init__(self, controller)
+        
+        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
+        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
+        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
+        self.semantics.priority = StatechartSemantics.SourceParent
+        self.semantics.concurrency = StatechartSemantics.Single
+        
+        # build Statechart structure
+        self.build_statechart_structure()
+        
+        # call user defined constructor
+        AttributeEditor.user_defined_constructor(self, as_element, allowed_types)
+    
+    def user_defined_constructor(self, as_element, allowed_types):
+        tk.Toplevel.__init__(self)
+        SCCDWidget.__init__(self)
+        self.as_element = element
+        self.allowed_types = allowed_types
+        
+        self.attrs = None
+        self.associations_name = {}
+        self.associations_type = {}
+        self.associations_optional = {}
+        self.associations_delete = {}
+        self.dirty = None
+    
+    def user_defined_destructor(self):
+        self.destroy()
+        # call super class destructors
+        if hasattr(tk.Toplevel, "__del__"):
+            tk.Toplevel.__del__(self)
+        if hasattr(SCCDWidget, "__del__"):
+            SCCDWidget.__del__(self)
+    
+    
+    # user defined method
+    def get_unique_attr_name(self):
+        i = 0
+        while 1:
+            attr_name = "attr%i" % i
+            if attr_name not in self.associations_name:
+                return attr_name
+            else:
+                i += 1
+    
+    
+    # builds Statechart structure
+    def build_statechart_structure(self):
+        
+        # state <root>
+        self.states[""] = State(0, "", self)
+        
+        # state /all
+        self.states["/all"] = State(1, "/all", self)
+        
+        # state /all/init
+        self.states["/all/init"] = State(2, "/all/init", self)
+        
+        # state /all/init/get_defined_attrs
+        self.states["/all/init/get_defined_attrs"] = State(3, "/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(4, "/all/init/create_entries", self)
+        
+        # state /all/init/create_entries/check_list
+        self.states["/all/init/create_entries/check_list"] = State(5, "/all/init/create_entries/check_list", self)
+        
+        # state /all/init/create_entries/create_entry
+        self.states["/all/init/create_entries/create_entry"] = State(6, "/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(7, "/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(8, "/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(9, "/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(10, "/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(11, "/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(12, "/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(13, "/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(14, "/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(15, "/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(16, "/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(17, "/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(18, "/all/init/create_entries/create_entry/delete_button/pack", self)
+        
+        # state /all/init/add_new_attribute
+        self.states["/all/init/add_new_attribute"] = State(19, "/all/init/add_new_attribute", self)
+        
+        # state /all/init/add_new_attribute/create
+        self.states["/all/init/add_new_attribute/create"] = State(20, "/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(21, "/all/init/add_new_attribute/pack", self)
+        
+        # state /all/running
+        self.states["/all/running"] = State(22, "/all/running", self)
+        
+        # state /all/change_type
+        self.states["/all/change_type"] = State(23, "/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(24, "/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(25, "/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(26, "/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(27, "/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(28, "/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(29, "/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(30, "/all/delete_entry", self)
+        self.states["/all/delete_entry"].setEnter(self._all_delete_entry_enter)
+        
+        # state /all/closing
+        self.states["/all/closing"] = State(31, "/all/closing", self)
+        self.states["/all/closing"].setEnter(self._all_closing_enter)
+        
+        # state /all/close
+        self.states["/all/close"] = State(32, "/all/close", self)
+        self.states["/all/close"].setEnter(self._all_close_enter)
+        
+        # add children
+        self.states[""].addChild(self.states["/all"])
+        self.states["/all"].addChild(self.states["/all/init"])
+        self.states["/all"].addChild(self.states["/all/running"])
+        self.states["/all"].addChild(self.states["/all/change_type"])
+        self.states["/all"].addChild(self.states["/all/change_name"])
+        self.states["/all"].addChild(self.states["/all/create_new_entry"])
+        self.states["/all"].addChild(self.states["/all/make_optional"])
+        self.states["/all"].addChild(self.states["/all/make_mandatory"])
+        self.states["/all"].addChild(self.states["/all/delete_entry"])
+        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_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/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"])
+        self.states["/all/init/create_entries/create_entry"].addChild(self.states["/all/init/create_entries/create_entry/type_dropdown"])
+        self.states["/all/init/create_entries/create_entry"].addChild(self.states["/all/init/create_entries/create_entry/optional_button"])
+        self.states["/all/init/create_entries/create_entry"].addChild(self.states["/all/init/create_entries/create_entry/delete_button"])
+        self.states["/all/init/create_entries/create_entry/name_entry"].addChild(self.states["/all/init/create_entries/create_entry/name_entry/create"])
+        self.states["/all/init/create_entries/create_entry/name_entry"].addChild(self.states["/all/init/create_entries/create_entry/name_entry/pack"])
+        self.states["/all/init/create_entries/create_entry/type_dropdown"].addChild(self.states["/all/init/create_entries/create_entry/type_dropdown/create"])
+        self.states["/all/init/create_entries/create_entry/type_dropdown"].addChild(self.states["/all/init/create_entries/create_entry/type_dropdown/pack"])
+        self.states["/all/init/create_entries/create_entry/optional_button"].addChild(self.states["/all/init/create_entries/create_entry/optional_button/create"])
+        self.states["/all/init/create_entries/create_entry/optional_button"].addChild(self.states["/all/init/create_entries/create_entry/optional_button/pack"])
+        self.states["/all/init/create_entries/create_entry/delete_button"].addChild(self.states["/all/init/create_entries/create_entry/delete_button/create"])
+        self.states["/all/init/create_entries/create_entry/delete_button"].addChild(self.states["/all/init/create_entries/create_entry/delete_button/pack"])
+        self.states["/all/init/add_new_attribute"].addChild(self.states["/all/init/add_new_attribute/create"])
+        self.states["/all/init/add_new_attribute"].addChild(self.states["/all/init/add_new_attribute/pack"])
+        self.states["/all/change_name"].addChild(self.states["/all/change_name/waiting"])
+        self.states["/all/change_name"].addChild(self.states["/all/change_name/commit"])
+        self.states[""].fixTree()
+        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_defined_attrs"]
+        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"]
+        self.states["/all/init/create_entries/create_entry/type_dropdown"].default_state = self.states["/all/init/create_entries/create_entry/type_dropdown/create"]
+        self.states["/all/init/create_entries/create_entry/optional_button"].default_state = self.states["/all/init/create_entries/create_entry/optional_button/create"]
+        self.states["/all/init/create_entries/create_entry/delete_button"].default_state = self.states["/all/init/create_entries/create_entry/delete_button/create"]
+        self.states["/all/init/add_new_attribute"].default_state = self.states["/all/init/add_new_attribute/create"]
+        self.states["/all/change_name"].default_state = self.states["/all/change_name/waiting"]
+        
+        # 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)
+        _all_init_get_defined_attrs_0.setTrigger(Event("mv_response", None))
+        self.states["/all/init/get_defined_attrs"].addTransition(_all_init_get_defined_attrs_0)
+        
+        # transition /all/init/create_entries/check_list
+        _all_init_create_entries_check_list_0 = Transition(self, self.states["/all/init/create_entries/check_list"], [self.states["/all/init/create_entries/create_entry"]])
+        _all_init_create_entries_check_list_0.setTrigger(None)
+        _all_init_create_entries_check_list_0.setGuard(self._all_init_create_entries_check_list_0_guard)
+        self.states["/all/init/create_entries/check_list"].addTransition(_all_init_create_entries_check_list_0)
+        _all_init_create_entries_check_list_1 = Transition(self, self.states["/all/init/create_entries/check_list"], [self.states["/all/init/add_new_attribute"]])
+        _all_init_create_entries_check_list_1.setTrigger(None)
+        _all_init_create_entries_check_list_1.setGuard(self._all_init_create_entries_check_list_1_guard)
+        self.states["/all/init/create_entries/check_list"].addTransition(_all_init_create_entries_check_list_1)
+        
+        # transition /all/init/create_entries/create_entry/name_entry/create
+        _all_init_create_entries_create_entry_name_entry_create_0 = Transition(self, self.states["/all/init/create_entries/create_entry/name_entry/create"], [self.states["/all/init/create_entries/create_entry/name_entry/pack"]])
+        _all_init_create_entries_create_entry_name_entry_create_0.setAction(self._all_init_create_entries_create_entry_name_entry_create_0_exec)
+        _all_init_create_entries_create_entry_name_entry_create_0.setTrigger(Event("instance_created", None))
+        self.states["/all/init/create_entries/create_entry/name_entry/create"].addTransition(_all_init_create_entries_create_entry_name_entry_create_0)
+        
+        # transition /all/init/create_entries/create_entry/name_entry/pack
+        _all_init_create_entries_create_entry_name_entry_pack_0 = Transition(self, self.states["/all/init/create_entries/create_entry/name_entry/pack"], [self.states["/all/init/create_entries/create_entry/type_dropdown"]])
+        _all_init_create_entries_create_entry_name_entry_pack_0.setAction(self._all_init_create_entries_create_entry_name_entry_pack_0_exec)
+        _all_init_create_entries_create_entry_name_entry_pack_0.setTrigger(Event("tk_widget", None))
+        self.states["/all/init/create_entries/create_entry/name_entry/pack"].addTransition(_all_init_create_entries_create_entry_name_entry_pack_0)
+        
+        # transition /all/init/create_entries/create_entry/type_dropdown/create
+        _all_init_create_entries_create_entry_type_dropdown_create_0 = Transition(self, self.states["/all/init/create_entries/create_entry/type_dropdown/create"], [self.states["/all/init/create_entries/create_entry/type_dropdown/pack"]])
+        _all_init_create_entries_create_entry_type_dropdown_create_0.setAction(self._all_init_create_entries_create_entry_type_dropdown_create_0_exec)
+        _all_init_create_entries_create_entry_type_dropdown_create_0.setTrigger(Event("instance_created", None))
+        self.states["/all/init/create_entries/create_entry/type_dropdown/create"].addTransition(_all_init_create_entries_create_entry_type_dropdown_create_0)
+        
+        # transition /all/init/create_entries/create_entry/type_dropdown/pack
+        _all_init_create_entries_create_entry_type_dropdown_pack_0 = Transition(self, self.states["/all/init/create_entries/create_entry/type_dropdown/pack"], [self.states["/all/init/create_entries/create_entry/optional_button"]])
+        _all_init_create_entries_create_entry_type_dropdown_pack_0.setAction(self._all_init_create_entries_create_entry_type_dropdown_pack_0_exec)
+        _all_init_create_entries_create_entry_type_dropdown_pack_0.setTrigger(Event("tk_widget", None))
+        self.states["/all/init/create_entries/create_entry/type_dropdown/pack"].addTransition(_all_init_create_entries_create_entry_type_dropdown_pack_0)
+        
+        # transition /all/init/create_entries/create_entry/optional_button/create
+        _all_init_create_entries_create_entry_optional_button_create_0 = Transition(self, self.states["/all/init/create_entries/create_entry/optional_button/create"], [self.states["/all/init/create_entries/create_entry/optional_button/pack"]])
+        _all_init_create_entries_create_entry_optional_button_create_0.setAction(self._all_init_create_entries_create_entry_optional_button_create_0_exec)
+        _all_init_create_entries_create_entry_optional_button_create_0.setTrigger(Event("instance_created", None))
+        self.states["/all/init/create_entries/create_entry/optional_button/create"].addTransition(_all_init_create_entries_create_entry_optional_button_create_0)
+        
+        # transition /all/init/create_entries/create_entry/optional_button/pack
+        _all_init_create_entries_create_entry_optional_button_pack_0 = Transition(self, self.states["/all/init/create_entries/create_entry/optional_button/pack"], [self.states["/all/init/create_entries/create_entry/delete_button"]])
+        _all_init_create_entries_create_entry_optional_button_pack_0.setAction(self._all_init_create_entries_create_entry_optional_button_pack_0_exec)
+        _all_init_create_entries_create_entry_optional_button_pack_0.setTrigger(Event("tk_widget", None))
+        self.states["/all/init/create_entries/create_entry/optional_button/pack"].addTransition(_all_init_create_entries_create_entry_optional_button_pack_0)
+        
+        # transition /all/init/create_entries/create_entry/delete_button/create
+        _all_init_create_entries_create_entry_delete_button_create_0 = Transition(self, self.states["/all/init/create_entries/create_entry/delete_button/create"], [self.states["/all/init/create_entries/create_entry/delete_button/pack"]])
+        _all_init_create_entries_create_entry_delete_button_create_0.setAction(self._all_init_create_entries_create_entry_delete_button_create_0_exec)
+        _all_init_create_entries_create_entry_delete_button_create_0.setTrigger(Event("instance_created", None))
+        self.states["/all/init/create_entries/create_entry/delete_button/create"].addTransition(_all_init_create_entries_create_entry_delete_button_create_0)
+        
+        # transition /all/init/create_entries/create_entry/delete_button/pack
+        _all_init_create_entries_create_entry_delete_button_pack_0 = Transition(self, self.states["/all/init/create_entries/create_entry/delete_button/pack"], [self.states["/all/init/create_entries/check_list"]])
+        _all_init_create_entries_create_entry_delete_button_pack_0.setAction(self._all_init_create_entries_create_entry_delete_button_pack_0_exec)
+        _all_init_create_entries_create_entry_delete_button_pack_0.setTrigger(Event("tk_widget", None))
+        self.states["/all/init/create_entries/create_entry/delete_button/pack"].addTransition(_all_init_create_entries_create_entry_delete_button_pack_0)
+        
+        # transition /all/init/add_new_attribute/create
+        _all_init_add_new_attribute_create_0 = Transition(self, self.states["/all/init/add_new_attribute/create"], [self.states["/all/init/add_new_attribute/pack"]])
+        _all_init_add_new_attribute_create_0.setAction(self._all_init_add_new_attribute_create_0_exec)
+        _all_init_add_new_attribute_create_0.setTrigger(Event("instance_created", None))
+        self.states["/all/init/add_new_attribute/create"].addTransition(_all_init_add_new_attribute_create_0)
+        
+        # transition /all/init/add_new_attribute/pack
+        _all_init_add_new_attribute_pack_0 = Transition(self, self.states["/all/init/add_new_attribute/pack"], [self.states["/all/running"]])
+        _all_init_add_new_attribute_pack_0.setAction(self._all_init_add_new_attribute_pack_0_exec)
+        _all_init_add_new_attribute_pack_0.setTrigger(Event("tk_widget", None))
+        self.states["/all/init/add_new_attribute/pack"].addTransition(_all_init_add_new_attribute_pack_0)
+        
+        # transition /all/running
+        _all_running_0 = Transition(self, self.states["/all/running"], [self.states["/all/delete_entry"]])
+        _all_running_0.setAction(self._all_running_0_exec)
+        _all_running_0.setTrigger(Event("button_pressed", None))
+        _all_running_0.setGuard(self._all_running_0_guard)
+        self.states["/all/running"].addTransition(_all_running_0)
+        _all_running_1 = Transition(self, self.states["/all/running"], [self.states["/all/make_optional"]])
+        _all_running_1.setAction(self._all_running_1_exec)
+        _all_running_1.setTrigger(Event("button_pressed", None))
+        _all_running_1.setGuard(self._all_running_1_guard)
+        self.states["/all/running"].addTransition(_all_running_1)
+        _all_running_2 = Transition(self, self.states["/all/running"], [self.states["/all/make_mandatory"]])
+        _all_running_2.setAction(self._all_running_2_exec)
+        _all_running_2.setTrigger(Event("button_pressed", None))
+        _all_running_2.setGuard(self._all_running_2_guard)
+        self.states["/all/running"].addTransition(_all_running_2)
+        _all_running_3 = Transition(self, self.states["/all/running"], [self.states["/all/create_new_entry"]])
+        _all_running_3.setAction(self._all_running_3_exec)
+        _all_running_3.setTrigger(Event("button_pressed", None))
+        _all_running_3.setGuard(self._all_running_3_guard)
+        self.states["/all/running"].addTransition(_all_running_3)
+        _all_running_4 = Transition(self, self.states["/all/running"], [self.states["/all/change_type"]])
+        _all_running_4.setAction(self._all_running_4_exec)
+        _all_running_4.setTrigger(Event("changed_dropdown", None))
+        self.states["/all/running"].addTransition(_all_running_4)
+        _all_running_5 = Transition(self, self.states["/all/running"], [self.states["/all/change_name"]])
+        _all_running_5.setAction(self._all_running_5_exec)
+        _all_running_5.setTrigger(Event("changed_entry", None))
+        self.states["/all/running"].addTransition(_all_running_5)
+        _all_running_6 = Transition(self, self.states["/all/running"], [self.states["/all/change_name"]])
+        _all_running_6.setAction(self._all_running_6_exec)
+        _all_running_6.setTrigger(None)
+        _all_running_6.setGuard(self._all_running_6_guard)
+        self.states["/all/running"].addTransition(_all_running_6)
+        
+        # transition /all/change_type
+        _all_change_type_0 = Transition(self, self.states["/all/change_type"], [self.states["/all/running"]])
+        _all_change_type_0.setTrigger(Event("mv_response", None))
+        self.states["/all/change_type"].addTransition(_all_change_type_0)
+        
+        # transition /all/change_name/waiting
+        _all_change_name_waiting_0 = Transition(self, self.states["/all/change_name/waiting"], [self.states["/all/change_name/commit"]])
+        _all_change_name_waiting_0.setTrigger(Event("_0after"))
+        self.states["/all/change_name/waiting"].addTransition(_all_change_name_waiting_0)
+        _all_change_name_waiting_1 = Transition(self, self.states["/all/change_name/waiting"], [self.states["/all/change_name/waiting"]])
+        _all_change_name_waiting_1.setAction(self._all_change_name_waiting_1_exec)
+        _all_change_name_waiting_1.setTrigger(Event("changed_entry", None))
+        self.states["/all/change_name/waiting"].addTransition(_all_change_name_waiting_1)
+        
+        # transition /all/change_name/commit
+        _all_change_name_commit_0 = Transition(self, self.states["/all/change_name/commit"], [self.states["/all/change_name/commit"]])
+        _all_change_name_commit_0.setAction(self._all_change_name_commit_0_exec)
+        _all_change_name_commit_0.setTrigger(Event("changed_entry", None))
+        self.states["/all/change_name/commit"].addTransition(_all_change_name_commit_0)
+        _all_change_name_commit_1 = Transition(self, self.states["/all/change_name/commit"], [self.states["/all/running"]])
+        _all_change_name_commit_1.setAction(self._all_change_name_commit_1_exec)
+        _all_change_name_commit_1.setTrigger(Event("mv_response", None))
+        self.states["/all/change_name/commit"].addTransition(_all_change_name_commit_1)
+        
+        # transition /all/create_new_entry
+        _all_create_new_entry_0 = Transition(self, self.states["/all/create_new_entry"], [self.states["/all/init/create_entries"]])
+        _all_create_new_entry_0.setTrigger(Event("mv_response", None))
+        self.states["/all/create_new_entry"].addTransition(_all_create_new_entry_0)
+        
+        # transition /all/make_optional
+        _all_make_optional_0 = Transition(self, self.states["/all/make_optional"], [self.states["/all/running"]])
+        _all_make_optional_0.setAction(self._all_make_optional_0_exec)
+        _all_make_optional_0.setTrigger(Event("mv_response", None))
+        self.states["/all/make_optional"].addTransition(_all_make_optional_0)
+        
+        # transition /all/make_mandatory
+        _all_make_mandatory_0 = Transition(self, self.states["/all/make_mandatory"], [self.states["/all/running"]])
+        _all_make_mandatory_0.setAction(self._all_make_mandatory_0_exec)
+        _all_make_mandatory_0.setTrigger(Event("mv_response", None))
+        self.states["/all/make_mandatory"].addTransition(_all_make_mandatory_0)
+        
+        # transition /all/delete_entry
+        _all_delete_entry_0 = Transition(self, self.states["/all/delete_entry"], [self.states["/all/running"]])
+        _all_delete_entry_0.setAction(self._all_delete_entry_0_exec)
+        _all_delete_entry_0.setTrigger(Event("mv_response", None))
+        self.states["/all/delete_entry"].addTransition(_all_delete_entry_0)
+        
+        # transition /all/closing
+        _all_closing_0 = Transition(self, self.states["/all/closing"], [self.states["/all/close"]])
+        _all_closing_0.setTrigger(Event("instance_deleted", None))
+        self.states["/all/closing"].addTransition(_all_closing_0)
+        
+        # transition /all
+        _all_0 = Transition(self, self.states["/all"], [self.states["/all/closing"]])
+        _all_0.setTrigger(Event("window-close", None))
+        _all_0.setGuard(self._all_0_guard)
+        self.states["/all"].addTransition(_all_0)
+    
+    def _all_init_create_entries_create_entry_enter(self):
+        current_attr = self.attrs_modify.popitem()
+        self.current_attr = {'name': current_attrs[0], 'type': current_attrs[1][0], 'optional': current_attrs[1][1]}
+    
+    def _all_init_create_entries_create_entry_exit(self):
+        self.counter += 1
+    
+    def _all_change_name_enter(self):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_name[self.parameter[0]], Event("mark_uncommitted", None, [])]))
+    
+    def _all_init_get_defined_attrs_enter(self):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['read_defined_attrs', [current_model, self.as_element]])]))
+    
+    def _all_init_create_entries_create_entry_name_entry_create_enter(self):
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'names', 'Entry', {'parent': self, 'name': self.current_attr['name'], 'value': self.current_attr['name']}]))
+    
+    def _all_init_create_entries_create_entry_type_dropdown_create_enter(self):
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'types', 'DropDown', self, self.current_attr['name'], self.current_attr['type'], self.allowed_types]))
+    
+    def _all_init_create_entries_create_entry_optional_button_create_enter(self):
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'optional', 'ToggleButton', {'parent': self, 'on_activate': 'optional_%s' % self.current_attr['name'], 'on_deactivate': 'mandatory_%s' % self.current_attr['name'], 'active': self.current_attr['optional'], 'tooltip_text': 'Optional attribute?', 'visual': TextVisual('optional')}]))
+    
+    def _all_init_create_entries_create_entry_delete_button_create_enter(self):
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'delete', 'Button', self, self.current_attr['name']]))
+    
+    def _all_init_add_new_attribute_create_enter(self):
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'add_attribute_button', 'Button', self]))
+    
+    def _all_change_type_enter(self):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_type', [current_model, self.as_element, self.parameter[0], self.parameter[1]]])]))
+    
+    def _all_change_name_waiting_enter(self):
+        self.addTimer(0, 1.0)
+    
+    def _all_change_name_waiting_exit(self):
+        self.removeTimer(0)
+    
+    def _all_change_name_commit_enter(self):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_name', [current_model, self.as_element, self.parameter[0], self.parameter[1]]])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_name[self.parameter[0]], Event("change_event_name", None, [self.parameter[1]])]))
+    
+    def _all_create_new_entry_enter(self):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_model, self.as_element, self.attr_modify['name'], self.attr_modify['type'], self.attr_modify['optional']]])]))
+    
+    def _all_make_optional_enter(self):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_optional', [current_model, self.as_element, self.parameter]])]))
+    
+    def _all_make_mandatory_enter(self):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_mandatory', [current_model, self.as_element, self.parameter]])]))
+    
+    def _all_delete_entry_enter(self):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_del', [current_model, self.as_element, self.parameter]])]))
+    
+    def _all_closing_enter(self):
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.button]))
+    
+    def _all_close_enter(self):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("close_window", None, [])]))
+    
+    def _all_0_guard(self, parameters):
+        ID = parameters[0]
+        return ID == id(self)
+    
+    def _all_init_get_defined_attrs_0_exec(self, parameters):
+        result_mandatory = parameters[0]
+        result_optional = parameters[1]
+        result_mandatory = {i: (result_mandatory[i], False) for i in result_mandatory}
+        result_optional = {i: (result_optional[i], False) for i in result_optional}
+        result = {}
+        result.update(result_mandatory)
+        result.update(result_optional)
+        
+        self.attrs = result
+        self.attrs_modify = dict(self.attrs)
+        self.counter = 0
+    
+    def _all_init_create_entries_check_list_0_guard(self, parameters):
+        return self.attrs_modify
+    
+    def _all_init_create_entries_check_list_1_guard(self, parameters):
+        return not self.attrs_modify
+    
+    def _all_init_create_entries_create_entry_name_entry_create_0_exec(self, parameters):
+        assoc_name = parameters[0]
+        self.big_step.outputEventOM(Event("start_instance", None, [self, assoc_name]))
+        self.associations_name[self.current_attr['name']] = assoc_name
+    
+    def _all_init_create_entries_create_entry_name_entry_pack_0_exec(self, parameters):
+        tk_widget = parameters[0]
+        tk_widget.grid(row=self.counter, column=0)
+    
+    def _all_init_create_entries_create_entry_type_dropdown_create_0_exec(self, parameters):
+        assoc_name = parameters[0]
+        self.big_step.outputEventOM(Event("start_instance", None, [self, assoc_name]))
+        self.associations_type[self.current_attr['name']] = assoc_name
+    
+    def _all_init_create_entries_create_entry_type_dropdown_pack_0_exec(self, parameters):
+        tk_widget = parameters[0]
+        tk_widget.grid(row=self.counter, column=1)
+    
+    def _all_init_create_entries_create_entry_optional_button_create_0_exec(self, parameters):
+        assoc_name = parameters[0]
+        self.big_step.outputEventOM(Event("start_instance", None, [self, assoc_name]))
+        self.associations_optional[self.current_attr['name']] = assoc_name
+    
+    def _all_init_create_entries_create_entry_optional_button_pack_0_exec(self, parameters):
+        tk_widget = parameters[0]
+        tk_widget.grid(row=self.counter, column=2)
+    
+    def _all_init_create_entries_create_entry_delete_button_create_0_exec(self, parameters):
+        assoc_name = parameters[0]
+        self.big_step.outputEventOM(Event("start_instance", None, [self, assoc_name]))
+        self.associations_delete[self.current_attr['name']] = assoc_name
+    
+    def _all_init_create_entries_create_entry_delete_button_pack_0_exec(self, parameters):
+        tk_widget = parameters[0]
+        tk_widget.grid(row=self.counter, column=3)
+    
+    def _all_init_add_new_attribute_create_0_exec(self, parameters):
+        assoc_name = parameters[0]
+        self.big_step.outputEventOM(Event("start_instance", None, [self, assoc_name]))
+    
+    def _all_init_add_new_attribute_pack_0_exec(self, parameters):
+        tk_widget = parameters[0]
+        tk_widget.grid(row=self.counter, column=3)
+    
+    def _all_running_0_exec(self, parameters):
+        event_name = parameters[0]
+        self.parameter = event_name.split("delete_", 1)[1]
+    
+    def _all_running_0_guard(self, parameters):
+        event_name = parameters[0]
+        return event_name.startswith('delete_')
+    
+    def _all_running_1_exec(self, parameters):
+        event_name = parameters[0]
+        self.parameter = event_name.split("optional_", 1)[1]
+    
+    def _all_running_1_guard(self, parameters):
+        event_name = parameters[0]
+        return event_name.startswith('optional_')
+    
+    def _all_running_2_exec(self, parameters):
+        event_name = parameters[0]
+        self.parameter = event_name.split("mandatory_", 1)[1]
+    
+    def _all_running_2_guard(self, parameters):
+        event_name = parameters[0]
+        return event_name.startswith('mandatory_')
+    
+    def _all_running_3_exec(self, parameters):
+        event_name = parameters[0]
+        self.attr_modify = [{'name': self.get_unique_attr_name(), 'type': next(iter(self.allowed_types)), 'optional': True}]
+    
+    def _all_running_3_guard(self, parameters):
+        event_name = parameters[0]
+        return event_name == 'create'
+    
+    def _all_running_4_exec(self, parameters):
+        event_name = parameters[0]
+        new_name = parameters[1]
+        self.parameter = (event_name, new_name)
+    
+    def _all_running_5_exec(self, parameters):
+        original_name = parameters[0]
+        new_name = parameters[1]
+        self.parameter = (original_name, new_name)
+    
+    def _all_running_6_exec(self, parameters):
+        self.parameter = self.dirty[1:3]
+        self.dirty = None
+    
+    def _all_running_6_guard(self, parameters):
+        return self.dirty
+    
+    def _all_change_name_waiting_1_exec(self, parameters):
+        original_name = parameters[0]
+        new_name = parameters[1]
+        self.parameter = (original_name, new_name)
+    
+    def _all_change_name_commit_0_exec(self, parameters):
+        original_name = parameters[0]
+        new_name = parameters[1]
+        self.dirty = (True, original_name, new_name)
+    
+    def _all_change_name_commit_1_exec(self, parameters):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_type[self.parameter[0]], Event("change_event_name", None, [self.parameter[1]])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_name[self.parameter[0]], Event("mark_committed", None, [])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_optional[self.parameter[0]], Event("change_triggers", None, ['optional_%s' % self.parameter[1], 'mandatory_%s' % self.parameter[1]])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_delete[self.parameter[0]], Event("change_event_name", None, [self.parameter[1]])]))
+        self.associations_name[self.parameter[1]] = self.associations_name[self.parameter[0]]
+        self.associations_type[self.parameter[1]] = self.associations_type[self.parameter[0]]
+        self.associations_optional[self.parameter[1]] = self.associations_optional[self.parameter[0]]
+        self.associations_delete[self.parameter[1]] = self.associations_delete[self.parameter[0]]
+        
+        del self.associations_name[self.parameter[0]]
+        del self.associations_type[self.parameter[0]]
+        del self.associations_optional[self.parameter[0]]
+        del self.associations_delete[self.parameter[0]]
+    
+    def _all_make_optional_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_optional[self.parameter], Event("activate", None, [])]))
+    
+    def _all_make_mandatory_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_optional[self.parameter], Event("deactivate", None, [])]))
+    
+    def _all_delete_entry_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.associations_name[self.parameter]]))
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.associations_type[self.parameter]]))
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.associations_optional[self.parameter]]))
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.associations_delete[self.parameter]]))
+        del self.associations_name[self.parameter]
+        del self.associations_type[self.parameter]
+        del self.associations_optional[self.parameter]
+        del self.associations_delete[self.parameter]
+    
+    def initializeStatechart(self):
+        # enter default state
+        self.default_targets = self.states["/all"].getEffectiveTargetStates()
+        RuntimeClassBase.initializeStatechart(self)
+
 class PromptWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def __init__(self, controller, entries, options):
         RuntimeClassBase.__init__(self, controller)
@@ -7268,6 +7874,117 @@ class ConcreteSyntaxToolbar(Toolbar):
         self.default_targets = self.states["/init"].getEffectiveTargetStates()
         RuntimeClassBase.initializeStatechart(self)
 
+class Entry(RuntimeClassBase, tk.Entry, SCCDWidget):
+    def __init__(self, controller, constructor_parameters = None):
+        if constructor_parameters == None: constructor_parameters = {}
+        RuntimeClassBase.__init__(self, controller)
+        
+        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
+        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
+        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
+        self.semantics.priority = StatechartSemantics.SourceParent
+        self.semantics.concurrency = StatechartSemantics.Single
+        
+        # build Statechart structure
+        self.build_statechart_structure()
+        
+        # call user defined constructor
+        Entry.user_defined_constructor(self, constructor_parameters)
+    
+    def user_defined_constructor(self, constructor_parameters = None):
+        if constructor_parameters == None: constructor_parameters = {}
+        tk.Entry.__init__(self, constructor_parameters['parent'])
+        SCCDWidget.__init__(self)
+        self.strvar = tk.StringVar(self)
+        self.strvar.set(constructor_parameters['initial'])
+        self.strvar.trace('w', lambda a, b, c: self.controller.addInput(Event("change_entry", "input", [id(self), self.strvar.get()])))
+        self.name = constructor_parameters['name']
+    
+    def user_defined_destructor(self):
+        self.destroy()
+        # call super class destructors
+        if hasattr(tk.Entry, "__del__"):
+            tk.Entry.__del__(self)
+        if hasattr(SCCDWidget, "__del__"):
+            SCCDWidget.__del__(self)
+    
+    
+    # builds Statechart structure
+    def build_statechart_structure(self):
+        
+        # state <root>
+        self.states[""] = State(0, "", self)
+        
+        # state /main
+        self.states["/main"] = State(1, "/main", self)
+        
+        # state /main/initializing
+        self.states["/main/initializing"] = State(2, "/main/initializing", self)
+        
+        # state /main/ready
+        self.states["/main/ready"] = State(3, "/main/ready", self)
+        
+        # add children
+        self.states[""].addChild(self.states["/main"])
+        self.states["/main"].addChild(self.states["/main/initializing"])
+        self.states["/main"].addChild(self.states["/main/ready"])
+        self.states[""].fixTree()
+        self.states[""].default_state = self.states["/main"]
+        self.states["/main"].default_state = self.states["/main/initializing"]
+        
+        # transition /main/initializing
+        _main_initializing_0 = Transition(self, self.states["/main/initializing"], [self.states["/main/ready"]])
+        _main_initializing_0.setAction(self._main_initializing_0_exec)
+        _main_initializing_0.setTrigger(None)
+        self.states["/main/initializing"].addTransition(_main_initializing_0)
+        
+        # transition /main/ready
+        _main_ready_0 = Transition(self, self.states["/main/ready"], [self.states["/main/ready"]])
+        _main_ready_0.setAction(self._main_ready_0_exec)
+        _main_ready_0.setTrigger(Event("change_entry", "input"))
+        _main_ready_0.setGuard(self._main_ready_0_guard)
+        self.states["/main/ready"].addTransition(_main_ready_0)
+        _main_ready_1 = Transition(self, self.states["/main/ready"], [self.states["/main/ready"]])
+        _main_ready_1.setAction(self._main_ready_1_exec)
+        _main_ready_1.setTrigger(Event("mark_committed", None))
+        self.states["/main/ready"].addTransition(_main_ready_1)
+        _main_ready_2 = Transition(self, self.states["/main/ready"], [self.states["/main/ready"]])
+        _main_ready_2.setAction(self._main_ready_2_exec)
+        _main_ready_2.setTrigger(Event("mark_uncommitted", None))
+        self.states["/main/ready"].addTransition(_main_ready_2)
+        _main_ready_3 = Transition(self, self.states["/main/ready"], [self.states["/main/ready"]])
+        _main_ready_3.setAction(self._main_ready_3_exec)
+        _main_ready_3.setTrigger(Event("change_event_name", None))
+        self.states["/main/ready"].addTransition(_main_ready_3)
+    
+    def _main_initializing_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("tk_widget", None, [self])]))
+    
+    def _main_ready_0_exec(self, parameters):
+        tagorid = parameters[0]
+        new_value = parameters[1]
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("changed_entry", None, [self.name, new_value])]))
+    
+    def _main_ready_0_guard(self, parameters):
+        tagorid = parameters[0]
+        new_value = parameters[1]
+        return tagorid == id(self)
+    
+    def _main_ready_1_exec(self, parameters):
+        self.configure(bg="lightgreen")
+    
+    def _main_ready_2_exec(self, parameters):
+        self.configure(bg="lightorange")
+    
+    def _main_ready_3_exec(self, parameters):
+        new_name = parameters[0]
+        self.name = new_name
+    
+    def initializeStatechart(self):
+        # enter default state
+        self.default_targets = self.states["/main"].getEffectiveTargetStates()
+        RuntimeClassBase.initializeStatechart(self)
+
 class Button(RuntimeClassBase, tk.Button, SCCDWidget):
     def __init__(self, controller, constructor_parameters = None):
         if constructor_parameters == None: constructor_parameters = {}
@@ -7399,6 +8116,186 @@ class Button(RuntimeClassBase, tk.Button, SCCDWidget):
         self.default_targets = self.states["/main"].getEffectiveTargetStates()
         RuntimeClassBase.initializeStatechart(self)
 
+class ToggleButton(RuntimeClassBase, tk.Button, SCCDWidget):
+    def __init__(self, controller, constructor_parameters = None, ):
+        if constructor_parameters == None: constructor_parameters = {}
+        RuntimeClassBase.__init__(self, controller)
+        
+        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
+        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
+        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
+        self.semantics.priority = StatechartSemantics.SourceParent
+        self.semantics.concurrency = StatechartSemantics.Single
+        
+        # build Statechart structure
+        self.build_statechart_structure()
+        
+        # call user defined constructor
+        ToggleButton.user_defined_constructor(self, constructor_parameters, )
+    
+    def user_defined_constructor(self, constructor_parameters = None, ):
+        if constructor_parameters == None: constructor_parameters = {}
+        tk.Button.__init__(self, constructor_parameters['parent'], **(constructor_parameters['visual'].get_params()))
+        SCCDWidget.__init__(self)
+        self.on_activate = constructor_parameters["on_activate"]
+        self.on_deactivate = constructor_parameters["on_deactivate"]
+        if "tooltip_text" in constructor_parameters:
+            self.tooltip = ToolTip(self, constructor_parameters["tooltip_text"])
+        else:
+            self.tooltip = None
+        self.initial_active = self.constructor_parameters["initial_active"]
+    
+    def user_defined_destructor(self):
+        self.destroy()
+        # call super class destructors
+        if hasattr(tk.Button, "__del__"):
+            tk.Button.__del__(self)
+        if hasattr(SCCDWidget, "__del__"):
+            SCCDWidget.__del__(self)
+    
+    
+    # builds Statechart structure
+    def build_statechart_structure(self):
+        
+        # state <root>
+        self.states[""] = State(0, "", self)
+        
+        # state /main
+        self.states["/main"] = State(1, "/main", self)
+        
+        # state /main/initializing
+        self.states["/main/initializing"] = State(2, "/main/initializing", self)
+        
+        # state /main/ready
+        self.states["/main/ready"] = State(3, "/main/ready", self)
+        
+        # state /main/ready/decide
+        self.states["/main/ready/decide"] = State(4, "/main/ready/decide", self)
+        
+        # state /main/ready/active
+        self.states["/main/ready/active"] = State(5, "/main/ready/active", self)
+        self.states["/main/ready/active"].setEnter(self._main_ready_active_enter)
+        
+        # state /main/ready/inactive
+        self.states["/main/ready/inactive"] = State(6, "/main/ready/inactive", self)
+        self.states["/main/ready/inactive"].setEnter(self._main_ready_inactive_enter)
+        
+        # state /main/ready/history
+        self.states["/main/ready/history"] = ShallowHistoryState(7, "/main/ready/history", self)
+        
+        # add children
+        self.states[""].addChild(self.states["/main"])
+        self.states["/main"].addChild(self.states["/main/initializing"])
+        self.states["/main"].addChild(self.states["/main/ready"])
+        self.states["/main/ready"].addChild(self.states["/main/ready/decide"])
+        self.states["/main/ready"].addChild(self.states["/main/ready/active"])
+        self.states["/main/ready"].addChild(self.states["/main/ready/inactive"])
+        self.states["/main/ready"].addChild(self.states["/main/ready/history"])
+        self.states[""].fixTree()
+        self.states[""].default_state = self.states["/main"]
+        self.states["/main"].default_state = self.states["/main/initializing"]
+        self.states["/main/ready"].default_state = self.states["/main/ready/decide"]
+        
+        # transition /main/initializing
+        _main_initializing_0 = Transition(self, self.states["/main/initializing"], [self.states["/main/ready"]])
+        _main_initializing_0.setAction(self._main_initializing_0_exec)
+        _main_initializing_0.setTrigger(None)
+        self.states["/main/initializing"].addTransition(_main_initializing_0)
+        
+        # transition /main/ready/decide
+        _main_ready_decide_0 = Transition(self, self.states["/main/ready/decide"], [self.states["/main/ready/active"]])
+        _main_ready_decide_0.setTrigger(None)
+        _main_ready_decide_0.setGuard(self._main_ready_decide_0_guard)
+        self.states["/main/ready/decide"].addTransition(_main_ready_decide_0)
+        _main_ready_decide_1 = Transition(self, self.states["/main/ready/decide"], [self.states["/main/ready/active"]])
+        _main_ready_decide_1.setTrigger(None)
+        _main_ready_decide_1.setGuard(self._main_ready_decide_1_guard)
+        self.states["/main/ready/decide"].addTransition(_main_ready_decide_1)
+        
+        # transition /main/ready/active
+        _main_ready_active_0 = Transition(self, self.states["/main/ready/active"], [self.states["/main/ready/inactive"]])
+        _main_ready_active_0.setAction(self._main_ready_active_0_exec)
+        _main_ready_active_0.setTrigger(Event("left-click", "input"))
+        _main_ready_active_0.setGuard(self._main_ready_active_0_guard)
+        self.states["/main/ready/active"].addTransition(_main_ready_active_0)
+        _main_ready_active_1 = Transition(self, self.states["/main/ready/active"], [self.states["/main/ready/inactive"]])
+        _main_ready_active_1.setTrigger(Event("deactivate", None))
+        self.states["/main/ready/active"].addTransition(_main_ready_active_1)
+        
+        # transition /main/ready/inactive
+        _main_ready_inactive_0 = Transition(self, self.states["/main/ready/inactive"], [self.states["/main/ready/active"]])
+        _main_ready_inactive_0.setAction(self._main_ready_inactive_0_exec)
+        _main_ready_inactive_0.setTrigger(Event("left-click", "input"))
+        _main_ready_inactive_0.setGuard(self._main_ready_inactive_0_guard)
+        self.states["/main/ready/inactive"].addTransition(_main_ready_inactive_0)
+        _main_ready_inactive_1 = Transition(self, self.states["/main/ready/inactive"], [self.states["/main/ready/active"]])
+        _main_ready_inactive_1.setTrigger(Event("activate", None))
+        self.states["/main/ready/inactive"].addTransition(_main_ready_inactive_1)
+        
+        # transition /main/ready
+        _main_ready_0 = Transition(self, self.states["/main/ready"], [self.states["/main/ready/history"]])
+        _main_ready_0.setAction(self._main_ready_0_exec)
+        _main_ready_0.setTrigger(Event("enter", "input"))
+        _main_ready_0.setGuard(self._main_ready_0_guard)
+        self.states["/main/ready"].addTransition(_main_ready_0)
+        _main_ready_1 = Transition(self, self.states["/main/ready"], [self.states["/main/ready/history"]])
+        _main_ready_1.setAction(self._main_ready_1_exec)
+        _main_ready_1.setTrigger(Event("leave", "input"))
+        _main_ready_1.setGuard(self._main_ready_1_guard)
+        self.states["/main/ready"].addTransition(_main_ready_1)
+    
+    def _main_ready_active_enter(self):
+        self.configure(state=tk.ACTIVE, relief=tk.SUNKEN)
+    
+    def _main_ready_inactive_enter(self):
+        self.configure(state=tk.NORMAL, relief=tk.RAISED)
+    
+    def _main_ready_0_exec(self, parameters):
+        tagorid = parameters[0]
+        self.tooltip.showtip()
+    
+    def _main_ready_0_guard(self, parameters):
+        tagorid = parameters[0]
+        return tagorid == id(self) and self.tooltip is not None
+    
+    def _main_ready_1_exec(self, parameters):
+        tagorid = parameters[0]
+        self.tooltip.hidetip()
+    
+    def _main_ready_1_guard(self, parameters):
+        tagorid = parameters[0]
+        return tagorid == id(self) and self.tooltip is not None
+    
+    def _main_initializing_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("tk_widget", None, [self])]))
+    
+    def _main_ready_decide_0_guard(self, parameters):
+        return self.initial_active
+    
+    def _main_ready_decide_1_guard(self, parameters):
+        return not self.initial_active
+    
+    def _main_ready_active_0_exec(self, parameters):
+        tagorid = parameters[0]
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("button_pressed", None, [self.on_deactivate])]))
+    
+    def _main_ready_active_0_guard(self, parameters):
+        tagorid = parameters[0]
+        return tagorid == id(self)
+    
+    def _main_ready_inactive_0_exec(self, parameters):
+        tagorid = parameters[0]
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("button_pressed", None, [self.on_activate])]))
+    
+    def _main_ready_inactive_0_guard(self, parameters):
+        tagorid = parameters[0]
+        return tagorid == id(self)
+    
+    def initializeStatechart(self):
+        # enter default state
+        self.default_targets = self.states["/main"].getEffectiveTargetStates()
+        RuntimeClassBase.initializeStatechart(self)
+
 class Label(RuntimeClassBase, tk.Label, SCCDWidget):
     def __init__(self, controller, constructor_parameters = None):
         if constructor_parameters == None: constructor_parameters = {}
@@ -8941,6 +9838,15 @@ class ObjectManager(ObjectManagerBase):
         elif class_name == "HTTPClient":
             instance = HTTPClient(self.controller)
             instance.associations = {}
+        elif class_name == "AttributeEditor":
+            instance = AttributeEditor(self.controller, construct_params[0], construct_params[1])
+            instance.associations = {}
+            instance.associations["names"] = Association("Entry", 0, -1)
+            instance.associations["types"] = Association("DropDown", 0, -1)
+            instance.associations["optional"] = Association("ToggleButton", 0, -1)
+            instance.associations["delete"] = Association("Button", 0, -1)
+            instance.associations["add_attribute_button"] = Association("Button", 0, -1)
+            instance.associations["parent"] = Association("A", 0, -1)
         elif class_name == "PromptWindow":
             instance = PromptWindow(self.controller, construct_params[0], construct_params[1])
             instance.associations = {}
@@ -9001,10 +9907,18 @@ class ObjectManager(ObjectManagerBase):
             instance.associations = {}
             instance.associations["buttons"] = Association("Button", 0, -1)
             instance.associations["parent"] = Association("A", 0, -1)
+        elif class_name == "Entry":
+            instance = Entry(self.controller, construct_params[0])
+            instance.associations = {}
+            instance.associations["parent"] = Association("A", 0, -1)
         elif class_name == "Button":
             instance = Button(self.controller, construct_params[0])
             instance.associations = {}
             instance.associations["parent"] = Association("A", 0, -1)
+        elif class_name == "ToggleButton":
+            instance = ToggleButton(self.controller, construct_params[0], construct_params[1])
+            instance.associations = {}
+            instance.associations["parent"] = Association("A", 0, -1)
         elif class_name == "Label":
             instance = Label(self.controller, construct_params[0])
             instance.associations = {}