class ChannelResultFooter(ListFooter): def GetMidPanel(self, hSizer): self.message = StaticText(self) font = self.message.GetFont() font.SetPointSize(font.GetPointSize() + 2) font.SetWeight(wx.FONTWEIGHT_BOLD) self.message.SetFont(font) hSizer.Add(self.message, 0, wx.TOP | wx.BOTTOM | wx.ALIGN_BOTTOM, 3) hSizer.AddStretchSpacer() self.channelResults = wx.Button(self, -1, "Channel Results") hSizer.Add(self.channelResults, 0, wx.TOP | wx.BOTTOM, 3) def SetLabel(self, label, nr_channels): haveResults = True if nr_channels and nr_channels >= 1 else False if label != self.message.GetLabel(): self.message.SetLabel(label) if haveResults: self.HighLight() self.Layout() self.EnableResults(haveResults) def SetEvents(self, channel): #removing old, binding new eventhandler self.channelResults.Unbind(wx.EVT_BUTTON) self.channelResults.Bind(wx.EVT_BUTTON, channel) def EnableResults(self, state): self.channelResults.Enable(state) def Reset(self): self.EnableResults(False) self.message.SetLabel('')
class Stats(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) self._logger = logging.getLogger(self.__class__.__name__) self.guiutility = GUIUtility.getInstance() self.createTimer = None self.isReady = False def _DoInit(self): self.SetBackgroundColour(DEFAULT_BACKGROUND) vSizer = wx.BoxSizer(wx.VERTICAL) self.dowserStatus = StaticText(self, -1, 'Dowser is not running') self.dowserButton = wx.Button(self, -1, 'Start dowser') self.dowserButton.Bind(wx.EVT_BUTTON, self.OnDowser) self.memdumpButton = wx.Button(self, -1, 'Dump memory') self.memdumpButton.Bind(wx.EVT_BUTTON, self.OnMemdump) hSizer = wx.BoxSizer(wx.HORIZONTAL) hSizer.Add(self.dowserStatus, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 3) hSizer.Add(self.dowserButton) hSizer.Add(self.memdumpButton, 0, wx.RIGHT, 3) vSizer.Add(hSizer, 0, wx.ALIGN_RIGHT | wx.TOP | wx.BOTTOM, 3) hSizer = wx.BoxSizer(wx.HORIZONTAL) self.__dispersy_frame_btn = wx.Button(self, -1, "Open Dispersy Debug Frame") self.__dispersy_frame_btn.Bind(wx.EVT_BUTTON, self.OnOpenDispersyDebugButtonClicked) hSizer.Add(self.__dispersy_frame_btn, 0, wx.EXPAND, 3) vSizer.Add(hSizer, 0, wx.EXPAND | wx.BOTTOM, 3) hSizer = wx.BoxSizer(wx.HORIZONTAL) hSizer.Add(NetworkPanel(self), 1, wx.EXPAND | wx.RIGHT, 7) self.activity = ActivityPanel(self) hSizer.Add(self.activity, 1, wx.EXPAND) vSizer.Add(hSizer, 1, wx.EXPAND) hSizer = wx.BoxSizer(wx.HORIZONTAL) hSizer.Add(NewTorrentPanel(self), 1, wx.EXPAND | wx.RIGHT, 7) hSizer.Add(PopularTorrentPanel(self), 1, wx.EXPAND, 7) vSizer.Add(hSizer, 1, wx.EXPAND) self.SetSizer(vSizer) self.Layout() self.Bind(wx.EVT_KEY_UP, self.onKey) if sys.platform.startswith('win'): # on Windows, the panel doesn't respond to keypresses self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouse) self.isReady = True def OnOpenDispersyDebugButtonClicked(self, event): self.guiutility.frame.OnOpenDebugFrame(None) def onActivity(self, msg): if self.isReady: self.activity.onActivity(msg) def onKey(self, event): if event.ControlDown() and (event.GetKeyCode() == 73 or event.GetKeyCode() == 105): # ctrl + i self._showInspectionTool() elif event.ControlDown() and (event.GetKeyCode() == 68 or event.GetKeyCode() == 100): # ctrl + d self._printDBStats() else: event.Skip() def onMouse(self, event): if all([ event.RightUp(), event.ControlDown(), event.AltDown(), event.ShiftDown() ]): self._showInspectionTool() elif all([ event.LeftUp(), event.ControlDown(), event.AltDown(), event.ShiftDown() ]): self._printDBStats() else: event.Skip() def OnDowser(self, event): if self.dowserStatus.GetLabel() == 'Dowser is running': self._stopDowser() else: if not self._startDowser(): dlg = wx.DirDialog( None, "Please select your dowser installation directory", style=wx.wx.DD_DIR_MUST_EXIST) if dlg.ShowModal() == wx.ID_OK and os.path.isdir( dlg.GetPath()): sys.path.append(dlg.GetPath()) self._startDowser() dlg.Destroy() def OnMemdump(self, event): from meliae import scanner scanner.dump_all_objects("memory-dump.out") def _startDowser(self): try: import cherrypy import dowser cherrypy.config.update({'server.socket_port': 8080}) cherrypy.tree.mount(dowser.Root()) cherrypy.engine.start() self.dowserButton.SetLabel('Stop dowser') self.dowserStatus.SetLabel('Dowser is running') return True except: print_exc() return False def _stopDowser(self): try: import cherrypy cherrypy.engine.stop() self.dowserButton.SetLabel('Start dowser') self.dowserStatus.SetLabel('Dowser is not running') return True except: print_exc() return False def _showInspectionTool(self): import wx.lib.inspection itool = wx.lib.inspection.InspectionTool() itool.Show() try: frame = itool._frame import Tribler frame.locals['Tribler'] = Tribler session = Session.get_instance() frame.locals['session'] = session frame.locals['dispersy'] = session.lm.dispersy except Exception: import traceback traceback.print_exc() def _printDBStats(self): sqlite_db = self.guiutility.utility.session.sqlite_db tables = sqlite_db.fetchall( "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name") for table, in tables: self._logger.info( "%s %s", table, sqlite_db.fetchone("SELECT COUNT(*) FROM %s" % table)) def Show(self, show=True): if show: if not self.isReady: self._DoInit() wx.Panel.Show(self, show)