Просмотр исходного кода

Add some more links to the Entry SCCD model

Yentl Van Tendeloo 8 лет назад
Родитель
Сommit
93bd9bfe8a
3 измененных файлов с 72 добавлено и 31 удалено
  1. 68 30
      classes/window/attribute_editor.xml
  2. 1 1
      frontend.py
  3. 3 0
      frontend.xml

+ 68 - 30
classes/window/attribute_editor.xml

@@ -24,6 +24,7 @@
             self.associations_type = {}
             self.associations_optional = {}
             self.associations_delete = {}
+            self.dirty = None
         </body>
     </constructor>
 
@@ -99,8 +100,7 @@
                                     <raise event="create_instance" scope="cd">
                                         <parameter expr="'names'"/>
                                         <parameter expr="'Entry'"/>
-                                        <parameter expr="self"/>
-                                        <parameter expr="self.current_attr['name']"/>
+                                        <parameter expr="{'parent': self, 'name': self.current_attr['name'], 'value': self.current_attr['name']}"/>
                                     </raise>
                                 </onentry>
 
@@ -282,7 +282,7 @@
                     </script>
                 </transition>
 
-                <transition event="change_dropdown" target="../change_type">
+                <transition event="changed_dropdown" target="../change_type">
                     <parameter name="event_name"/>
                     <parameter name="new_name"/>
                     <script>
@@ -290,13 +290,20 @@
                     </script>
                 </transition>
 
-                <transition event="change_entry" target="../change_name">
+                <transition event="changed_entry" target="../change_name">
                     <parameter name="original_name"/>
                     <parameter name="new_name"/>
                     <script>
                         self.parameter = (original_name, new_name)
                     </script>
                 </transition>
+
+                <transition cond="self.dirty" target="../change_name">
+                    <script>
+                        self.parameter = self.dirty[1:3]
+                        self.dirty = None
+                    </script>
+                </transition>
             </state>
 
             <state id="change_type">
@@ -312,34 +319,65 @@
 
             <state id="change_name">
                 <onentry>
-                    <raise event="mv_request" scope="broad">
-                        <parameter expr="'attr_name'"/>
-                        <parameter expr="[current_model, self.as_element, self.parameter[0], self.parameter[1]]"/>
-                    </raise>
+                    <raise event="mark_uncommitted" scope="narrow" target="self.associations_name[self.parameter[0]]"/>
                 </onentry>
 
-                <transition event="mv_response" target="../running">
-                    <raise event="change_event_name" scope="narrow" target="self.associations_type[self.parameter[0]]">
-                        <parameter expr="self.parameter[1]"/>
-                    </raise>
-                    <raise event="change_event_name" scope="narrow" target="self.associations_optional[self.parameter[0]]">
-                        <parameter expr="self.parameter[1]"/>
-                    </raise>
-                    <raise event="change_event_name" scope="narrow" target="self.associations_delete[self.parameter[0]]">
-                        <parameter expr="self.parameter[1]"/>
-                    </raise>
-                    <script>
-                        self.associations_name[self.parameter[1]] = self.associations_name[self.parameter[0]]
-                        self.associations_type[self.parameter[1]] = self.associations_type[self.parameter[0]]
-                        self.associations_optional[self.parameter[1]] = self.associations_optional[self.parameter[0]]
-                        self.associations_delete[self.parameter[1]] = self.associations_delete[self.parameter[0]]
-
-                        del self.associations_name[self.parameter[0]]
-                        del self.associations_type[self.parameter[0]]
-                        del self.associations_optional[self.parameter[0]]
-                        del self.associations_delete[self.parameter[0]]
-                    </script>
-                </transition>
+                <state id="waiting">
+                    <transition after="1.0" target="../commit"/>
+
+                    <transition event="changed_entry" target=".">
+                        <parameter name="original_name"/>
+                        <parameter name="new_name"/>
+                        <script>
+                            self.parameter = (original_name, new_name)
+                        </script>
+                    </transition>
+                </state>
+
+                <state id="commit">
+                    <onentry>
+                        <raise event="mv_request" scope="broad">
+                            <parameter expr="'attr_name'"/>
+                            <parameter expr="[current_model, self.as_element, self.parameter[0], self.parameter[1]]"/>
+                        </raise>
+                        <raise event="change_event_name" scope="narrow" target="self.associations_name[self.parameter[0]]">
+                            <parameter expr="self.parameter[1]"/>
+                        </raise>
+                    </onentry>
+
+                    <transition event="changed_entry" target=".">
+                        <parameter name="original_name"/>
+                        <parameter name="new_name"/>
+                        <script>
+                            self.dirty = (True, original_name, new_name)
+                        </script>
+                    </transition>
+
+                    <transition event="mv_response" target="../running">
+                        <raise event="change_event_name" scope="narrow" target="self.associations_type[self.parameter[0]]">
+                            <parameter expr="self.parameter[1]"/>
+                        </raise>
+                        <raise event="mark_committed" scope="narrow" target="self.associations_name[self.parameter[0]]"/>
+                        <raise event="change_triggers" scope="narrow" target="self.associations_optional[self.parameter[0]]">
+                            <parameter expr="'optional_%s' % self.parameter[1]"/>
+                            <parameter expr="'mandatory_%s' % self.parameter[1]"/>
+                        </raise>
+                        <raise event="change_event_name" scope="narrow" target="self.associations_delete[self.parameter[0]]">
+                            <parameter expr="self.parameter[1]"/>
+                        </raise>
+                        <script>
+                            self.associations_name[self.parameter[1]] = self.associations_name[self.parameter[0]]
+                            self.associations_type[self.parameter[1]] = self.associations_type[self.parameter[0]]
+                            self.associations_optional[self.parameter[1]] = self.associations_optional[self.parameter[0]]
+                            self.associations_delete[self.parameter[1]] = self.associations_delete[self.parameter[0]]
+
+                            del self.associations_name[self.parameter[0]]
+                            del self.associations_type[self.parameter[0]]
+                            del self.associations_optional[self.parameter[0]]
+                            del self.associations_delete[self.parameter[0]]
+                        </script>
+                    </transition>
+                </state>
             </state>
 
             <state id="create_new_entry">

+ 1 - 1
frontend.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Wed Oct 11 19:26:54 2017
+Date:   Thu Oct 12 14:24:42 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 

+ 3 - 0
frontend.xml

@@ -23,6 +23,7 @@
     <class src="classes/main_app.xml" default="true" />
     <class src="classes/modelverse/modelverse.xml"/>
     <class src="classes/modelverse/http_client.xml"/>
+    <class src="classes/window/attribute_editor.xml"/>
     <class src="classes/window/prompt_window.xml"/>
     <class src="classes/window/main_window.xml"/>
     <class src="classes/window/browser.xml"/>
@@ -34,7 +35,9 @@
     <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/entry.xml"/>
     <class src="classes/widgets/button.xml"/>
+    <class src="classes/widgets/toggle_button.xml"/>
     <class src="classes/widgets/label.xml"/>
     <class src="classes/widgets/progress_bar.xml"/>
     <class src="classes/canvas/canvas.xml"/>