Kaynağa Gözat

Add some more links to the Entry SCCD model

Yentl Van Tendeloo 8 yıl önce
ebeveyn
işleme
93bd9bfe8a
3 değiştirilmiş dosya ile 72 ekleme ve 31 silme
  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_type = {}
             self.associations_optional = {}
             self.associations_optional = {}
             self.associations_delete = {}
             self.associations_delete = {}
+            self.dirty = None
         </body>
         </body>
     </constructor>
     </constructor>
 
 
@@ -99,8 +100,7 @@
                                     <raise event="create_instance" scope="cd">
                                     <raise event="create_instance" scope="cd">
                                         <parameter expr="'names'"/>
                                         <parameter expr="'names'"/>
                                         <parameter expr="'Entry'"/>
                                         <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>
                                     </raise>
                                 </onentry>
                                 </onentry>
 
 
@@ -282,7 +282,7 @@
                     </script>
                     </script>
                 </transition>
                 </transition>
 
 
-                <transition event="change_dropdown" target="../change_type">
+                <transition event="changed_dropdown" target="../change_type">
                     <parameter name="event_name"/>
                     <parameter name="event_name"/>
                     <parameter name="new_name"/>
                     <parameter name="new_name"/>
                     <script>
                     <script>
@@ -290,13 +290,20 @@
                     </script>
                     </script>
                 </transition>
                 </transition>
 
 
-                <transition event="change_entry" target="../change_name">
+                <transition event="changed_entry" target="../change_name">
                     <parameter name="original_name"/>
                     <parameter name="original_name"/>
                     <parameter name="new_name"/>
                     <parameter name="new_name"/>
                     <script>
                     <script>
                         self.parameter = (original_name, new_name)
                         self.parameter = (original_name, new_name)
                     </script>
                     </script>
                 </transition>
                 </transition>
+
+                <transition cond="self.dirty" target="../change_name">
+                    <script>
+                        self.parameter = self.dirty[1:3]
+                        self.dirty = None
+                    </script>
+                </transition>
             </state>
             </state>
 
 
             <state id="change_type">
             <state id="change_type">
@@ -312,34 +319,65 @@
 
 
             <state id="change_name">
             <state id="change_name">
                 <onentry>
                 <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>
                 </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>
 
 
             <state id="create_new_entry">
             <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)
 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 author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
 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/main_app.xml" default="true" />
     <class src="classes/modelverse/modelverse.xml"/>
     <class src="classes/modelverse/modelverse.xml"/>
     <class src="classes/modelverse/http_client.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/prompt_window.xml"/>
     <class src="classes/window/main_window.xml"/>
     <class src="classes/window/main_window.xml"/>
     <class src="classes/window/browser.xml"/>
     <class src="classes/window/browser.xml"/>
@@ -34,7 +35,9 @@
     <class src="classes/toolbar/dsl_toolbar.xml"/>
     <class src="classes/toolbar/dsl_toolbar.xml"/>
     <class src="classes/toolbar/metamodelling_toolbar.xml"/>
     <class src="classes/toolbar/metamodelling_toolbar.xml"/>
     <class src="classes/toolbar/concretesyntax_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/button.xml"/>
+    <class src="classes/widgets/toggle_button.xml"/>
     <class src="classes/widgets/label.xml"/>
     <class src="classes/widgets/label.xml"/>
     <class src="classes/widgets/progress_bar.xml"/>
     <class src="classes/widgets/progress_bar.xml"/>
     <class src="classes/canvas/canvas.xml"/>
     <class src="classes/canvas/canvas.xml"/>