예제 #1
0
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())
예제 #2
0
    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
예제 #3
0
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