Selaa lähdekoodia

Fix chat windows closing after execution

Yentl Van Tendeloo 7 vuotta sitten
vanhempi
commit
1cc7ee1bfa
5 muutettua tiedostoa jossa 2117 lisäystä ja 1802 poistoa
  1. 1 1
      classes/main_app.xml
  2. 494 475
      classes/window/activity.xml
  3. 19 7
      classes/window/chatwindow.xml
  4. 424 334
      classes/window/process_enact.xml
  5. 1179 985
      frontend.py

+ 1 - 1
classes/main_app.xml

@@ -396,7 +396,7 @@
 
                     <transition event="mv_data_input" target=".">
                         <parameter name="value"/>
-                        <parameter name="context" default="None"/>
+                        <parameter name="context"/>
                         <raise event="data_input" scope="narrow" target="'modelverse'">
                             <parameter expr="value"/>
                             <parameter expr="context"/>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 494 - 475
classes/window/activity.xml


+ 19 - 7
classes/window/chatwindow.xml

@@ -25,7 +25,16 @@
         </body>
     </destructor>
 
-    <scxml initial="init">
+    <scxml initial="get_assoc_name">
+        <state id="get_assoc_name">
+            <transition event="assoc_name" target="../init">
+                <parameter name="assoc_name"/>
+                <script>
+                    self.assoc_name = assoc_name
+                </script>
+            </transition>
+        </state>
+
         <state id="init" initial="init_entry_log">
             <state id="init_entry_log" initial="create">
                 <state id="create">
@@ -131,6 +140,9 @@
                     <parameter expr="self.input_value"/>
                     <parameter expr="self.context"/>
                 </raise>
+                <script>
+                    print("Sent data to context " + str(self.context))
+                </script>
                 <raise event="change_value" scope="narrow" target="self.entry_input">
                     <parameter expr="''"/>
                 </raise>
@@ -167,13 +179,13 @@
                 </raise>
             </onentry>
 
-            <transition event="instance_deleted" target="../close"/>
+            <transition event="instance_deleted" target="../close">
+                <raise event="delete_me" scope="narrow" target="'parent'">
+                    <parameter expr="self.assoc_name"/>
+                </raise>
+            </transition>
         </state>
             
-        <state id="close">
-            <onentry>
-                <raise event="close_window" scope="narrow" target="'parent'"/>
-            </onentry>
-        </state>
+        <state id="close"/>
     </scxml>
 </class>

+ 424 - 334
classes/window/process_enact.xml

@@ -39,297 +39,287 @@
     </destructor>
 
     <scxml initial="all">
-        <state id="all" initial="create_activity_browse_label">
-            <state id="create_activity_browse_label" initial="create">
-                <state id="create">
-                    <onentry>
-                        <raise event="create_instance" scope="cd">
-                            <parameter expr="'activity_browse'"/>
-                            <parameter expr="'Label'"/>
-                            <parameter expr="{'parent': self.activity_frame, 'text': 'Activity'}"/>
-                        </raise>
-                    </onentry>
-
-                    <transition event="instance_created" target="../pack">
-                        <parameter name="assoc_name"/>
-                        <raise event="start_instance" scope="cd">
-                            <parameter expr="assoc_name"/>
-                        </raise>
-                    </transition>
-                </state>
-
-                <state id="pack">
-                    <transition event="tk_widget" target="../../create_activity_browse_entry">
-                        <parameter name="tk_widget"/>
-                        <script>
-                            tk_widget.grid(row=0,column=0)
-                        </script>
-                    </transition>
-                </state>
-            </state>
-
-            <state id="create_activity_browse_entry" initial="create">
-                <state id="create">
-                    <onentry>
-                        <raise event="create_instance" scope="cd">
-                            <parameter expr="'activity_browse'"/>
-                            <parameter expr="'Entry'"/>
-                            <parameter expr="{'parent': self.activity_frame, 'name': 'activity_entry', 'value': '(none)', 'readonly': True}"/>
-                        </raise>
-                    </onentry>
-
-                    <transition event="instance_created" target="../pack">
-                        <parameter name="assoc_name"/>
-                        <raise event="start_instance" scope="cd">
-                            <parameter expr="assoc_name"/>
-                        </raise>
-                        <script>
-                            self.activity_entry = assoc_name
-                        </script>
-                    </transition>
-                </state>
-
-                <state id="pack">
-                    <transition event="tk_widget" target="../../create_activity_browse_button">
-                        <parameter name="tk_widget"/>
-                        <script>
-                            tk_widget.grid(row=0,column=1)
-                        </script>
-                    </transition>
-                </state>
-            </state>
-
-            <state id="create_activity_browse_button" initial="create">
-                <state id="create">
-                    <onentry>
-                        <raise event="create_instance" scope="cd">
-                            <parameter expr="'activity_browse'"/>
-                            <parameter expr="'Button'"/>
-                            <parameter expr="{'parent': self.activity_frame, 'event_parameters': 'browse_activity', 'visual': TextVisual('...'), 'tooltip_text': 'Browse for a activity'}"/>
-                        </raise>
-                    </onentry>
+        <parallel id="all">
+            <state id="all" initial="create_activity_browse_label">
+                <state id="create_activity_browse_label" initial="create">
+                    <state id="create">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'activity_browse'"/>
+                                <parameter expr="'Label'"/>
+                                <parameter expr="{'parent': self.activity_frame, 'text': 'Activity'}"/>
+                            </raise>
+                        </onentry>
 
-                    <transition event="instance_created" target="../pack">
-                        <parameter name="assoc_name"/>
-                        <raise event="start_instance" scope="cd">
-                            <parameter expr="assoc_name"/>
-                        </raise>
-                    </transition>
-                </state>
+                        <transition event="instance_created" target="../pack">
+                            <parameter name="assoc_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="assoc_name"/>
+                            </raise>
+                        </transition>
+                    </state>
 
-                <state id="pack">
-                    <transition event="tk_widget" target="../../create_exec">
-                        <parameter name="tk_widget"/>
-                        <script>
-                            tk_widget.grid(row=0,column=2)
-                        </script>
-                    </transition>
+                    <state id="pack">
+                        <transition event="tk_widget" target="../../create_activity_browse_entry">
+                            <parameter name="tk_widget"/>
+                            <script>
+                                tk_widget.grid(row=0,column=0)
+                            </script>
+                        </transition>
+                    </state>
                 </state>
-            </state>
 
-            <state id="create_exec" initial="create">
-                <state id="create">
-                    <onentry>
-                        <raise event="create_instance" scope="cd">
-                            <parameter expr="'activity_browse'"/>
-                            <parameter expr="'Button'"/>
-                            <parameter expr="{'parent': self.exec_frame, 'event_parameters': 'execute', 'visual': TextVisual('START'), 'tooltip_text': 'Enact the process'}"/>
-                        </raise>
-                    </onentry>
+                <state id="create_activity_browse_entry" initial="create">
+                    <state id="create">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'activity_browse'"/>
+                                <parameter expr="'Entry'"/>
+                                <parameter expr="{'parent': self.activity_frame, 'name': 'activity_entry', 'value': '(none)', 'readonly': True}"/>
+                            </raise>
+                        </onentry>
 
-                    <transition event="instance_created" target="../pack">
-                        <parameter name="assoc_name"/>
-                        <raise event="start_instance" scope="cd">
-                            <parameter expr="assoc_name"/>
-                        </raise>
-                    </transition>
-                </state>
+                        <transition event="instance_created" target="../pack">
+                            <parameter name="assoc_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="assoc_name"/>
+                            </raise>
+                            <script>
+                                self.activity_entry = assoc_name
+                            </script>
+                        </transition>
+                    </state>
 
-                <state id="pack">
-                    <transition event="tk_widget" target="../../ready">
-                        <parameter name="tk_widget"/>
-                        <script>
-                            tk_widget.pack()
-                        </script>
-                    </transition>
+                    <state id="pack">
+                        <transition event="tk_widget" target="../../create_activity_browse_button">
+                            <parameter name="tk_widget"/>
+                            <script>
+                                tk_widget.grid(row=0,column=1)
+                            </script>
+                        </transition>
+                    </state>
                 </state>
-            </state>
-
-            <state id="ready">
-                <transition event="button_pressed" cond="event_name == 'browse_activity'" target="../browse_activity">
-                    <parameter name="event_name"/>
-                </transition>
-                <transition event="button_pressed" cond="event_name.startswith('input_')" target="../browse_model">
-                    <parameter name="event_name"/>
-                    <script>
-                        self.current = event_name
-                        self.required_type = [self.input_signature[event_name.split("input_", 1)[1]]]
-                    </script>
-                </transition>
-                <transition event="changed_entry" target=".">
-                    <parameter name="event_name"/>
-                    <parameter name="value"/>
-                    <script>
-                        self.exec_input_signature[event_name.split("input_", 1)[1]] = value
-                    </script>
-                </transition>
-                <transition event="button_pressed" cond="event_name == 'execute'" target="../execute">
-                    <parameter name="event_name"/>
-                </transition>
-            </state>
 
-            <state id="execute" initial="execute">
-                <state id="execute">
-                    <onentry>
-                        <script>
-                            print("Executing process %s" % self.activity)
-                            print("   Inputs  " + str(self.exec_input_signature))
-                        </script>
+                <state id="create_activity_browse_button" initial="create">
+                    <state id="create">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'activity_browse'"/>
+                                <parameter expr="'Button'"/>
+                                <parameter expr="{'parent': self.activity_frame, 'event_parameters': 'browse_activity', 'visual': TextVisual('...'), 'tooltip_text': 'Browse for a activity'}"/>
+                            </raise>
+                        </onentry>
 
-                        <raise event="mv_request" scope="broad">
-                            <parameter expr="'process_execute'"/>
-                            <parameter expr="[self.activity, self.exec_input_signature]"/>
-                        </raise>
-                    </onentry>
+                        <transition event="instance_created" target="../pack">
+                            <parameter name="assoc_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="assoc_name"/>
+                            </raise>
+                        </transition>
+                    </state>
 
-                    <transition target="../in_context"/>
+                    <state id="pack">
+                        <transition event="tk_widget" target="../../create_exec">
+                            <parameter name="tk_widget"/>
+                            <script>
+                                tk_widget.grid(row=0,column=2)
+                            </script>
+                        </transition>
+                    </state>
                 </state>
 
-                <state id="in_context" initial="waiting">
-                    <state id="dialog">
-                        <!-- TODO Add data_input and data_output -->
-                    </state>
+                <state id="create_exec" initial="create">
+                    <state id="create">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'activity_browse'"/>
+                                <parameter expr="'Button'"/>
+                                <parameter expr="{'parent': self.exec_frame, 'event_parameters': 'execute', 'visual': TextVisual('START'), 'tooltip_text': 'Enact the process'}"/>
+                            </raise>
+                        </onentry>
 
-                    <state id="manual">
-                        <transition cond="self.subprocess.poll() is not None" target="../waiting">
-                            <raise event="mv_request_context" scope="broad">
-                                <parameter expr="'exit'"/>
-                                <parameter expr="[]"/>
-                                <parameter expr="self.current_context[2]"/>
+                        <transition event="instance_created" target="../pack">
+                            <parameter name="assoc_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="assoc_name"/>
                             </raise>
                         </transition>
-                        <transition after="0.5" target="."/>
                     </state>
 
-                    <state id="waiting"/>
+                    <state id="pack">
+                        <transition event="tk_widget" target="../../ready">
+                            <parameter name="tk_widget"/>
+                            <script>
+                                tk_widget.pack()
+                            </script>
+                        </transition>
+                    </state>
+                </state>
 
-                    <transition event="mv_response" cond="context[0] == 'OP'" target="manual">
-                        <parameter name="context"/>
+                <state id="ready">
+                    <transition event="button_pressed" cond="event_name == 'browse_activity'" target="../browse_activity">
+                        <parameter name="event_name"/>
+                    </transition>
+                    <transition event="button_pressed" cond="event_name.startswith('input_')" target="../browse_model">
+                        <parameter name="event_name"/>
                         <script>
-                            self.current_context = context
-                            print("Got context: " + str(self.current_context))
-                            print("Opening new browser")
-                            self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", context[3], "--limited"])
+                            self.current = event_name
+                            self.required_type = [self.input_signature[event_name.split("input_", 1)[1]]]
                         </script>
                     </transition>
-
-                    <transition event="mv_response" cond="context[0] == 'SC'" target="dialog">
-                        <parameter name="context"/>
+                    <transition event="changed_entry" target=".">
+                        <parameter name="event_name"/>
+                        <parameter name="value"/>
                         <script>
-                            print("Executing dialog with MV (not implemented...)")
-                            self.current_context = context
+                            self.exec_input_signature[event_name.split("input_", 1)[1]] = value
                         </script>
                     </transition>
-                </state>
-            </state>
-
-            <state id="browse_activity" initial="create_browser">
-                <state id="create_browser">
-                    <onentry>
-                        <raise event="create_instance" scope="cd">
-                            <parameter expr="'browsers'"/>
-                            <parameter expr="'Browser'"/>
-                            <parameter expr="'Select activity to execute.'"/>
-                            <parameter expr="None"/>
-                        </raise>
-                    </onentry>
-
-                    <transition event="instance_created" target="../waiting_for_decision">
-                        <parameter name="assoc_name"/>
-                        <raise event="start_instance" scope="cd">
-                            <parameter expr="assoc_name"/>
-                        </raise>
+                    <transition event="button_pressed" cond="event_name == 'execute'" target="../execute">
+                        <parameter name="event_name"/>
                     </transition>
                 </state>
 
-                <state id="waiting_for_decision">
-                    <transition event="browse_result" target=".">
-                        <parameter name="activity"/>
-                        <script>
-                            self.activity = activity
-                        </script>
-                        <raise event="change_value" target="self.activity_entry">
-                            <parameter expr="self.activity"/>
-                        </raise>
-                    </transition>
+                <state id="execute" initial="execute">
+                    <state id="execute">
+                        <onentry>
+                            <script>
+                                print("Executing process %s" % self.activity)
+                                print("   Inputs  " + str(self.exec_input_signature))
+                                self.current_context = ["NONE"]
+                            </script>
 
-                    <transition event="close_window" target="../../redraw_signature">
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr="'browsers'"/>
-                        </raise>
-                    </transition>
-                </state>
-            </state>
+                            <raise event="mv_request" scope="broad">
+                                <parameter expr="'process_execute'"/>
+                                <parameter expr="[self.activity, self.exec_input_signature]"/>
+                            </raise>
+                        </onentry>
 
-            <state id="redraw_signature" initial="clear_previous">
-                <state id="clear_previous">
-                    <transition target="../read_signature">
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr="'model_browse_label'"/>
-                        </raise>
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr="'model_browse_button'"/>
-                        </raise>
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr="'model_browse_entry'"/>
-                        </raise>
-                    </transition>
-                </state>
+                        <transition target="../in_context"/>
+                    </state>
 
-                <state id="read_signature">
-                    <onentry>
-                        <raise event="mv_request" scope="broad">
-                            <parameter expr="'process_signature'"/>
-                            <parameter expr="[self.activity]"/>
-                        </raise>
-                    </onentry>
+                    <state id="in_context" initial="choice">
+                        <state id="choice">
+                            <transition cond="self.current_context[0] == 'SC'" target="../statechart"/>
+                            <transition cond="self.current_context[0] == 'OP'" target="../operations">
+                                <script>
+                                    self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", self.current_context[3], "--limited"])
+                                </script>
+                            </transition>
+                        </state>
+
+                        <state id="operations">
+                            <transition cond="self.subprocess.poll() is not None" target="../finished">
+                                <raise event="mv_request_context" scope="broad">
+                                    <parameter expr="'exit'"/>
+                                    <parameter expr="[]"/>
+                                    <parameter expr="self.current_context[2]"/>
+                                </raise>
+                            </transition>
+                            <transition after="0.5" target="."/>
+                        </state>
+
+                        <state id="statechart" initial="init">
+                            <state id="init">
+                                <onentry>
+                                    <raise event="create_instance" scope="cd">
+                                        <parameter expr="'browsers'"/>
+                                        <parameter expr="'ChatWindow'"/>
+                                        <parameter expr="self.current_context[2]"/>
+                                        <parameter expr="self.current_context[1]"/>
+                                    </raise>
+                                </onentry>
+
+                                <transition event="instance_created" target="../waiting">
+                                    <parameter name="assoc_name"/>
+                                    <raise event="start_instance" scope="cd">
+                                        <parameter expr="assoc_name"/>
+                                    </raise>
+                                    <raise event="assoc_name" scope="narrow" target="assoc_name">
+                                        <parameter expr="assoc_name"/>
+                                    </raise>
+                                </transition>
+                            </state>
+
+                            <state id="waiting">
+                                <onexit>
+                                    <raise event="close_window" scope="narrow" target="'browsers'"/>
+                                </onexit>
+                            </state>
+                        </state>
+
+                        <state id="finished"/>
+                        
+                        <transition event="mv_response" cond="isinstance(result, list) and result[0] == 'OP'" target="operations">
+                            <parameter name="result"/>
+                            <script>
+                                context = result
+                                self.current_context = context
+                                print("Got context: " + str(self.current_context))
+                                print("Opening new browser")
+                                self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", context[3], "--limited"])
+                            </script>
+                        </transition>
 
-                    <transition event="mv_response" target="../add_input">
-                        <parameter name="result"/>
-                        <script>
-                            self.input_signature = result
-                            self.input_signature_iter = dict(self.input_signature)
-                        </script>
-                    </transition>
-                </state>
+                        <transition event="mv_response" cond="isinstance(result, list) and result[0] == 'SC'" target="statechart">
+                            <parameter name="result"/>
+                            <script>
+                                context = result
+                                print("Executing dialog with MV (not implemented...)")
+                                self.current_context = context
+                            </script>
+                        </transition>
 
-                <state id="add_input" initial="check_next">
-                    <onentry>
-                        <script>
-                            self.counter = -1
-                        </script>
-                    </onentry>
+                        <transition event="mv_response" cond="not isinstance(result, list) and result == True" target="../alter_context_result">
+                            <parameter name="result"/>
+                            <script>
+                                print("Finished with TRUE")
+                            </script>
+                        </transition>
 
-                    <state id="check_next">
-                        <transition cond="self.input_signature_iter" target="../create_label">
+                        <transition event="mv_response" cond="not isinstance(result, list) and result == False" target="../../closing">
+                            <parameter name="result"/>
                             <script>
-                                self.counter += 1
-                                self.current = self.input_signature_iter.popitem()
+                                print("Finished with FALSE")
                             </script>
                         </transition>
-                        <transition cond="not self.input_signature_iter" target="../../../ready"/>
                     </state>
 
-                    <state id="create_label">
+                    <state id="alter_context_result" initial="check_next">
+                        <state id="check_next">
+                            <transition cond="self.exec_input_signature" target="../add"/>
+                            <transition cond="not self.exec_input_signature" target="../../../closing"/>
+                        </state>
+
+                        <state id="add">
+                            <onentry>
+                                <script>
+                                    tag, model = self.exec_input_signature.popitem()
+                                    metamodel = self.input_signature[tag]
+                                    print("Setting context for " + str((model, metamodel)))
+                                </script>
+                                <raise event="mv_request" scope="broad">
+                                    <parameter expr="'alter_context'"/>
+                                    <parameter expr="[model, metamodel]"/>
+                                </raise>
+                            </onentry>
+
+                            <transition target="../check_next"/>
+                        </state>
+                    </state>
+                </state>
+
+                <state id="browse_activity" initial="create_browser">
+                    <state id="create_browser">
                         <onentry>
                             <raise event="create_instance" scope="cd">
-                                <parameter expr="'model_browse_label'"/>
-                                <parameter expr="'Label'"/>
-                                <parameter expr="{'parent': self.input_frame, 'text': '%s : %s' % self.current}"/>
+                                <parameter expr="'browsers'"/>
+                                <parameter expr="'Browser'"/>
+                                <parameter expr="'Select activity to execute.'"/>
+                                <parameter expr="None"/>
                             </raise>
                         </onentry>
 
-                        <transition event="instance_created" target="../pack_label">
+                        <transition event="instance_created" target="../waiting_for_decision">
                             <parameter name="assoc_name"/>
                             <raise event="start_instance" scope="cd">
                                 <parameter expr="assoc_name"/>
@@ -337,54 +327,169 @@
                         </transition>
                     </state>
 
-                    <state id="pack_label">
-                        <transition event="tk_widget" target="../create_entry">
-                            <parameter name="tk_widget"/>
+                    <state id="waiting_for_decision">
+                        <transition event="browse_result" target=".">
+                            <parameter name="activity"/>
                             <script>
-                                tk_widget.grid(row=self.counter,column=0)
+                                self.activity = activity
                             </script>
+                            <raise event="change_value" target="self.activity_entry">
+                                <parameter expr="self.activity"/>
+                            </raise>
+                        </transition>
+
+                        <transition event="close_window" target="../../redraw_signature">
+                            <raise event="delete_instance" scope="cd">
+                                <parameter expr="'browsers'"/>
+                            </raise>
                         </transition>
                     </state>
+                </state>
 
-                    <state id="create_entry">
-                        <onentry>
-                            <raise event="create_instance" scope="cd">
+                <state id="redraw_signature" initial="clear_previous">
+                    <state id="clear_previous">
+                        <transition target="../read_signature">
+                            <raise event="delete_instance" scope="cd">
+                                <parameter expr="'model_browse_label'"/>
+                            </raise>
+                            <raise event="delete_instance" scope="cd">
+                                <parameter expr="'model_browse_button'"/>
+                            </raise>
+                            <raise event="delete_instance" scope="cd">
                                 <parameter expr="'model_browse_entry'"/>
-                                <parameter expr="'Entry'"/>
-                                <parameter expr="{'parent': self.input_frame, 'name': 'input_%s' % self.current[0], 'value': '', 'readonly': True}"/>
                             </raise>
-                        </onentry>
+                        </transition>
+                    </state>
 
-                        <transition event="instance_created" target="../pack_entry">
-                            <parameter name="assoc_name"/>
-                            <raise event="start_instance" scope="cd">
-                                <parameter expr="assoc_name"/>
+                    <state id="read_signature">
+                        <onentry>
+                            <raise event="mv_request" scope="broad">
+                                <parameter expr="'process_signature'"/>
+                                <parameter expr="[self.activity]"/>
                             </raise>
+                        </onentry>
+
+                        <transition event="mv_response" target="../add_input">
+                            <parameter name="result"/>
                             <script>
-                                self.stored_associations["input_%s" % self.current[0]] = assoc_name
+                                self.input_signature = result
+                                self.input_signature_iter = dict(self.input_signature)
                             </script>
                         </transition>
                     </state>
 
-                    <state id="pack_entry">
-                        <transition event="tk_widget" target="../create_button">
-                            <parameter name="tk_widget"/>
+                    <state id="add_input" initial="check_next">
+                        <onentry>
                             <script>
-                                tk_widget.grid(row=self.counter, column=1)
+                                self.counter = -1
                             </script>
-                        </transition>
+                        </onentry>
+
+                        <state id="check_next">
+                            <transition cond="self.input_signature_iter" target="../create_label">
+                                <script>
+                                    self.counter += 1
+                                    self.current = self.input_signature_iter.popitem()
+                                </script>
+                            </transition>
+                            <transition cond="not self.input_signature_iter" target="../../../ready"/>
+                        </state>
+
+                        <state id="create_label">
+                            <onentry>
+                                <raise event="create_instance" scope="cd">
+                                    <parameter expr="'model_browse_label'"/>
+                                    <parameter expr="'Label'"/>
+                                    <parameter expr="{'parent': self.input_frame, 'text': '%s : %s' % self.current}"/>
+                                </raise>
+                            </onentry>
+
+                            <transition event="instance_created" target="../pack_label">
+                                <parameter name="assoc_name"/>
+                                <raise event="start_instance" scope="cd">
+                                    <parameter expr="assoc_name"/>
+                                </raise>
+                            </transition>
+                        </state>
+
+                        <state id="pack_label">
+                            <transition event="tk_widget" target="../create_entry">
+                                <parameter name="tk_widget"/>
+                                <script>
+                                    tk_widget.grid(row=self.counter,column=0)
+                                </script>
+                            </transition>
+                        </state>
+
+                        <state id="create_entry">
+                            <onentry>
+                                <raise event="create_instance" scope="cd">
+                                    <parameter expr="'model_browse_entry'"/>
+                                    <parameter expr="'Entry'"/>
+                                    <parameter expr="{'parent': self.input_frame, 'name': 'input_%s' % self.current[0], 'value': '', 'readonly': True}"/>
+                                </raise>
+                            </onentry>
+
+                            <transition event="instance_created" target="../pack_entry">
+                                <parameter name="assoc_name"/>
+                                <raise event="start_instance" scope="cd">
+                                    <parameter expr="assoc_name"/>
+                                </raise>
+                                <script>
+                                    self.stored_associations["input_%s" % self.current[0]] = assoc_name
+                                </script>
+                            </transition>
+                        </state>
+
+                        <state id="pack_entry">
+                            <transition event="tk_widget" target="../create_button">
+                                <parameter name="tk_widget"/>
+                                <script>
+                                    tk_widget.grid(row=self.counter, column=1)
+                                </script>
+                            </transition>
+                        </state>
+
+                        <state id="create_button">
+                            <onentry>
+                                <raise event="create_instance" scope="cd">
+                                    <parameter expr="'model_browse_button'"/>
+                                    <parameter expr="'Button'"/>
+                                    <parameter expr="{'parent': self.input_frame, 'visual': TextVisual('...'), 'tooltip_text': 'Select input model for tag %s.' % self.current[0], 'event_parameters': 'input_%s' % self.current[0]}"/>
+                                </raise>
+                            </onentry>
+
+                            <transition event="instance_created" target="../pack_button">
+                                <parameter name="assoc_name"/>
+                                <raise event="start_instance" scope="cd">
+                                    <parameter expr="assoc_name"/>
+                                </raise>
+                            </transition>
+                        </state>
+
+                        <state id="pack_button">
+                            <transition event="tk_widget" target="../check_next">
+                                <parameter name="tk_widget"/>
+                                <script>
+                                    tk_widget.grid(row=self.counter, column=2)
+                                </script>
+                            </transition>
+                        </state>
                     </state>
+                </state>
 
-                    <state id="create_button">
+                <state id="browse_model" initial="create_browser">
+                    <state id="create_browser">
                         <onentry>
                             <raise event="create_instance" scope="cd">
-                                <parameter expr="'model_browse_button'"/>
-                                <parameter expr="'Button'"/>
-                                <parameter expr="{'parent': self.input_frame, 'visual': TextVisual('...'), 'tooltip_text': 'Select input model for tag %s.' % self.current[0], 'event_parameters': 'input_%s' % self.current[0]}"/>
+                                <parameter expr="'browsers'"/>
+                                <parameter expr="'Browser'"/>
+                                <parameter expr="'Select model to use.'"/>
+                                <parameter expr="self.required_type"/>
                             </raise>
                         </onentry>
 
-                        <transition event="instance_created" target="../pack_button">
+                        <transition event="instance_created" target="../waiting_for_decision">
                             <parameter name="assoc_name"/>
                             <raise event="start_instance" scope="cd">
                                 <parameter expr="assoc_name"/>
@@ -392,84 +497,69 @@
                         </transition>
                     </state>
 
-                    <state id="pack_button">
-                        <transition event="tk_widget" target="../check_next">
-                            <parameter name="tk_widget"/>
+                    <state id="waiting_for_decision">
+                        <transition event="browse_result" target=".">
+                            <parameter name="model"/>
                             <script>
-                                tk_widget.grid(row=self.counter, column=2)
+                                if self.current.startswith('input_'):
+                                    self.exec_input_signature[self.current.split("input_", 1)[1]] = model
+                                else:
+                                    self.exec_output_signature[self.current.split("output_", 1)[1]] = model
                             </script>
+                            <raise event="change_value" scope="narrow" target="self.stored_associations[self.current]">
+                                <parameter expr="model"/>
+                            </raise>
+                        </transition>
+
+                        <transition event="close_window" target="../../ready">
+                            <raise event="delete_instance" scope="cd">
+                                <parameter expr="'browsers'"/>
+                            </raise>
                         </transition>
                     </state>
                 </state>
-            </state>
 
-            <state id="browse_model" initial="create_browser">
-                <state id="create_browser">
-                    <onentry>
-                        <raise event="create_instance" scope="cd">
-                            <parameter expr="'browsers'"/>
-                            <parameter expr="'Browser'"/>
-                            <parameter expr="'Select model to use.'"/>
-                            <parameter expr="self.required_type"/>
+                <state id="closing">
+                    <transition target="../closed">
+                        <raise event="delete_instance" scope="cd">
+                            <parameter expr="'model_browse_button'"/>
                         </raise>
-                    </onentry>
-
-                    <transition event="instance_created" target="../waiting_for_decision">
-                        <parameter name="assoc_name"/>
-                        <raise event="start_instance" scope="cd">
-                            <parameter expr="assoc_name"/>
+                        <raise event="delete_instance" scope="cd">
+                            <parameter expr="'activity_browse'"/>
                         </raise>
-                    </transition>
-                </state>
-
-                <state id="waiting_for_decision">
-                    <transition event="browse_result" target=".">
-                        <parameter name="model"/>
-                        <script>
-                            if self.current.startswith('input_'):
-                                self.exec_input_signature[self.current.split("input_", 1)[1]] = model
-                            else:
-                                self.exec_output_signature[self.current.split("output_", 1)[1]] = model
-                        </script>
-                        <raise event="change_value" scope="narrow" target="self.stored_associations[self.current]">
-                            <parameter expr="model"/>
+                        <raise event="delete_instance" scope="cd">
+                            <parameter expr="'model_browse_entry'"/>
                         </raise>
-                    </transition>
-
-                    <transition event="close_window" target="../../ready">
                         <raise event="delete_instance" scope="cd">
-                            <parameter expr="'browsers'"/>
+                            <parameter expr="'model_browse_label'"/>
                         </raise>
                     </transition>
                 </state>
-            </state>
 
-            <state id="closing">
-                <transition target="../closed">
-                    <raise event="delete_instance" scope="cd">
-                        <parameter expr="'model_browse_button'"/>
-                    </raise>
-                    <raise event="delete_instance" scope="cd">
-                        <parameter expr="'activity_browse'"/>
-                    </raise>
-                    <raise event="delete_instance" scope="cd">
-                        <parameter expr="'model_browse_entry'"/>
-                    </raise>
-                    <raise event="delete_instance" scope="cd">
-                        <parameter expr="'model_browse_label'"/>
-                    </raise>
+                <state id="closed">
+                    <onentry>
+                        <raise event="window_close" scope="narrow" target="'parent'"/>
+                    </onentry>
+                </state>
+
+                <transition event="window-close" cond="id(self) == ID" target="closing">
+                    <parameter name="ID"/>
                 </transition>
             </state>
 
-            <state id="closed">
-                <onentry>
-                    <raise event="window_close" scope="narrow" target="'parent'"/>
-                </onentry>
+            <state id="wait_for_deletion">
+                <state id="init">
+                    <transition event="delete_me" target=".">
+                        <script>
+                            print("DELETING CHILD")
+                        </script>
+                        <parameter name="assoc_name"/>
+                        <raise event="delete_instance" scope="cd">
+                            <parameter expr="assoc_name"/>
+                        </raise>
+                    </transition>
+                </state>
             </state>
-
-            <transition event="window-close" cond="id(self) == ID" target="closing">
-                <parameter name="ID"/>
-            </transition>
-        </state>
+        </parallel>
     </scxml>
 </class>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1179 - 985
frontend.py