|
@@ -5,11 +5,12 @@
|
|
|
<association name="buttons" class="Button"/>
|
|
|
<association name="labels" class="Label"/>
|
|
|
<association name="parent" class="A"/>
|
|
|
+ <association name="progressbar" class="Progressbar"/>
|
|
|
</relationships>
|
|
|
|
|
|
<constructor>
|
|
|
<parameter name="prompt"/>
|
|
|
- <parameter name="filter_metamodel" default="None"/>
|
|
|
+ <parameter name="filter_metamodels" default="None"/>
|
|
|
<super class="tk.TopLevel"/>
|
|
|
<super class="MvKWidget"/>
|
|
|
<body>
|
|
@@ -22,9 +23,8 @@
|
|
|
|
|
|
self.current_location = ""
|
|
|
self.selected_label = None
|
|
|
- self.labels = []
|
|
|
- self.closing = False
|
|
|
- self.filter_metamodel = filter_metamodel
|
|
|
+ self.labels = {}
|
|
|
+ self.filter_metamodels = filter_metamodels
|
|
|
</body>
|
|
|
</constructor>
|
|
|
|
|
@@ -50,6 +50,10 @@
|
|
|
<raise event="start_instance" scope="cd">
|
|
|
<parameter expr="association_name"/>
|
|
|
</raise>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ self.button_ok = association_name
|
|
|
+ </script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
|
|
@@ -62,16 +66,71 @@
|
|
|
</raise>
|
|
|
</onentry>
|
|
|
|
|
|
+ <transition event="instance_created" target="../progressbar">
|
|
|
+ <parameter name="association_name"/>
|
|
|
+ <raise event="start_instance" scope="cd">
|
|
|
+ <parameter expr="association_name"/>
|
|
|
+ </raise>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ self.button_back = association_name
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
+ </state>
|
|
|
+
|
|
|
+ <state id="progressbar">
|
|
|
+ <onentry>
|
|
|
+ <raise event="create_instance" scope="cd">
|
|
|
+ <parameter expr="'progressbar'"/>
|
|
|
+ <parameter expr="'ProgressBar'"/>
|
|
|
+ <parameter expr="{'parent': self.button_frame}"/>
|
|
|
+ </raise>
|
|
|
+ </onentry>
|
|
|
+
|
|
|
<transition event="instance_created" target="../../root">
|
|
|
<parameter name="association_name"/>
|
|
|
<raise event="start_instance" scope="cd">
|
|
|
<parameter expr="association_name"/>
|
|
|
</raise>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ self.progressbar = association_name
|
|
|
+ </script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
</state>
|
|
|
|
|
|
<parallel id="root">
|
|
|
+ <state id="label_clicked">
|
|
|
+ <state id="selecting_label">
|
|
|
+ <transition event="label_pressed" cond="self.selected_label is None" target=".">
|
|
|
+ <parameter name="text"/>
|
|
|
+ <raise event="highlight" target="self.labels[text]" scope="narrow"/>
|
|
|
+ <script>
|
|
|
+ self.selected_label = text
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
+
|
|
|
+ <transition event="label_pressed" cond="self.selected_label is not None and self.selected_label != text" target=".">
|
|
|
+ <parameter name="text"/>
|
|
|
+ <raise event="unhighlight" target="self.labels[self.selected_label]" scope="narrow"/>
|
|
|
+ <raise event="highlight" target="self.labels[text]" scope="narrow"/>
|
|
|
+ <script>
|
|
|
+ self.selected_label = text
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
+
|
|
|
+ <transition event="label_pressed" cond="self.selected_label is not None and self.selected_label == text" target=".">
|
|
|
+ <parameter name="text"/>
|
|
|
+ <script>
|
|
|
+ self.current_location += self.selected_label
|
|
|
+ self.selected_label = None
|
|
|
+ </script>
|
|
|
+ <raise event="redraw_labels"/>
|
|
|
+ </transition>
|
|
|
+ </state>
|
|
|
+ </state>
|
|
|
+
|
|
|
<state id="state" initial="root">
|
|
|
<state id="root">
|
|
|
<transition event="button_pressed" cond="event_name == 'OK' and self.selected_label is not None" target=".">
|
|
@@ -80,6 +139,8 @@
|
|
|
self.current_location += self.selected_label
|
|
|
self.selected_label = None
|
|
|
</script>
|
|
|
+
|
|
|
+ <raise event="redraw_labels"/>
|
|
|
</transition>
|
|
|
|
|
|
<transition event="button_pressed" cond="event_name == 'UP' and self.current_location != ''" target=".">
|
|
@@ -89,42 +150,27 @@
|
|
|
self.selected_label = None
|
|
|
</script>
|
|
|
|
|
|
- <raise event="draw_labels"/>
|
|
|
+ <raise event="redraw_labels"/>
|
|
|
</transition>
|
|
|
-
|
|
|
- <transition cond="len(self.current_location) > 0 and self.current_location[-1] != '/'" target="../closing">
|
|
|
- <raise event="browse_result" target="'parent'" scope="narrow">
|
|
|
- <parameter expr="self.current_location"/>
|
|
|
- </raise>
|
|
|
- </transition>
|
|
|
-
|
|
|
- <transition event="ready_to_close" target="../closing"/>
|
|
|
</state>
|
|
|
|
|
|
- <state id="closing">
|
|
|
- <state id="close">
|
|
|
- <onentry>
|
|
|
- <raise event="delete_instance" scope="cd">
|
|
|
- <parameter expr="self.button"/>
|
|
|
- </raise>
|
|
|
- </onentry>
|
|
|
- </state>
|
|
|
-
|
|
|
- <transition event="instance_deleted" target="../removed_buttons"/>
|
|
|
- </state>
|
|
|
-
|
|
|
- <state id="removed_buttons">
|
|
|
- <raise event="close_complete"/>
|
|
|
- </state>
|
|
|
+ <state id="finished"/>
|
|
|
</state>
|
|
|
|
|
|
<state id="draw_labels" initial="create_labels">
|
|
|
<state id="create_labels" initial="query">
|
|
|
<state id="query">
|
|
|
<onentry>
|
|
|
+ <script>
|
|
|
+ print("QUERY MV")
|
|
|
+ </script>
|
|
|
<raise event="mv_request" scope="broad">
|
|
|
<parameter expr="'model_list'"/>
|
|
|
- <parameter expr="[self.current_location]"/>
|
|
|
+ <parameter expr="[self.current_location if self.current_location == '' else self.current_location[:-1]]"/>
|
|
|
+ </raise>
|
|
|
+ <raise event="update_status" scope="narrow" target="self.progressbar">
|
|
|
+ <parameter expr="0"/>
|
|
|
+ <parameter expr="'Querying list of models...'"/>
|
|
|
</raise>
|
|
|
</onentry>
|
|
|
|
|
@@ -132,34 +178,43 @@
|
|
|
<parameter name="result"/>
|
|
|
<script>
|
|
|
self.labels_to_add = sorted(result)
|
|
|
+ self.all_results = sorted(result)
|
|
|
</script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
|
|
|
<state id="add_labels" initial="check_type">
|
|
|
<state id="check_type">
|
|
|
+ <onentry>
|
|
|
+ <raise event="update_status" scope="narrow" target="self.progressbar">
|
|
|
+ <parameter expr="100.0 * (len(self.all_results) - len(self.labels_to_add) + 1) / (len(self.all_results) + 1)"/>
|
|
|
+ <parameter expr="('Checking model type of %s' % self.labels_to_add[0]) if len(self.labels_to_add) > 0 else 'Finished!'"/>
|
|
|
+ </raise>
|
|
|
+ </onentry>
|
|
|
+
|
|
|
<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"/>
|
|
|
+ <transition cond="self.filter_metamodels is None" target="../add_label"/>
|
|
|
+ <transition cond="self.filter_metamodels is not None and len(self.labels_to_add) > 0 and self.labels_to_add[0][-1] == '/'" target="../add_label"/>
|
|
|
+ <transition cond="self.filter_metamodels is not None and len(self.labels_to_add) > 0 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]]"/>
|
|
|
+ <parameter expr="[self.current_location + self.labels_to_add[0]]"/>
|
|
|
</raise>
|
|
|
</onentry>
|
|
|
|
|
|
- <transition event="mv_response" cond="len(set(result).intersection(set(self.filter_metamodels))) > 0" target="../check_type">
|
|
|
+ <transition event="mv_response" cond="len(set(result).intersection(set(self.filter_metamodels))) == 0" target="../check_type">
|
|
|
<parameter name="result"/>
|
|
|
+ <script>
|
|
|
+ self.labels_to_add.pop(0)
|
|
|
+ </script>
|
|
|
</transition>
|
|
|
|
|
|
- <transition event="mv_response" cond="len(set(result).intersection(set(self.filter_metamodels))) == 0" target="../add_label">
|
|
|
+ <transition event="mv_response" cond="len(set(result).intersection(set(self.filter_metamodels))) > 0" target="../add_label">
|
|
|
<parameter name="result"/>
|
|
|
- <script>
|
|
|
- </script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
|
|
@@ -170,63 +225,74 @@
|
|
|
<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=".">
|
|
|
+ <transition event="instance_created" target="../check_type">
|
|
|
<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)
|
|
|
+ self.labels[self.labels_to_add.pop(0)] = association_name
|
|
|
</script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
</state>
|
|
|
+ <transition event="redraw_labels" target="../delete_labels"/>
|
|
|
</state>
|
|
|
|
|
|
- <state id="waiting"/>
|
|
|
+ <state id="waiting">
|
|
|
+ <transition event="redraw_labels" target="../delete_labels"/>
|
|
|
+ </state>
|
|
|
|
|
|
<state id="delete_labels">
|
|
|
<transition cond="len(self.labels) > 0" target=".">
|
|
|
<raise event="delete_instance" scope="cd">
|
|
|
- <parameter expr="self.labels.pop(0)"/>
|
|
|
+ <parameter expr="self.labels.popitem()[1]"/>
|
|
|
</raise>
|
|
|
</transition>
|
|
|
|
|
|
- <transition cond="len(self.labels) == 0 and not self.closing" target="../create_labels"/>
|
|
|
-
|
|
|
- <transition cond="len(self.labels) == 0 and self.closing" target="../waiting">
|
|
|
- <raise event="ready_to_close"/>
|
|
|
- </transition>
|
|
|
+ <transition cond="len(self.labels) == 0" target="../create_labels"/>
|
|
|
+ <transition event="redraw_labels" target="../delete_labels"/>
|
|
|
</state>
|
|
|
-
|
|
|
- <transition event="draw_labels" target="delete_labels"/>
|
|
|
-
|
|
|
- <transition event="window-close" cond="ID == id(self)" target="delete_labels">
|
|
|
- <parameter name="ID"/>
|
|
|
- <script>
|
|
|
- self.closing = True
|
|
|
- </script>
|
|
|
- </transition>
|
|
|
</state>
|
|
|
|
|
|
- <transition event="close_complete" target="../close"/>
|
|
|
+ <transition cond="len(self.current_location) > 0 and self.current_location[-1] != '/'" target="../closing">
|
|
|
+ <raise event="browse_result" target="'parent'" scope="narrow">
|
|
|
+ <parameter expr="self.current_location"/>
|
|
|
+ </raise>
|
|
|
+
|
|
|
+ <raise event="close_self"/>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ self.to_close = self.labels.values() + [self.button_ok, self.button_back, self.progressbar]
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
+
|
|
|
+ <transition event="window-close" cond="ID == id(self)" target="../closing">
|
|
|
+ <parameter name="ID"/>
|
|
|
+ <script>
|
|
|
+ self.to_close = self.labels.values() + [self.button_ok, self.button_back, self.progressbar]
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
+
|
|
|
+ <transition event="close_self" target="../closing">
|
|
|
+ <script>
|
|
|
+ self.to_close = self.labels.values() + [self.button_ok, self.button_back, self.progressbar]
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
</parallel>
|
|
|
+
|
|
|
+ <state id="closing">
|
|
|
+ <onentry>
|
|
|
+ <raise event="delete_instance" scope="cd">
|
|
|
+ <parameter expr="self.to_close.pop(0)"/>
|
|
|
+ </raise>
|
|
|
+ </onentry>
|
|
|
+
|
|
|
+ <transition event="instance_deleted" cond="len(self.to_close) > 0" target="."/>
|
|
|
+ <transition event="instance_deleted" cond="len(self.to_close) == 0" target="../close"/>
|
|
|
+ </state>
|
|
|
|
|
|
<state id="close">
|
|
|
<onentry>
|