ProjectController.py
changeset 917 401e44bae7c0
parent 914 94436558f0ce
child 918 aa136ef12506
--- a/ProjectController.py	Tue Jan 29 23:41:00 2013 +0100
+++ b/ProjectController.py	Wed Jan 30 18:54:12 2013 +1100
@@ -25,7 +25,7 @@
 from dialogs import DiscoveryDialog
 from PLCControler import PLCControler
 from plcopen.structures import IEC_KEYWORDS
-from targets.typemapping import DebugTypesSize
+from targets.typemapping import DebugTypesSize, LogLevelsCount, LogLevels
 from ConfigTreeNode import ConfigTreeNode
 
 base_folder = os.path.split(sys.path[0])[0]
@@ -113,7 +113,7 @@
         self.DebugThread = None
         self.debug_break = False
         self.previous_plcstate = None
-        self.previous_log_count = None
+        self.previous_log_count = [None]*LogLevelsCount
         # copy ConfNodeMethods so that it can be later customized
         self.StatusMethods = [dic.copy() for dic in self.StatusMethods]
 
@@ -1077,24 +1077,26 @@
         self.CompareLocalAndRemotePLC()
 
     def UpdatePLCLog(self, log_count):
-        if log_count and self.previous_log_count != log_count:
-            # XXX replace dump to console with dedicated log panel.
-            to_console = ['']
-            dump_end = max( # request message sent after the last one we already got
-                self.previous_log_count - 1 if self.previous_log_count is not None else -1,
-                log_count - 100) # 100 is purely arbitrary number
-                # dedicated panel should only ask for a small range, 
-                # depending on how user navigate in the panel
-                # and only ask for last one in follow mode
-            for msgidx in xrange(log_count-1, dump_end,-1):
-                msg = self._connector.GetLogMessage(msgidx)
-                if msg is not None :
-                    to_console.insert(0, '#' + repr(msgidx) + ": " + msg)
-                else:
-                    to_console.insert(0, 'No log before #'+repr(msgidx))
-                    break;
-            self.logger.write("\n".join(to_console))
-            self.previous_log_count = log_count
+        if log_count :
+            for level, count, prev in zip(xrange(LogLevelsCount), log_count,self.previous_log_count):
+                if count is not None and prev != count:
+                    # XXX replace dump to console with dedicated log panel.
+                    to_console = ['']
+                    dump_end = max( # request message sent after the last one we already got
+                        prev - 1 if prev is not None else -1,
+                        count - 100) # 100 is purely arbitrary number
+                        # dedicated panel should only ask for a small range, 
+                        # depending on how user navigate in the panel
+                        # and only ask for last one in follow mode
+                    for msgidx in xrange(count-1, dump_end,-1):
+                        msg = self._connector.GetLogMessage(level, msgidx)
+                        if msg is not None :
+                            to_console.insert(0, LogLevels[level]+ ':#' + repr(msgidx) + ": " + msg)
+                        else:
+                            to_console.insert(0, LogLevels[level]+ ': No log before #'+repr(msgidx))
+                            break;
+                    self.logger.write("\n".join(to_console))
+                    self.previous_log_count[level] = count
 
     def UpdateMethodsFromPLCStatus(self):
         status = None
@@ -1289,7 +1291,7 @@
         while (not self.debug_break) and (self._connector is not None):
             Trace = self._connector.GetTraceVariables()
             if(Trace):
-                plc_status, log_count, debug_tick, debug_vars = Trace
+                plc_status, debug_tick, debug_vars = Trace
             else:
                 plc_status = None
             debug_getvar_retry += 1
@@ -1331,7 +1333,7 @@
 
     def _connect_debug(self): 
         self.previous_plcstate = None
-        self.previous_log_count = None
+        self.previous_log_count = [None]*LogLevelsCount
         if self.AppFrame:
             self.AppFrame.ResetGraphicViewers()
         self.RegisterDebugVarToConnector()
@@ -1511,7 +1513,7 @@
             else:
                 self.logger.write_error(_("No PLC to transfer (did build succeed ?)\n"))
 
-        self.previous_log_count = None
+        self.previous_log_count = [None]*LogLevelsCount
 
         wx.CallAfter(self.UpdateMethodsFromPLCStatus)