[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()
|