def __init__(self, parent, logger, format=None, on_input=None): super(LogPane, self).__init__(parent, -1, style=wx.BORDER_NONE, size=(800,150)) self.txt = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2) self.create_popup_menu() self.__input_handler = None font = self.txt.GetFont() font.SetFaceName("Courier New") self.txt.SetFont(font) self.find_bar = QuickFindBar(self, self.txt) self.find_bar.hide() sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.txt, 1, wx.EXPAND) sizer.Add(self.find_bar, 0) if on_input: self.input_txt = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER) font = self.input_txt.GetFont() font.SetFaceName("Courier New") self.input_txt.SetFont(font) sizer.Add(self.input_txt, 0, wx.EXPAND) self.__input_handler = on_input self.input_txt.Bind(wx.EVT_TEXT_ENTER, self.input_handler) self.SetSizer(sizer) self.logger = logger self.handler = log.LogHandler(format=format) self.logger.addHandler(self.handler) self.handler.register(self.listener) self.txt.Bind(wx.EVT_RIGHT_DOWN, self.on_context_menu)
def __init__(self, parent, logger, format=None, on_input=None): super(LogPane, self).__init__(parent, -1, style=wx.BORDER_NONE, size=(800, 150)) self.txt = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2) self.create_popup_menu() self.__input_handler = None font = self.txt.GetFont() font.SetFaceName("Courier New") self.txt.SetFont(font) self.find_bar = QuickFindBar(self, self.txt) self.find_bar.hide() sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.txt, 1, wx.EXPAND) sizer.Add(self.find_bar, 0) if on_input: self.input_txt = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER) font = self.input_txt.GetFont() font.SetFaceName("Courier New") self.input_txt.SetFont(font) sizer.Add(self.input_txt, 0, wx.EXPAND) self.__input_handler = on_input self.input_txt.Bind(wx.EVT_TEXT_ENTER, self.input_handler) self.SetSizer(sizer) self.logger = logger self.handler = log.LogHandler(format=format) self.logger.addHandler(self.handler) self.handler.register(self.listener) self.txt.Bind(wx.EVT_RIGHT_DOWN, self.on_context_menu)
class LogPane(wx.Panel): def __init__(self, parent, logger, format=None, on_input=None): super(LogPane, self).__init__(parent, -1, style=wx.BORDER_NONE, size=(800,150)) self.txt = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2) self.create_popup_menu() self.__input_handler = None font = self.txt.GetFont() font.SetFaceName("Courier New") self.txt.SetFont(font) self.find_bar = QuickFindBar(self, self.txt) self.find_bar.hide() sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.txt, 1, wx.EXPAND) sizer.Add(self.find_bar, 0) if on_input: self.input_txt = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER) font = self.input_txt.GetFont() font.SetFaceName("Courier New") self.input_txt.SetFont(font) sizer.Add(self.input_txt, 0, wx.EXPAND) self.__input_handler = on_input self.input_txt.Bind(wx.EVT_TEXT_ENTER, self.input_handler) self.SetSizer(sizer) self.logger = logger self.handler = log.LogHandler(format=format) self.logger.addHandler(self.handler) self.handler.register(self.listener) self.txt.Bind(wx.EVT_RIGHT_DOWN, self.on_context_menu) def on_context_menu(self, evt): ''' self.click_pos = evt.GetPosition() start, end = self.GetSelection() line = self.line_from_point(self.click_pos) if start == end: self.mnu_cut.hide() self.mnu_copy.hide() self.mnu_add_watch.hide() else: self.mnu_cut.show() self.mnu_copy.show() if self.controller.state == app.ATTACHED: if self.breakpoint_on_line(line): self.mnu_clear_bp.show() self.mnu_set_bp.hide() self.mnu_disable_bp.show() self.mnu_enable_bp.hide() else: self.mnu_clear_bp.hide() self.mnu_set_bp.show() self.mnu_disable_bp.hide() self.mnu_enable_bp.hide() else: self.mnu_clear_bp.hide() self.mnu_set_bp.hide() ''' self.PopupMenu(self.popup_menu.build(self)) #evt.Skip() def on_clear(self, evt): self.txt.Clear() self.Refresh() def input_handler(self, evt): if self.__input_handler: txt = self.input_txt.GetValue() try: self.__input_handler(txt) finally: self.input_txt.ChangeValue('') def listener(self, handler, message): #if not message.endswith("\n"): message += "\n" line = handler.format(message) wx.CallAfter(self.txt.AppendText, "%s" % line) wx.CallAfter(self.txt.Refresh) # TODO hook these up def on_hide(self, evt): self.handler.unregister(self.listener) evt.Skip() def on_show(self, evt): self.handler.register(self.listener) evt.Skip() def create_popup_menu(self): m = menu.manager.menu() ''' self.mnu_undo = m.item("Undo\tCtrl+Z", func=self.on_undo, icon="edit-undo.png") self.mnu_redo = m.item("Redo\tCtrl+Y", func=self.on_undo, icon="edit-redo.png") m.separator() self.mnu_cut = m.item("Cut\tCtrl+X", func=self.on_cut, icon='cut.png') self.mnu_copy = m.item("Copy\tCtrl+C", func=self.on_copy, icon='page_copy.png') self.mnu_paste = m.item("Paste\tCtrl+V", func=self.on_paste, icon='paste_plain.png') m.separator() self.mnu_runtohere = m.item("Run to Here...", func=self.on_run_to_here, icon="breakpoint.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED,menu.TARGET_ATTACHED]) self.mnu_runtohere.hide() self.mnu_jumptopc = m.item("Show Exec Location", func=self.on_go_to_pc, icon="pc_marker.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED,menu.TARGET_ATTACHED]) self.mnu_jumptopc.hide() self.mnu_set_bp = m.item("Set Breakpoint", func=self.on_breakpoint_here, icon="stop.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_enable_bp = m.item("Enable Breakpoint", func=self.on_enable_breakpoint, icon="stop.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_disable_bp = m.item("Disable Breakpoint", func=self.on_disable_breakpoint, icon="stop_disabled.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_clear_bp = m.item("Clear Breakpoint", func=self.on_clear_breakpoint, icon="ex.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_enable_bp.hide() self.mnu_disable_bp.hide() self.mnu_clear_bp.hide() self.mnu_add_watch = m.item("Add Watch", func=self.on_add_watch, icon="magnifier_zoom_in.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_add_watch.hide() ''' self.mnu_clear = m.item('Clear', func=self.on_clear, icon='ex.png'); self.popup_menu = m @property def name(self): return self.logger.name
class LogPane(wx.Panel): def __init__(self, parent, logger, format=None, on_input=None): super(LogPane, self).__init__(parent, -1, style=wx.BORDER_NONE, size=(800, 150)) self.txt = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2) self.create_popup_menu() self.__input_handler = None font = self.txt.GetFont() font.SetFaceName("Courier New") self.txt.SetFont(font) self.find_bar = QuickFindBar(self, self.txt) self.find_bar.hide() sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.txt, 1, wx.EXPAND) sizer.Add(self.find_bar, 0) if on_input: self.input_txt = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER) font = self.input_txt.GetFont() font.SetFaceName("Courier New") self.input_txt.SetFont(font) sizer.Add(self.input_txt, 0, wx.EXPAND) self.__input_handler = on_input self.input_txt.Bind(wx.EVT_TEXT_ENTER, self.input_handler) self.SetSizer(sizer) self.logger = logger self.handler = log.LogHandler(format=format) self.logger.addHandler(self.handler) self.handler.register(self.listener) self.txt.Bind(wx.EVT_RIGHT_DOWN, self.on_context_menu) def on_context_menu(self, evt): ''' self.click_pos = evt.GetPosition() start, end = self.GetSelection() line = self.line_from_point(self.click_pos) if start == end: self.mnu_cut.hide() self.mnu_copy.hide() self.mnu_add_watch.hide() else: self.mnu_cut.show() self.mnu_copy.show() if self.controller.state == app.ATTACHED: if self.breakpoint_on_line(line): self.mnu_clear_bp.show() self.mnu_set_bp.hide() self.mnu_disable_bp.show() self.mnu_enable_bp.hide() else: self.mnu_clear_bp.hide() self.mnu_set_bp.show() self.mnu_disable_bp.hide() self.mnu_enable_bp.hide() else: self.mnu_clear_bp.hide() self.mnu_set_bp.hide() ''' self.PopupMenu(self.popup_menu.build(self)) #evt.Skip() def on_clear(self, evt): self.txt.Clear() self.Refresh() def input_handler(self, evt): if self.__input_handler: txt = self.input_txt.GetValue() try: self.__input_handler(txt) finally: self.input_txt.ChangeValue('') def listener(self, handler, message): #if not message.endswith("\n"): message += "\n" line = handler.format(message) wx.CallAfter(self.txt.AppendText, "%s" % line) wx.CallAfter(self.txt.Refresh) # TODO hook these up def on_hide(self, evt): self.handler.unregister(self.listener) evt.Skip() def on_show(self, evt): self.handler.register(self.listener) evt.Skip() def create_popup_menu(self): m = menu.manager.menu() ''' self.mnu_undo = m.item("Undo\tCtrl+Z", func=self.on_undo, icon="edit-undo.png") self.mnu_redo = m.item("Redo\tCtrl+Y", func=self.on_undo, icon="edit-redo.png") m.separator() self.mnu_cut = m.item("Cut\tCtrl+X", func=self.on_cut, icon='cut.png') self.mnu_copy = m.item("Copy\tCtrl+C", func=self.on_copy, icon='page_copy.png') self.mnu_paste = m.item("Paste\tCtrl+V", func=self.on_paste, icon='paste_plain.png') m.separator() self.mnu_runtohere = m.item("Run to Here...", func=self.on_run_to_here, icon="breakpoint.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED,menu.TARGET_ATTACHED]) self.mnu_runtohere.hide() self.mnu_jumptopc = m.item("Show Exec Location", func=self.on_go_to_pc, icon="pc_marker.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED,menu.TARGET_ATTACHED]) self.mnu_jumptopc.hide() self.mnu_set_bp = m.item("Set Breakpoint", func=self.on_breakpoint_here, icon="stop.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_enable_bp = m.item("Enable Breakpoint", func=self.on_enable_breakpoint, icon="stop.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_disable_bp = m.item("Disable Breakpoint", func=self.on_disable_breakpoint, icon="stop_disabled.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_clear_bp = m.item("Clear Breakpoint", func=self.on_clear_breakpoint, icon="ex.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_enable_bp.hide() self.mnu_disable_bp.hide() self.mnu_clear_bp.hide() self.mnu_add_watch = m.item("Add Watch", func=self.on_add_watch, icon="magnifier_zoom_in.png", hide=[menu.TARGET_RUNNING, menu.TARGET_DETACHED], show=[menu.TARGET_HALTED, menu.TARGET_ATTACHED]) self.mnu_add_watch.hide() ''' self.mnu_clear = m.item('Clear', func=self.on_clear, icon='ex.png') self.popup_menu = m @property def name(self): return self.logger.name