]> git.saurik.com Git - wxWidgets.git/commitdiff
New PyCrust files
authorRobin Dunn <robin@alldunn.com>
Fri, 26 Oct 2001 02:14:12 +0000 (02:14 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 26 Oct 2001 02:14:12 +0000 (02:14 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12168 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/wxPython/lib/PyCrust/filling.py
wxPython/wxPython/lib/PyCrust/shell.py

index 0b19af2f9f27dd1758ead35019e89106f83a8cc1..f0f24eb952c1eaa6c722d1fa20583b3f45e8cfd7 100644 (file)
@@ -53,7 +53,8 @@ class FillingTree(wxTreeCtrl):
         objtype = type(object)
         if objtype is types.DictType:
             dict = object
         objtype = type(object)
         if objtype is types.DictType:
             dict = object
-        elif (objtype in (types.InstanceType, types.ModuleType)) \
+        elif (objtype in (types.ClassType, types.InstanceType, \
+                          types.ModuleType)) \
         or hasattr(object, '__class__'):
             for key in introspect.getAttributeNames(object):
                 # Believe it or not, some attributes can disappear, such as
         or hasattr(object, '__class__'):
             for key in introspect.getAttributeNames(object):
                 # Believe it or not, some attributes can disappear, such as
@@ -306,4 +307,4 @@ class App(wxApp):
         return true
 
 
         return true
 
 
-  
\ No newline at end of file
+  
index a22c376045939e3e9df47b829e4e93ed3aa757f4..a071fb7ea14d89783b594aacad4ed74b0b7fba60 100644 (file)
@@ -125,8 +125,8 @@ class Shell(wxStyledTextCtrl):
         else:
             Interpreter = InterpClass
         # Create default locals so we have something interesting.
         else:
             Interpreter = InterpClass
         # Create default locals so we have something interesting.
-        shellLocals = {'__name__': 'PyShell', 
-                       '__doc__': 'PyShell, The PyCrust Python Shell.',
+        shellLocals = {'__name__': 'PyCrust-Shell', 
+                       '__doc__': 'PyCrust-Shell, The PyCrust Python Shell.',
                        '__version__': VERSION,
                       }
         # Add the dictionary that was passed in.
                        '__version__': VERSION,
                       }
         # Add the dictionary that was passed in.
@@ -283,10 +283,10 @@ class Shell(wxStyledTextCtrl):
         """Keypress event handler.
 
         Prevents modification of previously submitted commands/responses."""
         """Keypress event handler.
 
         Prevents modification of previously submitted commands/responses."""
+        if not self.CanEdit():
+            return
         key = event.KeyCode()
         currpos = self.GetCurrentPos()
         key = event.KeyCode()
         currpos = self.GetCurrentPos()
-        if currpos < self.prompt1Pos[1]:
-            return
         stoppos = self.promptPos[1]
         if key == ord('.'):
             # The dot or period key activates auto completion.
         stoppos = self.promptPos[1]
         if key == ord('.'):
             # The dot or period key activates auto completion.
@@ -318,8 +318,13 @@ class Shell(wxStyledTextCtrl):
         key = event.KeyCode()
         currpos = self.GetCurrentPos()
         stoppos = self.promptPos[1]
         key = event.KeyCode()
         currpos = self.GetCurrentPos()
         stoppos = self.promptPos[1]
+        # Return is used to submit a command to the interpreter.
+        if key == WXK_RETURN:
+            if self.AutoCompActive(): self.AutoCompCancel()
+            if self.CallTipActive: self.CallTipCancel()
+            self.processLine()
         # If the auto-complete window is up let it do its thing.
         # If the auto-complete window is up let it do its thing.
-        if self.AutoCompActive():
+        elif self.AutoCompActive():
             event.Skip()
         # Retrieve the previous command from the history buffer.
         elif (event.ControlDown() and key == WXK_UP) \
             event.Skip()
         # Retrieve the previous command from the history buffer.
         elif (event.ControlDown() and key == WXK_UP) \
@@ -332,10 +337,6 @@ class Shell(wxStyledTextCtrl):
         # Search up the history for the text in front of the cursor.
         elif key == WXK_F8:
             self.OnHistorySearch()
         # Search up the history for the text in front of the cursor.
         elif key == WXK_F8:
             self.OnHistorySearch()
-        # Return is used to submit a command to the interpreter.
-        elif key == WXK_RETURN:
-            if self.CallTipActive: self.CallTipCancel()
-            self.processLine()
         # Home needs to be aware of the prompt.
         elif key == WXK_HOME:
             if currpos >= stoppos:
         # Home needs to be aware of the prompt.
         elif key == WXK_HOME:
             if currpos >= stoppos:
@@ -357,7 +358,7 @@ class Shell(wxStyledTextCtrl):
                 event.Skip()
         # Only allow these keys after the latest prompt.
         elif key in (WXK_TAB, WXK_DELETE):
                 event.Skip()
         # Only allow these keys after the latest prompt.
         elif key in (WXK_TAB, WXK_DELETE):
-            if currpos >= self.prompt1Pos[1]:
+            if self.CanEdit():
                 event.Skip()
         # Don't toggle between insert mode and overwrite mode.
         elif key == WXK_INSERT:
                 event.Skip()
         # Don't toggle between insert mode and overwrite mode.
         elif key == WXK_INSERT:
@@ -367,9 +368,9 @@ class Shell(wxStyledTextCtrl):
 
     def OnHistoryRetrieve(self, step):
         """Retrieve the previous/next command from the history buffer."""
 
     def OnHistoryRetrieve(self, step):
         """Retrieve the previous/next command from the history buffer."""
-        startpos = self.GetCurrentPos()
-        if startpos < self.prompt1Pos[1]:
+        if not self.CanEdit():
             return
             return
+        startpos = self.GetCurrentPos()
         newindex = self.historyIndex + step
         if not (-1 <= newindex < len(self.history)):
             return
         newindex = self.historyIndex + step
         if not (-1 <= newindex < len(self.history)):
             return
@@ -386,9 +387,9 @@ class Shell(wxStyledTextCtrl):
 
     def OnHistorySearch(self):
         """Search up the history buffer for the text in front of the cursor."""
 
     def OnHistorySearch(self):
         """Search up the history buffer for the text in front of the cursor."""
-        startpos = self.GetCurrentPos()
-        if startpos < self.prompt1Pos[1]:
+        if not self.CanEdit():
             return
             return
+        startpos = self.GetCurrentPos()
         # The text up to the cursor is what we search for.
         numCharsAfterCursor = self.GetTextLength() - startpos
         searchText = self.getCommand(rstrip=0)
         # The text up to the cursor is what we search for.
         numCharsAfterCursor = self.GetTextLength() - startpos
         searchText = self.getCommand(rstrip=0)
@@ -547,6 +548,12 @@ class Shell(wxStyledTextCtrl):
         """Display text in the shell.
 
         Replace line endings with OS-specific endings."""
         """Display text in the shell.
 
         Replace line endings with OS-specific endings."""
+        text = self.fixLineEndings(text)
+        self.AddText(text)
+        self.EnsureCaretVisible()
+
+    def fixLineEndings(self, text):
+        """Return text with line endings replaced by OS-specific endings."""
         lines = text.split('\r\n')
         for l in range(len(lines)):
             chunks = lines[l].split('\r')
         lines = text.split('\r\n')
         for l in range(len(lines)):
             chunks = lines[l].split('\r')
@@ -554,9 +561,7 @@ class Shell(wxStyledTextCtrl):
                 chunks[c] = os.linesep.join(chunks[c].split('\n'))
             lines[l] = os.linesep.join(chunks)
         text = os.linesep.join(lines)
                 chunks[c] = os.linesep.join(chunks[c].split('\n'))
             lines[l] = os.linesep.join(chunks)
         text = os.linesep.join(lines)
-        self.AddText(text)
-        self.EnsureCaretVisible()
-        #self.ScrollToColumn(0)
+        return text
 
     def prompt(self):
         """Display appropriate prompt for the context, either ps1 or ps2.
 
     def prompt(self):
         """Display appropriate prompt for the context, either ps1 or ps2.
@@ -698,12 +703,62 @@ class Shell(wxStyledTextCtrl):
 
     def CanCut(self):
         """Return true if text is selected and can be cut."""
 
     def CanCut(self):
         """Return true if text is selected and can be cut."""
-        return self.GetSelectionStart() != self.GetSelectionEnd()
+        if self.GetSelectionStart() != self.GetSelectionEnd() \
+        and self.GetSelectionStart() >= self.prompt1Pos[1] \
+        and self.GetSelectionEnd() >= self.prompt1Pos[1]:
+            return 1
+        else:
+            return 0
     
     def CanCopy(self):
         """Return true if text is selected and can be copied."""
         return self.GetSelectionStart() != self.GetSelectionEnd()
 
     
     def CanCopy(self):
         """Return true if text is selected and can be copied."""
         return self.GetSelectionStart() != self.GetSelectionEnd()
 
+    def CanPaste(self):
+        """Return true if a paste should succeed."""
+        if self.CanEdit() and wxStyledTextCtrl.CanPaste(self):
+            return 1
+        else:
+            return 0
+
+    def CanEdit(self):
+        """Return true if editing should succeed."""
+        return self.GetCurrentPos() >= self.prompt1Pos[1]
+
+    def Cut(self):
+        """Remove selection and place it on the clipboard."""
+        if self.CanCut() and self.CanCopy():
+            if self.AutoCompActive(): self.AutoCompCancel()
+            if self.CallTipActive: self.CallTipCancel()
+            self.Copy()
+            self.ReplaceSelection('')
+
+    def Copy(self):
+        """Copy selection and place it on the clipboard."""
+        if self.CanCopy():
+            command = self.GetSelectedText()
+            command = command.replace(os.linesep + sys.ps2, os.linesep)
+            data = wxTextDataObject(command)
+            if wxTheClipboard.Open():
+                wxTheClipboard.SetData(data)
+                wxTheClipboard.Close()
+
+    def Paste(self):
+        """Replace selection with clipboard contents."""
+        if self.CanPaste():
+            if wxTheClipboard.Open():
+                if wxTheClipboard.IsSupported(wxDataFormat(wxDF_TEXT)):
+                    data = wxTextDataObject()
+                    if wxTheClipboard.GetData(data):
+                        command = data.GetText()
+                        command = self.fixLineEndings(command)
+                        command = command.replace(os.linesep + sys.ps2, '\n')
+                        command = command.replace(os.linesep, '\n')
+                        command = command.replace('\n', os.linesep + sys.ps2)
+                        self.ReplaceSelection('')
+                        self.write(command)
+                wxTheClipboard.Close()
+
 
 wxID_SELECTALL = NewId()  # This *should* be defined by wxPython.
 ID_AUTOCOMP = NewId()
 
 wxID_SELECTALL = NewId()  # This *should* be defined by wxPython.
 ID_AUTOCOMP = NewId()
@@ -727,9 +782,9 @@ class ShellMenu:
         m.Append(wxID_UNDO, '&Undo \tCtrl+Z', 'Undo the last action')
         m.Append(wxID_REDO, '&Redo \tCtrl+Y', 'Redo the last undone action')
         m.AppendSeparator()
         m.Append(wxID_UNDO, '&Undo \tCtrl+Z', 'Undo the last action')
         m.Append(wxID_REDO, '&Redo \tCtrl+Y', 'Redo the last undone action')
         m.AppendSeparator()
-        m.Append(wxID_CUT, 'Cu&t', 'Cut the selection')
-        m.Append(wxID_COPY, '&Copy', 'Copy the selection')
-        m.Append(wxID_PASTE, '&Paste', 'Paste')
+        m.Append(wxID_CUT, 'Cu&t \tCtrl+X', 'Cut the selection')
+        m.Append(wxID_COPY, '&Copy \tCtrl+C', 'Copy the selection')
+        m.Append(wxID_PASTE, '&Paste \tCtrl+V', 'Paste')
         m.AppendSeparator()
         m.Append(wxID_CLEAR, 'Cle&ar', 'Delete the selection')
         m.Append(wxID_SELECTALL, 'Select A&ll', 'Select all text')
         m.AppendSeparator()
         m.Append(wxID_CLEAR, 'Cle&ar', 'Delete the selection')
         m.Append(wxID_SELECTALL, 'Select A&ll', 'Select all text')
@@ -910,4 +965,4 @@ class ShellFrame(wxFrame, ShellMenu):
         self.createMenus()
 
 
         self.createMenus()
 
 
-           
\ No newline at end of file
+