]> git.saurik.com Git - wxWidgets.git/commitdiff
Updates to contributed library stuff, a new version of PyCrust
authorRobin Dunn <robin@alldunn.com>
Fri, 14 Sep 2001 16:15:46 +0000 (16:15 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 14 Sep 2001 16:15:46 +0000 (16:15 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/wxPython/lib/PyCrust/PyCrust.ico
wxPython/wxPython/lib/PyCrust/PyCrust.py
wxPython/wxPython/lib/PyCrust/crust.py
wxPython/wxPython/lib/PyCrust/filling.py
wxPython/wxPython/lib/PyCrust/interpreter.py
wxPython/wxPython/lib/PyCrust/shell.py
wxPython/wxPython/lib/colourselect.py
wxPython/wxPython/lib/printout.py
wxPython/wxPython/lib/splashscreen.py

index 2075eec3978f1651c5dad964e71cab2e074089b1..eae6180e103f0c480023dabb654fa3cfb1202fe7 100644 (file)
Binary files a/wxPython/wxPython/lib/PyCrust/PyCrust.ico and b/wxPython/wxPython/lib/PyCrust/PyCrust.ico differ
index d2281ce306115af88470c670f7c02523c75b2fd3..5c824037952623ad15da40c3dc26484a2aceb49f 100644 (file)
@@ -18,7 +18,7 @@ class App(wxApp):
         self.crustFrame = CrustFrame(locals=locals)
         self.crustFrame.Show(true)
         # Set focus to the shell editor.
         self.crustFrame = CrustFrame(locals=locals)
         self.crustFrame.Show(true)
         # Set focus to the shell editor.
-        self.crustFrame.crust.shell.SetFocus()
+        #self.crustFrame.crust.shell.SetFocus()
         self.SetTopWindow(self.crustFrame)
         # Add the application object to the sys module's namespace.
         # This allows a shell user to do:
         self.SetTopWindow(self.crustFrame)
         # Add the application object to the sys module's namespace.
         # This allows a shell user to do:
index d45941a05a3666b8a08d9eb676e456932f9e331c..ceb62dc6d7c1000a649fba5e3c728a25ff5c82c1 100644 (file)
@@ -19,7 +19,8 @@ class Crust(wxSplitterWindow):
     
     def __init__(self, parent, id=-1, pos=wxDefaultPosition, \
                  size=wxDefaultSize, style=wxSP_3D, name='Crust Window', \
     
     def __init__(self, parent, id=-1, pos=wxDefaultPosition, \
                  size=wxDefaultSize, style=wxSP_3D, name='Crust Window', \
-                 ingredients=None, rootLabel=None, intro='', locals=None, \
+                 rootObject=None, rootLabel=None, rootIsNamespace=1, \
+                 intro='', locals=None, \
                  InterpClass=None, *args, **kwds):
         """Create a PyCrust Crust instance."""
         wxSplitterWindow.__init__(self, parent, id, pos, size, style, name)
                  InterpClass=None, *args, **kwds):
         """Create a PyCrust Crust instance."""
         wxSplitterWindow.__init__(self, parent, id, pos, size, style, name)
@@ -27,24 +28,26 @@ class Crust(wxSplitterWindow):
                            locals=locals, InterpClass=InterpClass, \
                            *args, **kwds)
         self.filling = Filling(parent=self, \
                            locals=locals, InterpClass=InterpClass, \
                            *args, **kwds)
         self.filling = Filling(parent=self, \
-                               ingredients=self.shell.interp.locals, \
-                               rootLabel=rootLabel)
+                               rootObject=self.shell.interp.locals, \
+                               rootLabel=rootLabel, rootIsNamespace=1)
         """Add 'filling' to the interpreter's locals."""
         self.shell.interp.locals['filling'] = self.filling
         self.SplitHorizontally(self.shell, self.filling, 300)
         """Add 'filling' to the interpreter's locals."""
         self.shell.interp.locals['filling'] = self.filling
         self.SplitHorizontally(self.shell, self.filling, 300)
-        # Set focus to the shell editor. Doesn't always work as intended.
-        self.shell.SetFocus()
+        self.SetMinimumPaneSize(1)
 
 
 
 
-class CrustFrame(wxFrame):
+# Temporary hack to share menus between PyCrust and PyShell.
+from shell import ShellMenu
+
+class CrustFrame(wxFrame, ShellMenu):
     """Frame containing all the PyCrust components."""
     
     name = 'PyCrust Frame'
     revision = __version__
     
     def __init__(self, parent=None, id=-1, title='PyCrust', \
     """Frame containing all the PyCrust components."""
     
     name = 'PyCrust Frame'
     revision = __version__
     
     def __init__(self, parent=None, id=-1, title='PyCrust', \
-                 ingredients=None, rootLabel=None, locals=None, \
-                 InterpClass=None, *args, **kwds):
+                 rootObject=None, rootLabel=None, rootIsNamespace=1, \
+                 locals=None, InterpClass=None, *args, **kwds):
         """Create a PyCrust CrustFrame instance."""
         wxFrame.__init__(self, parent, id, title)
         intro = 'Welcome To PyCrust %s - The Flakiest Python Shell' % VERSION
         """Create a PyCrust CrustFrame instance."""
         wxFrame.__init__(self, parent, id, title)
         intro = 'Welcome To PyCrust %s - The Flakiest Python Shell' % VERSION
@@ -54,14 +57,21 @@ class CrustFrame(wxFrame):
             icon = wxIcon('PyCrust.ico', wxBITMAP_TYPE_ICO)
             self.SetIcon(icon)
         self.crust = Crust(parent=self, intro=intro, \
             icon = wxIcon('PyCrust.ico', wxBITMAP_TYPE_ICO)
             self.SetIcon(icon)
         self.crust = Crust(parent=self, intro=intro, \
-                           ingredients=ingredients, \
-                           rootLabel=rootLabel, locals=locals, \
+                           rootObject=rootObject, \
+                           rootLabel=rootLabel, \
+                           rootIsNamespace=rootIsNamespace, \
+                           locals=locals, \
                            InterpClass=InterpClass, *args, **kwds)
         # Override the filling so that status messages go to the status bar.
         self.crust.filling.fillingTree.setStatusText = self.SetStatusText
         # Override the shell so that status messages go to the status bar.
         self.crust.shell.setStatusText = self.SetStatusText
                            InterpClass=InterpClass, *args, **kwds)
         # Override the filling so that status messages go to the status bar.
         self.crust.filling.fillingTree.setStatusText = self.SetStatusText
         # Override the shell so that status messages go to the status bar.
         self.crust.shell.setStatusText = self.SetStatusText
-        # Set focus to the shell editor. Doesn't always work as intended.
+        # Fix a problem with the sash shrinking to nothing.
+        self.crust.filling.SetSashPosition(200)
+        # Set focus to the shell editor.
         self.crust.shell.SetFocus()
         self.crust.shell.SetFocus()
+        # Temporary hack to share menus between PyCrust and PyShell.
+        self.shell = self.crust.shell
+        self.createMenus()
 
 
 
 
index ef3292e000b13073a0fee61538a934b625c4f567..83bc34a79b2344a1eb22aa66a49e011b2363552e 100644 (file)
@@ -24,15 +24,17 @@ class FillingTree(wxTreeCtrl):
 
     def __init__(self, parent, id=-1, pos=wxDefaultPosition, \
                  size=wxDefaultSize, style=wxTR_HAS_BUTTONS, \
 
     def __init__(self, parent, id=-1, pos=wxDefaultPosition, \
                  size=wxDefaultSize, style=wxTR_HAS_BUTTONS, \
-                 ingredients=None, rootLabel=None):
+                 rootObject=None, rootLabel=None, rootIsNamespace=0):
         """Create a PyCrust FillingTree instance."""
         wxTreeCtrl.__init__(self, parent, id, pos, size)
         """Create a PyCrust FillingTree instance."""
         wxTreeCtrl.__init__(self, parent, id, pos, size)
-        if not ingredients:
+        self.rootIsNamespace = rootIsNamespace
+        if not rootObject:
             import __main__
             import __main__
-            ingredients = __main__
+            rootObject = __main__
+            self.rootIsNamespace = 1
         if not rootLabel: rootLabel = 'Ingredients'
         if not rootLabel: rootLabel = 'Ingredients'
-        rootdata = wxTreeItemData(ingredients)
-        self.root = self.AddRoot(rootLabel, -1, -1, rootdata)
+        rootData = wxTreeItemData(rootObject)
+        self.root = self.AddRoot(rootLabel, -1, -1, rootData)
         self.SetItemHasChildren(self.root, self.hasChildren(self.root))
         EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
         EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
         self.SetItemHasChildren(self.root, self.hasChildren(self.root))
         EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
         EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
@@ -75,10 +77,11 @@ class FillingTree(wxTreeCtrl):
         for item in list:
             itemtext = str(item)
             # Show string dictionary items with single quotes, except for
         for item in list:
             itemtext = str(item)
             # Show string dictionary items with single quotes, except for
-            # the first level of items, which represent the local namespace.
+            # the first level of items, if they represent a namespace.
             if type(object) is types.DictType \
             and type(item) is types.StringType \
             if type(object) is types.DictType \
             and type(item) is types.StringType \
-            and selection != self.root:
+            and (selection != self.root \
+                 or (selection == self.root and not self.rootIsNamespace)):
                 itemtext = repr(item)
             child = self.AppendItem(selection, itemtext, -1, -1, \
                                     wxTreeItemData(children[item]))
                 itemtext = repr(item)
             child = self.AppendItem(selection, itemtext, -1, -1, \
                                     wxTreeItemData(children[item]))
@@ -128,9 +131,10 @@ class FillingTree(wxTreeCtrl):
         parentobject = self.GetPyData(parent)
         name = self.GetItemText(item)
         # Apply dictionary syntax to dictionary items, except the root
         parentobject = self.GetPyData(parent)
         name = self.GetItemText(item)
         # Apply dictionary syntax to dictionary items, except the root
-        # and first level children.
-        if item != self.root and parent != self.root \
-        and type(parentobject) is types.DictType:
+        # and first level children of a namepace.
+        if type(parentobject) is types.DictType \
+        and ((item != self.root and parent != self.root) \
+        or (parent == self.root and not self.rootIsNamespace)):
             name = '[' + name + ']'
         # Apply dot syntax to multipart names.
         if partial:
             name = '[' + name + ']'
         # Apply dot syntax to multipart names.
         if partial:
@@ -138,8 +142,10 @@ class FillingTree(wxTreeCtrl):
                 name += partial
             else:
                 name += '.' + partial
                 name += partial
             else:
                 name += '.' + partial
-        # Repeat for everything but the root item and first level children.
-        if item != self.root and parent != self.root:
+        # Repeat for everything but the root item
+        # and first level children of a namespace.
+        if (item != self.root and parent != self.root) \
+        or (parent == self.root and not self.rootIsNamespace):
             name = self.getFullName(parent, partial=name)
         return name
 
             name = self.getFullName(parent, partial=name)
         return name
 
@@ -243,13 +249,15 @@ class Filling(wxSplitterWindow):
     
     def __init__(self, parent, id=-1, pos=wxDefaultPosition, \
                  size=wxDefaultSize, style=wxSP_3D, name='Filling Window', \
     
     def __init__(self, parent, id=-1, pos=wxDefaultPosition, \
                  size=wxDefaultSize, style=wxSP_3D, name='Filling Window', \
-                 ingredients=None, rootLabel=None):
+                 rootObject=None, rootLabel=None, rootIsNamespace=0):
         """Create a PyCrust Filling instance."""
         wxSplitterWindow.__init__(self, parent, id, pos, size, style, name)
         """Create a PyCrust Filling instance."""
         wxSplitterWindow.__init__(self, parent, id, pos, size, style, name)
-        self.fillingTree = FillingTree(parent=self, ingredients=ingredients, \
-                                       rootLabel=rootLabel)
+        self.fillingTree = FillingTree(parent=self, rootObject=rootObject, \
+                                       rootLabel=rootLabel, \
+                                       rootIsNamespace=rootIsNamespace)
         self.fillingText = FillingText(parent=self)
         self.SplitVertically(self.fillingTree, self.fillingText, 200)
         self.fillingText = FillingText(parent=self)
         self.SplitVertically(self.fillingTree, self.fillingText, 200)
+        self.SetMinimumPaneSize(1)
         # Override the filling so that descriptions go to fillingText.
         self.fillingTree.setText = self.fillingText.SetText
         # Select the root item.
         # Override the filling so that descriptions go to fillingText.
         self.fillingTree.setText = self.fillingText.SetText
         # Select the root item.
@@ -264,8 +272,8 @@ class FillingFrame(wxFrame):
     
     def __init__(self, parent=None, id=-1, title='PyFilling', \
                  pos=wxDefaultPosition, size=wxDefaultSize, \
     
     def __init__(self, parent=None, id=-1, title='PyFilling', \
                  pos=wxDefaultPosition, size=wxDefaultSize, \
-                 style=wxDEFAULT_FRAME_STYLE, ingredients=None, \
-                 rootLabel=None):
+                 style=wxDEFAULT_FRAME_STYLE, rootObject=None, \
+                 rootLabel=None, rootIsNamespace=0):
         """Create a PyCrust FillingFrame instance."""
         wxFrame.__init__(self, parent, id, title, pos, size, style)
         intro = 'Welcome To PyFilling - The Tastiest Namespace Inspector'
         """Create a PyCrust FillingFrame instance."""
         wxFrame.__init__(self, parent, id, title, pos, size, style)
         intro = 'Welcome To PyFilling - The Tastiest Namespace Inspector'
@@ -274,8 +282,9 @@ class FillingFrame(wxFrame):
         if wxPlatform == '__WXMSW__':
             icon = wxIcon('PyCrust.ico', wxBITMAP_TYPE_ICO)
             self.SetIcon(icon)
         if wxPlatform == '__WXMSW__':
             icon = wxIcon('PyCrust.ico', wxBITMAP_TYPE_ICO)
             self.SetIcon(icon)
-        self.filling = Filling(parent=self, ingredients=ingredients, \
-                               rootLabel=rootLabel)
+        self.filling = Filling(parent=self, rootObject=rootObject, \
+                               rootLabel=rootLabel, \
+                               rootIsNamespace=rootIsNamespace)
         # Override the filling so that status messages go to the status bar.
         self.filling.fillingTree.setStatusText = self.SetStatusText
 
         # Override the filling so that status messages go to the status bar.
         self.filling.fillingTree.setStatusText = self.SetStatusText
 
index 48e9056464e0a044dc97f11f7ca77ad55d5d881d..3474fe2885a11adfc0de1d07031c6969f451f31f 100644 (file)
@@ -23,11 +23,12 @@ class Interpreter(InteractiveInterpreter):
         self.stdin = stdin
         self.stdout = stdout
         self.stderr = stderr
         self.stdin = stdin
         self.stdout = stdout
         self.stderr = stderr
-        if rawin is not None:
+        if rawin:
             import __builtin__
             __builtin__.raw_input = rawin
             del __builtin__
             import __builtin__
             __builtin__.raw_input = rawin
             del __builtin__
-        copyright = 'Type "copyright", "credits" or "license" for more information.'
+        copyright = \
+            'Type "copyright", "credits" or "license" for more information.'
         self.introText = 'Python %s on %s%s%s' % \
                          (sys.version, sys.platform, os.linesep, copyright)
         try:
         self.introText = 'Python %s on %s%s%s' % \
                          (sys.version, sys.platform, os.linesep, copyright)
         try:
@@ -39,19 +40,19 @@ class Interpreter(InteractiveInterpreter):
         except AttributeError:
             sys.ps2 = '... '
         self.more = 0
         except AttributeError:
             sys.ps2 = '... '
         self.more = 0
-        self.commandBuffer = []  # List of lists to support recursive push().
-        self.commandHistory = []
+        # List of lists to support recursive push().
+        self.commandBuffer = []
         self.startupScript = os.environ.get('PYTHONSTARTUP')
 
     def push(self, command):
         """Send command to the interpreter to be executed.
         
         self.startupScript = os.environ.get('PYTHONSTARTUP')
 
     def push(self, command):
         """Send command to the interpreter to be executed.
         
-        Because this may be called recursively, we append a new list 
-        onto the commandBuffer list and then append commands into that.
-        If the passed in command is part of a multi-line command we keep
-        appending the pieces to the last list in commandBuffer until we
-        have a complete command, then, finally, we delete that last list.
-        """ 
+        Because this may be called recursively, we append a new list
+        onto the commandBuffer list and then append commands into
+        that. If the passed in command is part of a multi-line command
+        we keep appending the pieces to the last list in commandBuffer
+        until we have a complete command, then, finally, we delete
+        that last list."""
         if not self.more: self.commandBuffer.append([])
         self.commandBuffer[-1].append(command)
         source = '\n'.join(self.commandBuffer[-1])
         if not self.more: self.commandBuffer.append([])
         self.commandBuffer[-1].append(command)
         source = '\n'.join(self.commandBuffer[-1])
@@ -66,7 +67,15 @@ class Interpreter(InteractiveInterpreter):
         sys.stdout = self.stdout
         sys.stderr = self.stderr
         more = InteractiveInterpreter.runsource(self, source)
         sys.stdout = self.stdout
         sys.stderr = self.stderr
         more = InteractiveInterpreter.runsource(self, source)
-        sys.stdin, sys.stdout, sys.stderr = stdin, stdout, stderr
+        # If sys.std* is still what we set it to, then restore it.
+        # But, if the executed source changed sys.std*, assume it
+        # was meant to be changed and leave it. Power to the people.
+        if sys.stdin == self.stdin:
+            sys.stdin = stdin
+        if sys.stdout == self.stdout:
+            sys.stdout = stdout
+        if sys.stderr == self.stderr:
+            sys.stderr = stderr
         return more
         
     def getAutoCompleteList(self, command='', *args, **kwds):
         return more
         
     def getAutoCompleteList(self, command='', *args, **kwds):
index e14e6c6d4e47b9d3a90bd8a6b134f0ea46f40dc3..2c3c9e2d464ec125d770fb6845fddb25a4114e5c 100644 (file)
@@ -13,6 +13,9 @@ from wxPython.stc import *
 import keyword
 import os
 import sys
 import keyword
 import os
 import sys
+from pseudo import PseudoFileIn
+from pseudo import PseudoFileOut
+from pseudo import PseudoFileErr
 from version import VERSION
 
 
 from version import VERSION
 
 
@@ -48,6 +51,12 @@ class Shell(wxStyledTextCtrl):
                  locals=None, InterpClass=None, *args, **kwds):
         """Create a PyCrust Shell instance."""
         wxStyledTextCtrl.__init__(self, parent, id, pos, size, style)
                  locals=None, InterpClass=None, *args, **kwds):
         """Create a PyCrust Shell instance."""
         wxStyledTextCtrl.__init__(self, parent, id, pos, size, style)
+        # Grab these so they can be restored by self.redirect* methods.
+        self.stdin = sys.stdin
+        self.stdout = sys.stdout
+        self.stderr = sys.stderr
+        # Add the current working directory "." to the search path.
+        sys.path.insert(0, os.curdir)
         # Import a default interpreter class if one isn't provided.
         if InterpClass == None:
             from interpreter import Interpreter
         # Import a default interpreter class if one isn't provided.
         if InterpClass == None:
             from interpreter import Interpreter
@@ -61,7 +70,6 @@ class Shell(wxStyledTextCtrl):
         # Add the dictionary that was passed in.
         if locals:
             shellLocals.update(locals)
         # Add the dictionary that was passed in.
         if locals:
             shellLocals.update(locals)
-        from pseudo import PseudoFileIn, PseudoFileOut, PseudoFileErr
         self.interp = Interpreter(locals=shellLocals, \
                                   rawin=self.readRaw, \
                                   stdin=PseudoFileIn(self.readIn), \
         self.interp = Interpreter(locals=shellLocals, \
                                   rawin=self.readRaw, \
                                   stdin=PseudoFileIn(self.readIn), \
@@ -108,7 +116,7 @@ class Shell(wxStyledTextCtrl):
         # environment. They can override anything they want.
         try: self.execStartupScript(self.interp.startupScript)
         except: pass
         # environment. They can override anything they want.
         try: self.execStartupScript(self.interp.startupScript)
         except: pass
-            
+
     def destroy(self):
         del self.interp
         
     def destroy(self):
         del self.interp
         
@@ -384,17 +392,6 @@ class Shell(wxStyledTextCtrl):
         endline = self.GetCurrentLine()
         # If they hit RETURN on the last line, execute the command.
         if theline == endline:
         endline = self.GetCurrentLine()
         # If they hit RETURN on the last line, execute the command.
         if theline == endline:
-            # Store the last-recalled command; see the main comment for
-            # self.lastCommandRecalled.
-            if command != '':
-                self.lastCommandRecalled = self.historyPos
-            # Reset the history position.
-            self.historyPos = -1
-            # Insert this command into the history, unless it's a blank line
-            # or the same as the last command.
-            if command != '' \
-            and (len(self.history) == 0 or command != self.history[0]):
-                self.history.insert(0, command)
             self.push(command)
         # Otherwise, replace the last line with the new line.
         else:
             self.push(command)
         # Otherwise, replace the last line with the new line.
         else:
@@ -416,11 +413,6 @@ class Shell(wxStyledTextCtrl):
         The command may not necessarily be valid Python syntax."""
         if not text:
             text = self.GetCurLine()[0]
         The command may not necessarily be valid Python syntax."""
         if not text:
             text = self.GetCurLine()[0]
-## This is a hack due to a bug in the wxPython 2.3.2 beta. The following
-## two lines of code should go away once the bug has been fixed and the
-## line above should be restored.
-##            self.write(' ')
-##            text = self.GetCurLine()[0][:-1]
         # XXX Need to extract real prompts here. Need to keep track of the
         # prompt every time a command is issued.
         ps1 = str(sys.ps1)
         # XXX Need to extract real prompts here. Need to keep track of the
         # prompt every time a command is issued.
         ps1 = str(sys.ps1)
@@ -439,6 +431,7 @@ class Shell(wxStyledTextCtrl):
     
     def push(self, command):
         """Send command to the interpreter for execution."""
     
     def push(self, command):
         """Send command to the interpreter for execution."""
+        self.addHistory(command)
         self.write(os.linesep)
         self.more = self.interp.push(command)
         self.prompt()
         self.write(os.linesep)
         self.more = self.interp.push(command)
         self.prompt()
@@ -447,6 +440,20 @@ class Shell(wxStyledTextCtrl):
         # hitting enter. After they hit enter it becomes permanent.
         self.EmptyUndoBuffer()
 
         # hitting enter. After they hit enter it becomes permanent.
         self.EmptyUndoBuffer()
 
+    def addHistory(self, command):
+        """Add command to the command history."""
+        # Store the last-recalled command; see the main comment for
+        # self.lastCommandRecalled.
+        if command != '':
+            self.lastCommandRecalled = self.historyPos
+        # Reset the history position.
+        self.historyPos = -1
+        # Insert this command into the history, unless it's a blank
+        # line or the same as the last command.
+        if command != '' \
+        and (len(self.history) == 0 or command != self.history[0]):
+            self.history.insert(0, command)
+
     def write(self, text):
         """Display text in the shell.
 
     def write(self, text):
         """Display text in the shell.
 
@@ -571,6 +578,27 @@ class Shell(wxStyledTextCtrl):
         """Replacement for stderr."""
         self.write(text)
     
         """Replacement for stderr."""
         self.write(text)
     
+    def redirectStdin(self, redirect=1):
+        """If redirect is true then sys.stdin will come from the shell."""
+        if redirect:
+            sys.stdin = PseudoFileIn(self.readIn)
+        else:
+            sys.stdin = self.stdin
+
+    def redirectStdout(self, redirect=1):
+        """If redirect is true then sys.stdout will go to the shell."""
+        if redirect:
+            sys.stdout = PseudoFileOut(self.writeOut)
+        else:
+            sys.stdout = self.stdout
+
+    def redirectStderr(self, redirect=1):
+        """If redirect is true then sys.stderr will go to the shell."""
+        if redirect:
+            sys.stderr = PseudoFileErr(self.writeErr)
+        else:
+            sys.stderr = self.stderr
+
     def CanCut(self):
         """Return true if text is selected and can be cut."""
         return self.GetSelectionStart() != self.GetSelectionEnd()
     def CanCut(self):
         """Return true if text is selected and can be cut."""
         return self.GetSelectionStart() != self.GetSelectionEnd()
@@ -590,31 +618,9 @@ ID_CALLTIPS = NewId()
 ID_CALLTIPS_SHOW = NewId()
 
 
 ID_CALLTIPS_SHOW = NewId()
 
 
-class ShellFrame(wxFrame):
-    """Frame containing the PyCrust shell component."""
+class ShellMenu:
+    """Mixin class to add standard menu items."""
     
     
-    name = 'PyCrust Shell Frame'
-    revision = __version__
-    
-    def __init__(self, parent=None, id=-1, title='PyShell', \
-                 pos=wxDefaultPosition, size=wxDefaultSize, \
-                 style=wxDEFAULT_FRAME_STYLE, locals=None, \
-                 InterpClass=None, *args, **kwds):
-        """Create a PyCrust ShellFrame instance."""
-        wxFrame.__init__(self, parent, id, title, pos, size, style)
-        intro = 'Welcome To PyCrust %s - The Flakiest Python Shell' % VERSION
-        self.CreateStatusBar()
-        self.SetStatusText(intro)
-        if wxPlatform == '__WXMSW__':
-            icon = wxIcon('PyCrust.ico', wxBITMAP_TYPE_ICO)
-            self.SetIcon(icon)
-        self.createMenus()
-        self.shell = Shell(parent=self, id=-1, introText=intro, \
-                           locals=locals, InterpClass=InterpClass, \
-                           *args, **kwds)
-        # Override the shell so that status messages go to the status bar.
-        self.shell.setStatusText = self.SetStatusText
-
     def createMenus(self):
         m = self.fileMenu = wxMenu()
         m.AppendSeparator()
     def createMenus(self):
         m = self.fileMenu = wxMenu()
         m.AppendSeparator()
@@ -624,12 +630,12 @@ class ShellFrame(wxFrame):
         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 \tCtrl+X', 'Cut the selection')
-        m.Append(wxID_COPY, '&Copy \tCtrl+C', 'Copy the selection')
-        m.Append(wxID_PASTE, '&Paste \tCtrl+V', 'Paste')
+        m.Append(wxID_CUT, 'Cu&t', 'Cut the selection')
+        m.Append(wxID_COPY, '&Copy', 'Copy the selection')
+        m.Append(wxID_PASTE, '&Paste', 'Paste')
         m.AppendSeparator()
         m.AppendSeparator()
-        m.Append(wxID_CLEAR, 'Cle&ar \tDel', 'Delete the selection')
-        m.Append(wxID_SELECTALL, 'Select A&ll \tCtrl+A', 'Select all text')
+        m.Append(wxID_CLEAR, 'Cle&ar', 'Delete the selection')
+        m.Append(wxID_SELECTALL, 'Select A&ll', 'Select all text')
 
         m = self.autocompMenu = wxMenu()
         m.Append(ID_AUTOCOMP_SHOW, 'Show Auto Completion', \
 
         m = self.autocompMenu = wxMenu()
         m.Append(ID_AUTOCOMP_SHOW, 'Show Auto Completion', \
@@ -781,3 +787,29 @@ class ShellFrame(wxFrame):
             event.Check(self.shell.autoCallTip)
             
 
             event.Check(self.shell.autoCallTip)
             
 
+class ShellFrame(wxFrame, ShellMenu):
+    """Frame containing the PyCrust shell component."""
+    
+    name = 'PyCrust Shell Frame'
+    revision = __version__
+    
+    def __init__(self, parent=None, id=-1, title='PyShell', \
+                 pos=wxDefaultPosition, size=wxDefaultSize, \
+                 style=wxDEFAULT_FRAME_STYLE, locals=None, \
+                 InterpClass=None, *args, **kwds):
+        """Create a PyCrust ShellFrame instance."""
+        wxFrame.__init__(self, parent, id, title, pos, size, style)
+        intro = 'Welcome To PyCrust %s - The Flakiest Python Shell' % VERSION
+        self.CreateStatusBar()
+        self.SetStatusText(intro)
+        if wxPlatform == '__WXMSW__':
+            icon = wxIcon('PyCrust.ico', wxBITMAP_TYPE_ICO)
+            self.SetIcon(icon)
+        self.shell = Shell(parent=self, id=-1, introText=intro, \
+                           locals=locals, InterpClass=InterpClass, \
+                           *args, **kwds)
+        # Override the shell so that status messages go to the status bar.
+        self.shell.setStatusText = self.SetStatusText
+        self.createMenus()
+
+
index 9f0d7a9506122b92c2d4a44cec2d9f72e1603497..c1140a6d71759c081bb2627a691fab3445c41be3 100644 (file)
@@ -5,7 +5,7 @@
 #
 # Author:       Lorne White, Lorne.White@telusplanet.net
 #
 #
 # Author:       Lorne White, Lorne.White@telusplanet.net
 #
-# Created:      Feb 25, 2001
+# Created:      Sept 4, 2001
 # Licence:      wxWindows license
 #----------------------------------------------------------------------------
 
 # Licence:      wxWindows license
 #----------------------------------------------------------------------------
 
@@ -16,25 +16,40 @@ from wxPython.wx import *
 # button colour will change to new colour
 # GetColour method to get the selected colour
 
 # button colour will change to new colour
 # GetColour method to get the selected colour
 
+# Updates:
+# call back to function if changes made
+
 class ColourSelect(wxButton):
 class ColourSelect(wxButton):
-    def __init__(self, parent, position = wxPoint(20, 20), bcolour = [0, 0, 0], size = wxSize(20, 20)):
+    def __init__(self, parent, position = wxPoint(20, 20), bcolour = [0, 0, 0], size = wxSize(20, 20), callback = None):
         self.win = parent
         self.win = parent
+        self.callback = callback
 
         mID = NewId()
         self.b = b = wxButton(parent, mID, "", position, size)
         EVT_BUTTON(parent, mID, self.OnClick)
 
 
         mID = NewId()
         self.b = b = wxButton(parent, mID, "", position, size)
         EVT_BUTTON(parent, mID, self.OnClick)
 
-        self.set_colour_val = set_colour = wxColor(bcolour[0], bcolour[1], bcolour[2])
-        b.SetBackgroundColour(set_colour)
-        b.SetForegroundColour(wxWHITE)
-        self.set_colour = bcolour
+        self.SetColourValue(bcolour)
 
     def SetColour(self, bcolour):
         self.b.SetBackgroundColour(bcolour)
 
 
     def SetColour(self, bcolour):
         self.b.SetBackgroundColour(bcolour)
 
+    def SetColourValue(self, bcolour):
+        self.set_colour_val = wxColor(bcolour[0], bcolour[1], bcolour[2])
+        self.set_colour = bcolour
+
+        self.b.SetBackgroundColour(self.set_colour_val)
+        self.b.SetForegroundColour(wxWHITE)
+
+    def SetValue(self, bcolour):
+        self.SetColourValue(bcolour)
+
     def GetColour(self):
         return self.set_colour
 
     def GetColour(self):
         return self.set_colour
 
+    def OnChange(self):
+        if self.callback != None:
+            self.callback()
+
     def OnClick(self, event):
         data = wxColourData()
         data.SetChooseFull(true)
     def OnClick(self, event):
         data = wxColourData()
         data.SetChooseFull(true)
@@ -45,6 +60,7 @@ class ColourSelect(wxButton):
             self.set_colour = set = data.GetColour().Get()
             self.set_colour_val = bcolour = wxColour(set[0],set[1],set[2])
             self.b.SetBackgroundColour(bcolour)
             self.set_colour = set = data.GetColour().Get()
             self.set_colour_val = bcolour = wxColour(set[0],set[1],set[2])
             self.b.SetBackgroundColour(bcolour)
+            self.OnChange()
         dlg.Destroy()
 
 
         dlg.Destroy()
 
 
index b158215ff1cf90ced93ad40b8b2cf7fb5b960a78..bca1aee4a4d81d126be200960b2fe4c21d165c01 100644 (file)
@@ -5,8 +5,8 @@
 # Author:       Lorne White (email: lorne.white@telusplanet.net)
 #
 # Created:
 # Author:       Lorne White (email: lorne.white@telusplanet.net)
 #
 # Created:
-# Version       0.7
-# Date:         August 18, 2001
+# Version       0.72
+# Date:         Sept 8, 2001
 # Licence:      wxWindows license
 #----------------------------------------------------------------------------
 
 # Licence:      wxWindows license
 #----------------------------------------------------------------------------
 
@@ -594,6 +594,7 @@ class PrintTable:
         self.row_line_colour = {}
 
         self.parentFrame = parentFrame
         self.row_line_colour = {}
 
         self.parentFrame = parentFrame
+        self.SetPreviewSize()
 
         self.printData = wxPrintData()
         self.scale = 1.0
 
         self.printData = wxPrintData()
         self.scale = 1.0
@@ -609,6 +610,16 @@ class PrintTable:
         self.SetMargins()
         self.SetPortrait()
 
         self.SetMargins()
         self.SetPortrait()
 
+    def SetPreviewSize(self, position = wxPoint(0, 0), size="Full"):
+        if size == "Full":
+            screenWidth = int(wx.wxSystemSettings_GetSystemMetric(wx.wxSYS_SCREEN_X))
+            screenHeight = int(wx.wxSystemSettings_GetSystemMetric(wx.wxSYS_SCREEN_Y))
+            self.preview_frame_size = wxSize(screenWidth, screenHeight)
+            self.preview_frame_pos = position
+        else:
+            self.preview_frame_size = size     
+            self.preview_frame_pos = position
+
     def SetPaperId(self, paper):
         self.printData.SetPaperId(paper)
 
     def SetPaperId(self, paper):
         self.printData.SetPaperId(paper)
 
@@ -843,8 +854,8 @@ class PrintTable:
 
         frame.Initialize()
         if self.parentFrame:
 
         frame.Initialize()
         if self.parentFrame:
-            frame.SetPosition(self.parentFrame.GetPosition())
-            frame.SetSize(self.parentFrame.GetSize())
+            frame.SetPosition(self.preview_frame_pos)
+            frame.SetSize(self.preview_frame_size)
         frame.Show(true)
 
 
         frame.Show(true)
 
 
index 23878d53e27427fddd6d4fdc69bbe85500e62ea3..8dfa14f4450c0d64b15fe02d2d62fdeed50f0402 100644 (file)
@@ -22,6 +22,7 @@ def bitmapFromFile(filename):
         "bmp" :wxBITMAP_TYPE_BMP,
         "png" :wxBITMAP_TYPE_PNG,
         "jpeg":wxBITMAP_TYPE_JPEG,
         "bmp" :wxBITMAP_TYPE_BMP,
         "png" :wxBITMAP_TYPE_PNG,
         "jpeg":wxBITMAP_TYPE_JPEG,
+        "jpg" :wxBITMAP_TYPE_JPEG,
         "gif" :wxBITMAP_TYPE_GIF,
         "xbm" :wxBITMAP_TYPE_XBM,
     }
         "gif" :wxBITMAP_TYPE_GIF,
         "xbm" :wxBITMAP_TYPE_XBM,
     }