Browse Source

Nicer error log

Yentl Van Tendeloo 7 years ago
parent
commit
e7ac32a7f0
3 changed files with 60 additions and 22 deletions
  1. 27 12
      classes/widgets/listbox.xml
  2. 32 10
      frontend.py
  3. 1 0
      frontend.xml

+ 27 - 12
classes/widgets/listbox.xml

@@ -6,13 +6,16 @@
     <constructor>
         <parameter name="constructor_parameters" type='dict' default='{}' />
         <body>
-            self.entry = tk.Listbox(constructor_parameters['parent'])
+            self.entries = []
+            self.parent = constructor_parameters['parent']
+            self.entry_timers = []
         </body>
     </constructor>
 
     <destructor>
         <body>
-            self.entry.destroy()
+            for entry in self.entries:
+                entry.destroy()
         </body>
     </destructor>
 
@@ -20,25 +23,37 @@
         <state id="main" initial='initializing'>
             <state id="initializing">
                 <transition target="../ready">
-                    <raise event="tk_widget" scope="narrow" target="'parent'">
-                        <parameter expr="self.entry"/>
-                    </raise>
+                    <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>
             </state>
 
             <state id="ready">
-                <transition event="append_value" target=".">
+                <transition event="prepend_value" target=".">
                     <parameter name="new_value"/>
                     <script>
-                        self.entry.insert(tk.END, new_value)
-                        self.entry.see(tk.END)
+                        [i.pack_forget() for i in self.entries]
+                        entry = tk.Label(self.parent, text=new_value, wraplength=30, bg="red", width=30)
+                        self.entries.append(entry)
+                        self.entry_timers.append(5)
+                        [i.pack(anchor=tk.N, fill=tk.X) for i in reversed(self.entries)]
                     </script>
                 </transition>
-                <transition event="prepend_value" target=".">
-                    <parameter name="new_value"/>
+
+                <transition after="min(10000, max(min(self.entry_timers) - time.time(), 0))" target=".">
                     <script>
-                        self.entry.insert(0, new_value)
-                        self.entry.see(0)
+                        for i, v in enumerate(self.entry_timers):
+                            if v &lt; time.time():
+                                self.entries[i].config(bg="lightgrey")
+                                self.entry_timers[i] = float('inf')
                     </script>
                 </transition>
             </state>

+ 32 - 10
frontend.py

@@ -17,6 +17,7 @@ import urllib
 import subprocess
 import sys
 import os
+import time
 
 global current_model
 global current_metamodel
@@ -13289,10 +13290,13 @@ class Listbox(RuntimeClassBase):
     
     def user_defined_constructor(self, constructor_parameters = None):
         if constructor_parameters == None: constructor_parameters = {}
-        self.entry = tk.Listbox(constructor_parameters['parent'])
+        self.entries = []
+        self.parent = constructor_parameters['parent']
+        self.entry_timers = []
     
     def user_defined_destructor(self):
-        self.entry.destroy()
+        for entry in self.entries:
+            entry.destroy()
     
     
     # builds Statechart structure
@@ -13309,6 +13313,8 @@ class Listbox(RuntimeClassBase):
         
         # state /main/ready
         self.states["/main/ready"] = State(3, "/main/ready", self)
+        self.states["/main/ready"].setEnter(self._main_ready_enter)
+        self.states["/main/ready"].setExit(self._main_ready_exit)
         
         # add children
         self.states[""].addChild(self.states["/main"])
@@ -13327,25 +13333,41 @@ class Listbox(RuntimeClassBase):
         # 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))
+        _main_ready_0.setTrigger(Event("prepend_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))
+        _main_ready_1.setTrigger(Event("_0after"))
         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)))
+    
+    def _main_ready_exit(self):
+        self.removeTimer(0)
+    
     def _main_initializing_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("tk_widget", None, [self.entry])]))
+        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]
-        self.entry.insert(tk.END, new_value)
-        self.entry.see(tk.END)
+        [i.pack_forget() for i in self.entries]
+        entry = tk.Label(self.parent, text=new_value, wraplength=30, bg="red", width=30)
+        self.entries.append(entry)
+        [i.pack(anchor=tk.N, fill=tk.X) for i in reversed(self.entries)]
     
     def _main_ready_1_exec(self, parameters):
-        new_value = parameters[0]
-        self.entry.insert(0, new_value)
-        self.entry.see(0)
+        for i, v in enumerate(self.entry_timers):
+            if v < time.time():
+                self.entries[i].config(bg="lightgrey")
+                self.entry_timers[i] = float('inf')
     
     def initializeStatechart(self):
         # enter default state

+ 1 - 0
frontend.xml

@@ -13,6 +13,7 @@
         import subprocess
         import sys
         import os
+        import time
         
         global current_model
         global current_metamodel