Переглянути джерело

Give progress bar when opening/creating model

Yentl Van Tendeloo 8 роки тому
батько
коміт
b4827f6365
2 змінених файлів з 101 додано та 9 видалено
  1. 76 3
      classes/window/main_window.xml
  2. 25 6
      models/render_SCD.alc

+ 76 - 3
classes/window/main_window.xml

@@ -113,6 +113,12 @@
 
         <state id="running" initial="idle">
             <state id="idle">
+                <onentry>
+                    <raise event="update_status" scope="narrow" target="'progress_bar'">
+                        <parameter expr="0"/>
+                        <parameter expr="'Ready for action!'"/>
+                    </raise>
+                </onentry>
                 <transition event="create_new_model" target="../create_new_model"/>
                 <transition event="open_model" target="../open_model"/>
             </state>
@@ -126,6 +132,10 @@
                             <parameter expr="'Select model to open'"/>
                             <parameter expr="['formalisms/SimpleClassDiagrams']"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="0"/>
+                            <parameter expr="'Browsing for model...'"/>
+                        </raise>
                     </onentry>
 
                     <transition event="instance_created" target="../wait_for_model">
@@ -144,6 +154,11 @@
                         <raise event="delete_instance" scope="cd">
                             <parameter expr="self.subwindow"/>
                         </raise>
+
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="10"/>
+                            <parameter expr="'Browsing for model... OK'"/>
+                        </raise>
                     </transition>
 
                     <transition event="browse_result" target="../got_model">
@@ -168,6 +183,10 @@
                             <parameter expr="'model_types'"/>
                             <parameter expr="[self.current_model]"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="10"/>
+                            <parameter expr="'Querying existing metamodels...'"/>
+                        </raise>
                     </onentry>
 
                     <transition event="mv_response" target="../prompt_metamodel">
@@ -179,6 +198,10 @@
                             else:
                                 self.metamodel = ''
                         </script>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="20"/>
+                            <parameter expr="'Querying existing metamodels... OK'"/>
+                        </raise>
                     </transition>
                 </state>
 
@@ -190,6 +213,10 @@
                             <parameter expr="{'Metamodel name': self.metamodel}"/>
                             <parameter expr="{}"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="30"/>
+                            <parameter expr="'Requesting desired metamodel...'"/>
+                        </raise>
                     </onentry>
 
                     <transition event="instance_created" target="../waiting_for_metamodel_name">
@@ -215,6 +242,10 @@
                         <raise event="delete_instance" scope="cd">
                             <parameter expr="self.subwindow"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="40"/>
+                            <parameter expr="'Requesting desired metamodel... OK'"/>
+                        </raise>
                     </transition>
 
                     <transition event="close_window" cond="self.metamodel == ''" target="../../idle">
@@ -238,6 +269,10 @@
                             <parameter expr="'Select metamodel to instantiate'"/>
                             <parameter expr="['formalisms/SimpleClassDiagrams']"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="0"/>
+                            <parameter expr="'Browsing for metamodel...'"/>
+                        </raise>
                     </onentry>
 
                     <transition event="instance_created" target="../wait_for_metamodel">
@@ -271,6 +306,10 @@
                         <raise event="delete_instance" scope="cd">
                             <parameter expr="self.subwindow"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="10"/>
+                            <parameter expr="'Browsing for metamodel... OK'"/>
+                        </raise>
                     </transition>
                 </state>
 
@@ -282,6 +321,10 @@
                             <parameter expr="{'Model name': ''}"/>
                             <parameter expr="{}"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="10"/>
+                            <parameter expr="'Prompt model name...'"/>
+                        </raise>
                     </onentry>
 
                     <transition event="instance_created" target="../waiting_for_model_name">
@@ -308,6 +351,10 @@
                         <raise event="delete_instance" scope="cd">
                             <parameter expr="self.subwindow"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="20"/>
+                            <parameter expr="'Prompt model name... OK'"/>
+                        </raise>
                     </transition>
 
                     <transition event="close_window" cond="self.current_model == ''" target="../../idle">
@@ -323,12 +370,17 @@
                             <parameter expr="'model_add'"/>
                             <parameter expr="[self.current_model, self.metamodel, '']"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="25"/>
+                            <parameter expr="'Creating empty model...'"/>
+                        </raise>
                     </onentry>
 
                     <transition event="mv_response" target="../../rerender_model">
-                        <script>
-                            print("Got added model")
-                        </script>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="40"/>
+                            <parameter expr="'Creating empty model... OK'"/>
+                        </raise>
                     </transition>
                 </state>
             </state>
@@ -340,18 +392,39 @@
                             <parameter expr="'model_render'"/>
                             <parameter expr="[self.current_model, 'models/render_SCD']"/>
                         </raise>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="50"/>
+                            <parameter expr="'Perceptualizing model...'"/>
+                        </raise>
                     </onentry>
 
                     <transition event="mv_response" target="../render_model">
                         <parameter name="result"/>
                         <script>
                             print("Result: " + str(result))
+                            self.rendered = result
                         </script>
                     </transition>
                     <transition event="mv_exception" target="../../../close"/>
                 </state>
 
                 <state id="render_model">
+                    <onentry>
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="80"/>
+                            <parameter expr="'Perceptualizing model... OK'"/>
+                        </raise>
+                    </onentry>
+
+                    <state id="render_first">
+                        <transition cond="len(self.rendered) > 0" target=".">
+                            <script>
+                                to_render = self.rendered.pop()
+                            </script>
+                        </transition>
+
+                        <transition cond="len(self.rendered) == 0" target="../../../idle"/>
+                    </state>
                 </state>
             </state>
 

+ 25 - 6
models/render_SCD.alc

@@ -6,26 +6,45 @@ Boolean function main(model : Element):
 	log("Got model to render!")
 	log("Classes:")
 
-	Element classes
+	Element elements
 	String class
 	Element attrs
 	Element attr_keys
 	String attr_key
 
-	classes = allInstances(model, "abstract/Class")
-	while (set_len(classes) > 0):
-		class = set_pop(classes)
+	log("Classes:")
+	elements = allInstances(model, "abstract/Class")
+	while (set_len(elements) > 0):
+		class = set_pop(elements)
+		attr_keys = dict_keys(getAttributeList(model, class))
+
+		while (set_len(attr_keys) > 0):
+			attr_key = set_pop(attr_keys)
+			log((("  " + attr_key) + " = ") + cast_v2s(read_attribute(model, class, attr_key)))
+
+		attrs = getInstantiatableAttributes(model, class, "abstract/AttributeLink")
+		attr_keys = dict_keys(attrs)
+		while (dict_len(attr_keys) > 0):
+			attr_key = set_pop(attr_keys)
+			log((("  " + attr_key) + " : ") + cast_v2s(list_read(string_split(attrs[attr_key], "/"), 1)))
+
+		log("")
+
+	log("Associations:")
+	elements = allInstances(model, "abstract/Association")
+	while (set_len(elements) > 0):
+		class = set_pop(elements)
 		attr_keys = dict_keys(getAttributeList(model, class))
 
 		while (set_len(attr_keys) > 0):
 			attr_key = set_pop(attr_keys)
 			log((("  " + attr_key) + " = ") + cast_v2s(read_attribute(model, class, attr_key)))
 
-		attrs = getInstantiatableAttributes(model, class)
+		attrs = getInstantiatableAttributes(model, class, "abstract/AttributeLink")
 		attr_keys = dict_keys(attrs)
 		while (dict_len(attr_keys) > 0):
 			attr_key = set_pop(attr_keys)
-			log((("  " + attr_key) + " : ") + cast_v2s(attrs[attr_key]))
+			log((("  " + attr_key) + " : ") + cast_v2s(list_read(string_split(attrs[attr_key], "/"), 1)))
 
 		log("")