Kaynağa Gözat

Add error log to the right

Yentl Van Tendeloo 7 yıl önce
ebeveyn
işleme
b947ea137e
4 değiştirilmiş dosya ile 291 ekleme ve 87 silme
  1. 47 0
      classes/widgets/listbox.xml
  2. 35 3
      classes/window/main_window.xml
  3. 208 84
      frontend.py
  4. 1 0
      frontend.xml

+ 47 - 0
classes/widgets/listbox.xml

@@ -0,0 +1,47 @@
+<class name="Listbox">
+    <relationships>
+        <association name="parent" class="A"/>
+    </relationships>
+
+    <constructor>
+        <parameter name="constructor_parameters" type='dict' default='{}' />
+        <body>
+            self.entry = tk.Listbox(constructor_parameters['parent'])
+        </body>
+    </constructor>
+
+    <destructor>
+        <body>
+            self.entry.destroy()
+        </body>
+    </destructor>
+
+    <scxml initial="main">
+        <state id="main" initial='initializing'>
+            <state id="initializing">
+                <transition target="../ready">
+                    <raise event="tk_widget" scope="narrow" target="'parent'">
+                        <parameter expr="self.entry"/>
+                    </raise>
+                </transition>
+            </state>
+
+            <state id="ready">
+                <transition event="append_value" target=".">
+                    <parameter name="new_value"/>
+                    <script>
+                        self.entry.insert(tk.END, new_value)
+                        self.entry.see(tk.END)
+                    </script>
+                </transition>
+                <transition event="prepend_value" target=".">
+                    <parameter name="new_value"/>
+                    <script>
+                        self.entry.insert(0, new_value)
+                        self.entry.see(0)
+                    </script>
+                </transition>
+            </state>
+        </state>
+    </scxml>
+</class>

+ 35 - 3
classes/window/main_window.xml

@@ -7,6 +7,7 @@
         <association name="model_toolbars" class="Toolbar"/>
         <association name="subwindow" class="Window"/>
         <association name="canvas" class="Canvas"/>
+        <association name="error_log" class="Listbox"/>
         <association name="progress_bar" class="ProgressBar"/>
     </relationships>
 
@@ -17,10 +18,15 @@
         <parameter name="limited_mode"/>
         <body>
             self.toolbar_frame = tk.Frame(self)
-            self.canvas_frame = tk.Frame(self)
             self.progressbar_frame = tk.Frame(self)
+            self.modelling_frame = tk.Frame(self)
+            self.canvas_frame = tk.Frame(self.modelling_frame)
+            self.error_log_frame = tk.Frame(self.modelling_frame)
+
             self.toolbar_frame.pack(fill=tk.X)
-            self.canvas_frame.pack(fill=tk.BOTH, expand=tk.TRUE)
+            self.modelling_frame.pack(fill=tk.BOTH, expand=tk.TRUE)
+            self.canvas_frame.pack(fill=tk.BOTH, expand=tk.TRUE, side=tk.LEFT)
+            self.error_log_frame.pack(fill=tk.Y, expand=tk.FALSE, side=tk.RIGHT, anchor=tk.E)
             self.progressbar_frame.pack(fill=tk.X)
             self.model_loaded = False
 
@@ -97,13 +103,39 @@
                     </state>
 
                     <state id="pack_progressbar">
-                        <transition event="tk_widget" target="../../running">
+                        <transition event="tk_widget" target="../error_log">
                             <parameter name="tk_elem"/>
                             <script>
                                 tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
                             </script>
                         </transition>
                     </state>
+
+                    <state id="error_log">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'error_log'"/>
+                                <parameter expr="'Listbox'"/>
+                                <parameter expr="{'parent': self.error_log_frame}"/>
+                            </raise>
+                        </onentry>
+
+                        <transition event="instance_created" target="../pack_error_log">
+                            <parameter name="association_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="association_name"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="pack_error_log">
+                        <transition event="tk_widget" target="../../running">
+                            <parameter name="tk_elem"/>
+                            <script>
+                                tk_elem.pack(fill=tk.BOTH, expand=tk.TRUE)
+                            </script>
+                        </transition>
+                    </state>
                 </state>
 
                 <state id="running" initial="idle">

+ 208 - 84
frontend.py

@@ -5304,10 +5304,15 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         tk.Toplevel.__init__(self)
         SCCDWidget.__init__(self)
         self.toolbar_frame = tk.Frame(self)
-        self.canvas_frame = tk.Frame(self)
         self.progressbar_frame = tk.Frame(self)
+        self.modelling_frame = tk.Frame(self)
+        self.canvas_frame = tk.Frame(self.modelling_frame)
+        self.error_log_frame = tk.Frame(self.modelling_frame)
+        
         self.toolbar_frame.pack(fill=tk.X)
-        self.canvas_frame.pack(fill=tk.BOTH, expand=tk.TRUE)
+        self.modelling_frame.pack(fill=tk.BOTH, expand=tk.TRUE)
+        self.canvas_frame.pack(fill=tk.BOTH, expand=tk.TRUE, side=tk.LEFT)
+        self.error_log_frame.pack(fill=tk.Y, expand=tk.FALSE, side=tk.RIGHT, anchor=tk.E)
         self.progressbar_frame.pack(fill=tk.X)
         self.model_loaded = False
         
@@ -5364,280 +5369,287 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         # state /init/init/init/pack_progressbar
         self.states["/init/init/init/pack_progressbar"] = State(8, "/init/init/init/pack_progressbar", self)
         
+        # state /init/init/init/error_log
+        self.states["/init/init/init/error_log"] = State(9, "/init/init/init/error_log", self)
+        self.states["/init/init/init/error_log"].setEnter(self._init_init_init_error_log_enter)
+        
+        # state /init/init/init/pack_error_log
+        self.states["/init/init/init/pack_error_log"] = State(10, "/init/init/init/pack_error_log", self)
+        
         # state /init/init/running
-        self.states["/init/init/running"] = State(9, "/init/init/running", self)
+        self.states["/init/init/running"] = State(11, "/init/init/running", self)
         
         # state /init/init/running/idle
-        self.states["/init/init/running/idle"] = State(10, "/init/init/running/idle", self)
+        self.states["/init/init/running/idle"] = State(12, "/init/init/running/idle", self)
         self.states["/init/init/running/idle"].setEnter(self._init_init_running_idle_enter)
         
         # state /init/init/running/modify_defined_attrs
-        self.states["/init/init/running/modify_defined_attrs"] = State(11, "/init/init/running/modify_defined_attrs", self)
+        self.states["/init/init/running/modify_defined_attrs"] = State(13, "/init/init/running/modify_defined_attrs", self)
         
         # state /init/init/running/modify_defined_attrs/create_window
-        self.states["/init/init/running/modify_defined_attrs/create_window"] = State(12, "/init/init/running/modify_defined_attrs/create_window", self)
+        self.states["/init/init/running/modify_defined_attrs/create_window"] = State(14, "/init/init/running/modify_defined_attrs/create_window", self)
         self.states["/init/init/running/modify_defined_attrs/create_window"].setEnter(self._init_init_running_modify_defined_attrs_create_window_enter)
         
         # state /init/init/running/modify_defined_attrs/wait_for_finished
-        self.states["/init/init/running/modify_defined_attrs/wait_for_finished"] = State(13, "/init/init/running/modify_defined_attrs/wait_for_finished", self)
+        self.states["/init/init/running/modify_defined_attrs/wait_for_finished"] = State(15, "/init/init/running/modify_defined_attrs/wait_for_finished", self)
         
         # state /init/init/running/modify_defined_attrs/mark_dirty
-        self.states["/init/init/running/modify_defined_attrs/mark_dirty"] = State(14, "/init/init/running/modify_defined_attrs/mark_dirty", self)
+        self.states["/init/init/running/modify_defined_attrs/mark_dirty"] = State(16, "/init/init/running/modify_defined_attrs/mark_dirty", self)
         self.states["/init/init/running/modify_defined_attrs/mark_dirty"].setEnter(self._init_init_running_modify_defined_attrs_mark_dirty_enter)
         
         # state /init/init/running/execute_activity
-        self.states["/init/init/running/execute_activity"] = State(15, "/init/init/running/execute_activity", self)
+        self.states["/init/init/running/execute_activity"] = State(17, "/init/init/running/execute_activity", self)
         
         # state /init/init/running/execute_activity/open_window
-        self.states["/init/init/running/execute_activity/open_window"] = State(16, "/init/init/running/execute_activity/open_window", self)
+        self.states["/init/init/running/execute_activity/open_window"] = State(18, "/init/init/running/execute_activity/open_window", self)
         self.states["/init/init/running/execute_activity/open_window"].setEnter(self._init_init_running_execute_activity_open_window_enter)
         
         # state /init/init/running/execute_activity/waiting
-        self.states["/init/init/running/execute_activity/waiting"] = State(17, "/init/init/running/execute_activity/waiting", self)
+        self.states["/init/init/running/execute_activity/waiting"] = State(19, "/init/init/running/execute_activity/waiting", self)
         
         # state /init/init/running/create_activity
-        self.states["/init/init/running/create_activity"] = State(18, "/init/init/running/create_activity", self)
+        self.states["/init/init/running/create_activity"] = State(20, "/init/init/running/create_activity", self)
         
         # state /init/init/running/create_activity/open_window
-        self.states["/init/init/running/create_activity/open_window"] = State(19, "/init/init/running/create_activity/open_window", self)
+        self.states["/init/init/running/create_activity/open_window"] = State(21, "/init/init/running/create_activity/open_window", self)
         self.states["/init/init/running/create_activity/open_window"].setEnter(self._init_init_running_create_activity_open_window_enter)
         
         # state /init/init/running/create_activity/waiting
-        self.states["/init/init/running/create_activity/waiting"] = State(20, "/init/init/running/create_activity/waiting", self)
+        self.states["/init/init/running/create_activity/waiting"] = State(22, "/init/init/running/create_activity/waiting", self)
         
         # state /init/init/running/enact_process
-        self.states["/init/init/running/enact_process"] = State(21, "/init/init/running/enact_process", self)
+        self.states["/init/init/running/enact_process"] = State(23, "/init/init/running/enact_process", self)
         
         # state /init/init/running/enact_process/open_window
-        self.states["/init/init/running/enact_process/open_window"] = State(22, "/init/init/running/enact_process/open_window", self)
+        self.states["/init/init/running/enact_process/open_window"] = State(24, "/init/init/running/enact_process/open_window", self)
         self.states["/init/init/running/enact_process/open_window"].setEnter(self._init_init_running_enact_process_open_window_enter)
         
         # state /init/init/running/enact_process/waiting
-        self.states["/init/init/running/enact_process/waiting"] = State(23, "/init/init/running/enact_process/waiting", self)
+        self.states["/init/init/running/enact_process/waiting"] = State(25, "/init/init/running/enact_process/waiting", self)
         
         # state /init/init/running/add_object_diagrams
-        self.states["/init/init/running/add_object_diagrams"] = State(24, "/init/init/running/add_object_diagrams", self)
+        self.states["/init/init/running/add_object_diagrams"] = State(26, "/init/init/running/add_object_diagrams", self)
         
         # state /init/init/running/add_object_diagrams/init
-        self.states["/init/init/running/add_object_diagrams/init"] = State(25, "/init/init/running/add_object_diagrams/init", self)
+        self.states["/init/init/running/add_object_diagrams/init"] = State(27, "/init/init/running/add_object_diagrams/init", self)
         self.states["/init/init/running/add_object_diagrams/init"].setEnter(self._init_init_running_add_object_diagrams_init_enter)
         
         # state /init/init/running/upload_MVC
-        self.states["/init/init/running/upload_MVC"] = State(26, "/init/init/running/upload_MVC", self)
+        self.states["/init/init/running/upload_MVC"] = State(28, "/init/init/running/upload_MVC", self)
         
         # state /init/init/running/upload_MVC/load_code
-        self.states["/init/init/running/upload_MVC/load_code"] = State(27, "/init/init/running/upload_MVC/load_code", self)
+        self.states["/init/init/running/upload_MVC/load_code"] = State(29, "/init/init/running/upload_MVC/load_code", self)
         self.states["/init/init/running/upload_MVC/load_code"].setEnter(self._init_init_running_upload_MVC_load_code_enter)
         
         # state /init/init/running/upload_MVC/waiting
-        self.states["/init/init/running/upload_MVC/waiting"] = State(28, "/init/init/running/upload_MVC/waiting", self)
+        self.states["/init/init/running/upload_MVC/waiting"] = State(30, "/init/init/running/upload_MVC/waiting", self)
         
         # state /init/init/running/upload_MVC/got_filename
-        self.states["/init/init/running/upload_MVC/got_filename"] = State(29, "/init/init/running/upload_MVC/got_filename", self)
+        self.states["/init/init/running/upload_MVC/got_filename"] = State(31, "/init/init/running/upload_MVC/got_filename", self)
         
         # state /init/init/running/upload_MVC/overwriting_model
-        self.states["/init/init/running/upload_MVC/overwriting_model"] = State(30, "/init/init/running/upload_MVC/overwriting_model", self)
+        self.states["/init/init/running/upload_MVC/overwriting_model"] = State(32, "/init/init/running/upload_MVC/overwriting_model", self)
         
         # state /init/init/running/change_metamodel
-        self.states["/init/init/running/change_metamodel"] = State(31, "/init/init/running/change_metamodel", self)
+        self.states["/init/init/running/change_metamodel"] = State(33, "/init/init/running/change_metamodel", self)
         self.states["/init/init/running/change_metamodel"].setEnter(self._init_init_running_change_metamodel_enter)
         
         # state /init/init/running/conf_bottom
-        self.states["/init/init/running/conf_bottom"] = State(32, "/init/init/running/conf_bottom", self)
+        self.states["/init/init/running/conf_bottom"] = State(34, "/init/init/running/conf_bottom", self)
         
         # state /init/init/running/conf_bottom/check_if_exists
-        self.states["/init/init/running/conf_bottom/check_if_exists"] = State(33, "/init/init/running/conf_bottom/check_if_exists", self)
+        self.states["/init/init/running/conf_bottom/check_if_exists"] = State(35, "/init/init/running/conf_bottom/check_if_exists", self)
         
         # state /init/init/running/conf_bottom/add_bottom
-        self.states["/init/init/running/conf_bottom/add_bottom"] = State(34, "/init/init/running/conf_bottom/add_bottom", self)
+        self.states["/init/init/running/conf_bottom/add_bottom"] = State(36, "/init/init/running/conf_bottom/add_bottom", self)
         self.states["/init/init/running/conf_bottom/add_bottom"].setEnter(self._init_init_running_conf_bottom_add_bottom_enter)
         
         # state /init/init/running/custom_MM
-        self.states["/init/init/running/custom_MM"] = State(35, "/init/init/running/custom_MM", self)
+        self.states["/init/init/running/custom_MM"] = State(37, "/init/init/running/custom_MM", self)
         
         # state /init/init/running/custom_MM/query
-        self.states["/init/init/running/custom_MM/query"] = State(36, "/init/init/running/custom_MM/query", self)
+        self.states["/init/init/running/custom_MM/query"] = State(38, "/init/init/running/custom_MM/query", self)
         self.states["/init/init/running/custom_MM/query"].setEnter(self._init_init_running_custom_MM_query_enter)
         
         # state /init/init/running/custom_MM/wait_for_metamodel
-        self.states["/init/init/running/custom_MM/wait_for_metamodel"] = State(37, "/init/init/running/custom_MM/wait_for_metamodel", self)
+        self.states["/init/init/running/custom_MM/wait_for_metamodel"] = State(39, "/init/init/running/custom_MM/wait_for_metamodel", self)
         self.states["/init/init/running/custom_MM/wait_for_metamodel"].setEnter(self._init_init_running_custom_MM_wait_for_metamodel_enter)
         
         # state /init/init/running/custom_MM/wait_for_metamodel/wait_for_result
-        self.states["/init/init/running/custom_MM/wait_for_metamodel/wait_for_result"] = State(38, "/init/init/running/custom_MM/wait_for_metamodel/wait_for_result", self)
+        self.states["/init/init/running/custom_MM/wait_for_metamodel/wait_for_result"] = State(40, "/init/init/running/custom_MM/wait_for_metamodel/wait_for_result", self)
         
         # state /init/init/running/custom_MM/wait_for_metamodel/got_result
-        self.states["/init/init/running/custom_MM/wait_for_metamodel/got_result"] = State(39, "/init/init/running/custom_MM/wait_for_metamodel/got_result", self)
+        self.states["/init/init/running/custom_MM/wait_for_metamodel/got_result"] = State(41, "/init/init/running/custom_MM/wait_for_metamodel/got_result", self)
         
         # state /init/init/running/custom_MM/wait_for_metamodel/mv_processing
-        self.states["/init/init/running/custom_MM/wait_for_metamodel/mv_processing"] = State(40, "/init/init/running/custom_MM/wait_for_metamodel/mv_processing", self)
+        self.states["/init/init/running/custom_MM/wait_for_metamodel/mv_processing"] = State(42, "/init/init/running/custom_MM/wait_for_metamodel/mv_processing", self)
         
         # state /init/init/running/change_mapper
-        self.states["/init/init/running/change_mapper"] = State(41, "/init/init/running/change_mapper", self)
+        self.states["/init/init/running/change_mapper"] = State(43, "/init/init/running/change_mapper", self)
         
         # state /init/init/running/change_rendered
-        self.states["/init/init/running/change_rendered"] = State(42, "/init/init/running/change_rendered", self)
+        self.states["/init/init/running/change_rendered"] = State(44, "/init/init/running/change_rendered", self)
         
         # state /init/init/running/verify_model
-        self.states["/init/init/running/verify_model"] = State(43, "/init/init/running/verify_model", self)
+        self.states["/init/init/running/verify_model"] = State(45, "/init/init/running/verify_model", self)
         
         # state /init/init/running/verify_model/request
-        self.states["/init/init/running/verify_model/request"] = State(44, "/init/init/running/verify_model/request", self)
+        self.states["/init/init/running/verify_model/request"] = State(46, "/init/init/running/verify_model/request", self)
         self.states["/init/init/running/verify_model/request"].setEnter(self._init_init_running_verify_model_request_enter)
         
         # state /init/init/running/verify_model/show_result
-        self.states["/init/init/running/verify_model/show_result"] = State(45, "/init/init/running/verify_model/show_result", self)
+        self.states["/init/init/running/verify_model/show_result"] = State(47, "/init/init/running/verify_model/show_result", self)
         
         # state /init/init/running/verify_model/wait_for_close
-        self.states["/init/init/running/verify_model/wait_for_close"] = State(46, "/init/init/running/verify_model/wait_for_close", self)
+        self.states["/init/init/running/verify_model/wait_for_close"] = State(48, "/init/init/running/verify_model/wait_for_close", self)
         
         # state /init/init/running/open_model
-        self.states["/init/init/running/open_model"] = State(47, "/init/init/running/open_model", self)
+        self.states["/init/init/running/open_model"] = State(49, "/init/init/running/open_model", self)
         
         # state /init/init/running/open_model/query_model
-        self.states["/init/init/running/open_model/query_model"] = State(48, "/init/init/running/open_model/query_model", self)
+        self.states["/init/init/running/open_model/query_model"] = State(50, "/init/init/running/open_model/query_model", self)
         self.states["/init/init/running/open_model/query_model"].setEnter(self._init_init_running_open_model_query_model_enter)
         
         # state /init/init/running/open_model/wait_for_model
-        self.states["/init/init/running/open_model/wait_for_model"] = State(49, "/init/init/running/open_model/wait_for_model", self)
+        self.states["/init/init/running/open_model/wait_for_model"] = State(51, "/init/init/running/open_model/wait_for_model", self)
         
         # state /init/init/running/open_model/got_model
-        self.states["/init/init/running/open_model/got_model"] = State(50, "/init/init/running/open_model/got_model", self)
+        self.states["/init/init/running/open_model/got_model"] = State(52, "/init/init/running/open_model/got_model", self)
         
         # state /init/init/running/open_model/search_metamodels
-        self.states["/init/init/running/open_model/search_metamodels"] = State(51, "/init/init/running/open_model/search_metamodels", self)
+        self.states["/init/init/running/open_model/search_metamodels"] = State(53, "/init/init/running/open_model/search_metamodels", self)
         self.states["/init/init/running/open_model/search_metamodels"].setEnter(self._init_init_running_open_model_search_metamodels_enter)
         
         # state /init/init/running/open_model/search_CS_mappers
-        self.states["/init/init/running/open_model/search_CS_mappers"] = State(52, "/init/init/running/open_model/search_CS_mappers", self)
+        self.states["/init/init/running/open_model/search_CS_mappers"] = State(54, "/init/init/running/open_model/search_CS_mappers", self)
         self.states["/init/init/running/open_model/search_CS_mappers"].setEnter(self._init_init_running_open_model_search_CS_mappers_enter)
         
         # state /init/init/running/open_model/check_CS_mapper
-        self.states["/init/init/running/open_model/check_CS_mapper"] = State(53, "/init/init/running/open_model/check_CS_mapper", self)
+        self.states["/init/init/running/open_model/check_CS_mapper"] = State(55, "/init/init/running/open_model/check_CS_mapper", self)
         
         # state /init/init/running/open_model/search_CS_rendered
-        self.states["/init/init/running/open_model/search_CS_rendered"] = State(54, "/init/init/running/open_model/search_CS_rendered", self)
+        self.states["/init/init/running/open_model/search_CS_rendered"] = State(56, "/init/init/running/open_model/search_CS_rendered", self)
         self.states["/init/init/running/open_model/search_CS_rendered"].setEnter(self._init_init_running_open_model_search_CS_rendered_enter)
         
         # state /init/init/running/open_model/store_metamodel
-        self.states["/init/init/running/open_model/store_metamodel"] = State(55, "/init/init/running/open_model/store_metamodel", self)
+        self.states["/init/init/running/open_model/store_metamodel"] = State(57, "/init/init/running/open_model/store_metamodel", self)
         self.states["/init/init/running/open_model/store_metamodel"].setEnter(self._init_init_running_open_model_store_metamodel_enter)
         
         # state /init/init/running/new_rendered
-        self.states["/init/init/running/new_rendered"] = State(56, "/init/init/running/new_rendered", self)
+        self.states["/init/init/running/new_rendered"] = State(58, "/init/init/running/new_rendered", self)
         self.states["/init/init/running/new_rendered"].setEnter(self._init_init_running_new_rendered_enter)
         
         # state /init/init/running/create_new_model
-        self.states["/init/init/running/create_new_model"] = State(57, "/init/init/running/create_new_model", self)
+        self.states["/init/init/running/create_new_model"] = State(59, "/init/init/running/create_new_model", self)
         
         # state /init/init/running/create_new_model/query_metamodel
-        self.states["/init/init/running/create_new_model/query_metamodel"] = State(58, "/init/init/running/create_new_model/query_metamodel", self)
+        self.states["/init/init/running/create_new_model/query_metamodel"] = State(60, "/init/init/running/create_new_model/query_metamodel", self)
         self.states["/init/init/running/create_new_model/query_metamodel"].setEnter(self._init_init_running_create_new_model_query_metamodel_enter)
         
         # state /init/init/running/create_new_model/wait_for_metamodel
-        self.states["/init/init/running/create_new_model/wait_for_metamodel"] = State(59, "/init/init/running/create_new_model/wait_for_metamodel", self)
+        self.states["/init/init/running/create_new_model/wait_for_metamodel"] = State(61, "/init/init/running/create_new_model/wait_for_metamodel", self)
         
         # state /init/init/running/create_new_model/got_mm
-        self.states["/init/init/running/create_new_model/got_mm"] = State(60, "/init/init/running/create_new_model/got_mm", self)
+        self.states["/init/init/running/create_new_model/got_mm"] = State(62, "/init/init/running/create_new_model/got_mm", self)
         
         # state /init/init/running/create_new_model/prompt_model_name
-        self.states["/init/init/running/create_new_model/prompt_model_name"] = State(61, "/init/init/running/create_new_model/prompt_model_name", self)
+        self.states["/init/init/running/create_new_model/prompt_model_name"] = State(63, "/init/init/running/create_new_model/prompt_model_name", self)
         self.states["/init/init/running/create_new_model/prompt_model_name"].setEnter(self._init_init_running_create_new_model_prompt_model_name_enter)
         
         # state /init/init/running/create_new_model/waiting_for_model_name
-        self.states["/init/init/running/create_new_model/waiting_for_model_name"] = State(62, "/init/init/running/create_new_model/waiting_for_model_name", self)
+        self.states["/init/init/running/create_new_model/waiting_for_model_name"] = State(64, "/init/init/running/create_new_model/waiting_for_model_name", self)
         
         # state /init/init/running/create_new_model/creating_model
-        self.states["/init/init/running/create_new_model/creating_model"] = State(63, "/init/init/running/create_new_model/creating_model", self)
+        self.states["/init/init/running/create_new_model/creating_model"] = State(65, "/init/init/running/create_new_model/creating_model", self)
         self.states["/init/init/running/create_new_model/creating_model"].setEnter(self._init_init_running_create_new_model_creating_model_enter)
         
         # state /init/init/running/rerender_model
-        self.states["/init/init/running/rerender_model"] = State(64, "/init/init/running/rerender_model", self)
+        self.states["/init/init/running/rerender_model"] = State(66, "/init/init/running/rerender_model", self)
         self.states["/init/init/running/rerender_model"].setEnter(self._init_init_running_rerender_model_enter)
         
         # state /init/init/running/rerender_model/initial_render
-        self.states["/init/init/running/rerender_model/initial_render"] = State(65, "/init/init/running/rerender_model/initial_render", self)
+        self.states["/init/init/running/rerender_model/initial_render"] = State(67, "/init/init/running/rerender_model/initial_render", self)
         
         # state /init/init/running/rerender_model/recreate_toolbars
-        self.states["/init/init/running/rerender_model/recreate_toolbars"] = State(66, "/init/init/running/rerender_model/recreate_toolbars", self)
+        self.states["/init/init/running/rerender_model/recreate_toolbars"] = State(68, "/init/init/running/rerender_model/recreate_toolbars", self)
         self.states["/init/init/running/rerender_model/recreate_toolbars"].setEnter(self._init_init_running_rerender_model_recreate_toolbars_enter)
         
         # state /init/init/running/rerender_model/recreate_toolbars/waiting
-        self.states["/init/init/running/rerender_model/recreate_toolbars/waiting"] = State(67, "/init/init/running/rerender_model/recreate_toolbars/waiting", self)
+        self.states["/init/init/running/rerender_model/recreate_toolbars/waiting"] = State(69, "/init/init/running/rerender_model/recreate_toolbars/waiting", self)
         
         # state /init/init/running/rerender_model/recreate_toolbars/close_all
-        self.states["/init/init/running/rerender_model/recreate_toolbars/close_all"] = State(68, "/init/init/running/rerender_model/recreate_toolbars/close_all", self)
+        self.states["/init/init/running/rerender_model/recreate_toolbars/close_all"] = State(70, "/init/init/running/rerender_model/recreate_toolbars/close_all", self)
         
         # state /init/init/running/rerender_model/canvas
-        self.states["/init/init/running/rerender_model/canvas"] = State(69, "/init/init/running/rerender_model/canvas", self)
+        self.states["/init/init/running/rerender_model/canvas"] = State(71, "/init/init/running/rerender_model/canvas", self)
         self.states["/init/init/running/rerender_model/canvas"].setEnter(self._init_init_running_rerender_model_canvas_enter)
         
         # state /init/init/running/rerender_model/pack_canvas
-        self.states["/init/init/running/rerender_model/pack_canvas"] = State(70, "/init/init/running/rerender_model/pack_canvas", self)
+        self.states["/init/init/running/rerender_model/pack_canvas"] = State(72, "/init/init/running/rerender_model/pack_canvas", self)
         
         # state /init/init/running/rerender_model/model_toolbars
-        self.states["/init/init/running/rerender_model/model_toolbars"] = State(71, "/init/init/running/rerender_model/model_toolbars", self)
+        self.states["/init/init/running/rerender_model/model_toolbars"] = State(73, "/init/init/running/rerender_model/model_toolbars", self)
         
         # state /init/init/running/rerender_model/model_toolbars/mm_toolbar
-        self.states["/init/init/running/rerender_model/model_toolbars/mm_toolbar"] = State(72, "/init/init/running/rerender_model/model_toolbars/mm_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/mm_toolbar"] = State(74, "/init/init/running/rerender_model/model_toolbars/mm_toolbar", self)
         self.states["/init/init/running/rerender_model/model_toolbars/mm_toolbar"].setEnter(self._init_init_running_rerender_model_model_toolbars_mm_toolbar_enter)
         
         # state /init/init/running/rerender_model/model_toolbars/pack_mm_toolbar
-        self.states["/init/init/running/rerender_model/model_toolbars/pack_mm_toolbar"] = State(73, "/init/init/running/rerender_model/model_toolbars/pack_mm_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/pack_mm_toolbar"] = State(75, "/init/init/running/rerender_model/model_toolbars/pack_mm_toolbar", self)
         
         # state /init/init/running/rerender_model/model_toolbars/cs_toolbar
-        self.states["/init/init/running/rerender_model/model_toolbars/cs_toolbar"] = State(74, "/init/init/running/rerender_model/model_toolbars/cs_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/cs_toolbar"] = State(76, "/init/init/running/rerender_model/model_toolbars/cs_toolbar", self)
         self.states["/init/init/running/rerender_model/model_toolbars/cs_toolbar"].setEnter(self._init_init_running_rerender_model_model_toolbars_cs_toolbar_enter)
         
         # state /init/init/running/rerender_model/model_toolbars/pack_cs_toolbar
-        self.states["/init/init/running/rerender_model/model_toolbars/pack_cs_toolbar"] = State(75, "/init/init/running/rerender_model/model_toolbars/pack_cs_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/pack_cs_toolbar"] = State(77, "/init/init/running/rerender_model/model_toolbars/pack_cs_toolbar", self)
         
         # state /init/init/running/rerender_model/model_toolbars/fetch_types
-        self.states["/init/init/running/rerender_model/model_toolbars/fetch_types"] = State(76, "/init/init/running/rerender_model/model_toolbars/fetch_types", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/fetch_types"] = State(78, "/init/init/running/rerender_model/model_toolbars/fetch_types", self)
         self.states["/init/init/running/rerender_model/model_toolbars/fetch_types"].setEnter(self._init_init_running_rerender_model_model_toolbars_fetch_types_enter)
         
         # state /init/init/running/rerender_model/model_toolbars/dsl_toolbar
-        self.states["/init/init/running/rerender_model/model_toolbars/dsl_toolbar"] = State(77, "/init/init/running/rerender_model/model_toolbars/dsl_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/dsl_toolbar"] = State(79, "/init/init/running/rerender_model/model_toolbars/dsl_toolbar", self)
         
         # state /init/init/running/rerender_model/model_toolbars/pack_dsl_toolbar
-        self.states["/init/init/running/rerender_model/model_toolbars/pack_dsl_toolbar"] = State(78, "/init/init/running/rerender_model/model_toolbars/pack_dsl_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/pack_dsl_toolbar"] = State(80, "/init/init/running/rerender_model/model_toolbars/pack_dsl_toolbar", self)
         
         # state /init/init/running/rerender_model/request_render
-        self.states["/init/init/running/rerender_model/request_render"] = State(79, "/init/init/running/rerender_model/request_render", self)
+        self.states["/init/init/running/rerender_model/request_render"] = State(81, "/init/init/running/rerender_model/request_render", self)
         self.states["/init/init/running/rerender_model/request_render"].setEnter(self._init_init_running_rerender_model_request_render_enter)
         
         # state /init/init/running/rerender_model/render_model
-        self.states["/init/init/running/rerender_model/render_model"] = State(80, "/init/init/running/rerender_model/render_model", self)
+        self.states["/init/init/running/rerender_model/render_model"] = State(82, "/init/init/running/rerender_model/render_model", self)
         self.states["/init/init/running/rerender_model/render_model"].setEnter(self._init_init_running_rerender_model_render_model_enter)
         
         # state /init/init/running/rerender_model/render_model/allocate_groups
-        self.states["/init/init/running/rerender_model/render_model/allocate_groups"] = State(81, "/init/init/running/rerender_model/render_model/allocate_groups", self)
+        self.states["/init/init/running/rerender_model/render_model/allocate_groups"] = State(83, "/init/init/running/rerender_model/render_model/allocate_groups", self)
         
         # state /init/init/running/rerender_model/render_model/allocating_group
-        self.states["/init/init/running/rerender_model/render_model/allocating_group"] = State(82, "/init/init/running/rerender_model/render_model/allocating_group", self)
+        self.states["/init/init/running/rerender_model/render_model/allocating_group"] = State(84, "/init/init/running/rerender_model/render_model/allocating_group", self)
         
         # state /init/init/running/rerender_model/render_model/allocate_contains
-        self.states["/init/init/running/rerender_model/render_model/allocate_contains"] = State(83, "/init/init/running/rerender_model/render_model/allocate_contains", self)
+        self.states["/init/init/running/rerender_model/render_model/allocate_contains"] = State(85, "/init/init/running/rerender_model/render_model/allocate_contains", self)
         
         # state /init/init/running/rerender_model/render_model/render_elements
-        self.states["/init/init/running/rerender_model/render_model/render_elements"] = State(84, "/init/init/running/rerender_model/render_model/render_elements", self)
+        self.states["/init/init/running/rerender_model/render_model/render_elements"] = State(86, "/init/init/running/rerender_model/render_model/render_elements", self)
         
         # state /init/init/close
-        self.states["/init/init/close"] = State(85, "/init/init/close", self)
+        self.states["/init/init/close"] = State(87, "/init/init/close", self)
         self.states["/init/init/close"].setEnter(self._init_init_close_enter)
         
         # state /init/key_status
-        self.states["/init/key_status"] = State(86, "/init/key_status", self)
+        self.states["/init/key_status"] = State(88, "/init/key_status", self)
         self.states["/init/key_status"].setEnter(self._init_key_status_enter)
         
         # state /init/key_status/listening
-        self.states["/init/key_status/listening"] = State(87, "/init/key_status/listening", self)
+        self.states["/init/key_status/listening"] = State(89, "/init/key_status/listening", self)
         
         # state /init/mover
-        self.states["/init/mover"] = State(88, "/init/mover", self)
+        self.states["/init/mover"] = State(90, "/init/mover", self)
         
         # state /init/mover/move
-        self.states["/init/mover/move"] = State(89, "/init/mover/move", self)
+        self.states["/init/mover/move"] = State(91, "/init/mover/move", self)
         
         # add children
         self.states[""].addChild(self.states["/init"])
@@ -5652,6 +5664,8 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/init/init/init"].addChild(self.states["/init/init/init/pack_generic"])
         self.states["/init/init/init"].addChild(self.states["/init/init/init/progressbar"])
         self.states["/init/init/init"].addChild(self.states["/init/init/init/pack_progressbar"])
+        self.states["/init/init/init"].addChild(self.states["/init/init/init/error_log"])
+        self.states["/init/init/init"].addChild(self.states["/init/init/init/pack_error_log"])
         self.states["/init/init/running"].addChild(self.states["/init/init/running/idle"])
         self.states["/init/init/running"].addChild(self.states["/init/init/running/modify_defined_attrs"])
         self.states["/init/init/running"].addChild(self.states["/init/init/running/execute_activity"])
@@ -5782,11 +5796,23 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/init/init/init/progressbar"].addTransition(_init_init_init_progressbar_0)
         
         # transition /init/init/init/pack_progressbar
-        _init_init_init_pack_progressbar_0 = Transition(self, self.states["/init/init/init/pack_progressbar"], [self.states["/init/init/running"]])
+        _init_init_init_pack_progressbar_0 = Transition(self, self.states["/init/init/init/pack_progressbar"], [self.states["/init/init/init/error_log"]])
         _init_init_init_pack_progressbar_0.setAction(self._init_init_init_pack_progressbar_0_exec)
         _init_init_init_pack_progressbar_0.setTrigger(Event("tk_widget", None))
         self.states["/init/init/init/pack_progressbar"].addTransition(_init_init_init_pack_progressbar_0)
         
+        # transition /init/init/init/error_log
+        _init_init_init_error_log_0 = Transition(self, self.states["/init/init/init/error_log"], [self.states["/init/init/init/pack_error_log"]])
+        _init_init_init_error_log_0.setAction(self._init_init_init_error_log_0_exec)
+        _init_init_init_error_log_0.setTrigger(Event("instance_created", None))
+        self.states["/init/init/init/error_log"].addTransition(_init_init_init_error_log_0)
+        
+        # transition /init/init/init/pack_error_log
+        _init_init_init_pack_error_log_0 = Transition(self, self.states["/init/init/init/pack_error_log"], [self.states["/init/init/running"]])
+        _init_init_init_pack_error_log_0.setAction(self._init_init_init_pack_error_log_0_exec)
+        _init_init_init_pack_error_log_0.setTrigger(Event("tk_widget", None))
+        self.states["/init/init/init/pack_error_log"].addTransition(_init_init_init_pack_error_log_0)
+        
         # transition /init/init/running/idle
         _init_init_running_idle_0 = Transition(self, self.states["/init/init/running/idle"], [self.states["/init/init/running/create_new_model"]])
         _init_init_running_idle_0.setTrigger(Event("create_new_model", None))
@@ -6333,6 +6359,9 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _init_init_init_progressbar_enter(self):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'progress_bar', 'ProgressBar', {'parent': self.progressbar_frame}]))
     
+    def _init_init_init_error_log_enter(self):
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'error_log', 'Listbox', {'parent': self.error_log_frame}]))
+    
     def _init_init_running_idle_enter(self):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [0, 'Ready for action!'])]))
     
@@ -6458,6 +6487,14 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         tk_elem = parameters[0]
         tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
     
+    def _init_init_init_error_log_0_exec(self, parameters):
+        association_name = parameters[0]
+        self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))
+    
+    def _init_init_init_pack_error_log_0_exec(self, parameters):
+        tk_elem = parameters[0]
+        tk_elem.pack(fill=tk.BOTH, expand=tk.TRUE)
+    
     def _init_init_running_idle_4_guard(self, parameters):
         return current_mapper is not None
     
@@ -13233,6 +13270,88 @@ class Label(RuntimeClassBase, tk.Label, SCCDWidget):
         self.default_targets = self.states["/root"].getEffectiveTargetStates()
         RuntimeClassBase.initializeStatechart(self)
 
+class Listbox(RuntimeClassBase):
+    def __init__(self, controller, constructor_parameters = None):
+        if constructor_parameters == None: constructor_parameters = {}
+        RuntimeClassBase.__init__(self, controller)
+        
+        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
+        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
+        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
+        self.semantics.priority = StatechartSemantics.SourceParent
+        self.semantics.concurrency = StatechartSemantics.Single
+        
+        # build Statechart structure
+        self.build_statechart_structure()
+        
+        # call user defined constructor
+        Listbox.user_defined_constructor(self, constructor_parameters)
+    
+    def user_defined_constructor(self, constructor_parameters = None):
+        if constructor_parameters == None: constructor_parameters = {}
+        self.entry = tk.Listbox(constructor_parameters['parent'])
+    
+    def user_defined_destructor(self):
+        self.entry.destroy()
+    
+    
+    # builds Statechart structure
+    def build_statechart_structure(self):
+        
+        # state <root>
+        self.states[""] = State(0, "", self)
+        
+        # state /main
+        self.states["/main"] = State(1, "/main", self)
+        
+        # state /main/initializing
+        self.states["/main/initializing"] = State(2, "/main/initializing", self)
+        
+        # state /main/ready
+        self.states["/main/ready"] = State(3, "/main/ready", self)
+        
+        # add children
+        self.states[""].addChild(self.states["/main"])
+        self.states["/main"].addChild(self.states["/main/initializing"])
+        self.states["/main"].addChild(self.states["/main/ready"])
+        self.states[""].fixTree()
+        self.states[""].default_state = self.states["/main"]
+        self.states["/main"].default_state = self.states["/main/initializing"]
+        
+        # transition /main/initializing
+        _main_initializing_0 = Transition(self, self.states["/main/initializing"], [self.states["/main/ready"]])
+        _main_initializing_0.setAction(self._main_initializing_0_exec)
+        _main_initializing_0.setTrigger(None)
+        self.states["/main/initializing"].addTransition(_main_initializing_0)
+        
+        # transition /main/ready
+        _main_ready_0 = Transition(self, self.states["/main/ready"], [self.states["/main/ready"]])
+        _main_ready_0.setAction(self._main_ready_0_exec)
+        _main_ready_0.setTrigger(Event("append_value", None))
+        self.states["/main/ready"].addTransition(_main_ready_0)
+        _main_ready_1 = Transition(self, self.states["/main/ready"], [self.states["/main/ready"]])
+        _main_ready_1.setAction(self._main_ready_1_exec)
+        _main_ready_1.setTrigger(Event("prepend_value", None))
+        self.states["/main/ready"].addTransition(_main_ready_1)
+    
+    def _main_initializing_0_exec(self, parameters):
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("tk_widget", None, [self.entry])]))
+    
+    def _main_ready_0_exec(self, parameters):
+        new_value = parameters[0]
+        self.entry.insert(tk.END, new_value)
+        self.entry.see(tk.END)
+    
+    def _main_ready_1_exec(self, parameters):
+        new_value = parameters[0]
+        self.entry.insert(0, new_value)
+        self.entry.see(0)
+    
+    def initializeStatechart(self):
+        # enter default state
+        self.default_targets = self.states["/main"].getEffectiveTargetStates()
+        RuntimeClassBase.initializeStatechart(self)
+
 class ProgressBar(RuntimeClassBase, ttk.Progressbar, SCCDWidget):
     def __init__(self, controller, params):
         RuntimeClassBase.__init__(self, controller)
@@ -14962,6 +15081,7 @@ class ObjectManager(ObjectManagerBase):
             instance.associations["model_toolbars"] = Association("Toolbar", 0, -1)
             instance.associations["subwindow"] = Association("Window", 0, -1)
             instance.associations["canvas"] = Association("Canvas", 0, -1)
+            instance.associations["error_log"] = Association("Listbox", 0, -1)
             instance.associations["progress_bar"] = Association("ProgressBar", 0, -1)
         elif class_name == "Browser":
             instance = Browser(self.controller, construct_params[0], construct_params[1])
@@ -15075,6 +15195,10 @@ class ObjectManager(ObjectManagerBase):
             instance = Label(self.controller, construct_params[0])
             instance.associations = {}
             instance.associations["parent"] = Association("A", 1, 1)
+        elif class_name == "Listbox":
+            instance = Listbox(self.controller, construct_params[0])
+            instance.associations = {}
+            instance.associations["parent"] = Association("A", 0, -1)
         elif class_name == "ProgressBar":
             instance = ProgressBar(self.controller, construct_params[0])
             instance.associations = {}

+ 1 - 0
frontend.xml

@@ -54,6 +54,7 @@
     <class src="classes/widgets/dropdown.xml"/>
     <class src="classes/widgets/toggle_button.xml"/>
     <class src="classes/widgets/label.xml"/>
+    <class src="classes/widgets/listbox.xml"/>
     <class src="classes/widgets/progress_bar.xml"/>
     <class src="classes/canvas/canvas.xml"/>
     <class src="classes/canvas/connecting_line.xml"/>