controls/LogViewer.py
changeset 1093 b5f78cff4459
parent 1079 6c8dfc4fc23b
child 1094 fe6dd066fd95
equal deleted inserted replaced
1092:e91f2c8d6f51 1093:b5f78cff4459
   306         self.Bind(wx.EVT_TEXT_ENTER, self.OnSearchMessageChanged, self.SearchMessage)
   306         self.Bind(wx.EVT_TEXT_ENTER, self.OnSearchMessageChanged, self.SearchMessage)
   307         self.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN, 
   307         self.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN, 
   308               self.OnSearchMessageSearchButtonClick, self.SearchMessage)
   308               self.OnSearchMessageSearchButtonClick, self.SearchMessage)
   309         self.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN, 
   309         self.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN, 
   310               self.OnSearchMessageCancelButtonClick, self.SearchMessage)
   310               self.OnSearchMessageCancelButtonClick, self.SearchMessage)
   311         filter_sizer.AddWindow(self.SearchMessage, 3, flag=wx.GROW)
   311         filter_sizer.AddWindow(self.SearchMessage, 3, border=5, flag=wx.RIGHT|wx.GROW)
       
   312         
       
   313         self.CleanButton = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap("Clean"), 
       
   314               size=wx.Size(28, 28), style=wx.NO_BORDER)
       
   315         self.CleanButton.SetToolTipString(_("Clean log messages"))
       
   316         self.Bind(wx.EVT_BUTTON, self.OnCleanButton, self.CleanButton)
       
   317         filter_sizer.AddWindow(self.CleanButton)
   312         
   318         
   313         message_panel_sizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=0)
   319         message_panel_sizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=0)
   314         message_panel_sizer.AddGrowableCol(0)
   320         message_panel_sizer.AddGrowableCol(0)
   315         message_panel_sizer.AddGrowableRow(0)
   321         message_panel_sizer.AddGrowableRow(0)
   316         main_sizer.AddSizer(message_panel_sizer, border=5, flag=wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.GROW)
   322         main_sizer.AddSizer(message_panel_sizer, border=5, flag=wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.GROW)
   377         self.CurrentMessage = None
   383         self.CurrentMessage = None
   378         self.HasNewData = False
   384         self.HasNewData = False
   379     
   385     
   380     def SetLogSource(self, log_source):
   386     def SetLogSource(self, log_source):
   381         self.LogSource = log_source
   387         self.LogSource = log_source
       
   388         self.CleanButton.Enable(self.LogSource is not None)
   382         if log_source is not None:
   389         if log_source is not None:
   383             self.ResetLogMessages()
   390             self.ResetLogMessages()
   384             self.RefreshView()
   391             self.RefreshView()
   385     
   392     
   386     def GetLogMessageFromSource(self, msgidx, level):
   393     def GetLogMessageFromSource(self, msgidx, level):
   394     def SetLogCounters(self, log_count):
   401     def SetLogCounters(self, log_count):
   395         new_messages = []
   402         new_messages = []
   396         for level, count, prev in zip(xrange(LogLevelsCount), log_count, self.previous_log_count):
   403         for level, count, prev in zip(xrange(LogLevelsCount), log_count, self.previous_log_count):
   397             if count is not None and prev != count:
   404             if count is not None and prev != count:
   398                 if prev is None:
   405                 if prev is None:
   399                     dump_end = count - 1
   406                     dump_end = -1
   400                 else:
   407                 else:
   401                     dump_end = prev - 1
   408                     dump_end = prev - 1
   402                 for msgidx in xrange(count-1, dump_end,-1):
   409                 for msgidx in xrange(count-1, dump_end,-1):
   403                     new_message = self.GetLogMessageFromSource(msgidx, level)
   410                     new_message = self.GetLogMessageFromSource(msgidx, level)
   404                     if new_message is not None:
   411                     if new_message is None:
   405                         if prev is None:
   412                         break
   406                             self.OldestMessages.append((msgidx, new_message))
   413                     if prev is None:
   407                             if len(new_messages) == 0 or new_message > new_messages[0]:
   414                         self.OldestMessages.append((msgidx, new_message))
   408                                 new_messages = [new_message]
   415                         if len(new_messages) == 0:
       
   416                             new_messages = [new_message]
   409                         else:
   417                         else:
   410                             new_messages.insert(0, new_message)
   418                             new_messages.insert(0, new_message)
       
   419                     else:
       
   420                         new_messages.insert(0, new_message)
   411                 if prev is None and len(self.OldestMessages) <= level:
   421                 if prev is None and len(self.OldestMessages) <= level:
   412                     self.OldestMessages.append((-1, None))
   422                     self.OldestMessages.append((-1, None))
   413                 self.previous_log_count[level] = count
   423                 self.previous_log_count[level] = count
   414         new_messages.sort()
   424         new_messages.sort()
   415         if len(new_messages) > 0:
   425         if len(new_messages) > 0:
   606         self.CurrentSearchValue = ""
   616         self.CurrentSearchValue = ""
   607         self.SearchMessage.SetValue("")
   617         self.SearchMessage.SetValue("")
   608         self.ResetMessagePanel()
   618         self.ResetMessagePanel()
   609         event.Skip()
   619         event.Skip()
   610     
   620     
       
   621     def OnCleanButton(self, event):
       
   622         if self.LogSource is not None:
       
   623             self.LogSource.ResetLogCount()
       
   624         self.ResetLogMessages()
       
   625         self.RefreshView()
       
   626         event.Skip()
       
   627     
   611     def GenerateOnDurationButton(self, duration):
   628     def GenerateOnDurationButton(self, duration):
   612         def OnDurationButton():
   629         def OnDurationButton():
   613             self.ScrollMessagePanelByTimestamp(duration)
   630             self.ScrollMessagePanelByTimestamp(duration)
   614         return OnDurationButton
   631         return OnDurationButton
   615     
   632