Browse Source

Working nice error logger

Yentl Van Tendeloo 7 years ago
parent
commit
6d197f9e4b
6 changed files with 138 additions and 167 deletions
  1. 10 2
      classes/canvas/canvas_element.xml
  2. 0 4
      classes/main_app.xml
  3. 6 17
      classes/widgets/listbox.xml
  4. 5 10
      classes/window/main_window.xml
  5. 116 133
      frontend.py
  6. 1 1
      frontend.xml

+ 10 - 2
classes/canvas/canvas_element.xml

@@ -201,6 +201,7 @@
 
             <transition event="mv_response" target="../main"/>
             <transition event="mv_exception" target="../main">
+                <parameter name="ID"/>
                 <parameter name="exception_name"/>
                 <parameter name="description"/>
                 <script>
@@ -243,6 +244,7 @@
                 </onentry>
 
                 <transition event="mv_exception" target="../../main">
+                    <parameter name="ID"/>
                     <parameter name="exception_name"/>
                     <parameter name="description"/>
                     <script>
@@ -285,6 +287,7 @@
 
                 <state id="process">
                     <transition event="mv_exception" target="../../../main">
+                        <parameter name="ID"/>
                         <parameter name="exception_name"/>
                         <parameter name="description"/>
                         <script>
@@ -384,11 +387,13 @@
                 <transition cond="self.remaining_responses == 0" target="../mark_dirty"/>
 
                 <transition event="mv_exception" target=".">
+                    <parameter name="ID"/>
                     <parameter name="exception_name"/>
                     <parameter name="description"/>
+                    <raise event="errorlog_log" scope="broad">
+                        <parameter expr="'Failed to compile AL: %s - %s' % (exception_name, description)"/>
+                    </raise>
                     <script>
-                        print("Got exception: " + str(exception_name))
-                        print("Description: " + str(description))
                         self.remaining_responses -= 1
                     </script>
                 </transition>
@@ -419,6 +424,7 @@
                         <raise event="minimal_rerender_model" scope="narrow" target="'parent/parent'"/>
                     </transition>
                     <transition event="mv_exception" target="../../../main">
+                        <parameter name="ID"/>
                         <parameter name="exception_name"/>
                         <parameter name="description"/>
                         <script>
@@ -454,6 +460,7 @@
 
                 <transition event="mv_response" target="../y"/>
                 <transition event="mv_exception" target="../../main">
+                    <parameter name="ID"/>
                     <parameter name="exception_name"/>
                     <parameter name="description"/>
                     <script>
@@ -472,6 +479,7 @@
 
                 <transition event="mv_response" target="../../main"/>
                 <transition event="mv_exception" target="../../main">
+                    <parameter name="ID"/>
                     <parameter name="exception_name"/>
                     <parameter name="description"/>
                     <script>

+ 0 - 4
classes/main_app.xml

@@ -423,10 +423,6 @@
                         <parameter name="ID"/>
                         <parameter name="exception_name"/>
                         <parameter name="exception"/>
-                        <raise event="mv_exception" scope="broad">
-                            <parameter expr="exception_name"/>
-                            <parameter expr="exception"/>
-                        </raise>
                         <script>
                             print("Got Modelverse exception: " + str(exception_name))
                             print("Details: " + str(exception))

+ 6 - 17
classes/widgets/listbox.xml

@@ -1,4 +1,4 @@
-<class name="Listbox">
+<class name="Errorlog">
     <relationships>
         <association name="parent" class="A"/>
     </relationships>
@@ -22,33 +22,22 @@
     <scxml initial="main">
         <state id="main" initial='initializing'>
             <state id="initializing">
-                <transition target="../ready">
-                    <script>
-                        entry = tk.Label(self.parent, text="ABC", bg="red", wraplength=30, width=30)
-                        self.entries.append(entry)
-                        entry = tk.Label(self.parent, text="DDD", bg="red", wraplength=30, width=30)
-                        self.entries.append(entry)
-                        entry = tk.Label(self.parent, text="EFG", bg="red", wraplength=30, width=30)
-                        self.entries.append(entry)
-                        [i.pack(anchor=tk.N, fill=tk.X) for i in reversed(self.entries)]
-                        self.entry_timers = [time.time() + 1, time.time() + 2, time.time() + 4]
-                    </script>
-                </transition>
+                <transition target="../ready"/>
             </state>
 
             <state id="ready">
-                <transition event="prepend_value" target=".">
+                <transition event="errorlog_log" target=".">
                     <parameter name="new_value"/>
                     <script>
                         [i.pack_forget() for i in self.entries]
-                        entry = tk.Label(self.parent, text=new_value, wraplength=30, bg="red", width=30)
+                        entry = tk.Label(self.parent, text=new_value, wraplength=150, bg="red", width=30)
                         self.entries.append(entry)
-                        self.entry_timers.append(5)
+                        self.entry_timers.append(time.time() + 5)
                         [i.pack(anchor=tk.N, fill=tk.X) for i in reversed(self.entries)]
                     </script>
                 </transition>
 
-                <transition after="min(10000, max(min(self.entry_timers) - time.time(), 0))" target=".">
+                <transition after="max(min(self.entry_timers + [1000 + time.time()]) - time.time(), 0)" target=".">
                     <script>
                         for i, v in enumerate(self.entry_timers):
                             if v &lt; time.time():

+ 5 - 10
classes/window/main_window.xml

@@ -7,7 +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="error_log" class="Errorlog"/>
         <association name="progress_bar" class="ProgressBar"/>
     </relationships>
 
@@ -107,6 +107,7 @@
                             <parameter name="tk_elem"/>
                             <script>
                                 tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
+                                print("Pack progress")
                             </script>
                         </transition>
                     </state>
@@ -115,24 +116,18 @@
                         <onentry>
                             <raise event="create_instance" scope="cd">
                                 <parameter expr="'error_log'"/>
-                                <parameter expr="'Listbox'"/>
+                                <parameter expr="'Errorlog'"/>
                                 <parameter expr="{'parent': self.error_log_frame}"/>
                             </raise>
                         </onentry>
 
-                        <transition event="instance_created" target="../pack_error_log">
+                        <transition event="instance_created" target="../../running">
                             <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)
+                                print("Packed errorlog")
                             </script>
                         </transition>
                     </state>

+ 116 - 133
frontend.py

@@ -632,7 +632,6 @@ class MainApp(RuntimeClassBase):
         ID = parameters[0]
         exception_name = parameters[1]
         exception = parameters[2]
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_exception", None, [exception_name, exception])]))
         print("Got Modelverse exception: " + str(exception_name))
         print("Details: " + str(exception))
     
@@ -5374,283 +5373,280 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         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(11, "/init/init/running", self)
+        self.states["/init/init/running"] = State(10, "/init/init/running", self)
         
         # state /init/init/running/idle
-        self.states["/init/init/running/idle"] = State(12, "/init/init/running/idle", self)
+        self.states["/init/init/running/idle"] = State(11, "/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(13, "/init/init/running/modify_defined_attrs", self)
+        self.states["/init/init/running/modify_defined_attrs"] = State(12, "/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(14, "/init/init/running/modify_defined_attrs/create_window", self)
+        self.states["/init/init/running/modify_defined_attrs/create_window"] = State(13, "/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(15, "/init/init/running/modify_defined_attrs/wait_for_finished", self)
+        self.states["/init/init/running/modify_defined_attrs/wait_for_finished"] = State(14, "/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(16, "/init/init/running/modify_defined_attrs/mark_dirty", self)
+        self.states["/init/init/running/modify_defined_attrs/mark_dirty"] = State(15, "/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(17, "/init/init/running/execute_activity", self)
+        self.states["/init/init/running/execute_activity"] = State(16, "/init/init/running/execute_activity", self)
         
         # state /init/init/running/execute_activity/open_window
-        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"] = State(17, "/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(19, "/init/init/running/execute_activity/waiting", self)
+        self.states["/init/init/running/execute_activity/waiting"] = State(18, "/init/init/running/execute_activity/waiting", self)
         
         # state /init/init/running/create_activity
-        self.states["/init/init/running/create_activity"] = State(20, "/init/init/running/create_activity", self)
+        self.states["/init/init/running/create_activity"] = State(19, "/init/init/running/create_activity", self)
         
         # state /init/init/running/create_activity/open_window
-        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"] = State(20, "/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(22, "/init/init/running/create_activity/waiting", self)
+        self.states["/init/init/running/create_activity/waiting"] = State(21, "/init/init/running/create_activity/waiting", self)
         
         # state /init/init/running/enact_process
-        self.states["/init/init/running/enact_process"] = State(23, "/init/init/running/enact_process", self)
+        self.states["/init/init/running/enact_process"] = State(22, "/init/init/running/enact_process", self)
         
         # state /init/init/running/enact_process/open_window
-        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"] = State(23, "/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(25, "/init/init/running/enact_process/waiting", self)
+        self.states["/init/init/running/enact_process/waiting"] = State(24, "/init/init/running/enact_process/waiting", self)
         
         # state /init/init/running/add_object_diagrams
-        self.states["/init/init/running/add_object_diagrams"] = State(26, "/init/init/running/add_object_diagrams", self)
+        self.states["/init/init/running/add_object_diagrams"] = State(25, "/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(27, "/init/init/running/add_object_diagrams/init", self)
+        self.states["/init/init/running/add_object_diagrams/init"] = State(26, "/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(28, "/init/init/running/upload_MVC", self)
+        self.states["/init/init/running/upload_MVC"] = State(27, "/init/init/running/upload_MVC", self)
         
         # state /init/init/running/upload_MVC/load_code
-        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"] = State(28, "/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(30, "/init/init/running/upload_MVC/waiting", self)
+        self.states["/init/init/running/upload_MVC/waiting"] = State(29, "/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(31, "/init/init/running/upload_MVC/got_filename", self)
+        self.states["/init/init/running/upload_MVC/got_filename"] = State(30, "/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(32, "/init/init/running/upload_MVC/overwriting_model", self)
+        self.states["/init/init/running/upload_MVC/overwriting_model"] = State(31, "/init/init/running/upload_MVC/overwriting_model", self)
         
         # state /init/init/running/change_metamodel
-        self.states["/init/init/running/change_metamodel"] = State(33, "/init/init/running/change_metamodel", self)
+        self.states["/init/init/running/change_metamodel"] = State(32, "/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(34, "/init/init/running/conf_bottom", self)
+        self.states["/init/init/running/conf_bottom"] = State(33, "/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(35, "/init/init/running/conf_bottom/check_if_exists", self)
+        self.states["/init/init/running/conf_bottom/check_if_exists"] = State(34, "/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(36, "/init/init/running/conf_bottom/add_bottom", self)
+        self.states["/init/init/running/conf_bottom/add_bottom"] = State(35, "/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(37, "/init/init/running/custom_MM", self)
+        self.states["/init/init/running/custom_MM"] = State(36, "/init/init/running/custom_MM", self)
         
         # state /init/init/running/custom_MM/query
-        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"] = State(37, "/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(39, "/init/init/running/custom_MM/wait_for_metamodel", self)
+        self.states["/init/init/running/custom_MM/wait_for_metamodel"] = State(38, "/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(40, "/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(39, "/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(41, "/init/init/running/custom_MM/wait_for_metamodel/got_result", self)
+        self.states["/init/init/running/custom_MM/wait_for_metamodel/got_result"] = State(40, "/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(42, "/init/init/running/custom_MM/wait_for_metamodel/mv_processing", self)
+        self.states["/init/init/running/custom_MM/wait_for_metamodel/mv_processing"] = State(41, "/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(43, "/init/init/running/change_mapper", self)
+        self.states["/init/init/running/change_mapper"] = State(42, "/init/init/running/change_mapper", self)
         
         # state /init/init/running/change_rendered
-        self.states["/init/init/running/change_rendered"] = State(44, "/init/init/running/change_rendered", self)
+        self.states["/init/init/running/change_rendered"] = State(43, "/init/init/running/change_rendered", self)
         
         # state /init/init/running/verify_model
-        self.states["/init/init/running/verify_model"] = State(45, "/init/init/running/verify_model", self)
+        self.states["/init/init/running/verify_model"] = State(44, "/init/init/running/verify_model", self)
         
         # state /init/init/running/verify_model/request
-        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"] = State(45, "/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(47, "/init/init/running/verify_model/show_result", self)
+        self.states["/init/init/running/verify_model/show_result"] = State(46, "/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(48, "/init/init/running/verify_model/wait_for_close", self)
+        self.states["/init/init/running/verify_model/wait_for_close"] = State(47, "/init/init/running/verify_model/wait_for_close", self)
         
         # state /init/init/running/open_model
-        self.states["/init/init/running/open_model"] = State(49, "/init/init/running/open_model", self)
+        self.states["/init/init/running/open_model"] = State(48, "/init/init/running/open_model", self)
         
         # state /init/init/running/open_model/query_model
-        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"] = State(49, "/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(51, "/init/init/running/open_model/wait_for_model", self)
+        self.states["/init/init/running/open_model/wait_for_model"] = State(50, "/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(52, "/init/init/running/open_model/got_model", self)
+        self.states["/init/init/running/open_model/got_model"] = State(51, "/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(53, "/init/init/running/open_model/search_metamodels", self)
+        self.states["/init/init/running/open_model/search_metamodels"] = State(52, "/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(54, "/init/init/running/open_model/search_CS_mappers", self)
+        self.states["/init/init/running/open_model/search_CS_mappers"] = State(53, "/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(55, "/init/init/running/open_model/check_CS_mapper", self)
+        self.states["/init/init/running/open_model/check_CS_mapper"] = State(54, "/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(56, "/init/init/running/open_model/search_CS_rendered", self)
+        self.states["/init/init/running/open_model/search_CS_rendered"] = State(55, "/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(57, "/init/init/running/open_model/store_metamodel", self)
+        self.states["/init/init/running/open_model/store_metamodel"] = State(56, "/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(58, "/init/init/running/new_rendered", self)
+        self.states["/init/init/running/new_rendered"] = State(57, "/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(59, "/init/init/running/create_new_model", self)
+        self.states["/init/init/running/create_new_model"] = State(58, "/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(60, "/init/init/running/create_new_model/query_metamodel", self)
+        self.states["/init/init/running/create_new_model/query_metamodel"] = State(59, "/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(61, "/init/init/running/create_new_model/wait_for_metamodel", self)
+        self.states["/init/init/running/create_new_model/wait_for_metamodel"] = State(60, "/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(62, "/init/init/running/create_new_model/got_mm", self)
+        self.states["/init/init/running/create_new_model/got_mm"] = State(61, "/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(63, "/init/init/running/create_new_model/prompt_model_name", self)
+        self.states["/init/init/running/create_new_model/prompt_model_name"] = State(62, "/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(64, "/init/init/running/create_new_model/waiting_for_model_name", self)
+        self.states["/init/init/running/create_new_model/waiting_for_model_name"] = State(63, "/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(65, "/init/init/running/create_new_model/creating_model", self)
+        self.states["/init/init/running/create_new_model/creating_model"] = State(64, "/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(66, "/init/init/running/rerender_model", self)
+        self.states["/init/init/running/rerender_model"] = State(65, "/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(67, "/init/init/running/rerender_model/initial_render", self)
+        self.states["/init/init/running/rerender_model/initial_render"] = State(66, "/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(68, "/init/init/running/rerender_model/recreate_toolbars", self)
+        self.states["/init/init/running/rerender_model/recreate_toolbars"] = State(67, "/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(69, "/init/init/running/rerender_model/recreate_toolbars/waiting", self)
+        self.states["/init/init/running/rerender_model/recreate_toolbars/waiting"] = State(68, "/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(70, "/init/init/running/rerender_model/recreate_toolbars/close_all", self)
+        self.states["/init/init/running/rerender_model/recreate_toolbars/close_all"] = State(69, "/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(71, "/init/init/running/rerender_model/canvas", self)
+        self.states["/init/init/running/rerender_model/canvas"] = State(70, "/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(72, "/init/init/running/rerender_model/pack_canvas", self)
+        self.states["/init/init/running/rerender_model/pack_canvas"] = State(71, "/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(73, "/init/init/running/rerender_model/model_toolbars", self)
+        self.states["/init/init/running/rerender_model/model_toolbars"] = State(72, "/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(74, "/init/init/running/rerender_model/model_toolbars/mm_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/mm_toolbar"] = State(73, "/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(75, "/init/init/running/rerender_model/model_toolbars/pack_mm_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/pack_mm_toolbar"] = State(74, "/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(76, "/init/init/running/rerender_model/model_toolbars/cs_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/cs_toolbar"] = State(75, "/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(77, "/init/init/running/rerender_model/model_toolbars/pack_cs_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/pack_cs_toolbar"] = State(76, "/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(78, "/init/init/running/rerender_model/model_toolbars/fetch_types", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/fetch_types"] = State(77, "/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(79, "/init/init/running/rerender_model/model_toolbars/dsl_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/dsl_toolbar"] = State(78, "/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(80, "/init/init/running/rerender_model/model_toolbars/pack_dsl_toolbar", self)
+        self.states["/init/init/running/rerender_model/model_toolbars/pack_dsl_toolbar"] = State(79, "/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(81, "/init/init/running/rerender_model/request_render", self)
+        self.states["/init/init/running/rerender_model/request_render"] = State(80, "/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(82, "/init/init/running/rerender_model/render_model", self)
+        self.states["/init/init/running/rerender_model/render_model"] = State(81, "/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(83, "/init/init/running/rerender_model/render_model/allocate_groups", self)
+        self.states["/init/init/running/rerender_model/render_model/allocate_groups"] = State(82, "/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(84, "/init/init/running/rerender_model/render_model/allocating_group", self)
+        self.states["/init/init/running/rerender_model/render_model/allocating_group"] = State(83, "/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(85, "/init/init/running/rerender_model/render_model/allocate_contains", self)
+        self.states["/init/init/running/rerender_model/render_model/allocate_contains"] = State(84, "/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(86, "/init/init/running/rerender_model/render_model/render_elements", self)
+        self.states["/init/init/running/rerender_model/render_model/render_elements"] = State(85, "/init/init/running/rerender_model/render_model/render_elements", self)
         
         # state /init/init/close
-        self.states["/init/init/close"] = State(87, "/init/init/close", self)
+        self.states["/init/init/close"] = State(86, "/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(88, "/init/key_status", self)
+        self.states["/init/key_status"] = State(87, "/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(89, "/init/key_status/listening", self)
+        self.states["/init/key_status/listening"] = State(88, "/init/key_status/listening", self)
         
         # state /init/mover
-        self.states["/init/mover"] = State(90, "/init/mover", self)
+        self.states["/init/mover"] = State(89, "/init/mover", self)
         
         # state /init/mover/move
-        self.states["/init/mover/move"] = State(91, "/init/mover/move", self)
+        self.states["/init/mover/move"] = State(90, "/init/mover/move", self)
         
         # add children
         self.states[""].addChild(self.states["/init"])
@@ -5666,7 +5662,6 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         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"])
@@ -5803,17 +5798,11 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         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 = Transition(self, self.states["/init/init/init/error_log"], [self.states["/init/init/running"]])
         _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))
@@ -6361,7 +6350,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         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}]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'error_log', 'Errorlog', {'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!'])]))
@@ -6487,14 +6476,12 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _init_init_init_pack_progressbar_0_exec(self, parameters):
         tk_elem = parameters[0]
         tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
+        print("Pack progress")
     
     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)
+        print("Packed errorlog")
     
     def _init_init_running_idle_4_guard(self, parameters):
         return current_mapper is not None
@@ -13271,7 +13258,7 @@ class Label(RuntimeClassBase, tk.Label, SCCDWidget):
         self.default_targets = self.states["/root"].getEffectiveTargetStates()
         RuntimeClassBase.initializeStatechart(self)
 
-class Listbox(RuntimeClassBase):
+class Errorlog(RuntimeClassBase):
     def __init__(self, controller, constructor_parameters = None):
         if constructor_parameters == None: constructor_parameters = {}
         RuntimeClassBase.__init__(self, controller)
@@ -13286,7 +13273,7 @@ class Listbox(RuntimeClassBase):
         self.build_statechart_structure()
         
         # call user defined constructor
-        Listbox.user_defined_constructor(self, constructor_parameters)
+        Errorlog.user_defined_constructor(self, constructor_parameters)
     
     def user_defined_constructor(self, constructor_parameters = None):
         if constructor_parameters == None: constructor_parameters = {}
@@ -13326,14 +13313,13 @@ class Listbox(RuntimeClassBase):
         
         # 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("prepend_value", None))
+        _main_ready_0.setTrigger(Event("errorlog_log", 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)
@@ -13341,26 +13327,17 @@ class Listbox(RuntimeClassBase):
         self.states["/main/ready"].addTransition(_main_ready_1)
     
     def _main_ready_enter(self):
-        self.addTimer(0, min(10000, max(min(self.entry_timers) - time.time(), 0)))
+        self.addTimer(0, max(min(self.entry_timers + [1000 + time.time()]) - time.time(), 0))
     
     def _main_ready_exit(self):
         self.removeTimer(0)
     
-    def _main_initializing_0_exec(self, parameters):
-        entry = tk.Label(self.parent, text="ABC", bg="red", wraplength=30, width=30)
-        self.entries.append(entry)
-        entry = tk.Label(self.parent, text="DDD", bg="red", wraplength=30, width=30)
-        self.entries.append(entry)
-        entry = tk.Label(self.parent, text="EFG", bg="red", wraplength=30, width=30)
-        self.entries.append(entry)
-        [i.pack(anchor=tk.N, fill=tk.X) for i in reversed(self.entries)]
-        self.entry_timers = [time.time() + 4, time.time() + 2, time.time() + 1]
-    
     def _main_ready_0_exec(self, parameters):
         new_value = parameters[0]
         [i.pack_forget() for i in self.entries]
-        entry = tk.Label(self.parent, text=new_value, wraplength=30, bg="red", width=30)
+        entry = tk.Label(self.parent, text=new_value, wraplength=150, bg="red", width=30)
         self.entries.append(entry)
+        self.entry_timers.append(time.time() + 5)
         [i.pack(anchor=tk.N, fill=tk.X) for i in reversed(self.entries)]
     
     def _main_ready_1_exec(self, parameters):
@@ -14896,8 +14873,9 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         return id(self) == ID and control_pressed
     
     def _remove_element_1_exec(self, parameters):
-        exception_name = parameters[0]
-        description = parameters[1]
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
         print("Could not remove element!")
     
     def _dragging_0_exec(self, parameters):
@@ -14922,8 +14900,9 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         return id(self) == ID
     
     def _update_attrs_query_0_exec(self, parameters):
-        exception_name = parameters[0]
-        description = parameters[1]
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
         print("Could not read attributes of element!")
     
     def _update_attrs_query_1_exec(self, parameters):
@@ -14952,8 +14931,9 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         return self.al
     
     def _update_attrs_translate_AL_process_0_exec(self, parameters):
-        exception_name = parameters[0]
-        description = parameters[1]
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
         print("Could not read AL text of element!")
     
     def _update_attrs_translate_AL_process_1_exec(self, parameters):
@@ -15014,10 +14994,10 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         return self.remaining_responses == 0
     
     def _update_attrs_process_results_2_exec(self, parameters):
-        exception_name = parameters[0]
-        description = parameters[1]
-        print("Got exception: " + str(exception_name))
-        print("Description: " + str(description))
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("errorlog_log", None, ['Failed to compile AL: %s - %s' % (exception_name, description)])]))
         self.remaining_responses -= 1
     
     def _update_attrs_process_results_3_exec(self, parameters):
@@ -15036,8 +15016,9 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/parent', Event("minimal_rerender_model", None, [])]))
     
     def _update_attrs_mark_dirty_do_1_exec(self, parameters):
-        exception_name = parameters[0]
-        description = parameters[1]
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
         print("Could not read assign attribute!")
     
     def _update_mv_check_0_guard(self, parameters):
@@ -15050,13 +15031,15 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         return not current_rendered_model
     
     def _update_mv_x_1_exec(self, parameters):
-        exception_name = parameters[0]
-        description = parameters[1]
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
         print("Could not update X attribute!")
     
     def _update_mv_y_1_exec(self, parameters):
-        exception_name = parameters[0]
-        description = parameters[1]
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
         print("Could not update Y attribute!")
     
     def initializeStatechart(self):
@@ -15103,7 +15086,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["error_log"] = Association("Errorlog", 0, -1)
             instance.associations["progress_bar"] = Association("ProgressBar", 0, -1)
         elif class_name == "Browser":
             instance = Browser(self.controller, construct_params[0], construct_params[1])
@@ -15217,8 +15200,8 @@ 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])
+        elif class_name == "Errorlog":
+            instance = Errorlog(self.controller, construct_params[0])
             instance.associations = {}
             instance.associations["parent"] = Association("A", 0, -1)
         elif class_name == "ProgressBar":

+ 1 - 1
frontend.xml

@@ -55,7 +55,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/window/errorlog.xml"/>
     <class src="classes/widgets/progress_bar.xml"/>
     <class src="classes/canvas/canvas.xml"/>
     <class src="classes/canvas/connecting_line.xml"/>