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

Only rerender on attribute change if at least one attribute changed

Yentl Van Tendeloo 8 лет назад
Родитель
Сommit
7df83bf6ac
2 измененных файлов с 23 добавлено и 2 удалено
  1. 7 1
      classes/canvas/canvas_element.xml
  2. 16 1
      frontend.py

+ 7 - 1
classes/canvas/canvas_element.xml

@@ -158,7 +158,13 @@
                     </script>
                     </script>
                 </transition>
                 </transition>
 
 
-                <transition event="close_window" target="../process_results">
+                <transition event="close_window" cond="self.remaining_responses > 0" target="../process_results">
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'prompt'"/>
+                    </raise>
+                </transition>
+
+                <transition event="close_window" cond="self.remaining_responses == 0" target="../../main">
                     <raise event="delete_instance" scope="cd">
                     <raise event="delete_instance" scope="cd">
                         <parameter expr="'prompt'"/>
                         <parameter expr="'prompt'"/>
                     </raise>
                     </raise>

+ 16 - 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:   Thu Oct  5 15:39:06 2017
+Date:   Thu Oct  5 15:57:44 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 
@@ -7424,7 +7424,13 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         _update_attrs_wait_for_results_1 = Transition(self, self.states["/update_attrs/wait_for_results"], [self.states["/update_attrs/process_results"]])
         _update_attrs_wait_for_results_1 = Transition(self, self.states["/update_attrs/wait_for_results"], [self.states["/update_attrs/process_results"]])
         _update_attrs_wait_for_results_1.setAction(self._update_attrs_wait_for_results_1_exec)
         _update_attrs_wait_for_results_1.setAction(self._update_attrs_wait_for_results_1_exec)
         _update_attrs_wait_for_results_1.setTrigger(Event("close_window", None))
         _update_attrs_wait_for_results_1.setTrigger(Event("close_window", None))
+        _update_attrs_wait_for_results_1.setGuard(self._update_attrs_wait_for_results_1_guard)
         self.states["/update_attrs/wait_for_results"].addTransition(_update_attrs_wait_for_results_1)
         self.states["/update_attrs/wait_for_results"].addTransition(_update_attrs_wait_for_results_1)
+        _update_attrs_wait_for_results_2 = Transition(self, self.states["/update_attrs/wait_for_results"], [self.states["/main"]])
+        _update_attrs_wait_for_results_2.setAction(self._update_attrs_wait_for_results_2_exec)
+        _update_attrs_wait_for_results_2.setTrigger(Event("close_window", None))
+        _update_attrs_wait_for_results_2.setGuard(self._update_attrs_wait_for_results_2_guard)
+        self.states["/update_attrs/wait_for_results"].addTransition(_update_attrs_wait_for_results_2)
         
         
         # transition /update_attrs/process_results
         # transition /update_attrs/process_results
         _update_attrs_process_results_0 = Transition(self, self.states["/update_attrs/process_results"], [self.states["/update_attrs/process_results"]])
         _update_attrs_process_results_0 = Transition(self, self.states["/update_attrs/process_results"], [self.states["/update_attrs/process_results"]])
@@ -7562,6 +7568,15 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _update_attrs_wait_for_results_1_exec(self, parameters):
     def _update_attrs_wait_for_results_1_exec(self, parameters):
         self.big_step.outputEventOM(Event("delete_instance", None, [self, 'prompt']))
         self.big_step.outputEventOM(Event("delete_instance", None, [self, 'prompt']))
     
     
+    def _update_attrs_wait_for_results_1_guard(self, parameters):
+        return self.remaining_responses > 0
+    
+    def _update_attrs_wait_for_results_2_exec(self, parameters):
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'prompt']))
+    
+    def _update_attrs_wait_for_results_2_guard(self, parameters):
+        return self.remaining_responses == 0
+    
     def _update_attrs_process_results_0_exec(self, parameters):
     def _update_attrs_process_results_0_exec(self, parameters):
         k, v = self.diff_results.popitem()
         k, v = self.diff_results.popitem()
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_model, self.as_element, k, v]])]))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['attr_assign', [current_model, self.as_element, k, v]])]))