class FindPanel(wx.Panel): def __init__(self, parent, id, *args, **kargs): wx.Panel.__init__(self, parent, id, style=wx.FRAME_FLOAT_ON_PARENT | wx.CLOSE_BOX) self.SetSizer(wx.BoxSizer(wx.VERTICAL)) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer2 = wx.BoxSizer(wx.HORIZONTAL) self.GetSizer().Add(sizer, 1, wx.EXPAND | wx.ALL, 1) self.GetSizer().Add(sizer2, 1, wx.EXPAND | wx.ALL, 1) label = wx.StaticText(self) label.SetLabel('Find : ') label2 = wx.StaticText(self) label2.SetLabel('Replace : ') from ifigure.utils.edit_list import TextCtrlCopyPasteGeneric self.txt = TextCtrlCopyPasteGeneric(self, wx.ID_ANY, '', style=wx.TE_PROCESS_ENTER) self.txt2 = TextCtrlCopyPasteGeneric(self, wx.ID_ANY, '', style=wx.TE_PROCESS_ENTER) self.btn_bw = wx.Button(self, wx.ID_ANY, 'Backward') self.btn_fw = wx.Button(self, wx.ID_ANY, 'Forward') gsizer = GridSizer(1, 2) gsizer.Add(self.btn_bw, wx.ALL | wx.ALIGN_CENTER_VERTICAL) gsizer.Add(self.btn_fw, wx.ALL | wx.ALIGN_CENTER_VERTICAL) self.btn_cl = wx.Button(self, wx.ID_ANY, 'x', size=(25, -1)) #from ifigure.ifigure_config import icondir #imageFile =os.path.join(icondir, '16x16', 'close.png') # bitmap=wx.Bitmap(imageFile) #self.btn_cl = wx.BitmapButton(self, bitmap=bitmap) self.Bind(wx.EVT_BUTTON, parent.onHitFW, self.btn_fw) self.Bind(wx.EVT_BUTTON, parent.onHitBW, self.btn_bw) self.Bind(wx.EVT_BUTTON, parent.onHitCL, self.btn_cl) self.Bind(wx.EVT_TEXT_ENTER, parent.onRunFind, self.txt) self.btn_replace = wx.Button(self, wx.ID_ANY, 'Replace') self.btn_replaceall = wx.Button(self, wx.ID_ANY, 'Replace All') self.Bind(wx.EVT_BUTTON, parent.onReplace, self.btn_replace) self.Bind(wx.EVT_BUTTON, parent.onReplaceAll, self.btn_replaceall) sizer.Add(label, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL) sizer.Add(self.txt, 1, wx.ALL | wx.EXPAND) sizer.Add(gsizer, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL) sizer.Add(self.btn_cl, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL) sizer2.Add(label2, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL) sizer2.Add(self.txt2, 1, wx.ALL | wx.EXPAND) sizer2.Add(self.btn_replace, 0, wx.ALL | wx.EXPAND) sizer2.Add(self.btn_replaceall, 0, wx.ALL | wx.EXPAND) self.Layout() self.Fit() def get_find_text(self): return str(self.txt.GetValue()) def get_replace_text(self): return str(self.txt2.GetValue())
def __init__(self, parent, id, *args, **kargs): wx.Panel.__init__(self, parent, id, style=wx.FRAME_FLOAT_ON_PARENT | wx.CLOSE_BOX) self.frame = None self._status = 'stop' self.SetSizer(wx.BoxSizer(wx.VERTICAL)) msizer = wx.BoxSizer(wx.HORIZONTAL) # msizer = wx.BoxSizer(wx.HORIZONTAL) # msizer2 = wx.BoxSizer(wx.VERTICAL) # msizer2.Add(msizer, 1, wx.EXPAND) self.GetSizer().Add(msizer, 0, wx.EXPAND) d_labels = ['s', 'n', 'r', 'c', 'q'] d_tips = ['step', 'next', 'return', 'continue', 'quit'] d_buttons = [ wx.Button(self, wx.ID_ANY, button, size=(30, -1)) for button in d_labels ] for b, l, t in zip(d_buttons, d_labels, d_tips): panel_SetToolTip(b, t) msizer.Add(b, 0, wx.ALL, 1) def call_debug_button(evt, obj=self, label=l): obj.onDebugButton(evt, label) self.Bind(wx.EVT_BUTTON, call_debug_button, b) from ifigure.utils.edit_list import TextCtrlCopyPasteGeneric if _test_shell: self.txt = DebugShell(self, wx.ID_ANY) else: self.txt = TextCtrlCopyPasteGeneric(self, wx.ID_ANY, '', style=wx.TE_PROCESS_ENTER) #self.Bind(wx.EVT_TEXT_ENTER, self.onTextEnter, self.txt) msizer2 = wx.BoxSizer(wx.HORIZONTAL) self.GetSizer().Add(msizer2, 1, wx.ALL | wx.EXPAND, 0) msizer2.Add(self.txt, 1, wx.ALL | wx.EXPAND, 0) self.st = wx.StaticText(self, wx.ID_ANY, ' ' * 50) self.st.Wrap(300) msizer.Add(self.st, 1, wx.ALL | wx.EXPAND, 1) self.d_buttons = d_buttons self.d = None self.Layout() self.Hide() self.Fit() globals()['panel'] = self
class DebuggerPanel(wx.Panel): def __init__(self, parent, id, *args, **kargs): wx.Panel.__init__(self, parent, id, style=wx.FRAME_FLOAT_ON_PARENT | wx.CLOSE_BOX) self.frame = None self._status = 'stop' self.SetSizer(wx.BoxSizer(wx.VERTICAL)) msizer = wx.BoxSizer(wx.HORIZONTAL) # msizer = wx.BoxSizer(wx.HORIZONTAL) # msizer2 = wx.BoxSizer(wx.VERTICAL) # msizer2.Add(msizer, 1, wx.EXPAND) self.GetSizer().Add(msizer, 0, wx.EXPAND) d_labels = ['s', 'n', 'r', 'c', 'q'] d_tips = ['step', 'next', 'return', 'continue', 'quit'] d_buttons = [ wx.Button(self, wx.ID_ANY, button, size=(30, -1)) for button in d_labels ] for b, l, t in zip(d_buttons, d_labels, d_tips): panel_SetToolTip(b, t) msizer.Add(b, 0, wx.ALL, 1) def call_debug_button(evt, obj=self, label=l): obj.onDebugButton(evt, label) self.Bind(wx.EVT_BUTTON, call_debug_button, b) from ifigure.utils.edit_list import TextCtrlCopyPasteGeneric if _test_shell: self.txt = DebugShell(self, wx.ID_ANY) else: self.txt = TextCtrlCopyPasteGeneric(self, wx.ID_ANY, '', style=wx.TE_PROCESS_ENTER) #self.Bind(wx.EVT_TEXT_ENTER, self.onTextEnter, self.txt) msizer2 = wx.BoxSizer(wx.HORIZONTAL) self.GetSizer().Add(msizer2, 1, wx.ALL | wx.EXPAND, 0) msizer2.Add(self.txt, 1, wx.ALL | wx.EXPAND, 0) self.st = wx.StaticText(self, wx.ID_ANY, ' ' * 50) self.st.Wrap(300) msizer.Add(self.st, 1, wx.ALL | wx.EXPAND, 1) self.d_buttons = d_buttons self.d = None self.Layout() self.Hide() self.Fit() globals()['panel'] = self # bdb.set_trace() # def Show(self): # for b in self.d_buttons: # b.Show() # wx.Panel.Show(self) # def Hide(self): # for b in self.d_buttons: # b.Hide() # wx.Panel.Hide(self) def onTextEnter(self, evt): if is_waiting(): txt = str(self.txt.GetValue()) if txt != '': try: # print(eval(txt, self.frame.f_globals, # self.frame.f_locals)) exec compile( txt, 'text', 'exec') in self.frame.f_globals, self.frame.f_locals except: print('evaluation failed') def onDebugButton(self, evt, l): if l == 's': # step self.d.set_step() exit_wait() elif l == 'n': self.d.set_next(self.frame) exit_wait() elif l == 'c': self.d.set_continue() exit_wait() elif l == 'r': self.d.set_return(self.frame) exit_wait() elif l == 'p': from ifigure.widgets.dialog import textentry txt = str(self.txt.GetValue()) if txt != '': try: print(eval(txt, self.frame.f_globals, self.frame.f_locals)) except: print('evaluation failed') elif l == 'q': self.StopDebugger() def StopDebugger(self): self.d.set_quit() exit_wait() self._status = 'stop' print('exiting debug mode') self.exit_debug_mode() # def CheckDebuggerInstance(self): # if self.d is None: # from ifigure.widgets.debugger_core import get_debugger # self.d = get_debugger(self) def Run(self, script_co, l1, l2, file, call_back): # script_file = script.path2fullpath() # file = self.d.canonic(script_file) # print self.d if self.d is not None: return from ifigure.widgets.debugger_core import get_debugger self.d = get_debugger(self) self._status = 'running' self._file = file self._call_back = call_back self._call_count = 0 self.target_code = None self.d.run(script_co, l1, l2) if self._status != 'stop': self.StopDebugger() def setStatus(self, mode, frame, *args): if self.target_code is None: self.target_code = frame.f_code self.target_frame = frame self.mode = mode self.args = args self.frame = frame def handle_user_line(self, frame): self.setStatus('line', frame) # if self.target_code.co_filename != frame.f_code.co_filename: return wx.GetApp().TopWindow.open_editor_panel() editor = self.GetParent().GetParent() if editor.get_current_file() != frame.f_code.co_filename: editor.GoDebugMode(frame.f_code.co_filename, enter=True) editor.ShowDebugCurrentLine(frame.f_code.co_filename, frame.f_lineno) self.st.SetLabel( os.path.basename(frame.f_code.co_filename) + ', line#:' + str(frame.f_lineno)) self.Layout() set_wait() while is_waiting(): wx.Yield() def handle_user_return(self, frame, return_value): print('return', frame, return_value, self._call_count) if self._call_count > 0: self._call_count = self._call_count - 1 else: self._status = 'stop' print('exiting debug mode : return value = ', return_value) self.exit_debug_mode() def handle_user_call(self, frame, return_value): self._call_count = self._call_count + 1 def handle_user_exception(self, frame, exc_info): self._status = 'stop' print('exiting debug mode : exception info = ', exc_info) self.exit_debug_mode() def exit_debug_mode(self): self._call_back() self.d = None @property def status(self): return self._status