Browse Source

List metamodels in a dropdown menu

Yentl Van Tendeloo 8 years ago
parent
commit
3bbda3d493

+ 2 - 2
classes/toolbar/dsl_toolbar.xml

@@ -11,8 +11,8 @@
             <parameter expr="parent"/>
             <parameter expr="parent"/>
         </super>
         </super>
         <body>
         <body>
-            self.to_create = ["new"]
-            self.button_info = {"new": "REMOVE"}
+            self.to_create = ["todo"]
+            self.button_info = {"todo": "REMOVE"}
             self.buttons = {}
             self.buttons = {}
             tk.Label(self, text="Domain-Specific").pack(side=tk.LEFT)
             tk.Label(self, text="Domain-Specific").pack(side=tk.LEFT)
         </body>
         </body>

+ 15 - 0
classes/toolbar/metamodelling_toolbar.xml

@@ -7,6 +7,8 @@
 
 
     <constructor>
     <constructor>
         <parameter name="parent"/>
         <parameter name="parent"/>
+        <parameter name="selected_metamodel"/>
+        <parameter name="metamodels"/>
         <super class="Toolbar">
         <super class="Toolbar">
             <parameter expr="parent"/>
             <parameter expr="parent"/>
         </super>
         </super>
@@ -20,6 +22,11 @@
                                 }
                                 }
             self.buttons = {}
             self.buttons = {}
             tk.Label(self, text="Management").pack(side=tk.LEFT)
             tk.Label(self, text="Management").pack(side=tk.LEFT)
+            strvar = tk.StringVar(self)
+            strvar.set(selected_metamodel)
+            selected_metamodel = strvar
+            tk.OptionMenu(self, selected_metamodel, *list(metamodels)).pack(side=tk.LEFT)
+            selected_metamodel.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_metamodel", "input", [id(self), selected_metamodel.get()])))
         </body>
         </body>
     </constructor>
     </constructor>
 
 
@@ -78,6 +85,14 @@
                 <raise event="verify" scope="narrow" target="'parent'"/>
                 <raise event="verify" scope="narrow" target="'parent'"/>
             </transition>
             </transition>
 
 
+            <transition event="changed_metamodel" cond="ID == id(self) and new_metamodel != current_metamodel" target=".">
+                <parameter name="ID"/>
+                <parameter name="new_metamodel"/>
+                <raise event="change_metamodel" scope="narrow" target="'parent'">
+                    <parameter expr="new_metamodel"/>
+                </raise>
+            </transition>
+
             <transition event="close" target="../closing"/>
             <transition event="close" target="../closing"/>
         </state>
         </state>
 
 

+ 59 - 6
classes/window/main_window.xml

@@ -3,7 +3,8 @@
         <inheritance class="tk.Toplevel" priority="1"/>
         <inheritance class="tk.Toplevel" priority="1"/>
         <inheritance class="SCCDWidget" priority="0"/>
         <inheritance class="SCCDWidget" priority="0"/>
         <association name="parent" class="A"/>
         <association name="parent" class="A"/>
-        <association name="toolbars" class="Toolbar"/>
+        <association name="generic_toolbars" class="Toolbar"/>
+        <association name="model_toolbars" class="Toolbar"/>
         <association name="subwindow" class="Window"/>
         <association name="subwindow" class="Window"/>
         <association name="canvas" class="Canvas"/>
         <association name="canvas" class="Canvas"/>
         <association name="progress_bar" class="ProgressBar"/>
         <association name="progress_bar" class="ProgressBar"/>
@@ -34,7 +35,7 @@
             <state id="generic_toolbar">
             <state id="generic_toolbar">
                 <onentry>
                 <onentry>
                     <raise event="create_instance" scope="cd">
                     <raise event="create_instance" scope="cd">
-                        <parameter expr="'toolbars'"/>
+                        <parameter expr="'generic_toolbars'"/>
                         <parameter expr="'GenericToolbar'"/>
                         <parameter expr="'GenericToolbar'"/>
                         <parameter expr="self.toolbar_frame"/>
                         <parameter expr="self.toolbar_frame"/>
                     </raise>
                     </raise>
@@ -96,6 +97,29 @@
                 <transition event="open_model" target="../open_model"/>
                 <transition event="open_model" target="../open_model"/>
                 <transition event="rerender_model" target="../rerender_model"/>
                 <transition event="rerender_model" target="../rerender_model"/>
                 <transition event="verify" target="../verify_model"/>
                 <transition event="verify" target="../verify_model"/>
+                <transition event="change_metamodel" target="../change_metamodel">
+                    <parameter name="new_metamodel"/>
+                    <script>
+                        global current_metamodel
+                        current_metamodel = new_metamodel
+                    </script>
+                </transition>
+            </state>
+
+            <state id="change_metamodel">
+                <onentry>
+                    <raise event="mv_request" scope="broad">
+                        <parameter expr="'alter_context'"/>
+                        <parameter expr="[current_model, current_metamodel]"/>
+                    </raise>
+
+                    <raise event="update_status" scope="narrow" target="'progress_bar'">
+                        <parameter expr="20"/>
+                        <parameter expr="'Storing model context...'"/>
+                    </raise>
+                </onentry>
+
+                <transition event="mv_response" target="../rerender_model"/>
             </state>
             </state>
 
 
             <state id="verify_model" initial="request">
             <state id="verify_model" initial="request">
@@ -221,6 +245,7 @@
                                 current_metamodel = next(iter(result))
                                 current_metamodel = next(iter(result))
                             else:
                             else:
                                 current_metamodel = ''
                                 current_metamodel = ''
+                            self.allowed_metamodels = result
                         </script>
                         </script>
                         <raise event="update_status" scope="narrow" target="'progress_bar'">
                         <raise event="update_status" scope="narrow" target="'progress_bar'">
                             <parameter expr="20"/>
                             <parameter expr="20"/>
@@ -430,7 +455,7 @@
 
 
             <state id="rerender_model" initial="initial_render">
             <state id="rerender_model" initial="initial_render">
                 <state id="initial_render">
                 <state id="initial_render">
-                    <transition cond="self.model_loaded" target="../request_render"/>
+                    <transition cond="self.model_loaded" target="../recreate_toolbars"/>
                     <transition cond="not self.model_loaded" target="../canvas">
                     <transition cond="not self.model_loaded" target="../canvas">
                         <script>
                         <script>
                             self.model_loaded = True
                             self.model_loaded = True
@@ -438,6 +463,32 @@
                     </transition>
                     </transition>
                 </state>
                 </state>
 
 
+                <state id="recreate_toolbars" initial="waiting">
+                    <onentry>
+                        <raise event="close" scope="narrow" target="'model_toolbars'"/>
+                        <script>
+                            self.nr_toolbars = 3
+                        </script>
+                    </onentry>
+
+                    <state id="waiting">
+                        <transition event="close_window" target=".">
+                            <script>
+                                self.nr_toolbars -= 1
+                            </script>
+                        </transition>
+                        <transition cond="self.nr_toolbars == 0" target="../close_all"/>
+                    </state>
+
+                    <state id="close_all">
+                        <transition target="../../model_toolbars">
+                            <raise event="delete_instance" scope="cd">
+                                <parameter expr="'model_toolbars'"/>
+                            </raise>
+                        </transition>
+                    </state>
+                </state>
+
                 <state id="canvas">
                 <state id="canvas">
                     <onentry>
                     <onentry>
                         <raise event="create_instance" scope="cd">
                         <raise event="create_instance" scope="cd">
@@ -468,9 +519,11 @@
                     <state id="mm_toolbar">
                     <state id="mm_toolbar">
                         <onentry>
                         <onentry>
                             <raise event="create_instance" scope="cd">
                             <raise event="create_instance" scope="cd">
-                                <parameter expr="'toolbars'"/>
+                                <parameter expr="'model_toolbars'"/>
                                 <parameter expr="'MetamodellingToolbar'"/>
                                 <parameter expr="'MetamodellingToolbar'"/>
                                 <parameter expr="self.toolbar_frame"/>
                                 <parameter expr="self.toolbar_frame"/>
+                                <parameter expr="current_metamodel"/>
+                                <parameter expr="self.allowed_metamodels"/>
                             </raise>
                             </raise>
                         </onentry>
                         </onentry>
 
 
@@ -494,7 +547,7 @@
                     <state id="cs_toolbar">
                     <state id="cs_toolbar">
                         <onentry>
                         <onentry>
                             <raise event="create_instance" scope="cd">
                             <raise event="create_instance" scope="cd">
-                                <parameter expr="'toolbars'"/>
+                                <parameter expr="'model_toolbars'"/>
                                 <parameter expr="'ConcreteSyntaxToolbar'"/>
                                 <parameter expr="'ConcreteSyntaxToolbar'"/>
                                 <parameter expr="self.toolbar_frame"/>
                                 <parameter expr="self.toolbar_frame"/>
                             </raise>
                             </raise>
@@ -520,7 +573,7 @@
                     <state id="dsl_toolbar">
                     <state id="dsl_toolbar">
                         <onentry>
                         <onentry>
                             <raise event="create_instance" scope="cd">
                             <raise event="create_instance" scope="cd">
-                                <parameter expr="'toolbars'"/>
+                                <parameter expr="'model_toolbars'"/>
                                 <parameter expr="'DSLToolbar'"/>
                                 <parameter expr="'DSLToolbar'"/>
                                 <parameter expr="self.toolbar_frame"/>
                                 <parameter expr="self.toolbar_frame"/>
                             </raise>
                             </raise>

+ 141 - 52
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:   Fri Sep 29 14:38:12 2017
+Date:   Fri Sep 29 15:54:59 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 
@@ -3965,130 +3965,144 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/running/idle"] = State(7, "/running/idle", self)
         self.states["/running/idle"] = State(7, "/running/idle", self)
         self.states["/running/idle"].setEnter(self._running_idle_enter)
         self.states["/running/idle"].setEnter(self._running_idle_enter)
         
         
+        # state /running/change_metamodel
+        self.states["/running/change_metamodel"] = State(8, "/running/change_metamodel", self)
+        self.states["/running/change_metamodel"].setEnter(self._running_change_metamodel_enter)
+        
         # state /running/verify_model
         # state /running/verify_model
-        self.states["/running/verify_model"] = State(8, "/running/verify_model", self)
+        self.states["/running/verify_model"] = State(9, "/running/verify_model", self)
         
         
         # state /running/verify_model/request
         # state /running/verify_model/request
-        self.states["/running/verify_model/request"] = State(9, "/running/verify_model/request", self)
+        self.states["/running/verify_model/request"] = State(10, "/running/verify_model/request", self)
         self.states["/running/verify_model/request"].setEnter(self._running_verify_model_request_enter)
         self.states["/running/verify_model/request"].setEnter(self._running_verify_model_request_enter)
         
         
         # state /running/verify_model/show_result
         # state /running/verify_model/show_result
-        self.states["/running/verify_model/show_result"] = State(10, "/running/verify_model/show_result", self)
+        self.states["/running/verify_model/show_result"] = State(11, "/running/verify_model/show_result", self)
         
         
         # state /running/verify_model/wait_for_close
         # state /running/verify_model/wait_for_close
-        self.states["/running/verify_model/wait_for_close"] = State(11, "/running/verify_model/wait_for_close", self)
+        self.states["/running/verify_model/wait_for_close"] = State(12, "/running/verify_model/wait_for_close", self)
         
         
         # state /running/open_model
         # state /running/open_model
-        self.states["/running/open_model"] = State(12, "/running/open_model", self)
+        self.states["/running/open_model"] = State(13, "/running/open_model", self)
         
         
         # state /running/open_model/query_model
         # state /running/open_model/query_model
-        self.states["/running/open_model/query_model"] = State(13, "/running/open_model/query_model", self)
+        self.states["/running/open_model/query_model"] = State(14, "/running/open_model/query_model", self)
         self.states["/running/open_model/query_model"].setEnter(self._running_open_model_query_model_enter)
         self.states["/running/open_model/query_model"].setEnter(self._running_open_model_query_model_enter)
         
         
         # state /running/open_model/wait_for_model
         # state /running/open_model/wait_for_model
-        self.states["/running/open_model/wait_for_model"] = State(14, "/running/open_model/wait_for_model", self)
+        self.states["/running/open_model/wait_for_model"] = State(15, "/running/open_model/wait_for_model", self)
         
         
         # state /running/open_model/got_model
         # state /running/open_model/got_model
-        self.states["/running/open_model/got_model"] = State(15, "/running/open_model/got_model", self)
+        self.states["/running/open_model/got_model"] = State(16, "/running/open_model/got_model", self)
         
         
         # state /running/open_model/search_metamodels
         # state /running/open_model/search_metamodels
-        self.states["/running/open_model/search_metamodels"] = State(16, "/running/open_model/search_metamodels", self)
+        self.states["/running/open_model/search_metamodels"] = State(17, "/running/open_model/search_metamodels", self)
         self.states["/running/open_model/search_metamodels"].setEnter(self._running_open_model_search_metamodels_enter)
         self.states["/running/open_model/search_metamodels"].setEnter(self._running_open_model_search_metamodels_enter)
         
         
         # state /running/open_model/prompt_metamodel
         # state /running/open_model/prompt_metamodel
-        self.states["/running/open_model/prompt_metamodel"] = State(17, "/running/open_model/prompt_metamodel", self)
+        self.states["/running/open_model/prompt_metamodel"] = State(18, "/running/open_model/prompt_metamodel", self)
         self.states["/running/open_model/prompt_metamodel"].setEnter(self._running_open_model_prompt_metamodel_enter)
         self.states["/running/open_model/prompt_metamodel"].setEnter(self._running_open_model_prompt_metamodel_enter)
         
         
         # state /running/open_model/waiting_for_metamodel_name
         # state /running/open_model/waiting_for_metamodel_name
-        self.states["/running/open_model/waiting_for_metamodel_name"] = State(18, "/running/open_model/waiting_for_metamodel_name", self)
+        self.states["/running/open_model/waiting_for_metamodel_name"] = State(19, "/running/open_model/waiting_for_metamodel_name", self)
         
         
         # state /running/open_model/store_metamodel
         # state /running/open_model/store_metamodel
-        self.states["/running/open_model/store_metamodel"] = State(19, "/running/open_model/store_metamodel", self)
+        self.states["/running/open_model/store_metamodel"] = State(20, "/running/open_model/store_metamodel", self)
         self.states["/running/open_model/store_metamodel"].setEnter(self._running_open_model_store_metamodel_enter)
         self.states["/running/open_model/store_metamodel"].setEnter(self._running_open_model_store_metamodel_enter)
         
         
         # state /running/create_new_model
         # state /running/create_new_model
-        self.states["/running/create_new_model"] = State(20, "/running/create_new_model", self)
+        self.states["/running/create_new_model"] = State(21, "/running/create_new_model", self)
         
         
         # state /running/create_new_model/query_metamodel
         # state /running/create_new_model/query_metamodel
-        self.states["/running/create_new_model/query_metamodel"] = State(21, "/running/create_new_model/query_metamodel", self)
+        self.states["/running/create_new_model/query_metamodel"] = State(22, "/running/create_new_model/query_metamodel", self)
         self.states["/running/create_new_model/query_metamodel"].setEnter(self._running_create_new_model_query_metamodel_enter)
         self.states["/running/create_new_model/query_metamodel"].setEnter(self._running_create_new_model_query_metamodel_enter)
         
         
         # state /running/create_new_model/wait_for_metamodel
         # state /running/create_new_model/wait_for_metamodel
-        self.states["/running/create_new_model/wait_for_metamodel"] = State(22, "/running/create_new_model/wait_for_metamodel", self)
+        self.states["/running/create_new_model/wait_for_metamodel"] = State(23, "/running/create_new_model/wait_for_metamodel", self)
         
         
         # state /running/create_new_model/got_mm
         # state /running/create_new_model/got_mm
-        self.states["/running/create_new_model/got_mm"] = State(23, "/running/create_new_model/got_mm", self)
+        self.states["/running/create_new_model/got_mm"] = State(24, "/running/create_new_model/got_mm", self)
         
         
         # state /running/create_new_model/prompt_model_name
         # state /running/create_new_model/prompt_model_name
-        self.states["/running/create_new_model/prompt_model_name"] = State(24, "/running/create_new_model/prompt_model_name", self)
+        self.states["/running/create_new_model/prompt_model_name"] = State(25, "/running/create_new_model/prompt_model_name", self)
         self.states["/running/create_new_model/prompt_model_name"].setEnter(self._running_create_new_model_prompt_model_name_enter)
         self.states["/running/create_new_model/prompt_model_name"].setEnter(self._running_create_new_model_prompt_model_name_enter)
         
         
         # state /running/create_new_model/waiting_for_model_name
         # state /running/create_new_model/waiting_for_model_name
-        self.states["/running/create_new_model/waiting_for_model_name"] = State(25, "/running/create_new_model/waiting_for_model_name", self)
+        self.states["/running/create_new_model/waiting_for_model_name"] = State(26, "/running/create_new_model/waiting_for_model_name", self)
         
         
         # state /running/create_new_model/creating_model
         # state /running/create_new_model/creating_model
-        self.states["/running/create_new_model/creating_model"] = State(26, "/running/create_new_model/creating_model", self)
+        self.states["/running/create_new_model/creating_model"] = State(27, "/running/create_new_model/creating_model", self)
         self.states["/running/create_new_model/creating_model"].setEnter(self._running_create_new_model_creating_model_enter)
         self.states["/running/create_new_model/creating_model"].setEnter(self._running_create_new_model_creating_model_enter)
         
         
         # state /running/rerender_model
         # state /running/rerender_model
-        self.states["/running/rerender_model"] = State(27, "/running/rerender_model", self)
+        self.states["/running/rerender_model"] = State(28, "/running/rerender_model", self)
         
         
         # state /running/rerender_model/initial_render
         # state /running/rerender_model/initial_render
-        self.states["/running/rerender_model/initial_render"] = State(28, "/running/rerender_model/initial_render", self)
+        self.states["/running/rerender_model/initial_render"] = State(29, "/running/rerender_model/initial_render", self)
+        
+        # state /running/rerender_model/recreate_toolbars
+        self.states["/running/rerender_model/recreate_toolbars"] = State(30, "/running/rerender_model/recreate_toolbars", self)
+        self.states["/running/rerender_model/recreate_toolbars"].setEnter(self._running_rerender_model_recreate_toolbars_enter)
+        
+        # state /running/rerender_model/recreate_toolbars/waiting
+        self.states["/running/rerender_model/recreate_toolbars/waiting"] = State(31, "/running/rerender_model/recreate_toolbars/waiting", self)
+        
+        # state /running/rerender_model/recreate_toolbars/close_all
+        self.states["/running/rerender_model/recreate_toolbars/close_all"] = State(32, "/running/rerender_model/recreate_toolbars/close_all", self)
         
         
         # state /running/rerender_model/canvas
         # state /running/rerender_model/canvas
-        self.states["/running/rerender_model/canvas"] = State(29, "/running/rerender_model/canvas", self)
+        self.states["/running/rerender_model/canvas"] = State(33, "/running/rerender_model/canvas", self)
         self.states["/running/rerender_model/canvas"].setEnter(self._running_rerender_model_canvas_enter)
         self.states["/running/rerender_model/canvas"].setEnter(self._running_rerender_model_canvas_enter)
         
         
         # state /running/rerender_model/pack_canvas
         # state /running/rerender_model/pack_canvas
-        self.states["/running/rerender_model/pack_canvas"] = State(30, "/running/rerender_model/pack_canvas", self)
+        self.states["/running/rerender_model/pack_canvas"] = State(34, "/running/rerender_model/pack_canvas", self)
         
         
         # state /running/rerender_model/model_toolbars
         # state /running/rerender_model/model_toolbars
-        self.states["/running/rerender_model/model_toolbars"] = State(31, "/running/rerender_model/model_toolbars", self)
+        self.states["/running/rerender_model/model_toolbars"] = State(35, "/running/rerender_model/model_toolbars", self)
         
         
         # state /running/rerender_model/model_toolbars/mm_toolbar
         # state /running/rerender_model/model_toolbars/mm_toolbar
-        self.states["/running/rerender_model/model_toolbars/mm_toolbar"] = State(32, "/running/rerender_model/model_toolbars/mm_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/mm_toolbar"] = State(36, "/running/rerender_model/model_toolbars/mm_toolbar", self)
         self.states["/running/rerender_model/model_toolbars/mm_toolbar"].setEnter(self._running_rerender_model_model_toolbars_mm_toolbar_enter)
         self.states["/running/rerender_model/model_toolbars/mm_toolbar"].setEnter(self._running_rerender_model_model_toolbars_mm_toolbar_enter)
         
         
         # state /running/rerender_model/model_toolbars/pack_mm_toolbar
         # state /running/rerender_model/model_toolbars/pack_mm_toolbar
-        self.states["/running/rerender_model/model_toolbars/pack_mm_toolbar"] = State(33, "/running/rerender_model/model_toolbars/pack_mm_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/pack_mm_toolbar"] = State(37, "/running/rerender_model/model_toolbars/pack_mm_toolbar", self)
         
         
         # state /running/rerender_model/model_toolbars/cs_toolbar
         # state /running/rerender_model/model_toolbars/cs_toolbar
-        self.states["/running/rerender_model/model_toolbars/cs_toolbar"] = State(34, "/running/rerender_model/model_toolbars/cs_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/cs_toolbar"] = State(38, "/running/rerender_model/model_toolbars/cs_toolbar", self)
         self.states["/running/rerender_model/model_toolbars/cs_toolbar"].setEnter(self._running_rerender_model_model_toolbars_cs_toolbar_enter)
         self.states["/running/rerender_model/model_toolbars/cs_toolbar"].setEnter(self._running_rerender_model_model_toolbars_cs_toolbar_enter)
         
         
         # state /running/rerender_model/model_toolbars/pack_cs_toolbar
         # state /running/rerender_model/model_toolbars/pack_cs_toolbar
-        self.states["/running/rerender_model/model_toolbars/pack_cs_toolbar"] = State(35, "/running/rerender_model/model_toolbars/pack_cs_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/pack_cs_toolbar"] = State(39, "/running/rerender_model/model_toolbars/pack_cs_toolbar", self)
         
         
         # state /running/rerender_model/model_toolbars/dsl_toolbar
         # state /running/rerender_model/model_toolbars/dsl_toolbar
-        self.states["/running/rerender_model/model_toolbars/dsl_toolbar"] = State(36, "/running/rerender_model/model_toolbars/dsl_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/dsl_toolbar"] = State(40, "/running/rerender_model/model_toolbars/dsl_toolbar", self)
         self.states["/running/rerender_model/model_toolbars/dsl_toolbar"].setEnter(self._running_rerender_model_model_toolbars_dsl_toolbar_enter)
         self.states["/running/rerender_model/model_toolbars/dsl_toolbar"].setEnter(self._running_rerender_model_model_toolbars_dsl_toolbar_enter)
         
         
         # state /running/rerender_model/model_toolbars/pack_dsl_toolbar
         # state /running/rerender_model/model_toolbars/pack_dsl_toolbar
-        self.states["/running/rerender_model/model_toolbars/pack_dsl_toolbar"] = State(37, "/running/rerender_model/model_toolbars/pack_dsl_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/pack_dsl_toolbar"] = State(41, "/running/rerender_model/model_toolbars/pack_dsl_toolbar", self)
         
         
         # state /running/rerender_model/request_render
         # state /running/rerender_model/request_render
-        self.states["/running/rerender_model/request_render"] = State(38, "/running/rerender_model/request_render", self)
+        self.states["/running/rerender_model/request_render"] = State(42, "/running/rerender_model/request_render", self)
         self.states["/running/rerender_model/request_render"].setEnter(self._running_rerender_model_request_render_enter)
         self.states["/running/rerender_model/request_render"].setEnter(self._running_rerender_model_request_render_enter)
         
         
         # state /running/rerender_model/render_model
         # state /running/rerender_model/render_model
-        self.states["/running/rerender_model/render_model"] = State(39, "/running/rerender_model/render_model", self)
+        self.states["/running/rerender_model/render_model"] = State(43, "/running/rerender_model/render_model", self)
         self.states["/running/rerender_model/render_model"].setEnter(self._running_rerender_model_render_model_enter)
         self.states["/running/rerender_model/render_model"].setEnter(self._running_rerender_model_render_model_enter)
         
         
         # state /running/rerender_model/render_model/allocate_groups
         # state /running/rerender_model/render_model/allocate_groups
-        self.states["/running/rerender_model/render_model/allocate_groups"] = State(40, "/running/rerender_model/render_model/allocate_groups", self)
+        self.states["/running/rerender_model/render_model/allocate_groups"] = State(44, "/running/rerender_model/render_model/allocate_groups", self)
         
         
         # state /running/rerender_model/render_model/allocating_group
         # state /running/rerender_model/render_model/allocating_group
-        self.states["/running/rerender_model/render_model/allocating_group"] = State(41, "/running/rerender_model/render_model/allocating_group", self)
+        self.states["/running/rerender_model/render_model/allocating_group"] = State(45, "/running/rerender_model/render_model/allocating_group", self)
         
         
         # state /running/rerender_model/render_model/allocate_contains
         # state /running/rerender_model/render_model/allocate_contains
-        self.states["/running/rerender_model/render_model/allocate_contains"] = State(42, "/running/rerender_model/render_model/allocate_contains", self)
+        self.states["/running/rerender_model/render_model/allocate_contains"] = State(46, "/running/rerender_model/render_model/allocate_contains", self)
         
         
         # state /running/rerender_model/render_model/render_elements
         # state /running/rerender_model/render_model/render_elements
-        self.states["/running/rerender_model/render_model/render_elements"] = State(43, "/running/rerender_model/render_model/render_elements", self)
+        self.states["/running/rerender_model/render_model/render_elements"] = State(47, "/running/rerender_model/render_model/render_elements", self)
         
         
         # state /close
         # state /close
-        self.states["/close"] = State(44, "/close", self)
+        self.states["/close"] = State(48, "/close", self)
         self.states["/close"].setEnter(self._close_enter)
         self.states["/close"].setEnter(self._close_enter)
         
         
         # add children
         # add children
@@ -4100,6 +4114,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/init"].addChild(self.states["/init/progressbar"])
         self.states["/init"].addChild(self.states["/init/progressbar"])
         self.states["/init"].addChild(self.states["/init/pack_progressbar"])
         self.states["/init"].addChild(self.states["/init/pack_progressbar"])
         self.states["/running"].addChild(self.states["/running/idle"])
         self.states["/running"].addChild(self.states["/running/idle"])
+        self.states["/running"].addChild(self.states["/running/change_metamodel"])
         self.states["/running"].addChild(self.states["/running/verify_model"])
         self.states["/running"].addChild(self.states["/running/verify_model"])
         self.states["/running"].addChild(self.states["/running/open_model"])
         self.states["/running"].addChild(self.states["/running/open_model"])
         self.states["/running"].addChild(self.states["/running/create_new_model"])
         self.states["/running"].addChild(self.states["/running/create_new_model"])
@@ -4121,11 +4136,14 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/running/create_new_model"].addChild(self.states["/running/create_new_model/waiting_for_model_name"])
         self.states["/running/create_new_model"].addChild(self.states["/running/create_new_model/waiting_for_model_name"])
         self.states["/running/create_new_model"].addChild(self.states["/running/create_new_model/creating_model"])
         self.states["/running/create_new_model"].addChild(self.states["/running/create_new_model/creating_model"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/initial_render"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/initial_render"])
+        self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/recreate_toolbars"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/canvas"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/canvas"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/pack_canvas"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/pack_canvas"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/model_toolbars"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/model_toolbars"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/request_render"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/request_render"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/render_model"])
         self.states["/running/rerender_model"].addChild(self.states["/running/rerender_model/render_model"])
+        self.states["/running/rerender_model/recreate_toolbars"].addChild(self.states["/running/rerender_model/recreate_toolbars/waiting"])
+        self.states["/running/rerender_model/recreate_toolbars"].addChild(self.states["/running/rerender_model/recreate_toolbars/close_all"])
         self.states["/running/rerender_model/model_toolbars"].addChild(self.states["/running/rerender_model/model_toolbars/mm_toolbar"])
         self.states["/running/rerender_model/model_toolbars"].addChild(self.states["/running/rerender_model/model_toolbars/mm_toolbar"])
         self.states["/running/rerender_model/model_toolbars"].addChild(self.states["/running/rerender_model/model_toolbars/pack_mm_toolbar"])
         self.states["/running/rerender_model/model_toolbars"].addChild(self.states["/running/rerender_model/model_toolbars/pack_mm_toolbar"])
         self.states["/running/rerender_model/model_toolbars"].addChild(self.states["/running/rerender_model/model_toolbars/cs_toolbar"])
         self.states["/running/rerender_model/model_toolbars"].addChild(self.states["/running/rerender_model/model_toolbars/cs_toolbar"])
@@ -4144,6 +4162,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/running/open_model"].default_state = self.states["/running/open_model/query_model"]
         self.states["/running/open_model"].default_state = self.states["/running/open_model/query_model"]
         self.states["/running/create_new_model"].default_state = self.states["/running/create_new_model/query_metamodel"]
         self.states["/running/create_new_model"].default_state = self.states["/running/create_new_model/query_metamodel"]
         self.states["/running/rerender_model"].default_state = self.states["/running/rerender_model/initial_render"]
         self.states["/running/rerender_model"].default_state = self.states["/running/rerender_model/initial_render"]
+        self.states["/running/rerender_model/recreate_toolbars"].default_state = self.states["/running/rerender_model/recreate_toolbars/waiting"]
         self.states["/running/rerender_model/model_toolbars"].default_state = self.states["/running/rerender_model/model_toolbars/mm_toolbar"]
         self.states["/running/rerender_model/model_toolbars"].default_state = self.states["/running/rerender_model/model_toolbars/mm_toolbar"]
         self.states["/running/rerender_model/render_model"].default_state = self.states["/running/rerender_model/render_model/allocate_groups"]
         self.states["/running/rerender_model/render_model"].default_state = self.states["/running/rerender_model/render_model/allocate_groups"]
         
         
@@ -4184,6 +4203,15 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _running_idle_3 = Transition(self, self.states["/running/idle"], [self.states["/running/verify_model"]])
         _running_idle_3 = Transition(self, self.states["/running/idle"], [self.states["/running/verify_model"]])
         _running_idle_3.setTrigger(Event("verify", None))
         _running_idle_3.setTrigger(Event("verify", None))
         self.states["/running/idle"].addTransition(_running_idle_3)
         self.states["/running/idle"].addTransition(_running_idle_3)
+        _running_idle_4 = Transition(self, self.states["/running/idle"], [self.states["/running/change_metamodel"]])
+        _running_idle_4.setAction(self._running_idle_4_exec)
+        _running_idle_4.setTrigger(Event("change_metamodel", None))
+        self.states["/running/idle"].addTransition(_running_idle_4)
+        
+        # transition /running/change_metamodel
+        _running_change_metamodel_0 = Transition(self, self.states["/running/change_metamodel"], [self.states["/running/rerender_model"]])
+        _running_change_metamodel_0.setTrigger(Event("mv_response", None))
+        self.states["/running/change_metamodel"].addTransition(_running_change_metamodel_0)
         
         
         # transition /running/verify_model/request
         # transition /running/verify_model/request
         _running_verify_model_request_0 = Transition(self, self.states["/running/verify_model/request"], [self.states["/running/verify_model/request"]])
         _running_verify_model_request_0 = Transition(self, self.states["/running/verify_model/request"], [self.states["/running/verify_model/request"]])
@@ -4313,7 +4341,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/running/create_new_model/creating_model"].addTransition(_running_create_new_model_creating_model_0)
         self.states["/running/create_new_model/creating_model"].addTransition(_running_create_new_model_creating_model_0)
         
         
         # transition /running/rerender_model/initial_render
         # transition /running/rerender_model/initial_render
-        _running_rerender_model_initial_render_0 = Transition(self, self.states["/running/rerender_model/initial_render"], [self.states["/running/rerender_model/request_render"]])
+        _running_rerender_model_initial_render_0 = Transition(self, self.states["/running/rerender_model/initial_render"], [self.states["/running/rerender_model/recreate_toolbars"]])
         _running_rerender_model_initial_render_0.setTrigger(None)
         _running_rerender_model_initial_render_0.setTrigger(None)
         _running_rerender_model_initial_render_0.setGuard(self._running_rerender_model_initial_render_0_guard)
         _running_rerender_model_initial_render_0.setGuard(self._running_rerender_model_initial_render_0_guard)
         self.states["/running/rerender_model/initial_render"].addTransition(_running_rerender_model_initial_render_0)
         self.states["/running/rerender_model/initial_render"].addTransition(_running_rerender_model_initial_render_0)
@@ -4323,6 +4351,22 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _running_rerender_model_initial_render_1.setGuard(self._running_rerender_model_initial_render_1_guard)
         _running_rerender_model_initial_render_1.setGuard(self._running_rerender_model_initial_render_1_guard)
         self.states["/running/rerender_model/initial_render"].addTransition(_running_rerender_model_initial_render_1)
         self.states["/running/rerender_model/initial_render"].addTransition(_running_rerender_model_initial_render_1)
         
         
+        # transition /running/rerender_model/recreate_toolbars/waiting
+        _running_rerender_model_recreate_toolbars_waiting_0 = Transition(self, self.states["/running/rerender_model/recreate_toolbars/waiting"], [self.states["/running/rerender_model/recreate_toolbars/waiting"]])
+        _running_rerender_model_recreate_toolbars_waiting_0.setAction(self._running_rerender_model_recreate_toolbars_waiting_0_exec)
+        _running_rerender_model_recreate_toolbars_waiting_0.setTrigger(Event("close_window", None))
+        self.states["/running/rerender_model/recreate_toolbars/waiting"].addTransition(_running_rerender_model_recreate_toolbars_waiting_0)
+        _running_rerender_model_recreate_toolbars_waiting_1 = Transition(self, self.states["/running/rerender_model/recreate_toolbars/waiting"], [self.states["/running/rerender_model/recreate_toolbars/close_all"]])
+        _running_rerender_model_recreate_toolbars_waiting_1.setTrigger(None)
+        _running_rerender_model_recreate_toolbars_waiting_1.setGuard(self._running_rerender_model_recreate_toolbars_waiting_1_guard)
+        self.states["/running/rerender_model/recreate_toolbars/waiting"].addTransition(_running_rerender_model_recreate_toolbars_waiting_1)
+        
+        # transition /running/rerender_model/recreate_toolbars/close_all
+        _running_rerender_model_recreate_toolbars_close_all_0 = Transition(self, self.states["/running/rerender_model/recreate_toolbars/close_all"], [self.states["/running/rerender_model/model_toolbars"]])
+        _running_rerender_model_recreate_toolbars_close_all_0.setAction(self._running_rerender_model_recreate_toolbars_close_all_0_exec)
+        _running_rerender_model_recreate_toolbars_close_all_0.setTrigger(None)
+        self.states["/running/rerender_model/recreate_toolbars/close_all"].addTransition(_running_rerender_model_recreate_toolbars_close_all_0)
+        
         # transition /running/rerender_model/canvas
         # transition /running/rerender_model/canvas
         _running_rerender_model_canvas_0 = Transition(self, self.states["/running/rerender_model/canvas"], [self.states["/running/rerender_model/pack_canvas"]])
         _running_rerender_model_canvas_0 = Transition(self, self.states["/running/rerender_model/canvas"], [self.states["/running/rerender_model/pack_canvas"]])
         _running_rerender_model_canvas_0.setAction(self._running_rerender_model_canvas_0_exec)
         _running_rerender_model_canvas_0.setAction(self._running_rerender_model_canvas_0_exec)
@@ -4424,6 +4468,10 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _running_0.setGuard(self._running_0_guard)
         _running_0.setGuard(self._running_0_guard)
         self.states["/running"].addTransition(_running_0)
         self.states["/running"].addTransition(_running_0)
     
     
+    def _running_rerender_model_recreate_toolbars_enter(self):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'model_toolbars', Event("close", None, [])]))
+        self.nr_toolbars = 3
+    
     def _running_rerender_model_render_model_enter(self):
     def _running_rerender_model_render_model_enter(self):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [80, 'Perceptualizing model... OK'])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [80, 'Perceptualizing model... OK'])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'canvas', Event("clear_canvas", None, [])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'canvas', Event("clear_canvas", None, [])]))
@@ -4434,7 +4482,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', ['rendered/%s' % (current_model), 'formalisms/MM_render']])]))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', ['rendered/%s' % (current_model), 'formalisms/MM_render']])]))
     
     
     def _init_generic_toolbar_enter(self):
     def _init_generic_toolbar_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'toolbars', 'GenericToolbar', self.toolbar_frame]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'generic_toolbars', 'GenericToolbar', self.toolbar_frame]))
     
     
     def _init_progressbar_enter(self):
     def _init_progressbar_enter(self):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'progress_bar', 'ProgressBar', {'parent': self.progressbar_frame}]))
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'progress_bar', 'ProgressBar', {'parent': self.progressbar_frame}]))
@@ -4442,6 +4490,10 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _running_idle_enter(self):
     def _running_idle_enter(self):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [0, 'Ready for action!'])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [0, 'Ready for action!'])]))
     
     
+    def _running_change_metamodel_enter(self):
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [current_model, current_metamodel]])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [20, 'Storing model context...'])]))
+    
     def _running_verify_model_request_enter(self):
     def _running_verify_model_request_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['verify', [current_model, current_metamodel]])]))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['verify', [current_model, current_metamodel]])]))
     
     
@@ -4477,13 +4529,13 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'canvas', 'Canvas', self.canvas_frame]))
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'canvas', 'Canvas', self.canvas_frame]))
     
     
     def _running_rerender_model_model_toolbars_mm_toolbar_enter(self):
     def _running_rerender_model_model_toolbars_mm_toolbar_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'toolbars', 'MetamodellingToolbar', self.toolbar_frame]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_toolbars', 'MetamodellingToolbar', self.toolbar_frame, current_metamodel, self.allowed_metamodels]))
     
     
     def _running_rerender_model_model_toolbars_cs_toolbar_enter(self):
     def _running_rerender_model_model_toolbars_cs_toolbar_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'toolbars', 'ConcreteSyntaxToolbar', self.toolbar_frame]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_toolbars', 'ConcreteSyntaxToolbar', self.toolbar_frame]))
     
     
     def _running_rerender_model_model_toolbars_dsl_toolbar_enter(self):
     def _running_rerender_model_model_toolbars_dsl_toolbar_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'toolbars', 'DSLToolbar', self.toolbar_frame]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'model_toolbars', 'DSLToolbar', self.toolbar_frame]))
     
     
     def _running_rerender_model_request_render_enter(self):
     def _running_rerender_model_request_render_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['model_render', [current_model, 'models/render_SCD']])]))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['model_render', [current_model, 'models/render_SCD']])]))
@@ -4514,6 +4566,11 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         tk_elem = parameters[0]
         tk_elem = parameters[0]
         tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
         tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
     
     
+    def _running_idle_4_exec(self, parameters):
+        new_metamodel = parameters[0]
+        global current_metamodel
+        current_metamodel = new_metamodel
+    
     def _running_verify_model_request_0_exec(self, parameters):
     def _running_verify_model_request_0_exec(self, parameters):
         result = parameters[0]
         result = parameters[0]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [result * 100, 'Verifying...'])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [result * 100, 'Verifying...'])]))
@@ -4554,6 +4611,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
             current_metamodel = next(iter(result))
             current_metamodel = next(iter(result))
         else:
         else:
             current_metamodel = ''
             current_metamodel = ''
+        self.allowed_metamodels = result
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [20, 'Querying existing metamodels... OK'])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [20, 'Querying existing metamodels... OK'])]))
     
     
     def _running_open_model_prompt_metamodel_0_exec(self, parameters):
     def _running_open_model_prompt_metamodel_0_exec(self, parameters):
@@ -4635,6 +4693,16 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _running_rerender_model_initial_render_1_guard(self, parameters):
     def _running_rerender_model_initial_render_1_guard(self, parameters):
         return not self.model_loaded
         return not self.model_loaded
     
     
+    def _running_rerender_model_recreate_toolbars_waiting_0_exec(self, parameters):
+        self.nr_toolbars -= 1
+        print("CLOSE WINDOW -- " + str(self.nr_toolbars))
+    
+    def _running_rerender_model_recreate_toolbars_waiting_1_guard(self, parameters):
+        return self.nr_toolbars == 0
+    
+    def _running_rerender_model_recreate_toolbars_close_all_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'model_toolbars']))
+    
     def _running_rerender_model_canvas_0_exec(self, parameters):
     def _running_rerender_model_canvas_0_exec(self, parameters):
         association_name = parameters[0]
         association_name = parameters[0]
         self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))
         self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))
@@ -5704,8 +5772,8 @@ class DSLToolbar(Toolbar):
     
     
     def user_defined_constructor(self, parent):
     def user_defined_constructor(self, parent):
         Toolbar.user_defined_constructor(self, parent)
         Toolbar.user_defined_constructor(self, parent)
-        self.to_create = ["new"]
-        self.button_info = {"new": "REMOVE"}
+        self.to_create = ["todo"]
+        self.button_info = {"todo": "REMOVE"}
         self.buttons = {}
         self.buttons = {}
         tk.Label(self, text="Domain-Specific").pack(side=tk.LEFT)
         tk.Label(self, text="Domain-Specific").pack(side=tk.LEFT)
     
     
@@ -5860,7 +5928,7 @@ class DSLToolbar(Toolbar):
         RuntimeClassBase.initializeStatechart(self)
         RuntimeClassBase.initializeStatechart(self)
 
 
 class MetamodellingToolbar(Toolbar):
 class MetamodellingToolbar(Toolbar):
-    def __init__(self, controller, parent):
+    def __init__(self, controller, parent, selected_metamodel, metamodels):
         RuntimeClassBase.__init__(self, controller)
         RuntimeClassBase.__init__(self, controller)
         
         
         self.semantics.big_step_maximality = StatechartSemantics.TakeMany
         self.semantics.big_step_maximality = StatechartSemantics.TakeMany
@@ -5873,9 +5941,9 @@ class MetamodellingToolbar(Toolbar):
         self.build_statechart_structure()
         self.build_statechart_structure()
         
         
         # call user defined constructor
         # call user defined constructor
-        MetamodellingToolbar.user_defined_constructor(self, parent)
+        MetamodellingToolbar.user_defined_constructor(self, parent, selected_metamodel, metamodels)
     
     
-    def user_defined_constructor(self, parent):
+    def user_defined_constructor(self, parent, selected_metamodel, metamodels):
         Toolbar.user_defined_constructor(self, parent)
         Toolbar.user_defined_constructor(self, parent)
         self.to_create = ["verify", "custom_MM", "conf_bottom", "upload_ALC", "upload_MVC"]
         self.to_create = ["verify", "custom_MM", "conf_bottom", "upload_ALC", "upload_MVC"]
         self.button_info = {"verify": "Verify if the current model conforms to the current metamodel.",
         self.button_info = {"verify": "Verify if the current model conforms to the current metamodel.",
@@ -5886,6 +5954,11 @@ class MetamodellingToolbar(Toolbar):
                             }
                             }
         self.buttons = {}
         self.buttons = {}
         tk.Label(self, text="Management").pack(side=tk.LEFT)
         tk.Label(self, text="Management").pack(side=tk.LEFT)
+        strvar = tk.StringVar(self)
+        strvar.set(selected_metamodel)
+        selected_metamodel = strvar
+        tk.OptionMenu(self, selected_metamodel, *list(metamodels)).pack(side=tk.LEFT)
+        selected_metamodel.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_metamodel", "input", [id(self), selected_metamodel.get()])))
     
     
     def user_defined_destructor(self):
     def user_defined_destructor(self):
         # call super class destructors
         # call super class destructors
@@ -5963,9 +6036,14 @@ class MetamodellingToolbar(Toolbar):
         _root_0.setTrigger(Event("button_pressed", None))
         _root_0.setTrigger(Event("button_pressed", None))
         _root_0.setGuard(self._root_0_guard)
         _root_0.setGuard(self._root_0_guard)
         self.states["/root"].addTransition(_root_0)
         self.states["/root"].addTransition(_root_0)
-        _root_1 = Transition(self, self.states["/root"], [self.states["/closing"]])
-        _root_1.setTrigger(Event("close", None))
+        _root_1 = Transition(self, self.states["/root"], [self.states["/root"]])
+        _root_1.setAction(self._root_1_exec)
+        _root_1.setTrigger(Event("changed_metamodel", 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["/closing"]])
+        _root_2.setTrigger(Event("close", None))
+        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"]])
@@ -6013,6 +6091,16 @@ class MetamodellingToolbar(Toolbar):
         event_name = parameters[0]
         event_name = parameters[0]
         return event_name == 'verify'
         return event_name == 'verify'
     
     
+    def _root_1_exec(self, parameters):
+        ID = parameters[0]
+        new_metamodel = parameters[1]
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("change_metamodel", None, [new_metamodel])]))
+    
+    def _root_1_guard(self, parameters):
+        ID = parameters[0]
+        new_metamodel = parameters[1]
+        return ID == id(self) and new_metamodel != current_metamodel
+    
     def _closing_0_guard(self, parameters):
     def _closing_0_guard(self, parameters):
         return len(self.buttons) > 0
         return len(self.buttons) > 0
     
     
@@ -6997,7 +7085,8 @@ class ObjectManager(ObjectManagerBase):
             instance = MainWindow(self.controller)
             instance = MainWindow(self.controller)
             instance.associations = {}
             instance.associations = {}
             instance.associations["parent"] = Association("A", 0, -1)
             instance.associations["parent"] = Association("A", 0, -1)
-            instance.associations["toolbars"] = Association("Toolbar", 0, -1)
+            instance.associations["generic_toolbars"] = Association("Toolbar", 0, -1)
+            instance.associations["model_toolbars"] = Association("Toolbar", 0, -1)
             instance.associations["subwindow"] = Association("Window", 0, -1)
             instance.associations["subwindow"] = Association("Window", 0, -1)
             instance.associations["canvas"] = Association("Canvas", 0, -1)
             instance.associations["canvas"] = Association("Canvas", 0, -1)
             instance.associations["progress_bar"] = Association("ProgressBar", 0, -1)
             instance.associations["progress_bar"] = Association("ProgressBar", 0, -1)
@@ -7032,7 +7121,7 @@ class ObjectManager(ObjectManagerBase):
             instance.associations["buttons"] = Association("Button", 0, -1)
             instance.associations["buttons"] = Association("Button", 0, -1)
             instance.associations["parent"] = Association("A", 0, -1)
             instance.associations["parent"] = Association("A", 0, -1)
         elif class_name == "MetamodellingToolbar":
         elif class_name == "MetamodellingToolbar":
-            instance = MetamodellingToolbar(self.controller, construct_params[0])
+            instance = MetamodellingToolbar(self.controller, construct_params[0], construct_params[1], construct_params[2])
             instance.associations = {}
             instance.associations = {}
             instance.associations["buttons"] = Association("Button", 0, -1)
             instance.associations["buttons"] = Association("Button", 0, -1)
             instance.associations["parent"] = Association("A", 0, -1)
             instance.associations["parent"] = Association("A", 0, -1)