#----------------------------------------------------------------------
+class StaticText(wx.StaticText):
+ """
+ A StaticText that only updates the label if it has changed, to
+ help reduce potential flicker since these controls would be
+ updated very frequently otherwise.
+ """
+ def SetLabel(self, label):
+ if label <> self.GetLabel():
+ wx.StaticText.SetLabel(self, label)
+
+#----------------------------------------------------------------------
+
class TestPanel(wx.Panel):
def __init__(self, parent, log):
self.log = log
fgs = wx.FlexGridSizer(cols=2, hgap=5, vgap=10)
row.Add(fgs, 0, wx.ALL, 30)
- lbl = wx.StaticText(self, -1, "X pos:")
- self.x = wx.StaticText(self, -1, "00000")
+ lbl = StaticText(self, -1, "X pos:")
+ self.x = StaticText(self, -1, "00000")
fgs.Add(lbl)
fgs.Add(self.x)
- lbl = wx.StaticText(self, -1, "Y pos:")
- self.y = wx.StaticText(self, -1, "00000")
+ lbl = StaticText(self, -1, "Y pos:")
+ self.y = StaticText(self, -1, "00000")
fgs.Add(lbl)
fgs.Add(self.y)
- lbl = wx.StaticText(self, -1, "Left down:")
- self.lft = wx.StaticText(self, -1, "False")
+ lbl = StaticText(self, -1, "Left down:")
+ self.lft = StaticText(self, -1, "False")
fgs.Add(lbl)
fgs.Add(self.lft)
- lbl = wx.StaticText(self, -1, "Middle Down:")
- self.mid = wx.StaticText(self, -1, "False")
+ lbl = StaticText(self, -1, "Middle Down:")
+ self.mid = StaticText(self, -1, "False")
fgs.Add(lbl)
fgs.Add(self.mid)
- lbl = wx.StaticText(self, -1, "Right down:")
- self.rgt = wx.StaticText(self, -1, "False")
+ lbl = StaticText(self, -1, "Right down:")
+ self.rgt = StaticText(self, -1, "False")
fgs.Add(lbl)
fgs.Add(self.rgt)
fgs = wx.FlexGridSizer(cols=2, hgap=5, vgap=10)
row.Add(fgs, 0, wx.ALL, 30)
- lbl = wx.StaticText(self, -1, "Control down:")
- self.ctrl = wx.StaticText(self, -1, "False")
+ lbl = StaticText(self, -1, "Control down:")
+ self.ctrl = StaticText(self, -1, "False")
fgs.Add(lbl)
fgs.Add(self.ctrl)
- lbl = wx.StaticText(self, -1, "Shift down:")
- self.shft = wx.StaticText(self, -1, "False")
+ lbl = StaticText(self, -1, "Shift down:")
+ self.shft = StaticText(self, -1, "False")
fgs.Add(lbl)
fgs.Add(self.shft)
- lbl = wx.StaticText(self, -1, "Alt down:")
- self.alt = wx.StaticText(self, -1, "False")
+ lbl = StaticText(self, -1, "Alt down:")
+ self.alt = StaticText(self, -1, "False")
fgs.Add(lbl)
fgs.Add(self.alt)
- lbl = wx.StaticText(self, -1, "Meta down:")
- self.meta = wx.StaticText(self, -1, "False")
+ lbl = StaticText(self, -1, "Meta down:")
+ self.meta = StaticText(self, -1, "False")
fgs.Add(lbl)
fgs.Add(self.meta)
- lbl = wx.StaticText(self, -1, "Cmd down:")
- self.cmd = wx.StaticText(self, -1, "False")
+ lbl = StaticText(self, -1, "Cmd down:")
+ self.cmd = StaticText(self, -1, "False")
fgs.Add(lbl)
fgs.Add(self.cmd)
The mouse and modifier state can be polled with the wx.GetMouseState
function. It returns an instance of a wx.MouseState object that
contains the current position of the mouse pointer in screen
-coordinants, as well as boolean values indicating the up/down status
+coordinates, as well as boolean values indicating the up/down status
of the mouse buttons and the modifier keys.
exe, spawn = self.GetPyExecutable()
spawn(os.P_NOWAIT, exe, exe, "MDISashDemo.py")
-
+ # TODO: This hack can be removed once we fix the way the Python
+ # app bundles are generated so that they are not bundling and
+ # pointing to an otherwise unused and non-GUI-friendly version of
+ # Python on OS X.
def GetPyExecutable(self):
if 'wxMac' in wx.PlatformInfo:
# sys.executable will be wrong if running the demo from
- # an app bundle. Just find pythonw on the path instead.
- return 'pythonw' + sys.version[:3], os.spawnlp
+ # an app bundle. But the bundle is always using a system
+ # framework so just hardcode the path to it.
+ if sys.version[:3] == "2.4":
+ return '/usr/local/bin/pythonw', os.spawnl
+ else:
+ return '/usr/bin/pythonw', os.spawnl
else:
return sys.executable, os.spawnl
'MultiSplitterWindow',
'Throbber',
'GetMouseState',
+ 'FloatCanvas',
]),
# managed windows == things with a (optional) caption you can close
'HtmlWindow',
'HyperLinkCtrl',
'IntCtrl',
- 'MediaCtrl',
- 'MultiSplitterWindow',
'MVCTree',
'MaskedEditControls',
'MaskedNumCtrl',
- 'MimeTypesManager',
+ 'MediaCtrl',
+ 'MultiSplitterWindow',
'PyCrust',
'PyPlot',
'PyShell',
'DrawXXXList',
'FileHistory',
'FontEnumerator',
+ 'GLCanvas',
'Joystick',
+ 'MimeTypesManager',
'MouseGestures',
'OGL',
'PrintFramework',
'Unicode',
]),
- # need libs not coming with the demo
- ('Samples using an external library', [
- 'GLCanvas',
- ]),
-
('Check out the samples dir too', [
]),
import wx
import images
+
+# helper function to make sure we don't convert unicode objects to strings
+# or vice versa when converting lists and None values to text.
+convert = str
+if 'unicode' in wx.PlatformInfo:
+ convert = unicode
+
#----------------------------------------------------------------------------
class MimeTypesDemoPanel(wx.Panel):
mtypes = wx.TheMimeTypesManager.EnumAllFileTypes()
except wx.PyAssertionError:
mtypes = []
+
+ # TODO: On wxMac, EnumAllFileTypes produces tons of dupes, which
+ # causes quirky behavior because the list control doesn't expect
+ # dupes, and simply wastes space. So remove the dupes for now,
+ # then remove this hack when we fix EnumAllFileTypes on Mac.
+ mimes = []
for mt in mtypes:
- self.mimelist.Append(mt)
+ if mt not in mimes:
+ self.mimelist.Append(mt)
+ mimes.append(mt)
# Do a lookup of *.wav for a starting position
self.OnLookup()
# Select the entered value in the list
if fileType:
- if self.mimelist.FindString(str(fileType.GetMimeType())) != -1:
+ if self.mimelist.FindString(convert(fileType.GetMimeType())) != -1:
# Using CallAfter to ensure that GUI is ready before trying to
# select it (otherwise, it's selected but not visible)
- wx.CallAfter(self.mimelist.SetSelection, self.mimelist.FindString(str(fileType.GetMimeType())))
+ wx.CallAfter(self.mimelist.SetSelection, self.mimelist.FindString(convert(fileType.GetMimeType())))
if fileType is None:
bmp = images.getNoIconBitmap()
self.icon.SetBitmap(bmp)
self.iconsource.SetValue(file)
- self.iconoffset.SetValue(str(idx))
+ self.iconoffset.SetValue(convert(idx))
#------- MIME type
- self.mimetype.SetValue(str(ft.GetMimeType()))
+ self.mimetype.SetValue(convert(ft.GetMimeType()))
#------- MIME types
- self.mimetypes.SetValue(str(ft.GetMimeTypes()))
+ self.mimetypes.SetValue(convert(ft.GetMimeTypes()))
#------- Associated extensions
- self.extensions.SetValue(str(ft.GetExtensions()))
+ self.extensions.SetValue(convert(ft.GetExtensions()))
#------- Description of file type
- self.description.SetValue(str(ft.GetDescription()))
+ self.description.SetValue(convert(ft.GetDescription()))
#------- Prep a fake command line command
extList = ft.GetExtensions()
if extList:
ext = extList[0]
- if ext[0] == ".": ext = ext[1:]
+ if len(ext) > 0 and ext[0] == ".": ext = ext[1:]
else:
ext = ""
#------- OPEN command
cmd = ft.GetOpenCommand(filename, mime)
- self.opencommand.SetValue(str(cmd))
+ self.opencommand.SetValue(convert(cmd))
#------- PRINT command
cmd = ft.GetPrintCommand(filename, mime)
- self.printcommand.SetValue(str(cmd))
+ self.printcommand.SetValue(convert(cmd))
#------- All commands
all = ft.GetAllCommands(filename, mime)
In addition to the wxPython modules, several tools scripts (such as
XRCed and PyShell) and batch file launchers have been installed to
-Python's Scripts directory. (For example, c:\Python23\Scripts.) IF
+Python's Scripts directory. (For example, c:\Python23\Scripts.) If
you have multiple versions of wxPython installed these tool scripts
will use whichever is the default install. If you would like to
control which version is used then follow the directions at the wiki
page for using wxversion.
This installer does *not* include the wxPython documentation, the
-wxPython demo and other sample applications are provided as part of
-wxPython. Those are available in a separate installer named
+wxPython demo and other sample applications that are provided as part
+of wxPython. Those are available in a separate installer named
wxPython2.6-win32-docs-demos-*.exe which should also be located from
wherever you downloaded this package from. The Docs and Demos
installer will also create Start Menu shortcuts for the tool scripts
destdir=$UPLOAD_DAILY_ROOT/$DAILY
echo "Copying to the starship at $destdir..."
ssh $UPLOAD_HOST "mkdir -p $destdir"
- scp $STAGING_DIR/* $UPLOAD_HOST:/$destdir
+ scp -p $STAGING_DIR/* $UPLOAD_HOST:/$destdir
ssh $UPLOAD_HOST "cd $destdir && ls -al"
echo "Copying to the starship..."
destdir=$UPLOAD_PREVIEW_ROOT/$VERSION
ssh $UPLOAD_HOST "mkdir -p $destdir"
- scp $STAGING_DIR/* $UPLOAD_HOST:/$destdir
+ scp -p $STAGING_DIR/* $UPLOAD_HOST:/$destdir
# Send email to wxPython-dev
DATE=`date`
or errors or etc. from the buffer before doing a copy/paste.
The free edit mode is designated by the use of a red,
non-flashing caret.</li>
-<li>Ctrl-H will fold/unfold (hide/show) the selected lines.</li>
+<li>Ctrl-Shift-F will fold/unfold (hide/show) the selected lines.</li>
<li>General code cleanup and fixes.</li>
<li>Use wx.StandardPaths to determine the location of the config
files.</li>
The free edit mode is designated by the use of a red,
non-flashing caret.
- * Ctrl-H will fold/unfold (hide/show) the selected lines.
+ * Ctrl-Shift-F will fold/unfold (hide/show) the selected lines.
* General code cleanup and fixes.
useful, for example, if you would like to remove some output or
errors or etc. from the buffer before doing a copy/paste. The free
edit mode is designated by the use of a red, non-flashing caret.</li>
-<li>Ctrl-H will fold/unfold (hide/show) the selected lines.</li>
+<li>Ctrl-Shift-F will fold/unfold (hide/show) the selected lines.</li>
</ul>
<p>On top of these changes I (Robin Dunn) added the following:</p>
<ul class="simple">
self.ObjectUnderMouse = None
# called just to make sure everything is initialized
- self.OnSize(None)
+ ##self.OnSize(None)
self.InHereNum = 0
errors or etc. from the buffer before doing a copy/paste. The free
edit mode is designated by the use of a red, non-flashing caret.
-* Ctrl-H will fold/unfold (hide/show) the selected lines.
+* Ctrl-Shift-F will fold/unfold (hide/show) the selected lines.
'Call Tip Options')
if wx.Platform == "__WXMAC__":
- m.Append(ID_USEAA, '&Use AntiAliasing\tCtrl+Shift+A',
+ m.Append(ID_USEAA, '&Use AntiAliasing',
'Use anti-aliased fonts', wx.ITEM_CHECK)
m.AppendSeparator()
- m.Append(ID_SAVEHISTORY, '&Save History\tAlt+Ctrl+A', 'Automatically save history on close', wx.ITEM_CHECK)
+ m.Append(ID_SAVEHISTORY, '&Save History',
+ 'Automatically save history on close', wx.ITEM_CHECK)
self.startupMenu = wx.Menu()
- self.startupMenu.Append(ID_EXECSTARTUPSCRIPT, 'E&xecute Startup Script\tAlt+Ctrl+X', 'Execute Startup Script', wx.ITEM_CHECK)
- self.startupMenu.Append(ID_EDITSTARTUPSCRIPT, '&Edit Startup Script\tAlt+Ctrl+E', 'Edit Startup Script')
+ self.startupMenu.Append(ID_EXECSTARTUPSCRIPT,
+ 'E&xecute Startup Script',
+ 'Execute Startup Script', wx.ITEM_CHECK)
+ self.startupMenu.Append(ID_EDITSTARTUPSCRIPT,
+ '&Edit Startup Script',
+ 'Edit Startup Script')
m.AppendMenu(ID_STARTUP, '&Startup', self.startupMenu, 'Startup Options')
self.settingsMenu = wx.Menu()
- self.settingsMenu.Append(ID_AUTO_SAVESETTINGS, '&Auto Save Settings\tAlt+Ctrl+A', 'Automatically save settings on close', wx.ITEM_CHECK)
- self.settingsMenu.Append(ID_SAVESETTINGS, '&Save Settings\tAlt+Ctrl+S', 'Save settings now')
- self.settingsMenu.Append(ID_DELSETTINGSFILE, '&Revert to default\tAlt+Ctrl+R', 'Revert to the default settings')
+ self.settingsMenu.Append(ID_AUTO_SAVESETTINGS,
+ '&Auto Save Settings',
+ 'Automatically save settings on close', wx.ITEM_CHECK)
+ self.settingsMenu.Append(ID_SAVESETTINGS,
+ '&Save Settings',
+ 'Save settings now')
+ self.settingsMenu.Append(ID_DELSETTINGSFILE,
+ '&Revert to default',
+ 'Revert to the default settings')
m.AppendMenu(ID_SETTINGS, '&Settings', self.settingsMenu, 'Settings Options')
m = self.helpMenu = wx.Menu()
m.Append(ID_HELP, '&Help\tF1', 'Help!')
m.AppendSeparator()
- m.Append(ID_ABOUT, '&About...\tAlt+A', 'About this program')
+ m.Append(ID_ABOUT, '&About...', 'About this program')
b = self.menuBar = wx.MenuBar()
b.Append(self.fileMenu, '&File')
if self.AutoCompActive():
event.Skip()
return
+
# Prevent modification of previously submitted
# commands/responses.
controlDown = event.ControlDown()
endpos = self.GetTextLength()
selecting = self.GetSelectionStart() != self.GetSelectionEnd()
- if controlDown and key in (ord('H'), ord('h')):
+ if controlDown and shiftDown and key in (ord('F'), ord('f')):
li = self.GetCurrentLine()
m = self.MarkerGet(li)
if m & 1<<0:
if self.CallTipActive():
self.CallTipCancel()
self.processLine()
- #Complete Text (from already typed words)
+
+ # Complete Text (from already typed words)
elif shiftDown and key == wx.WXK_RETURN:
self.OnShowCompHistory()
- # Ctrl+Return (Cntrl+Enter) is used to insert a line break.
+
+ # Ctrl+Return (Ctrl+Enter) is used to insert a line break.
elif controlDown and key == wx.WXK_RETURN:
if self.CallTipActive():
self.CallTipCancel()
self.processLine()
else:
self.insertLineBreak()
+
# Let Ctrl-Alt-* get handled normally.
elif controlDown and altDown:
event.Skip()
+
# Clear the current, unexecuted command.
elif key == wx.WXK_ESCAPE:
if self.CallTipActive():
event.Skip()
else:
self.clearCommand()
+
# Increase font size.
- elif controlDown and key in (ord(']'),):
+ elif controlDown and key in (ord(']'), wx.WXK_NUMPAD_ADD):
dispatcher.send(signal='FontIncrease')
+
# Decrease font size.
- elif controlDown and key in (ord('['),):
+ elif controlDown and key in (ord('['), wx.WXK_NUMPAD_SUBTRACT):
dispatcher.send(signal='FontDecrease')
+
# Default font size.
- elif controlDown and key in (ord('='),):
+ elif controlDown and key in (ord('='), wx.WXK_NUMPAD_DIVIDE):
dispatcher.send(signal='FontDefault')
+
# Cut to the clipboard.
elif (controlDown and key in (ord('X'), ord('x'))) \
- or (shiftDown and key == wx.WXK_DELETE):
+ or (shiftDown and key == wx.WXK_DELETE):
self.Cut()
+
# Copy to the clipboard.
elif controlDown and not shiftDown \
- and key in (ord('C'), ord('c'), wx.WXK_INSERT):
+ and key in (ord('C'), ord('c'), wx.WXK_INSERT):
self.Copy()
+
# Copy to the clipboard, including prompts.
elif controlDown and shiftDown \
- and key in (ord('C'), ord('c'), wx.WXK_INSERT):
+ and key in (ord('C'), ord('c'), wx.WXK_INSERT):
self.CopyWithPrompts()
+
# Copy to the clipboard, including prefixed prompts.
elif altDown and not controlDown \
- and key in (ord('C'), ord('c'), wx.WXK_INSERT):
+ and key in (ord('C'), ord('c'), wx.WXK_INSERT):
self.CopyWithPromptsPrefixed()
+
# Home needs to be aware of the prompt.
elif key == wx.WXK_HOME:
home = self.promptPosEnd
self.EnsureCaretVisible()
else:
event.Skip()
+
#
# The following handlers modify text, so we need to see if
# there is a selection that includes text prior to the prompt.
# Don't modify a selection with text prior to the prompt.
elif selecting and key not in NAVKEYS and not self.CanEdit():
pass
+
# Paste from the clipboard.
elif (controlDown and not shiftDown and key in (ord('V'), ord('v'))) \
or (shiftDown and not controlDown and key == wx.WXK_INSERT):
self.Paste()
+
+ # manually invoke AutoComplete and Calltips
elif controlDown and key == wx.WXK_SPACE:
- """AutoComplete and Calltips manually."""
- self.OnCallTipAutoCompleteManually (shiftDown)
+ self.OnCallTipAutoCompleteManually(shiftDown)
+
# Paste from the clipboard, run commands.
elif controlDown and shiftDown and key in (ord('V'), ord('v')):
self.PasteAndRun()
+
# Replace with the previous command from the history buffer.
elif (controlDown and key == wx.WXK_UP) \
or (altDown and key in (ord('P'), ord('p'))):
self.OnHistoryReplace(step=+1)
+
# Replace with the next command from the history buffer.
elif (controlDown and key == wx.WXK_DOWN) \
or (altDown and key in (ord('N'), ord('n'))):
self.OnHistoryReplace(step=-1)
+
# Insert the previous command from the history buffer.
elif (shiftDown and key == wx.WXK_UP) and self.CanEdit():
self.OnHistoryInsert(step=+1)
+
# Insert the next command from the history buffer.
elif (shiftDown and key == wx.WXK_DOWN) and self.CanEdit():
self.OnHistoryInsert(step=-1)
+
# Search up the history for the text in front of the cursor.
elif key == wx.WXK_F8:
self.OnHistorySearch()
+
# Don't backspace over the latest non-continuation prompt.
elif key == wx.WXK_BACK:
if selecting and self.CanEdit():
event.Skip()
elif currpos > self.promptPosEnd:
event.Skip()
+
# Only allow these keys after the latest prompt.
elif key in (wx.WXK_TAB, wx.WXK_DELETE):
if self.CanEdit():
event.Skip()
+
# Don't toggle between insert mode and overwrite mode.
elif key == wx.WXK_INSERT:
pass
+
# Don't allow line deletion.
elif controlDown and key in (ord('L'), ord('l')):
pass
+
# Don't allow line transposition.
elif controlDown and key in (ord('T'), ord('t')):
pass
+
# Basic navigation keys should work anywhere.
elif key in NAVKEYS:
event.Skip()
+
# Protect the readonly portion of the shell.
elif not self.CanEdit():
pass
+
else:
event.Skip()
+
def OnShowCompHistory(self):
"""Show possible autocompletion Words from already typed words."""