Explorar o código

Working conf_bottom and custom_MM button

Yentl Van Tendeloo %!s(int64=8) %!d(string=hai) anos
pai
achega
6b4d074572
Modificáronse 6 ficheiros con 202 adicións e 110 borrados
  1. 60 30
      classes/window/main_window.xml
  2. 142 78
      frontend.py
  3. 0 1
      icons/conf_bottom.png
  4. BIN=BIN
      icons/conf_bottom.png
  5. 0 1
      icons/custom_MM.png
  6. BIN=BIN
      icons/custom_MM.png

+ 60 - 30
classes/window/main_window.xml

@@ -108,6 +108,7 @@
                 <transition event="new_rendered" cond="current_mapper is not None" target="../new_rendered"/>
                 <transition event="verify" target="../verify_model"/>
                 <transition event="conf_bottom" target="../conf_bottom"/>
+                <transition event="custom_MM" target="../custom_MM"/>
 
                 <transition event="change_metamodel" target="../change_metamodel">
                     <parameter name="new_metamodel"/>
@@ -151,25 +152,32 @@
                 <transition event="mv_response" target="../open_model/search_CS_mappers"/>
             </state>
 
-            <state id="conf_bottom">
-                <onentry>
-                    <raise event="mv_request" scope="broad">
-                        <parameter expr="'conformance_add'"/>
-                        <parameter expr="[current_model, 'formalisms/Bottom']"/>
-                    </raise>
+            <state id="conf_bottom" initial="check_if_exists">
+                <state id="check_if_exists">
+                    <transition cond="'formalisms/Bottom' in self.allowed_metamodels" target="../../idle"/>
+                    <transition cond="'formalisms/Bottom' not in self.allowed_metamodels" target="../add_bottom"/>
+                </state>
 
-                    <raise event="update_status" scope="narrow" target="'progress_bar'">
-                        <parameter expr="10"/>
-                        <parameter expr="'Storing model context...'"/>
-                    </raise>
+                <state id="add_bottom">
+                    <onentry>
+                        <raise event="mv_request" scope="broad">
+                            <parameter expr="'conformance_add'"/>
+                            <parameter expr="[current_model, 'formalisms/Bottom']"/>
+                        </raise>
 
-                    <script>
-                        global current_metamodel
-                        current_metamodel = 'formalisms/Bottom'
-                    </script>
-                </onentry>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="10"/>
+                            <parameter expr="'Storing model context...'"/>
+                        </raise>
+
+                        <script>
+                            global current_metamodel
+                            current_metamodel = 'formalisms/Bottom'
+                        </script>
+                    </onentry>
 
-                <transition event="mv_response" target="../open_model/search_metamodels"/>
+                    <transition event="mv_response" target="../../open_model/search_metamodels"/>
+                </state>
             </state>
 
             <state id="custom_MM" initial="query">
@@ -198,25 +206,47 @@
                     </transition>
                 </state>
 
-                <state id="wait_for_metamodel">
-                    <transition event="close_window" target="../../idle">
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr="self.subwindow"/>
-                        </raise>
-
+                <state id="wait_for_metamodel" initial="wait_for_result">
+                    <onentry>
                         <raise event="update_status" scope="narrow" target="'progress_bar'">
                             <parameter expr="10"/>
                             <parameter expr="'Browsing for model... OK'"/>
                         </raise>
-                    </transition>
+                    </onentry>
 
-                    <transition event="browse_result" target="../../change_metamodel">
-                        <parameter name="result"/>
-                        <script>
-                            global current_metamodel
-                            current_metamodel = result
-                        </script>
-                    </transition>
+                    <state id="wait_for_result">
+                        <transition event="browse_result" cond="result not in self.allowed_metamodels" target="../got_result">
+                            <parameter name="result"/>
+                            <script>
+                                global current_metamodel
+                                current_metamodel = result
+                            </script>
+                        </transition>
+
+                        <transition event="close_window" target="../../../idle">
+                            <raise event="delete_instance" scope="cd">
+                                <parameter expr="self.subwindow"/>
+                            </raise>
+                        </transition>
+
+                    </state>
+
+                    <state id="got_result">
+                        <transition event="close_window" target="../mv_processing">
+                            <raise event="delete_instance" scope="cd">
+                                <parameter expr="self.subwindow"/>
+                            </raise>
+
+                            <raise event="mv_request" scope="broad">
+                                <parameter expr="'conformance_add'"/>
+                                <parameter expr="[current_model, current_metamodel]"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="mv_processing">
+                        <transition event="mv_response" target="../../../open_model/search_metamodels"/>
+                    </state>
                 </state>
             </state>
 

+ 142 - 78
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:   Wed Oct  4 08:51:58 2017
+Date:   Wed Oct  4 09:14:41 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -4021,166 +4021,182 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         
         # state /running/conf_bottom
         self.states["/running/conf_bottom"] = State(9, "/running/conf_bottom", self)
-        self.states["/running/conf_bottom"].setEnter(self._running_conf_bottom_enter)
+        
+        # state /running/conf_bottom/check_if_exists
+        self.states["/running/conf_bottom/check_if_exists"] = State(10, "/running/conf_bottom/check_if_exists", self)
+        
+        # state /running/conf_bottom/add_bottom
+        self.states["/running/conf_bottom/add_bottom"] = State(11, "/running/conf_bottom/add_bottom", self)
+        self.states["/running/conf_bottom/add_bottom"].setEnter(self._running_conf_bottom_add_bottom_enter)
         
         # state /running/custom_MM
-        self.states["/running/custom_MM"] = State(10, "/running/custom_MM", self)
+        self.states["/running/custom_MM"] = State(12, "/running/custom_MM", self)
         
         # state /running/custom_MM/query
-        self.states["/running/custom_MM/query"] = State(11, "/running/custom_MM/query", self)
+        self.states["/running/custom_MM/query"] = State(13, "/running/custom_MM/query", self)
         self.states["/running/custom_MM/query"].setEnter(self._running_custom_MM_query_enter)
         
         # state /running/custom_MM/wait_for_metamodel
-        self.states["/running/custom_MM/wait_for_metamodel"] = State(12, "/running/custom_MM/wait_for_metamodel", self)
+        self.states["/running/custom_MM/wait_for_metamodel"] = State(14, "/running/custom_MM/wait_for_metamodel", self)
+        self.states["/running/custom_MM/wait_for_metamodel"].setEnter(self._running_custom_MM_wait_for_metamodel_enter)
+        
+        # state /running/custom_MM/wait_for_metamodel/wait_for_result
+        self.states["/running/custom_MM/wait_for_metamodel/wait_for_result"] = State(15, "/running/custom_MM/wait_for_metamodel/wait_for_result", self)
+        
+        # state /running/custom_MM/wait_for_metamodel/got_result
+        self.states["/running/custom_MM/wait_for_metamodel/got_result"] = State(16, "/running/custom_MM/wait_for_metamodel/got_result", self)
+        
+        # state /running/custom_MM/wait_for_metamodel/mv_processing
+        self.states["/running/custom_MM/wait_for_metamodel/mv_processing"] = State(17, "/running/custom_MM/wait_for_metamodel/mv_processing", self)
         
         # state /running/change_mapper
-        self.states["/running/change_mapper"] = State(13, "/running/change_mapper", self)
+        self.states["/running/change_mapper"] = State(18, "/running/change_mapper", self)
         
         # state /running/change_rendered
-        self.states["/running/change_rendered"] = State(14, "/running/change_rendered", self)
+        self.states["/running/change_rendered"] = State(19, "/running/change_rendered", self)
         
         # state /running/verify_model
-        self.states["/running/verify_model"] = State(15, "/running/verify_model", self)
+        self.states["/running/verify_model"] = State(20, "/running/verify_model", self)
         
         # state /running/verify_model/request
-        self.states["/running/verify_model/request"] = State(16, "/running/verify_model/request", self)
+        self.states["/running/verify_model/request"] = State(21, "/running/verify_model/request", self)
         self.states["/running/verify_model/request"].setEnter(self._running_verify_model_request_enter)
         
         # state /running/verify_model/show_result
-        self.states["/running/verify_model/show_result"] = State(17, "/running/verify_model/show_result", self)
+        self.states["/running/verify_model/show_result"] = State(22, "/running/verify_model/show_result", self)
         
         # state /running/verify_model/wait_for_close
-        self.states["/running/verify_model/wait_for_close"] = State(18, "/running/verify_model/wait_for_close", self)
+        self.states["/running/verify_model/wait_for_close"] = State(23, "/running/verify_model/wait_for_close", self)
         
         # state /running/open_model
-        self.states["/running/open_model"] = State(19, "/running/open_model", self)
+        self.states["/running/open_model"] = State(24, "/running/open_model", self)
         
         # state /running/open_model/query_model
-        self.states["/running/open_model/query_model"] = State(20, "/running/open_model/query_model", self)
+        self.states["/running/open_model/query_model"] = State(25, "/running/open_model/query_model", self)
         self.states["/running/open_model/query_model"].setEnter(self._running_open_model_query_model_enter)
         
         # state /running/open_model/wait_for_model
-        self.states["/running/open_model/wait_for_model"] = State(21, "/running/open_model/wait_for_model", self)
+        self.states["/running/open_model/wait_for_model"] = State(26, "/running/open_model/wait_for_model", self)
         
         # state /running/open_model/got_model
-        self.states["/running/open_model/got_model"] = State(22, "/running/open_model/got_model", self)
+        self.states["/running/open_model/got_model"] = State(27, "/running/open_model/got_model", self)
         
         # state /running/open_model/search_metamodels
-        self.states["/running/open_model/search_metamodels"] = State(23, "/running/open_model/search_metamodels", self)
+        self.states["/running/open_model/search_metamodels"] = State(28, "/running/open_model/search_metamodels", self)
         self.states["/running/open_model/search_metamodels"].setEnter(self._running_open_model_search_metamodels_enter)
         
         # state /running/open_model/search_CS_mappers
-        self.states["/running/open_model/search_CS_mappers"] = State(24, "/running/open_model/search_CS_mappers", self)
+        self.states["/running/open_model/search_CS_mappers"] = State(29, "/running/open_model/search_CS_mappers", self)
         self.states["/running/open_model/search_CS_mappers"].setEnter(self._running_open_model_search_CS_mappers_enter)
         
         # state /running/open_model/check_CS_mapper
-        self.states["/running/open_model/check_CS_mapper"] = State(25, "/running/open_model/check_CS_mapper", self)
+        self.states["/running/open_model/check_CS_mapper"] = State(30, "/running/open_model/check_CS_mapper", self)
         
         # state /running/open_model/search_CS_rendered
-        self.states["/running/open_model/search_CS_rendered"] = State(26, "/running/open_model/search_CS_rendered", self)
+        self.states["/running/open_model/search_CS_rendered"] = State(31, "/running/open_model/search_CS_rendered", self)
         self.states["/running/open_model/search_CS_rendered"].setEnter(self._running_open_model_search_CS_rendered_enter)
         
         # state /running/open_model/store_metamodel
-        self.states["/running/open_model/store_metamodel"] = State(27, "/running/open_model/store_metamodel", self)
+        self.states["/running/open_model/store_metamodel"] = State(32, "/running/open_model/store_metamodel", self)
         self.states["/running/open_model/store_metamodel"].setEnter(self._running_open_model_store_metamodel_enter)
         
         # state /running/new_rendered
-        self.states["/running/new_rendered"] = State(28, "/running/new_rendered", self)
+        self.states["/running/new_rendered"] = State(33, "/running/new_rendered", self)
         self.states["/running/new_rendered"].setEnter(self._running_new_rendered_enter)
         
         # state /running/create_new_model
-        self.states["/running/create_new_model"] = State(29, "/running/create_new_model", self)
+        self.states["/running/create_new_model"] = State(34, "/running/create_new_model", self)
         
         # state /running/create_new_model/query_metamodel
-        self.states["/running/create_new_model/query_metamodel"] = State(30, "/running/create_new_model/query_metamodel", self)
+        self.states["/running/create_new_model/query_metamodel"] = State(35, "/running/create_new_model/query_metamodel", self)
         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
-        self.states["/running/create_new_model/wait_for_metamodel"] = State(31, "/running/create_new_model/wait_for_metamodel", self)
+        self.states["/running/create_new_model/wait_for_metamodel"] = State(36, "/running/create_new_model/wait_for_metamodel", self)
         
         # state /running/create_new_model/got_mm
-        self.states["/running/create_new_model/got_mm"] = State(32, "/running/create_new_model/got_mm", self)
+        self.states["/running/create_new_model/got_mm"] = State(37, "/running/create_new_model/got_mm", self)
         
         # state /running/create_new_model/prompt_model_name
-        self.states["/running/create_new_model/prompt_model_name"] = State(33, "/running/create_new_model/prompt_model_name", self)
+        self.states["/running/create_new_model/prompt_model_name"] = State(38, "/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)
         
         # state /running/create_new_model/waiting_for_model_name
-        self.states["/running/create_new_model/waiting_for_model_name"] = State(34, "/running/create_new_model/waiting_for_model_name", self)
+        self.states["/running/create_new_model/waiting_for_model_name"] = State(39, "/running/create_new_model/waiting_for_model_name", self)
         
         # state /running/create_new_model/creating_model
-        self.states["/running/create_new_model/creating_model"] = State(35, "/running/create_new_model/creating_model", self)
+        self.states["/running/create_new_model/creating_model"] = State(40, "/running/create_new_model/creating_model", self)
         self.states["/running/create_new_model/creating_model"].setEnter(self._running_create_new_model_creating_model_enter)
         
         # state /running/rerender_model
-        self.states["/running/rerender_model"] = State(36, "/running/rerender_model", self)
+        self.states["/running/rerender_model"] = State(41, "/running/rerender_model", self)
         
         # state /running/rerender_model/initial_render
-        self.states["/running/rerender_model/initial_render"] = State(37, "/running/rerender_model/initial_render", self)
+        self.states["/running/rerender_model/initial_render"] = State(42, "/running/rerender_model/initial_render", self)
         
         # state /running/rerender_model/recreate_toolbars
-        self.states["/running/rerender_model/recreate_toolbars"] = State(38, "/running/rerender_model/recreate_toolbars", self)
+        self.states["/running/rerender_model/recreate_toolbars"] = State(43, "/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(39, "/running/rerender_model/recreate_toolbars/waiting", self)
+        self.states["/running/rerender_model/recreate_toolbars/waiting"] = State(44, "/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(40, "/running/rerender_model/recreate_toolbars/close_all", self)
+        self.states["/running/rerender_model/recreate_toolbars/close_all"] = State(45, "/running/rerender_model/recreate_toolbars/close_all", self)
         
         # state /running/rerender_model/canvas
-        self.states["/running/rerender_model/canvas"] = State(41, "/running/rerender_model/canvas", self)
+        self.states["/running/rerender_model/canvas"] = State(46, "/running/rerender_model/canvas", self)
         self.states["/running/rerender_model/canvas"].setEnter(self._running_rerender_model_canvas_enter)
         
         # state /running/rerender_model/pack_canvas
-        self.states["/running/rerender_model/pack_canvas"] = State(42, "/running/rerender_model/pack_canvas", self)
+        self.states["/running/rerender_model/pack_canvas"] = State(47, "/running/rerender_model/pack_canvas", self)
         
         # state /running/rerender_model/model_toolbars
-        self.states["/running/rerender_model/model_toolbars"] = State(43, "/running/rerender_model/model_toolbars", self)
+        self.states["/running/rerender_model/model_toolbars"] = State(48, "/running/rerender_model/model_toolbars", self)
         
         # state /running/rerender_model/model_toolbars/mm_toolbar
-        self.states["/running/rerender_model/model_toolbars/mm_toolbar"] = State(44, "/running/rerender_model/model_toolbars/mm_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/mm_toolbar"] = State(49, "/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)
         
         # state /running/rerender_model/model_toolbars/pack_mm_toolbar
-        self.states["/running/rerender_model/model_toolbars/pack_mm_toolbar"] = State(45, "/running/rerender_model/model_toolbars/pack_mm_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/pack_mm_toolbar"] = State(50, "/running/rerender_model/model_toolbars/pack_mm_toolbar", self)
         
         # state /running/rerender_model/model_toolbars/cs_toolbar
-        self.states["/running/rerender_model/model_toolbars/cs_toolbar"] = State(46, "/running/rerender_model/model_toolbars/cs_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/cs_toolbar"] = State(51, "/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)
         
         # state /running/rerender_model/model_toolbars/pack_cs_toolbar
-        self.states["/running/rerender_model/model_toolbars/pack_cs_toolbar"] = State(47, "/running/rerender_model/model_toolbars/pack_cs_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/pack_cs_toolbar"] = State(52, "/running/rerender_model/model_toolbars/pack_cs_toolbar", self)
         
         # state /running/rerender_model/model_toolbars/dsl_toolbar
-        self.states["/running/rerender_model/model_toolbars/dsl_toolbar"] = State(48, "/running/rerender_model/model_toolbars/dsl_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/dsl_toolbar"] = State(53, "/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)
         
         # state /running/rerender_model/model_toolbars/pack_dsl_toolbar
-        self.states["/running/rerender_model/model_toolbars/pack_dsl_toolbar"] = State(49, "/running/rerender_model/model_toolbars/pack_dsl_toolbar", self)
+        self.states["/running/rerender_model/model_toolbars/pack_dsl_toolbar"] = State(54, "/running/rerender_model/model_toolbars/pack_dsl_toolbar", self)
         
         # state /running/rerender_model/request_render
-        self.states["/running/rerender_model/request_render"] = State(50, "/running/rerender_model/request_render", self)
+        self.states["/running/rerender_model/request_render"] = State(55, "/running/rerender_model/request_render", self)
         self.states["/running/rerender_model/request_render"].setEnter(self._running_rerender_model_request_render_enter)
         
         # state /running/rerender_model/render_model
-        self.states["/running/rerender_model/render_model"] = State(51, "/running/rerender_model/render_model", self)
+        self.states["/running/rerender_model/render_model"] = State(56, "/running/rerender_model/render_model", self)
         self.states["/running/rerender_model/render_model"].setEnter(self._running_rerender_model_render_model_enter)
         
         # state /running/rerender_model/render_model/allocate_groups
-        self.states["/running/rerender_model/render_model/allocate_groups"] = State(52, "/running/rerender_model/render_model/allocate_groups", self)
+        self.states["/running/rerender_model/render_model/allocate_groups"] = State(57, "/running/rerender_model/render_model/allocate_groups", self)
         
         # state /running/rerender_model/render_model/allocating_group
-        self.states["/running/rerender_model/render_model/allocating_group"] = State(53, "/running/rerender_model/render_model/allocating_group", self)
+        self.states["/running/rerender_model/render_model/allocating_group"] = State(58, "/running/rerender_model/render_model/allocating_group", self)
         
         # state /running/rerender_model/render_model/allocate_contains
-        self.states["/running/rerender_model/render_model/allocate_contains"] = State(54, "/running/rerender_model/render_model/allocate_contains", self)
+        self.states["/running/rerender_model/render_model/allocate_contains"] = State(59, "/running/rerender_model/render_model/allocate_contains", self)
         
         # state /running/rerender_model/render_model/render_elements
-        self.states["/running/rerender_model/render_model/render_elements"] = State(55, "/running/rerender_model/render_model/render_elements", self)
+        self.states["/running/rerender_model/render_model/render_elements"] = State(60, "/running/rerender_model/render_model/render_elements", self)
         
         # state /close
-        self.states["/close"] = State(56, "/close", self)
+        self.states["/close"] = State(61, "/close", self)
         self.states["/close"].setEnter(self._close_enter)
         
         # add children
@@ -4202,8 +4218,13 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/running"].addChild(self.states["/running/new_rendered"])
         self.states["/running"].addChild(self.states["/running/create_new_model"])
         self.states["/running"].addChild(self.states["/running/rerender_model"])
+        self.states["/running/conf_bottom"].addChild(self.states["/running/conf_bottom/check_if_exists"])
+        self.states["/running/conf_bottom"].addChild(self.states["/running/conf_bottom/add_bottom"])
         self.states["/running/custom_MM"].addChild(self.states["/running/custom_MM/query"])
         self.states["/running/custom_MM"].addChild(self.states["/running/custom_MM/wait_for_metamodel"])
+        self.states["/running/custom_MM/wait_for_metamodel"].addChild(self.states["/running/custom_MM/wait_for_metamodel/wait_for_result"])
+        self.states["/running/custom_MM/wait_for_metamodel"].addChild(self.states["/running/custom_MM/wait_for_metamodel/got_result"])
+        self.states["/running/custom_MM/wait_for_metamodel"].addChild(self.states["/running/custom_MM/wait_for_metamodel/mv_processing"])
         self.states["/running/verify_model"].addChild(self.states["/running/verify_model/request"])
         self.states["/running/verify_model"].addChild(self.states["/running/verify_model/show_result"])
         self.states["/running/verify_model"].addChild(self.states["/running/verify_model/wait_for_close"])
@@ -4244,7 +4265,9 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states[""].default_state = self.states["/init"]
         self.states["/init"].default_state = self.states["/init/generic_toolbar"]
         self.states["/running"].default_state = self.states["/running/idle"]
+        self.states["/running/conf_bottom"].default_state = self.states["/running/conf_bottom/check_if_exists"]
         self.states["/running/custom_MM"].default_state = self.states["/running/custom_MM/query"]
+        self.states["/running/custom_MM/wait_for_metamodel"].default_state = self.states["/running/custom_MM/wait_for_metamodel/wait_for_result"]
         self.states["/running/verify_model"].default_state = self.states["/running/verify_model/request"]
         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"]
@@ -4297,28 +4320,41 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _running_idle_5 = Transition(self, self.states["/running/idle"], [self.states["/running/conf_bottom"]])
         _running_idle_5.setTrigger(Event("conf_bottom", None))
         self.states["/running/idle"].addTransition(_running_idle_5)
-        _running_idle_6 = Transition(self, self.states["/running/idle"], [self.states["/running/change_metamodel"]])
-        _running_idle_6.setAction(self._running_idle_6_exec)
-        _running_idle_6.setTrigger(Event("change_metamodel", None))
+        _running_idle_6 = Transition(self, self.states["/running/idle"], [self.states["/running/custom_MM"]])
+        _running_idle_6.setTrigger(Event("custom_MM", None))
         self.states["/running/idle"].addTransition(_running_idle_6)
-        _running_idle_7 = Transition(self, self.states["/running/idle"], [self.states["/running/change_mapper"]])
+        _running_idle_7 = Transition(self, self.states["/running/idle"], [self.states["/running/change_metamodel"]])
         _running_idle_7.setAction(self._running_idle_7_exec)
-        _running_idle_7.setTrigger(Event("change_mapper", None))
+        _running_idle_7.setTrigger(Event("change_metamodel", None))
         self.states["/running/idle"].addTransition(_running_idle_7)
-        _running_idle_8 = Transition(self, self.states["/running/idle"], [self.states["/running/change_rendered"]])
+        _running_idle_8 = Transition(self, self.states["/running/idle"], [self.states["/running/change_mapper"]])
         _running_idle_8.setAction(self._running_idle_8_exec)
-        _running_idle_8.setTrigger(Event("change_rendered", None))
+        _running_idle_8.setTrigger(Event("change_mapper", None))
         self.states["/running/idle"].addTransition(_running_idle_8)
+        _running_idle_9 = Transition(self, self.states["/running/idle"], [self.states["/running/change_rendered"]])
+        _running_idle_9.setAction(self._running_idle_9_exec)
+        _running_idle_9.setTrigger(Event("change_rendered", None))
+        self.states["/running/idle"].addTransition(_running_idle_9)
         
         # transition /running/change_metamodel
         _running_change_metamodel_0 = Transition(self, self.states["/running/change_metamodel"], [self.states["/running/open_model/search_CS_mappers"]])
         _running_change_metamodel_0.setTrigger(Event("mv_response", None))
         self.states["/running/change_metamodel"].addTransition(_running_change_metamodel_0)
         
-        # transition /running/conf_bottom
-        _running_conf_bottom_0 = Transition(self, self.states["/running/conf_bottom"], [self.states["/running/open_model/search_metamodels"]])
-        _running_conf_bottom_0.setTrigger(Event("mv_response", None))
-        self.states["/running/conf_bottom"].addTransition(_running_conf_bottom_0)
+        # transition /running/conf_bottom/check_if_exists
+        _running_conf_bottom_check_if_exists_0 = Transition(self, self.states["/running/conf_bottom/check_if_exists"], [self.states["/running/idle"]])
+        _running_conf_bottom_check_if_exists_0.setTrigger(None)
+        _running_conf_bottom_check_if_exists_0.setGuard(self._running_conf_bottom_check_if_exists_0_guard)
+        self.states["/running/conf_bottom/check_if_exists"].addTransition(_running_conf_bottom_check_if_exists_0)
+        _running_conf_bottom_check_if_exists_1 = Transition(self, self.states["/running/conf_bottom/check_if_exists"], [self.states["/running/conf_bottom/add_bottom"]])
+        _running_conf_bottom_check_if_exists_1.setTrigger(None)
+        _running_conf_bottom_check_if_exists_1.setGuard(self._running_conf_bottom_check_if_exists_1_guard)
+        self.states["/running/conf_bottom/check_if_exists"].addTransition(_running_conf_bottom_check_if_exists_1)
+        
+        # transition /running/conf_bottom/add_bottom
+        _running_conf_bottom_add_bottom_0 = Transition(self, self.states["/running/conf_bottom/add_bottom"], [self.states["/running/open_model/search_metamodels"]])
+        _running_conf_bottom_add_bottom_0.setTrigger(Event("mv_response", None))
+        self.states["/running/conf_bottom/add_bottom"].addTransition(_running_conf_bottom_add_bottom_0)
         
         # transition /running/custom_MM/query
         _running_custom_MM_query_0 = Transition(self, self.states["/running/custom_MM/query"], [self.states["/running/custom_MM/wait_for_metamodel"]])
@@ -4326,15 +4362,27 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _running_custom_MM_query_0.setTrigger(Event("instance_created", None))
         self.states["/running/custom_MM/query"].addTransition(_running_custom_MM_query_0)
         
-        # transition /running/custom_MM/wait_for_metamodel
-        _running_custom_MM_wait_for_metamodel_0 = Transition(self, self.states["/running/custom_MM/wait_for_metamodel"], [self.states["/running/idle"]])
-        _running_custom_MM_wait_for_metamodel_0.setAction(self._running_custom_MM_wait_for_metamodel_0_exec)
-        _running_custom_MM_wait_for_metamodel_0.setTrigger(Event("close_window", None))
-        self.states["/running/custom_MM/wait_for_metamodel"].addTransition(_running_custom_MM_wait_for_metamodel_0)
-        _running_custom_MM_wait_for_metamodel_1 = Transition(self, self.states["/running/custom_MM/wait_for_metamodel"], [self.states["/running/change_metamodel"]])
-        _running_custom_MM_wait_for_metamodel_1.setAction(self._running_custom_MM_wait_for_metamodel_1_exec)
-        _running_custom_MM_wait_for_metamodel_1.setTrigger(Event("browse_result", None))
-        self.states["/running/custom_MM/wait_for_metamodel"].addTransition(_running_custom_MM_wait_for_metamodel_1)
+        # transition /running/custom_MM/wait_for_metamodel/wait_for_result
+        _running_custom_MM_wait_for_metamodel_wait_for_result_0 = Transition(self, self.states["/running/custom_MM/wait_for_metamodel/wait_for_result"], [self.states["/running/custom_MM/wait_for_metamodel/got_result"]])
+        _running_custom_MM_wait_for_metamodel_wait_for_result_0.setAction(self._running_custom_MM_wait_for_metamodel_wait_for_result_0_exec)
+        _running_custom_MM_wait_for_metamodel_wait_for_result_0.setTrigger(Event("browse_result", None))
+        _running_custom_MM_wait_for_metamodel_wait_for_result_0.setGuard(self._running_custom_MM_wait_for_metamodel_wait_for_result_0_guard)
+        self.states["/running/custom_MM/wait_for_metamodel/wait_for_result"].addTransition(_running_custom_MM_wait_for_metamodel_wait_for_result_0)
+        _running_custom_MM_wait_for_metamodel_wait_for_result_1 = Transition(self, self.states["/running/custom_MM/wait_for_metamodel/wait_for_result"], [self.states["/running/idle"]])
+        _running_custom_MM_wait_for_metamodel_wait_for_result_1.setAction(self._running_custom_MM_wait_for_metamodel_wait_for_result_1_exec)
+        _running_custom_MM_wait_for_metamodel_wait_for_result_1.setTrigger(Event("close_window", None))
+        self.states["/running/custom_MM/wait_for_metamodel/wait_for_result"].addTransition(_running_custom_MM_wait_for_metamodel_wait_for_result_1)
+        
+        # transition /running/custom_MM/wait_for_metamodel/got_result
+        _running_custom_MM_wait_for_metamodel_got_result_0 = Transition(self, self.states["/running/custom_MM/wait_for_metamodel/got_result"], [self.states["/running/custom_MM/wait_for_metamodel/mv_processing"]])
+        _running_custom_MM_wait_for_metamodel_got_result_0.setAction(self._running_custom_MM_wait_for_metamodel_got_result_0_exec)
+        _running_custom_MM_wait_for_metamodel_got_result_0.setTrigger(Event("close_window", None))
+        self.states["/running/custom_MM/wait_for_metamodel/got_result"].addTransition(_running_custom_MM_wait_for_metamodel_got_result_0)
+        
+        # transition /running/custom_MM/wait_for_metamodel/mv_processing
+        _running_custom_MM_wait_for_metamodel_mv_processing_0 = Transition(self, self.states["/running/custom_MM/wait_for_metamodel/mv_processing"], [self.states["/running/open_model/search_metamodels"]])
+        _running_custom_MM_wait_for_metamodel_mv_processing_0.setTrigger(Event("mv_response", None))
+        self.states["/running/custom_MM/wait_for_metamodel/mv_processing"].addTransition(_running_custom_MM_wait_for_metamodel_mv_processing_0)
         
         # transition /running/change_mapper
         _running_change_mapper_0 = Transition(self, self.states["/running/change_mapper"], [self.states["/running/rerender_model"]])
@@ -4613,6 +4661,9 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _running_0.setGuard(self._running_0_guard)
         self.states["/running"].addTransition(_running_0)
     
+    def _running_custom_MM_wait_for_metamodel_enter(self):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [10, 'Browsing for model... OK'])]))
+    
     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
@@ -4640,7 +4691,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         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_conf_bottom_enter(self):
+    def _running_conf_bottom_add_bottom_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['conformance_add', [current_model, 'formalisms/Bottom']])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [10, 'Storing model context...'])]))
         global current_metamodel
@@ -4730,35 +4781,48 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _running_idle_3_guard(self, parameters):
         return current_mapper is not None
     
-    def _running_idle_6_exec(self, parameters):
+    def _running_idle_7_exec(self, parameters):
         new_metamodel = parameters[0]
         global current_metamodel
         current_metamodel = new_metamodel
     
-    def _running_idle_7_exec(self, parameters):
+    def _running_idle_8_exec(self, parameters):
         new_mapper = parameters[0]
         global current_mapper
         current_mapper = new_mapper
     
-    def _running_idle_8_exec(self, parameters):
+    def _running_idle_9_exec(self, parameters):
         new_rendered = parameters[0]
         global current_rendered_model
         current_rendered_model = new_rendered
     
+    def _running_conf_bottom_check_if_exists_0_guard(self, parameters):
+        return 'formalisms/Bottom' in self.allowed_metamodels
+    
+    def _running_conf_bottom_check_if_exists_1_guard(self, parameters):
+        return 'formalisms/Bottom' not in self.allowed_metamodels
+    
     def _running_custom_MM_query_0_exec(self, parameters):
         association_name = parameters[0]
         self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))
         self.subwindow = association_name
     
-    def _running_custom_MM_wait_for_metamodel_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.subwindow]))
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [10, 'Browsing for model... OK'])]))
-    
-    def _running_custom_MM_wait_for_metamodel_1_exec(self, parameters):
+    def _running_custom_MM_wait_for_metamodel_wait_for_result_0_exec(self, parameters):
         result = parameters[0]
         global current_metamodel
         current_metamodel = result
     
+    def _running_custom_MM_wait_for_metamodel_wait_for_result_0_guard(self, parameters):
+        result = parameters[0]
+        return result not in self.allowed_metamodels
+    
+    def _running_custom_MM_wait_for_metamodel_wait_for_result_1_exec(self, parameters):
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.subwindow]))
+    
+    def _running_custom_MM_wait_for_metamodel_got_result_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.subwindow]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['conformance_add', [current_model, current_metamodel]])]))
+    
     def _running_verify_model_request_0_exec(self, parameters):
         result = parameters[0]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [result * 100, 'Verifying...'])]))

+ 0 - 1
icons/conf_bottom.png


BIN=BIN
icons/conf_bottom.png


+ 0 - 1
icons/custom_MM.png


BIN=BIN
icons/custom_MM.png