Kaynağa Gözat

Implement the two dropdown menu's for CS

Yentl Van Tendeloo 8 yıl önce
ebeveyn
işleme
855251df6f

+ 24 - 1
classes/modelverse/modelverse.xml

@@ -473,8 +473,11 @@
 
                     <state id="model_render">
                         <onentry>
+                            <script>
+                                print("RENDERING with parameters: " + str(self.parameters))
+                            </script>
                             <raise event="request">
-                                <parameter expr="['model_render', self.parameters[0], self.parameters[1]]"/>
+                                <parameter expr="['model_render', self.parameters[0], self.parameters[1], self.parameters[2]]"/>
                             </raise>
                         </onentry>
 
@@ -485,6 +488,20 @@
                         </transition>
                     </state>
 
+                    <state id="model_rendered">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['model_rendered', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="set(self.split_response(self.responses.pop(0)))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
                     <state id="transformation_between">
                         <onentry>
                             <raise event="request">
@@ -1446,6 +1463,12 @@
                             </script>
                         </transition>
 
+                        <transition cond="self.expect_action(None, 'model_rendered')" target="../../operations/model_rendered">
+                            <script>
+                                self.load_action(None)
+                            </script>
+                        </transition>
+
                         <transition cond="self.expect_action(None, 'transformation_between')" target="../../operations/transformation_between">
                             <script>
                                 self.load_action(None)

+ 16 - 0
classes/toolbar/concretesyntax_toolbar.xml

@@ -7,6 +7,8 @@
 
     <constructor>
         <parameter name="parent"/>
+        <parameter name="allowed_mappers"/>
+        <parameter name="allowed_rendered"/>
         <super class="Toolbar">
             <parameter expr="parent"/>
         </super>
@@ -18,6 +20,20 @@
                                 }
             self.buttons = {}
             tk.Label(self, text="Visualization").pack(side=tk.LEFT)
+
+            # Mapper
+            global current_mapper
+            selected_mapper = tk.StringVar(self)
+            selected_mapper.set(current_mapper)
+            tk.OptionMenu(self, selected_mapper, *list(allowed_mappers)).pack(side=tk.LEFT)
+            selected_mapper.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_mapper", "input", [id(self), selected_mapper.get()])))
+
+            # Rendered
+            global current_rendered_model
+            selected_rendered = tk.StringVar(self)
+            selected_rendered.set(current_rendered_model)
+            tk.OptionMenu(self, selected_rendered, *list(allowed_rendered)).pack(side=tk.LEFT)
+            selected_rendered.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_rendered", "input", [id(self), selected_rendered.get()])))
         </body>
     </constructor>
 

+ 50 - 8
classes/window/main_window.xml

@@ -236,10 +236,9 @@
                         </raise>
                     </onentry>
 
-                    <transition event="mv_response" target="../store_metamodel">
+                    <transition event="mv_response" target="../search_CS_mappers">
                         <parameter name="result"/>
                         <script>
-                            print("Allowable types for this model: " + str(result))
                             global current_metamodel
                             if len(result) > 0:
                                 current_metamodel = next(iter(result))
@@ -254,6 +253,51 @@
                     </transition>
                 </state>
 
+                <state id="search_CS_mappers">
+                    <onentry>
+                        <raise event="mv_request" scope="broad">
+                            <parameter expr="'transformation_between'"/>
+                            <parameter expr="[current_metamodel, 'formalisms/MM_render']"/>
+                        </raise>
+                    </onentry>
+
+                    <transition event="mv_response" target="../search_CS_rendered">
+                        <parameter name="result"/>
+                        <script>
+                            print("Allowed mappers: " + str(result))
+                            self.allowed_mappers = list(result)
+                            global current_mapper
+                            current_mapper = next(iter(result))
+                        </script>
+                    </transition>
+                </state>
+
+                <state id="search_CS_rendered">
+                    <onentry>
+                        <raise event="mv_request" scope="broad">
+                            <parameter expr="'model_rendered'"/>
+                            <parameter expr="[current_model, current_mapper]"/>
+                        </raise>
+                    </onentry>
+
+                    <transition event="mv_response" target="../store_metamodel">
+                        <parameter name="result"/>
+                        <script>
+                            print("Allowed rendered: " + str(result))
+                            self.allowed_rendered = list(result)
+                            global current_rendered_model
+
+                            if (len(result) > 0):
+                                print("Reusing an existing rendered model")
+                                current_rendered_model = next(iter(result))
+                            else:
+                                print("Creating new rendered model!")
+                                current_rendered_model = "rendered/%s" % str(uuid.uuid4())
+                                self.allowed_rendered.append(current_rendered_model)
+                        </script>
+                    </transition>
+                </state>
+
                 <state id="store_metamodel">
                     <onentry>
                         <raise event="mv_request" scope="broad">
@@ -493,6 +537,8 @@
                                 <parameter expr="'model_toolbars'"/>
                                 <parameter expr="'ConcreteSyntaxToolbar'"/>
                                 <parameter expr="self.toolbar_frame"/>
+                                <parameter expr="self.allowed_mappers"/>
+                                <parameter expr="self.allowed_rendered"/>
                             </raise>
                         </onentry>
 
@@ -544,12 +590,8 @@
                     <onentry>
                         <raise event="mv_request" scope="broad">
                             <parameter expr="'model_render'"/>
-                            <parameter expr="[current_model, 'models/render_SCD']"/>
+                            <parameter expr="[current_model, current_mapper, current_rendered_model]"/>
                         </raise>
-                        <script>
-                            global current_rendered_model
-                            current_rendered_model = "rendered/%s" % (current_model)
-                        </script>
                         <raise event="update_status" scope="narrow" target="'progress_bar'">
                             <parameter expr="50"/>
                             <parameter expr="'Perceptualizing model...'"/>
@@ -580,7 +622,7 @@
                         </script>
                         <raise event="mv_request" scope="broad">
                             <parameter expr="'alter_context'"/>
-                            <parameter expr="['rendered/%s' % (current_model), 'formalisms/MM_render']"/>
+                            <parameter expr="[current_rendered_model, 'formalisms/MM_render']"/>
                         </raise>
                     </onentry>
 

Dosya farkı çok büyük olduğundan ihmal edildi
+ 269 - 176
frontend.py