Pārlūkot izejas kodu

Add working "verify" button, as well as some prepared toolbars

Yentl Van Tendeloo 8 gadi atpakaļ
vecāks
revīzija
0e950fd963

+ 7 - 5
classes/modelverse/modelverse.xml

@@ -356,11 +356,13 @@
                             </raise>
                         </onentry>
 
-                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
-                            <raise event="result">
-                                <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
-                            </raise>
-                        </transition>
+                        <state id="waiting">
+                            <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../../wait_for_action/history">
+                                <raise event="result">
+                                    <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                                </raise>
+                            </transition>
+                        </state>
                     </state>
 
                     <state id="alter_context">

+ 9 - 10
classes/toolbar/model_toolbar.xml

@@ -1,28 +1,27 @@
-<class name="ModelToolbar">
+<class name="ConcreteSyntaxToolbar">
     <relationships>
-        <inheritance class="tk.Frame" priority="1"/>
-        <inheritance class="SCCDWidget" priority="0"/>
+        <inheritance class="Toolbar"/>
         <association name="buttons" class="Button"/>
         <association name="parent" class="A"/>
     </relationships>
 
     <constructor>
         <parameter name="parent"/>
-        <super class="tk.Frame">
+        <super class="Toolbar">
             <parameter expr="parent"/>
         </super>
-        <super class="SCCDWidget"/>
         <body>
-            self.to_create = ["verify"]
-            self.button_info = {"verify": "Check conformance of currently loaded model.",
+            self.to_create = ["rerender", "new_rendered", "object_diagrams"]
+            self.button_info = {"rerender": "TODO",
+                                "new_rendered": "TODO",
+                                "object_diagrams": "TODO",
                                 }
             self.buttons = {}
         </body>
     </constructor>
+
     <destructor>
-        <body>
-            self.destroy()
-        </body>
+        <super class="Toolbar"/>
     </destructor>
 
     <scxml initial="init">

+ 100 - 0
classes/toolbar/dsl_toolbar.xml

@@ -0,0 +1,100 @@
+<class name="DSLToolbar">
+    <relationships>
+        <inheritance class="Toolbar"/>
+        <association name="buttons" class="Button"/>
+        <association name="parent" class="A"/>
+    </relationships>
+
+    <constructor>
+        <parameter name="parent"/>
+        <super class="Toolbar">
+            <parameter expr="parent"/>
+        </super>
+        <body>
+            self.to_create = ["new"]
+            self.button_info = {"new": "REMOVE"}
+            self.buttons = {}
+        </body>
+    </constructor>
+
+    <destructor>
+        <super class="Toolbar"/>
+    </destructor>
+
+    <scxml initial="init">
+        <state id="init" initial="init_buttons">
+            <onexit>
+                <raise event="tk_widget" scope="narrow" target="'parent'">
+                    <parameter expr="self"/>
+                </raise>
+            </onexit>
+
+            <state id="init_buttons">
+                <onentry>
+                    <raise event="create_instance" scope="cd">
+                        <parameter expr="'buttons'"/>
+                        <parameter expr="'Button'"/>
+                        <parameter expr="{'parent': self, 'visual': ImageVisual('icons/%s.png' % self.to_create[0]), 'tooltip_text': self.button_info[self.to_create[0]], 'event_parameters': self.to_create[0]}"/>
+                    </raise>
+                </onentry>
+
+                <transition event="instance_created" target="../pack_button">
+                    <parameter name="association_name"/>
+                    <raise event="start_instance" scope="cd">
+                        <parameter expr="association_name"/>
+                    </raise>
+
+                    <script>
+                        self.buttons[self.to_create[0]] = association_name
+                        self.to_create.pop(0)
+                    </script>
+                </transition>
+            </state>
+
+            <state id="pack_button">
+                <transition event="tk_widget" target="../next_button">
+                    <parameter name="tk_elem"/>
+                    <script>
+                        tk_elem.pack(side=tk.LEFT)
+                    </script>
+                </transition>
+            </state>
+
+            <state id="next_button">
+                <transition cond="len(self.to_create) == 0" target="../../root"/>
+                <transition cond="len(self.to_create) > 0" target="../init_buttons"/>
+            </state>
+        </state>
+
+        <state id="root">
+            <transition event="button_pressed" cond="event_name == 'new'" target=".">
+                <parameter name="event_name"/>
+                <raise event="create_new_model" scope="narrow" target="'parent'"/>
+            </transition>
+
+            <transition event="button_pressed" cond="event_name == 'open'" target=".">
+                <parameter name="event_name"/>
+                <raise event="open_model" scope="narrow" target="'parent'"/>
+            </transition>
+
+            <transition event="close" target="../closing"/>
+        </state>
+
+        <state id="closing">
+            <onentry>
+                <raise event="delete_instance" scope="cd">
+                    <parameter expr="self.buttons.popitem()[1]"/>
+                </raise>
+            </onentry>
+
+            <transition event="instance_deleted" cond="len(self.buttons) > 0" target="../closing"/>
+            <transition event="instance_deleted" cond="len(self.buttons) == 0" target="../close"/>
+        </state>
+            
+        <state id="close">
+            <onentry>
+                <raise event="close_window" scope="narrow" target="'parent'"/>
+            </onentry>
+        </state>
+    </scxml>
+</class>

+ 4 - 7
classes/toolbar/generic_toolbar.xml

@@ -1,17 +1,15 @@
 <class name="GenericToolbar">
     <relationships>
-        <inheritance class="tk.Frame" priority="1"/>
-        <inheritance class="SCCDWidget" priority="0"/>
+        <inheritance class="Toolbar"/>
         <association name="buttons" class="Button"/>
         <association name="parent" class="A"/>
     </relationships>
 
     <constructor>
         <parameter name="parent"/>
-        <super class="tk.Frame">
+        <super class="Toolbar">
             <parameter expr="parent"/>
         </super>
-        <super class="SCCDWidget"/>
         <body>
             self.to_create = ["new", "open"]
             self.button_info = {"new": "Create a new model",
@@ -19,10 +17,9 @@
             self.buttons = {}
         </body>
     </constructor>
+
     <destructor>
-        <body>
-            self.destroy()
-        </body>
+        <super class="Toolbar"/>
     </destructor>
 
     <scxml initial="init">

+ 100 - 0
classes/toolbar/metamodelling_toolbar.xml

@@ -0,0 +1,100 @@
+<class name="MetamodellingToolbar">
+    <relationships>
+        <inheritance class="Toolbar"/>
+        <association name="buttons" class="Button"/>
+        <association name="parent" class="A"/>
+    </relationships>
+
+    <constructor>
+        <parameter name="parent"/>
+        <super class="Toolbar">
+            <parameter expr="parent"/>
+        </super>
+        <body>
+            self.to_create = ["verify", "custom_MM", "conf_bottom", "upload_ALC", "upload_MVC"]
+            self.button_info = {"verify": "Verify if the current model conforms to the current metamodel.",
+                                "custom_MM": "TODO",
+                                "conf_bottom": "TODO",
+                                "upload_ALC": "TODO",
+                                "upload_MVC": "TODO",
+                                }
+            self.buttons = {}
+        </body>
+    </constructor>
+
+    <destructor>
+        <super class="Toolbar"/>
+    </destructor>
+
+    <scxml initial="init">
+        <state id="init" initial="init_buttons">
+            <onexit>
+                <raise event="tk_widget" scope="narrow" target="'parent'">
+                    <parameter expr="self"/>
+                </raise>
+            </onexit>
+
+            <state id="init_buttons">
+                <onentry>
+                    <raise event="create_instance" scope="cd">
+                        <parameter expr="'buttons'"/>
+                        <parameter expr="'Button'"/>
+                        <parameter expr="{'parent': self, 'visual': ImageVisual('icons/%s.png' % self.to_create[0]), 'tooltip_text': self.button_info[self.to_create[0]], 'event_parameters': self.to_create[0]}"/>
+                    </raise>
+                </onentry>
+
+                <transition event="instance_created" target="../pack_button">
+                    <parameter name="association_name"/>
+                    <raise event="start_instance" scope="cd">
+                        <parameter expr="association_name"/>
+                    </raise>
+
+                    <script>
+                        self.buttons[self.to_create[0]] = association_name
+                        self.to_create.pop(0)
+                    </script>
+                </transition>
+            </state>
+
+            <state id="pack_button">
+                <transition event="tk_widget" target="../next_button">
+                    <parameter name="tk_elem"/>
+                    <script>
+                        tk_elem.pack(side=tk.LEFT)
+                    </script>
+                </transition>
+            </state>
+
+            <state id="next_button">
+                <transition cond="len(self.to_create) == 0" target="../../root"/>
+                <transition cond="len(self.to_create) > 0" target="../init_buttons"/>
+            </state>
+        </state>
+
+        <state id="root">
+            <transition event="button_pressed" cond="event_name == 'verify'" target=".">
+                <parameter name="event_name"/>
+                <raise event="verify" scope="narrow" target="'parent'"/>
+            </transition>
+
+            <transition event="close" target="../closing"/>
+        </state>
+
+        <state id="closing">
+            <onentry>
+                <raise event="delete_instance" scope="cd">
+                    <parameter expr="self.buttons.popitem()[1]"/>
+                </raise>
+            </onentry>
+
+            <transition event="instance_deleted" cond="len(self.buttons) > 0" target="../closing"/>
+            <transition event="instance_deleted" cond="len(self.buttons) == 0" target="../close"/>
+        </state>
+            
+        <state id="close">
+            <onentry>
+                <raise event="close_window" scope="narrow" target="'parent'"/>
+            </onentry>
+        </state>
+    </scxml>
+</class>

+ 24 - 0
classes/toolbar/toolbar.xml

@@ -0,0 +1,24 @@
+<class name="Toolbar">
+    <relationships>
+        <inheritance class="tk.Frame" priority="1"/>
+        <inheritance class="SCCDWidget" priority="0"/>
+    </relationships>
+
+    <constructor>
+        <parameter name="parent"/>
+        <super class="tk.Frame">
+            <parameter expr="parent"/>
+        </super>
+        <super class="SCCDWidget"/>
+    </constructor>
+
+    <destructor>
+        <body>
+            self.destroy()
+        </body>
+    </destructor>
+
+    <scxml>
+        <state id="NONE"/>
+    </scxml>
+</class>

+ 2 - 2
classes/window/browser.xml

@@ -65,7 +65,7 @@
                 <transition event="tk_widget" target="../button_back">
                     <parameter name="tk_elem"/>
                     <script>
-                        tk_elem.pack(fill=tk.BOTH, expand=tk.TRUE)
+                        tk_elem.pack(anchor=tk.W, fill=tk.BOTH, expand=tk.TRUE)
                     </script>
                 </transition>
             </state>
@@ -95,7 +95,7 @@
                 <transition event="tk_widget" target="../progressbar">
                     <parameter name="tk_elem"/>
                     <script>
-                        tk_elem.pack(fill=tk.BOTH, expand=tk.TRUE)
+                        tk_elem.pack(anchor=tk.E, fill=tk.BOTH, expand=tk.TRUE)
                     </script>
                 </transition>
             </state>

+ 167 - 29
classes/window/main_window.xml

@@ -19,6 +19,7 @@
             self.toolbar_frame.pack(fill=tk.X)
             self.canvas_frame.pack(fill=tk.BOTH, expand=tk.TRUE)
             self.progressbar_frame.pack(fill=tk.X)
+            self.model_loaded = False
         </body>
     </constructor>
 
@@ -48,36 +49,10 @@
             </state>
             
             <state id="pack_generic">
-                <transition event="tk_widget" target="../canvas">
-                    <parameter name="tk_elem"/>
-                    <script>
-                        tk_elem.pack(side=tk.LEFT, fill=tk.X, expand=tk.TRUE)
-                    </script>
-                </transition>
-            </state>
-
-            <state id="canvas">
-                <onentry>
-                    <raise event="create_instance" scope="cd">
-                        <parameter expr="'canvas'"/>
-                        <parameter expr="'Canvas'"/>
-                        <parameter expr="self.canvas_frame"/>
-                    </raise>
-                </onentry>
-                
-                <transition event="instance_created" target="../pack_canvas">
-                    <parameter name="association_name"/>
-                    <raise event="start_instance" scope="cd">
-                        <parameter expr="association_name"/>
-                    </raise>
-                </transition>
-            </state>
-
-            <state id="pack_canvas">
                 <transition event="tk_widget" target="../progressbar">
                     <parameter name="tk_elem"/>
                     <script>
-                        tk_elem.pack(fill=tk.BOTH, expand=tk.TRUE)
+                        tk_elem.pack(anchor=tk.NW)
                     </script>
                 </transition>
             </state>
@@ -103,7 +78,7 @@
                 <transition event="tk_widget" target="../../running">
                     <parameter name="tk_elem"/>
                     <script>
-                        tk_elem.pack(fill=tk.X, expand=tk.TRUE)
+                        tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
                     </script>
                 </transition>
             </state>
@@ -120,6 +95,54 @@
                 <transition event="create_new_model" target="../create_new_model"/>
                 <transition event="open_model" target="../open_model"/>
                 <transition event="rerender_model" target="../rerender_model"/>
+                <transition event="verify" target="../verify_model"/>
+            </state>
+
+            <state id="verify_model" initial="request">
+                <state id="request">
+                    <onentry>
+                        <raise event="mv_request" scope="broad">
+                            <parameter expr="'verify'"/>
+                            <parameter expr="[current_model, current_metamodel]"/>
+                        </raise>
+                    </onentry>
+
+                    <transition event="mv_progress" target=".">
+                        <parameter name="result"/>
+
+                        <raise event="update_status" scope="narrow" target="'progress_bar'">
+                            <parameter expr="result * 100"/>
+                            <parameter expr="'Verifying...'"/>
+                        </raise>
+                    </transition>
+
+                    <transition event="mv_response" target="../show_result">
+                        <parameter name="result"/>
+                        <raise event="create_instance" scope="cd">
+                            <parameter expr="'subwindow'"/>
+                            <parameter expr="'Popup'"/>
+                            <parameter expr="result"/>
+                        </raise>
+
+                    </transition>
+                </state>
+
+                <state id="show_result">
+                    <transition event="instance_created" target="../wait_for_close">
+                        <parameter name="assoc_name"/>
+                        <raise event="start_instance" scope="cd">
+                            <parameter expr="assoc_name"/>
+                        </raise>
+                    </transition>
+                </state>
+
+                <state id="wait_for_close">
+                    <transition event="close_window" target="../../idle">
+                        <raise event="delete_instance" scope="cd">
+                            <parameter expr="'subwindow'"/>
+                        </raise>
+                    </transition>
+                </state>
             </state>
 
             <state id="open_model" initial="query_model">
@@ -405,7 +428,122 @@
                 </state>
             </state>
 
-            <state id="rerender_model" initial="request_render">
+            <state id="rerender_model" initial="initial_render">
+                <state id="initial_render">
+                    <transition cond="self.model_loaded" target="../request_render"/>
+                    <transition cond="not self.model_loaded" target="../canvas">
+                        <script>
+                            self.model_loaded = True
+                        </script>
+                    </transition>
+                </state>
+
+                <state id="canvas">
+                    <onentry>
+                        <raise event="create_instance" scope="cd">
+                            <parameter expr="'canvas'"/>
+                            <parameter expr="'Canvas'"/>
+                            <parameter expr="self.canvas_frame"/>
+                        </raise>
+                    </onentry>
+                    
+                    <transition event="instance_created" target="../pack_canvas">
+                        <parameter name="association_name"/>
+                        <raise event="start_instance" scope="cd">
+                            <parameter expr="association_name"/>
+                        </raise>
+                    </transition>
+                </state>
+
+                <state id="pack_canvas">
+                    <transition event="tk_widget" target="../model_toolbars">
+                        <parameter name="tk_elem"/>
+                        <script>
+                            tk_elem.pack(fill=tk.BOTH, expand=tk.TRUE)
+                        </script>
+                    </transition>
+                </state>
+
+                <state id="model_toolbars" initial="mm_toolbar">
+                    <state id="mm_toolbar">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'toolbars'"/>
+                                <parameter expr="'MetamodellingToolbar'"/>
+                                <parameter expr="self.toolbar_frame"/>
+                            </raise>
+                        </onentry>
+
+                        <transition event="instance_created" target="../pack_mm_toolbar">
+                            <parameter name="association_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="association_name"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="pack_mm_toolbar">
+                        <transition event="tk_widget" target="../cs_toolbar">
+                            <parameter name="tk_elem"/>
+                            <script>
+                                tk_elem.pack(anchor=tk.W)
+                            </script>
+                        </transition>
+                    </state>
+
+                    <state id="cs_toolbar">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'toolbars'"/>
+                                <parameter expr="'ConcreteSyntaxToolbar'"/>
+                                <parameter expr="self.toolbar_frame"/>
+                            </raise>
+                        </onentry>
+
+                        <transition event="instance_created" target="../pack_cs_toolbar">
+                            <parameter name="association_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="association_name"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="pack_cs_toolbar">
+                        <transition event="tk_widget" target="../dsl_toolbar">
+                            <parameter name="tk_elem"/>
+                            <script>
+                                tk_elem.pack(anchor=tk.W)
+                            </script>
+                        </transition>
+                    </state>
+
+                    <state id="dsl_toolbar">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'toolbars'"/>
+                                <parameter expr="'DSLToolbar'"/>
+                                <parameter expr="self.toolbar_frame"/>
+                            </raise>
+                        </onentry>
+
+                        <transition event="instance_created" target="../pack_dsl_toolbar">
+                            <parameter name="association_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="association_name"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="pack_dsl_toolbar">
+                        <transition event="tk_widget" target="../../request_render">
+                            <parameter name="tk_elem"/>
+                            <script>
+                                tk_elem.pack(anchor=tk.W)
+                            </script>
+                        </transition>
+                    </state>
+                </state>
+
                 <state id="request_render">
                     <onentry>
                         <raise event="mv_request" scope="broad">

+ 85 - 0
classes/window/popup.xml

@@ -0,0 +1,85 @@
+<class name="Popup">
+    <relationships>
+        <inheritance class="tk.Toplevel" priority="1"/>
+        <inheritance class="SCCDWidget" priority="0"/>
+        <association name="buttons" class="Button"/>
+        <association name="parent" class="A"/>
+    </relationships>
+
+    <constructor>
+        <parameter name="message"/>
+        <super class="tk.TopLevel"/>
+        <super class="SCCDWidget"/>
+        <body>
+            self.frame = tk.Frame(self)
+            tk.Label(self.frame, text=message).pack()
+            self.frame.pack()
+        </body>
+    </constructor>
+
+    <destructor>
+        <body>
+            self.destroy()
+        </body>
+    </destructor>
+
+    <scxml initial="init">
+        <state id="init" initial="init_button_OK">
+            <state id="init_button_OK">
+                <onentry>
+                    <raise event="create_instance" scope="cd">
+                        <parameter expr="'buttons'"/>
+                        <parameter expr="'Button'"/>
+                        <parameter expr="{'parent': self, 'visual': TextVisual('OK'), 'tooltip_text': 'Close popup.', 'event_parameters': 'OK'}"/>
+                    </raise>
+                </onentry>
+
+                <transition event="instance_created" target="../wait_for_packing">
+                    <parameter name="association_name"/>
+                    <raise event="start_instance" scope="cd">
+                        <parameter expr="association_name"/>
+                    </raise>
+
+                    <script>
+                        self.button = association_name
+                    </script>
+                </transition>
+            </state>
+
+            <state id="wait_for_packing">
+                <transition event="tk_widget" target="../../root">
+                    <parameter name="tk_elem"/>
+                    <script>
+                        tk_elem.pack(fill=tk.X)
+                    </script>
+                </transition>
+            </state>
+        </state>
+
+        <state id="root">
+            <transition event="button_pressed" cond="event_name == 'OK'" target="../closing">
+                <parameter name="event_name"/>
+            </transition>
+
+            <transition event="window-close" cond="ID == id(self)" target="../closing">
+                <parameter name="ID"/>
+            </transition>
+        </state>
+
+        <state id="closing">
+            <onentry>
+                <raise event="delete_instance" scope="cd">
+                    <parameter expr="self.button"/>
+                </raise>
+            </onentry>
+
+            <transition event="instance_deleted" target="../close"/>
+        </state>
+            
+        <state id="close">
+            <onentry>
+                <raise event="close_window" scope="narrow" target="'parent'"/>
+            </onentry>
+        </state>
+    </scxml>
+</class>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1089 - 192
frontend.py


+ 5 - 0
frontend.xml

@@ -27,7 +27,12 @@
     <class src="classes/window/main_window.xml"/>
     <class src="classes/window/browser.xml"/>
     <class src="classes/window/splash_window.xml"/>
+    <class src="classes/window/popup.xml"/>
+    <class src="classes/toolbar/toolbar.xml"/>
     <class src="classes/toolbar/generic_toolbar.xml"/>
+    <class src="classes/toolbar/dsl_toolbar.xml"/>
+    <class src="classes/toolbar/metamodelling_toolbar.xml"/>
+    <class src="classes/toolbar/concretesyntax_toolbar.xml"/>
     <class src="classes/widgets/button.xml"/>
     <class src="classes/widgets/label.xml"/>
     <class src="classes/widgets/progress_bar.xml"/>

+ 1 - 0
icons/conf_bottom.png

@@ -0,0 +1 @@
+todo.png

+ 1 - 0
icons/custom_MM.png

@@ -0,0 +1 @@
+todo.png

+ 1 - 0
icons/new_rendered.png

@@ -0,0 +1 @@
+todo.png

+ 1 - 0
icons/object_diagrams.png

@@ -0,0 +1 @@
+todo.png

+ 1 - 0
icons/rerender.png

@@ -0,0 +1 @@
+todo.png

BIN
icons/todo.png


+ 1 - 0
icons/upload_ALC.png

@@ -0,0 +1 @@
+todo.png

+ 1 - 0
icons/upload_MVC.png

@@ -0,0 +1 @@
+todo.png

BIN
icons/verify.png