--- a/controls/LogViewer.py Mon May 06 11:15:05 2013 +0200
+++ b/controls/LogViewer.py Mon May 06 16:01:17 2013 +0200
@@ -308,7 +308,13 @@
self.OnSearchMessageSearchButtonClick, self.SearchMessage)
self.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN,
self.OnSearchMessageCancelButtonClick, self.SearchMessage)
- filter_sizer.AddWindow(self.SearchMessage, 3, flag=wx.GROW)
+ filter_sizer.AddWindow(self.SearchMessage, 3, border=5, flag=wx.RIGHT|wx.GROW) + self.CleanButton = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap("Clean"), + size=wx.Size(28, 28), style=wx.NO_BORDER) + self.CleanButton.SetToolTipString(_("Clean log messages")) + self.Bind(wx.EVT_BUTTON, self.OnCleanButton, self.CleanButton) + filter_sizer.AddWindow(self.CleanButton) message_panel_sizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=0)
message_panel_sizer.AddGrowableCol(0)
@@ -379,6 +385,7 @@
def SetLogSource(self, log_source):
self.LogSource = log_source
+ self.CleanButton.Enable(self.LogSource is not None) if log_source is not None:
@@ -396,18 +403,21 @@
for level, count, prev in zip(xrange(LogLevelsCount), log_count, self.previous_log_count):
if count is not None and prev != count:
for msgidx in xrange(count-1, dump_end,-1):
new_message = self.GetLogMessageFromSource(msgidx, level)
- if new_message is not None:
- self.OldestMessages.append((msgidx, new_message))
- if len(new_messages) == 0 or new_message > new_messages[0]:
- new_messages = [new_message]
+ if new_message is None: + self.OldestMessages.append((msgidx, new_message)) + if len(new_messages) == 0: + new_messages = [new_message] new_messages.insert(0, new_message)
+ new_messages.insert(0, new_message) if prev is None and len(self.OldestMessages) <= level:
self.OldestMessages.append((-1, None))
self.previous_log_count[level] = count
@@ -608,6 +618,13 @@
+ def OnCleanButton(self, event): + if self.LogSource is not None: + self.LogSource.ResetLogCount() + self.ResetLogMessages() def GenerateOnDurationButton(self, duration):
self.ScrollMessagePanelByTimestamp(duration)
--- a/runtime/PLCObject.py Mon May 06 11:15:05 2013 +0200
+++ b/runtime/PLCObject.py Mon May 06 16:01:17 2013 +0200
@@ -90,12 +90,15 @@
return self._LogMessage(level, msg, len(msg))
+ def ResetLogCount(self): + if self._ResetLogCount is not None: def GetLogCount(self, level):
if self._GetLogCount is not None :
return int(self._GetLogCount(level))
elif self._loading_error is not None and level==0:
def GetLogMessage(self, level, msgid):
@@ -182,6 +185,9 @@
self._resumeDebug = self.PLClibraryHandle.resumeDebug
self._resumeDebug.restype = None
+ self._ResetLogCount = self.PLClibraryHandle.ResetLogCount + self._ResetLogCount.restype = None self._GetLogCount = self.PLClibraryHandle.GetLogCount
self._GetLogCount.restype = ctypes.c_uint32
self._GetLogCount.argtypes = [ctypes.c_uint8]
@@ -189,7 +195,7 @@
self._LogMessage = self.PLClibraryHandle.LogMessage
self._LogMessage.restype = ctypes.c_int
self._LogMessage.argtypes = [ctypes.c_uint8, ctypes.c_char_p, ctypes.c_uint32]
self._log_read_buffer = ctypes.create_string_buffer(1<<14) #16K
self._GetLogMessage = self.PLClibraryHandle.GetLogMessage
self._GetLogMessage.restype = ctypes.c_uint32
--- a/targets/plc_main_tail.c Mon May 06 11:15:05 2013 +0200
+++ b/targets/plc_main_tail.c Mon May 06 16:01:17 2013 +0200
@@ -54,6 +54,13 @@
static uint64_t LogCursor[LOG_LEVELS] LOG_BUFFER_ATTRS = {0x0,0x0,0x0,0x0};
+void ResetLogCount(void) { + for(level=0;level<LOG_LEVELS;level++){ /* Store one log message of give size */
int LogMessage(uint8_t level, char* buf, uint32_t size){
if(size < LOG_BUFFER_SIZE - sizeof(mTail)){