diff -r 697d8b77d716 -r 401e44bae7c0 ProjectController.py --- 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)