Browse Source

Implemented basic filtering of metamodels (based on model_types)

Yentl Van Tendeloo 8 years ago
parent
commit
b987ff6518
1 changed files with 65 additions and 38 deletions
  1. 65 38
      classes/window/browser.xml

+ 65 - 38
classes/window/browser.xml

@@ -8,12 +8,12 @@
     </relationships>
 
     <constructor>
-        <parameter name="entries"/>
-        <parameter name="options"/>
+        <parameter name="prompt"/>
+        <parameter name="filter_metamodel" default="None"/>
         <super class="tk.TopLevel"/>
         <super class="MvKWidget"/>
         <body>
-            print("STart up")
+            tk.Label(self, text=prompt).pack()
             self.browser_frame = tk.Frame(self)
             self.browser_frame.pack()
 
@@ -24,6 +24,7 @@
             self.selected_label = None
             self.labels = []
             self.closing = False
+            self.filter_metamodel = filter_metamodel
         </body>
     </constructor>
 
@@ -127,7 +128,7 @@
                             </raise>
                         </onentry>
 
-                        <transition event="mv_response" target="../add_label">
+                        <transition event="mv_response" target="../add_labels">
                             <parameter name="result"/>
                             <script>
                                 self.labels_to_add = sorted(result)
@@ -135,39 +136,66 @@
                         </transition>
                     </state>
 
-                    <state id="add_label">
-                        <onentry>
-                            <raise event="create_instance" scope="cd">
-                                <parameter expr="'labels'"/>
-                                <parameter expr="'Label'"/>
-                                <parameter expr="{'parent': self.browser_frame, 'text': self.labels_to_add[0]}"/>
-                            </raise>
-
-                            <script>
-                                print("Create label for " + str(self.labels_to_add[0]))
-                                self.labels_to_add.pop(0)
-                            </script>
-                        </onentry>
-
-                        <transition event="instance_created" cond="len(self.labels_to_add) > 0" target=".">
-                            <parameter name="association_name"/>
-                            <raise event="start_instance" scope="cd">
-                                <parameter expr="association_name"/>
-                            </raise>
-                            <script>
-                                self.labels.append(association_name)
-                            </script>
-                        </transition>
-
-                        <transition event="instance_created" cond="len(self.labels_to_add) == 0" target="../../waiting">
-                            <parameter name="association_name"/>
-                            <raise event="start_instance" scope="cd">
-                                <parameter expr="association_name"/>
-                            </raise>
-                            <script>
-                                self.labels.append(association_name)
-                            </script>
-                        </transition>
+                    <state id="add_labels" initial="check_type">
+                        <state id="check_type">
+                            <transition cond="len(self.labels_to_add) == 0" target="../waiting"/>
+                            <transition cond="self.filter_metamodel is None" target="../add_label"/>
+                            <transition cond="self.filter_metamodel is not None and self.labels_to_add[0][-1] == '/'" target="../add_label"/>
+                            <transition cond="self.filter_metamodel is not None and self.labels_to_add[0][-1] != '/'" target="../check_types"/>
+                        </state>
+
+                        <state id="check_types">
+                            <onentry>
+                                <raise event="mv_request" scope="broad">
+                                    <parameter expr="'model_types'"/>
+                                    <parameter expr="[self.labels_to_add[0]]"/>
+                                </raise>
+                            </onentry>
+
+                            <transition event="mv_response" cond="len(set(result).intersection(set(self.filter_metamodels))) > 0" target="../check_type">
+                                <parameter name="result"/>
+                            </transition>
+
+                            <transition event="mv_response" cond="len(set(result).intersection(set(self.filter_metamodels))) == 0" target="../add_label">
+                                <parameter name="result"/>
+                                <script>
+                                </script>
+                            </transition>
+                        </state>
+                        
+                        <state id="add_label">
+                            <onentry>
+                                <raise event="create_instance" scope="cd">
+                                    <parameter expr="'labels'"/>
+                                    <parameter expr="'Label'"/>
+                                    <parameter expr="{'parent': self.browser_frame, 'text': self.labels_to_add[0]}"/>
+                                </raise>
+
+                                <script>
+                                    self.labels_to_add.pop(0)
+                                </script>
+                            </onentry>
+
+                            <transition event="instance_created" cond="len(self.labels_to_add) > 0" target=".">
+                                <parameter name="association_name"/>
+                                <raise event="start_instance" scope="cd">
+                                    <parameter expr="association_name"/>
+                                </raise>
+                                <script>
+                                    self.labels.append(association_name)
+                                </script>
+                            </transition>
+
+                            <transition event="instance_created" cond="len(self.labels_to_add) == 0" target="../../waiting">
+                                <parameter name="association_name"/>
+                                <raise event="start_instance" scope="cd">
+                                    <parameter expr="association_name"/>
+                                </raise>
+                                <script>
+                                    self.labels.append(association_name)
+                                </script>
+                            </transition>
+                        </state>
                     </state>
                 </state>
 
@@ -198,7 +226,6 @@
             </state>
 
             <transition event="close_complete" target="../close"/>
-
         </parallel>
             
         <state id="close">