Thread: [PyCrust-cvs] PyCrust editor.py,1.11,1.12
Brought to you by:
pobrien
From: <po...@us...> - 2003-04-02 23:16:26
|
Update of /cvsroot/pycrust/PyCrust In directory sc8-pr-cvs1:/tmp/cvs-serv24343 Modified Files: editor.py Log Message: More changes. Index: editor.py =================================================================== RCS file: /cvsroot/pycrust/PyCrust/editor.py,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** editor.py 2 Apr 2003 19:04:58 -0000 1.11 --- editor.py 2 Apr 2003 23:16:22 -0000 1.12 *************** *** 39,57 **** self._statusText = title + ' - the tastiest Python editor.' self.SetStatusText(self._statusText) - if self._singlefile: - self._notebook = EditorNotebook(parent=self) - editor = self._notebook.editor - interp = self._notebook.shell.interp - else: - self._notebook = BufferNotebook(parent=self) - notebook = EditorNotebook(parent=self._notebook) - editor = notebook.editor - interp = notebook.shell.interp - self._buffer = Buffer(editor, interp, filename) - if not self._singlefile: - self._notebook.AddPage(page=notebook, text=self._buffer.name) - self._buffers[self._buffer.id] = self._buffer wx.EVT_IDLE(self, self.OnIdle) ! self._buffer.editor.SetFocus() def OnAbout(self, event): --- 39,52 ---- self._statusText = title + ' - the tastiest Python editor.' self.SetStatusText(self._statusText) wx.EVT_IDLE(self, self.OnIdle) ! if not self._singlefile: ! self._notebook = BufferNotebook(parent=self) ! dispatcher.connect(receiver=self._bufferChange, ! signal='BufferChange', sender=self._notebook) ! self.bufferCreate(filename) ! ! def _bufferChange(self, buffer): ! """Buffer change signal receiver.""" ! self._buffer = buffer def OnAbout(self, event): *************** *** 103,123 **** self.bufferSuggestSave() def bufferHasChanged(self): """Return True if buffer has changed since last save.""" ! return self._buffer.hasChanged() def bufferNew(self): """Create new buffer.""" ! if self.bufferHasChanged(): self.bufferSuggestSave() ! def bufferOpen(self, filename=None): """Open file in buffer.""" ! if self._buffer and self.bufferHasChanged(): self.bufferSuggestSave() ! if filename is None: ! return # XXX Prompt for filename. if filename: ! self._buffer.open(filename) def bufferPrint(self): --- 98,145 ---- self.bufferSuggestSave() + def bufferCreate(self, filename=None): + """Create new buffer.""" + if self._singlefile: + self.bufferDestroy() + notebook = self._notebook = EditorNotebook(parent=self, + filename=filename) + else: + notebook = EditorNotebook(parent=self._notebook, + filename=filename) + self._buffer = notebook.buffer + if not self._singlefile: + self._notebook.AddPage(page=notebook, text=self._buffer.name, + select=True) + self._buffers[self._buffer.id] = self._buffer + self._buffer.editor.SetFocus() + + def bufferDestroy(self): + """Destroy the current buffer.""" + if self._singlefile: + self._notebook = None + if self._buffer: + del self._buffers[self._buffer.id] + self._buffer = None + def bufferHasChanged(self): """Return True if buffer has changed since last save.""" ! if self._buffer: ! return self._buffer.hasChanged() ! else: ! return False def bufferNew(self): """Create new buffer.""" ! if self._singlefile and self.bufferHasChanged(): self.bufferSuggestSave() + self.bufferCreate() ! def bufferOpen(self): """Open file in buffer.""" ! if self._singlefile and self.bufferHasChanged(): self.bufferSuggestSave() ! # XXX Prompt for filename. if filename: ! self.bufferCreate(filename) def bufferPrint(self): *************** *** 155,320 **** ! class Buffer: ! """Buffer class.""" ! ! id = 0 ! ! def __init__(self, editor, interp, filename=None): ! """Create a Buffer instance.""" ! Buffer.id += 1 ! self.id = Buffer.id ! self.name = 'Buffer' ! self.editor = editor ! self.interp = interp ! self.modules = sys.modules.keys() ! self.syspath = sys.path[:] ! while True: ! try: ! self.syspath.remove('') ! except ValueError: ! break ! while True: ! try: ! self.syspath.remove('.') ! except ValueError: ! break ! self.open(filename) ! ! ## def updateNamespace(self): ! ## """Update the namespace for autocompletion and calltips. ! ! ## Return True if updated, False if there was an error.""" ! ## if self.editor.GetModify(): ! ## self.save() ! ## backup = self.interp.locals ! ## syspath = sys.path ! ## sys.path = self.syspath ! ## try: ! ## del sys.modules[self.modulename] ! ## except KeyError: ! ## pass ! ## modfile, path, descr = imp.find_module(self.modulename, [self.filedir]) ! ## try: ! ## try: ! ## module = imp.load_module(self.modulename, modfile, path, descr) ! ## except: ! ## self.interp.locals = backup ! ## return False ! ## else: ! ## self.interp.locals = module.__dict__ ! ## return True ! ## finally: ! ## sys.path = syspath ! ## if modfile: ! ## modfile.close() ! ! def hasChanged(self): ! """Return True if text in editor has changed since last save.""" ! return self.editor.GetModify() ! ! def updateNamespace(self): ! """Update the namespace for autocompletion and calltips. ! ! Return True if updated, False if there was an error.""" ! backup = self.interp.locals ! syspath = sys.path ! sys.path = self.syspath ! code = self.editor.GetText() ! module = imp.new_module(self.modulename) ! namespace = module.__dict__ ! try: ! try: ! exec code in namespace ! except: ! self.interp.locals = backup ! return False ! else: ! self.interp.locals = namespace.copy() ! return True ! finally: ! sys.path = syspath ! for m in sys.modules.keys(): ! if m not in self.modules: ! del sys.modules[m] ! def new(self, filepath): ! """New empty buffer.""" ! if not filepath: ! return ! if os.path.exists(filepath): ! self.confirmed = self.overwriteConfirm(filepath) else: ! self.confirmed = True ! ! def open(self, filename): ! """Open file into buffer.""" ! self.doc = Document(filename) ! self.name = self.doc.filename or 'Untitled' ! self.modulename = self.doc.filebase ! if self.doc.filepath and os.path.exists(self.doc.filepath): ! self.editor.SetText(self.doc.read()) ! self.editor.EmptyUndoBuffer() ! self.confirmed = True ! if self.doc.filedir and self.doc.filedir not in self.syspath: ! self.syspath.insert(0, self.doc.filedir) ! ! def overwriteConfirm(filepath): ! """Confirm overwriting an existing file.""" ! return False ! ! def save(self): ! """Save buffer.""" ! filepath = self.doc.filepath ! if not filepath: ! return # XXX Get filename ! if not os.path.exists(filepath): ! self.confirmed = True ! if not self.confirmed: ! self.confirmed = self.overwriteConfirm(filepath) ! if self.confirmed: ! self.doc.write(self.editor.GetText()) ! self.editor.SetSavePoint() ! ! def getStatus(self): ! """Return (filepath, line, column) status tuple.""" ! editor = self.editor ! pos = editor.GetCurrentPos() ! line = editor.LineFromPosition(pos) + 1 ! col = editor.GetColumn(pos) + 1 ! status = (self.doc.filepath or self.name, line, col) ! return status ! ! ! class Document: ! """Document class.""" ! ! def __init__(self, filename=None): ! """Create a Document instance.""" ! self.filename = filename ! self.filepath = None ! self.filedir = None ! self.filebase = None ! self.fileext = None ! if self.filename: ! self.filepath = os.path.abspath(self.filename) ! self.filedir, self.filename = os.path.split(self.filepath) ! self.filebase, self.fileext = os.path.splitext(self.filename) ! def read(self): ! """Return contents of file.""" ! f = file(self.filepath, 'rb') ! try: ! return f.read() ! finally: ! f.close() ! def write(self, text): ! """Write text to file.""" ! try: ! f = file(self.filepath, 'w') ! f.write(text) ! finally: ! if f: ! f.close() --- 177,226 ---- ! class EditorNotebook(wx.wxNotebook): ! """Combines a code editor with a shell.""" ! def __init__(self, parent, filename=None): ! """Create an EditorNotebook instance.""" ! wx.wxNotebook.__init__(self, parent, id=-1) ! usePanels = True ! if usePanels: ! shellparent = shellpanel = wx.wxPanel(self, -1) ! editorparent = editorpanel = wx.wxPanel(self, -1) else: ! shellparent = self ! editorparent = self ! self.shell = Shell(parent=shellparent, ! style=wx.wxCLIP_CHILDREN | wx.wxSUNKEN_BORDER) ! self.editor = Editor(interp=self.shell.interp, parent=editorparent, ! filename=filename) ! if usePanels: ! self.AddPage(page=editorpanel, text='File', select=True) ! self.AddPage(page=shellpanel, text='Shell') ! # Setup sizers ! shellsizer = wx.wxBoxSizer(wx.wxVERTICAL) ! shellsizer.Add(self.shell, 1, wx.wxEXPAND) ! shellpanel.SetSizer(shellsizer) ! shellpanel.SetAutoLayout(True) ! editorsizer = wx.wxBoxSizer(wx.wxVERTICAL) ! editorsizer.Add(self.editor, 1, wx.wxEXPAND) ! editorpanel.SetSizer(editorsizer) ! editorpanel.SetAutoLayout(True) ! else: ! self.AddPage(page=self.editor, text='File', select=True) ! self.AddPage(page=self.shell, text='Shell') ! self.buffer = self.editor.buffer ! self.editor.SetFocus() ! wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged) ! def OnPageChanged(self, event): ! """Page changed event handler.""" ! selection = event.GetSelection() ! self.focus(selection) ! def focus(self, selection): ! if selection == 0: ! self.editor.SetFocus() ! else: ! self.shell.SetFocus() *************** *** 324,328 **** def __init__(self, interp, parent, id=-1, pos=wx.wxDefaultPosition, size=wx.wxDefaultSize, ! style=wx.wxCLIP_CHILDREN | wx.wxSUNKEN_BORDER): """Create a Editor instance.""" base.Editor.__init__(self, parent, id, pos, size, style) --- 230,235 ---- def __init__(self, interp, parent, id=-1, pos=wx.wxDefaultPosition, size=wx.wxDefaultSize, ! style=wx.wxCLIP_CHILDREN | wx.wxSUNKEN_BORDER, ! filename=None): """Create a Editor instance.""" base.Editor.__init__(self, parent, id, pos, size, style) *************** *** 334,337 **** --- 241,246 ---- wx.EVT_CHAR(self, self.OnChar) wx.EVT_KEY_DOWN(self, self.OnKeyDown) + self.buffer = Buffer(editor=self, interp=self.interp, + filename=filename) def OnChar(self, event): *************** *** 429,471 **** ! class EditorNotebook(wx.wxNotebook): ! """Combines a code editor with a shell.""" def __init__(self, parent): ! """Create an EditorNotebook instance.""" wx.wxNotebook.__init__(self, parent, id=-1) ! usePanels = True ! if usePanels: ! shellpanel = wx.wxPanel(self, -1) ! editorpanel = wx.wxPanel(self, -1) ! self.shell = Shell(parent=shellpanel, ! style=wx.wxCLIP_CHILDREN | wx.wxSUNKEN_BORDER) ! self.editor = Editor(interp=self.shell.interp, parent=editorpanel) ! self.AddPage(page=editorpanel, text='File', select=True) ! self.AddPage(page=shellpanel, text='Shell') ! # Setup sizers ! shellsizer = wx.wxBoxSizer(wx.wxVERTICAL) ! shellsizer.Add(self.shell, 1, wx.wxEXPAND) ! shellpanel.SetSizer(shellsizer) ! shellpanel.SetAutoLayout(True) ! editorsizer = wx.wxBoxSizer(wx.wxVERTICAL) ! editorsizer.Add(self.editor, 1, wx.wxEXPAND) ! editorpanel.SetSizer(editorsizer) ! editorpanel.SetAutoLayout(True) else: ! self.shell = Shell(parent=self, ! style=wx.wxCLIP_CHILDREN | wx.wxSUNKEN_BORDER) ! self.editor = Editor(interp=self.shell.interp, parent=self) ! self.shell.interp.locals['editor'] = self.editor ! self.AddPage(page=self.editor, text='File', select=True) ! self.AddPage(page=self.shell, text='Shell') ! # Set focus to the editor. ! self.editor.SetFocus() ! class BufferNotebook(wx.wxNotebook): ! """A notebook containing a code editor and shell for each buffer.""" ! def __init__(self, parent): ! """Create a BufferNotebook instance.""" ! wx.wxNotebook.__init__(self, parent, id=-1) --- 338,519 ---- ! class BufferNotebook(wx.wxNotebook): ! """A notebook containing a code editor and shell for each buffer.""" def __init__(self, parent): ! """Create a BufferNotebook instance.""" wx.wxNotebook.__init__(self, parent, id=-1) ! wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged) ! ! def OnPageChanged(self, event): ! """Page changed event handler.""" ! selection = event.GetSelection() ! notebook = self.GetPage(selection) ! buffer = notebook.buffer ! dispatcher.send(signal='BufferChange', sender=self, buffer=buffer) ! selection = notebook.GetSelection() ! notebook.focus(selection) ! ! ! class Buffer: ! """Buffer class.""" ! ! id = 0 ! ! def __init__(self, editor, interp, filename=None): ! """Create a Buffer instance.""" ! Buffer.id += 1 ! self.id = Buffer.id ! self.name = 'Buffer' ! self.editor = editor ! self.interp = interp ! self.modules = sys.modules.keys() ! self.syspath = sys.path[:] ! while True: ! try: ! self.syspath.remove('') ! except ValueError: ! break ! while True: ! try: ! self.syspath.remove('.') ! except ValueError: ! break ! self.open(filename) ! ! def getStatus(self): ! """Return (filepath, line, column) status tuple.""" ! editor = self.editor ! pos = editor.GetCurrentPos() ! line = editor.LineFromPosition(pos) + 1 ! col = editor.GetColumn(pos) + 1 ! status = (self.doc.filepath or self.name, line, col) ! return status ! ! def hasChanged(self): ! """Return True if text in editor has changed since last save.""" ! return self.editor.GetModify() ! ! def new(self, filepath): ! """New empty buffer.""" ! if not filepath: ! return ! if os.path.exists(filepath): ! self.confirmed = self.overwriteConfirm(filepath) else: ! self.confirmed = True + def open(self, filename): + """Open file into buffer.""" + self.doc = Document(filename) + self.name = self.doc.filename or 'Untitled' + self.modulename = self.doc.filebase + if self.doc.filepath and os.path.exists(self.doc.filepath): + self.editor.SetText(self.doc.read()) + self.editor.EmptyUndoBuffer() + self.confirmed = True + if self.doc.filedir and self.doc.filedir not in self.syspath: + self.syspath.insert(0, self.doc.filedir) ! def overwriteConfirm(filepath): ! """Confirm overwriting an existing file.""" ! return False ! def save(self): ! """Save buffer.""" ! filepath = self.doc.filepath ! if not filepath: ! return # XXX Get filename ! if not os.path.exists(filepath): ! self.confirmed = True ! if not self.confirmed: ! self.confirmed = self.overwriteConfirm(filepath) ! if self.confirmed: ! self.doc.write(self.editor.GetText()) ! self.editor.SetSavePoint() ! ! ## def updateNamespace(self): ! ## """Update the namespace for autocompletion and calltips. ! ! ## Return True if updated, False if there was an error.""" ! ## if self.editor.GetModify(): ! ## self.save() ! ## backup = self.interp.locals ! ## syspath = sys.path ! ## sys.path = self.syspath ! ## try: ! ## del sys.modules[self.modulename] ! ## except KeyError: ! ## pass ! ## modfile, path, descr = imp.find_module(self.modulename, [self.filedir]) ! ## try: ! ## try: ! ## module = imp.load_module(self.modulename, modfile, path, descr) ! ## except: ! ## self.interp.locals = backup ! ## return False ! ## else: ! ## self.interp.locals = module.__dict__ ! ## return True ! ## finally: ! ## sys.path = syspath ! ## if modfile: ! ## modfile.close() ! ! def updateNamespace(self): ! """Update the namespace for autocompletion and calltips. ! ! Return True if updated, False if there was an error.""" ! backup = self.interp.locals ! syspath = sys.path ! sys.path = self.syspath ! code = self.editor.GetText() ! module = imp.new_module(str(self.modulename)) ! namespace = module.__dict__ ! try: ! try: ! exec code in namespace ! except: ! self.interp.locals = backup ! return False ! else: ! self.interp.locals = namespace.copy() ! return True ! finally: ! sys.path = syspath ! for m in sys.modules.keys(): ! if m not in self.modules: ! del sys.modules[m] ! ! ! class Document: ! """Document class.""" ! ! def __init__(self, filename=None): ! """Create a Document instance.""" ! self.filename = filename ! self.filepath = None ! self.filedir = None ! self.filebase = None ! self.fileext = None ! if self.filename: ! self.filepath = os.path.abspath(self.filename) ! self.filedir, self.filename = os.path.split(self.filepath) ! self.filebase, self.fileext = os.path.splitext(self.filename) ! ! def read(self): ! """Return contents of file.""" ! f = file(self.filepath, 'rb') ! try: ! return f.read() ! finally: ! f.close() ! ! def write(self, text): ! """Write text to file.""" ! try: ! f = file(self.filepath, 'w') ! f.write(text) ! finally: ! if f: ! f.close() |