فهرست منبع

Allow creating of new attributes

Yentl Van Tendeloo 7 سال پیش
والد
کامیت
63beac1946
2فایلهای تغییر یافته به همراه43 افزوده شده و 9 حذف شده
  1. 26 4
      classes/window/attribute_editor.xml
  2. 17 5
      frontend.py

+ 26 - 4
classes/window/attribute_editor.xml

@@ -291,10 +291,10 @@
                     </script>
                 </transition>
 
-                <transition event="button_pressed" cond="event_name == 'create'" target="../create_new_entry">
+                <transition event="button_pressed" cond="event_name == 'create' and self.allowed_types" target="../create_new_entry">
                     <parameter name="event_name"/>
                     <script>
-                        self.attr_modify = [{'name': self.get_unique_attr_name(), 'type': next(iter(self.allowed_types)), 'optional': True}]
+                        self.attr_modify = {'name': self.get_unique_attr_name(), 'type': next(iter(self.allowed_types)), 'optional': True}
                     </script>
                 </transition>
 
@@ -399,12 +399,34 @@
             <state id="create_new_entry">
                 <onentry>
                     <raise event="mv_request" scope="broad">
-                        <parameter expr="'attr_assign'"/>
+                        <parameter expr="'define_attribute'"/>
                         <parameter expr="[current_model, self.as_element, self.attr_modify['name'], self.attr_modify['type'], self.attr_modify['optional']]"/>
                     </raise>
                 </onentry>
 
-                <transition event="mv_response" target="../init/create_entries"/>
+                <transition event="mv_response" target="../init/get_defined_attrs">
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'names'"/>
+                    </raise>
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'types'"/>
+                    </raise>
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'optional'"/>
+                    </raise>
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'delete'"/>
+                    </raise>
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'add_attribute_button'"/>
+                    </raise>
+                    <script>
+                        self.associations_name = {}
+                        self.associations_type = {}
+                        self.associations_optional = {}
+                        self.associations_delete = {}
+                    </script>
+                </transition>
             </state>
 
             <state id="make_optional">

+ 17 - 5
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:   Mon Oct 16 08:36:37 2017
+Date:   Mon Oct 16 08:57:24 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -4330,7 +4330,8 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/all/change_name/commit"].addTransition(_all_change_name_commit_1)
         
         # transition /all/create_new_entry
-        _all_create_new_entry_0 = Transition(self, self.states["/all/create_new_entry"], [self.states["/all/init/create_entries"]])
+        _all_create_new_entry_0 = Transition(self, self.states["/all/create_new_entry"], [self.states["/all/init/get_defined_attrs"]])
+        _all_create_new_entry_0.setAction(self._all_create_new_entry_0_exec)
         _all_create_new_entry_0.setTrigger(Event("mv_response", None))
         self.states["/all/create_new_entry"].addTransition(_all_create_new_entry_0)
         
@@ -4409,7 +4410,7 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_name[self.parameter[0]], Event("change_event_name", None, [self.parameter[1]])]))
     
     def _all_create_new_entry_enter(self):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_model, self.as_element, self.attr_modify['name'], self.attr_modify['type'], self.attr_modify['optional']]])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['define_attribute', [current_model, self.as_element, self.attr_modify['name'], self.attr_modify['type'], self.attr_modify['optional']]])]))
     
     def _all_make_optional_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_optional', [current_model, self.as_element, self.parameter, True]])]))
@@ -4530,11 +4531,11 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     
     def _all_running_3_exec(self, parameters):
         event_name = parameters[0]
-        self.attr_modify = [{'name': self.get_unique_attr_name(), 'type': next(iter(self.allowed_types)), 'optional': True}]
+        self.attr_modify = {'name': self.get_unique_attr_name(), 'type': next(iter(self.allowed_types)), 'optional': True}
     
     def _all_running_3_guard(self, parameters):
         event_name = parameters[0]
-        return event_name == 'create'
+        return event_name == 'create' and self.allowed_types
     
     def _all_running_4_exec(self, parameters):
         event_name = parameters[0]
@@ -4578,6 +4579,17 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         del self.associations_optional[self.parameter[0]]
         del self.associations_delete[self.parameter[0]]
     
+    def _all_create_new_entry_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'names']))
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'types']))
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'optional']))
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'delete']))
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'add_attribute_button']))
+        self.associations_name = {}
+        self.associations_type = {}
+        self.associations_optional = {}
+        self.associations_delete = {}
+    
     def _all_make_optional_0_exec(self, parameters):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.associations_optional[self.parameter], Event("activate", None, [])]))