# Licence: wxWindows license
#----------------------------------------------------------------------------
-import sys, os, time, string
+import sys, os, time
from wxPython.wx import *
from wxPython.html import wxHtmlWindow
import images
+
#---------------------------------------------------------------------------
_treeList = [
# new stuff
- ('New since last release', [
- 'RowColSizer',
- 'Unicode',
- 'wxFileHistory',
- 'wxGenericDirCtrl',
- 'wxImageFromStream',
+ ('Recent Additions', [
+ 'wxIntCtrl',
+ 'wxPyColourChooser',
+ 'wxScrolledPanel',
]),
- # managed windows == things with a caption you can close
+ # managed windows == things with a (optional) caption you can close
('Base Frames and Dialogs', [
'wxDialog',
'wxFrame',
'wxMDIWindows',
'wxMiniFrame',
+ 'wxWizard',
]),
# the common dialogs
'wxTextEntryDialog',
]),
- # dialogs form libraries
+ # dialogs from libraries
('More Dialogs', [
'ErrorDialogs',
'ImageBrowser',
# core controls
('Core Windows/Controls', [
- 'VirtualListCtrl',
'wxButton',
'wxCheckBox',
'wxCheckListBox',
'wxGrid',
'wxListBox',
'wxListCtrl',
+ 'wxListCtrl_virtual',
+ 'wxMenu',
'wxNotebook',
'wxPopupWindow',
'wxRadioBox',
+ 'wxRadioButton',
'wxSashWindow',
- 'wxSlider',
'wxScrolledWindow',
- 'wxSplitterWindow',
+ 'wxSlider',
'wxSpinButton',
'wxSpinCtrl',
- 'wxStaticText',
+ 'wxSplitterWindow',
'wxStaticBitmap',
+ 'wxStaticText',
'wxStatusBar',
'wxTextCtrl',
'wxToggleButton',
# controls coming from other librairies
('More Windows/Controls', [
+ #'wxFloatBar', deprecated
+ #'wxMVCTree', deprecated
+ #'wxRightTextCtrl', deprecated as we have wxTE_RIGHT now.
'ColourSelect',
'ContextHelp',
'FancyText',
'PyCrustWithFilling',
'SplitTree',
'TablePrint',
+ 'Throbber',
'wxCalendar',
'wxCalendarCtrl',
+ 'wxPyColourChooser',
'wxDynamicSashWindow',
'wxEditableListBox',
'wxEditor',
- 'wxFloatBar',
'wxHtmlWindow',
+ 'wxIEHtmlWin',
+ 'wxIntCtrl',
'wxLEDNumberCtrl',
'wxMimeTypesManager',
- 'wxMVCTree',
+ 'wxMultiSash',
+ 'wxPopupControl',
'wxStyledTextCtrl_1',
'wxStyledTextCtrl_2',
- 'wxRightTextCtrl',
+ 'wxTimeCtrl',
]),
# How to lay out the controls in a frame/dialog
'RowColSizer',
'Sizers',
'wxLayoutConstraints',
- 'XML_Resource',
+ 'wxScrolledPanel',
+ 'wxXmlResource',
+ 'wxXmlResourceHandler',
]),
# ditto
('Process and Events', [
+ 'EventManager',
'infoframe',
'OOR',
'PythonEvents',
'Threads',
+ 'wxKeyEvents',
'wxProcess',
'wxTimer',
]),
]),
# Images
- ('Images', [
+ ('Using Images', [
+ 'Throbber',
+ 'wxArtProvider',
'wxDragImage',
'wxImage',
'wxImageFromStream',
'DrawXXXList',
'FontEnumerator',
'PrintFramework',
+ 'Throbber',
'Unicode',
'wxFileHistory',
'wxJoystick',
'wxPlotCanvas',
]),
- # pyTree, hangman, ... in the samples dir
+
('Check out the samples dir too', [
]),
if self.logTime:
message = time.strftime("%X", time.localtime(timeStamp)) + \
": " + message
- self.tc.AppendText(message + '\n')
+ if self.tc:
+ self.tc.AppendText(message + '\n')
+
+class MyTP(wxPyTipProvider):
+ def GetTip(self):
+ return "This is my tip"
#---------------------------------------------------------------------------
def opj(path):
"""Convert paths to the platform-specific separator"""
- return apply(os.path.join, tuple(string.split(path, '/')))
+ return apply(os.path.join, tuple(path.split('/')))
#---------------------------------------------------------------------------
self.cwd = os.getcwd()
self.curOverview = ""
+ self.window = None
icon = images.getMondrianIcon()
self.SetIcon(icon)
EVT_MENU(self.tbicon, self.TBMENU_RESTORE, self.OnTaskBarActivate)
EVT_MENU(self.tbicon, self.TBMENU_CLOSE, self.OnTaskBarClose)
+ wxCallAfter(self.ShowTip)
self.otherWin = None
- self.showTip = true
EVT_IDLE(self, self.OnIdle)
EVT_CLOSE(self, self.OnCloseWindow)
EVT_ICONIZE(self, self.OnIconfiy)
EVT_ERASE_BACKGROUND(splitter, EmptyHandler)
EVT_ERASE_BACKGROUND(splitter2, EmptyHandler)
- # Prevent TreeCtrl from displaying all items after destruction when true
- self.dying = false
+ # Prevent TreeCtrl from displaying all items after destruction when True
+ self.dying = False
# Make a File menu
self.mainmenu = wxMenuBar()
exitID = wxNewId()
menu.Append(exitID, 'E&xit\tAlt-X', 'Get the heck outta here!')
EVT_MENU(self, exitID, self.OnFileExit)
+ wxApp_SetMacExitMenuItemId(exitID)
self.mainmenu.Append(menu, '&File')
# Make a Demo menu
# Make a Help menu
helpID = wxNewId()
+ findID = wxNewId()
+ findnextID = wxNewId()
menu = wxMenu()
+ menu.Append(findID, '&Find\tCtrl-F', 'Find in the Demo Code')
+ menu.Append(findnextID, 'Find &Next\tF3', 'Find Next')
+ menu.AppendSeparator()
menu.Append(helpID, '&About\tCtrl-H', 'wxPython RULES!!!')
+ wxApp_SetMacAboutMenuItemId(helpID)
EVT_MENU(self, helpID, self.OnHelpAbout)
+ EVT_MENU(self, findID, self.OnHelpFind)
+ EVT_MENU(self, findnextID, self.OnFindNext)
+ EVT_COMMAND_FIND(self, -1, self.OnFind)
+ EVT_COMMAND_FIND_NEXT(self, -1, self.OnFind)
+ EVT_COMMAND_FIND_CLOSE(self, -1 , self.OnFindClose)
self.mainmenu.Append(menu, '&Help')
self.SetMenuBar(self.mainmenu)
- # set the menu accellerator table...
- aTable = wxAcceleratorTable([(wxACCEL_ALT, ord('X'), exitID),
- (wxACCEL_CTRL, ord('H'), helpID)])
- self.SetAcceleratorTable(aTable)
+ self.finddata = wxFindReplaceData()
+
+ if 0:
+ # This is another way to set Accelerators, in addition to
+ # using the '\t<key>' syntax in the menu items.
+ aTable = wxAcceleratorTable([(wxACCEL_ALT, ord('X'), exitID),
+ (wxACCEL_CTRL, ord('H'), helpID),
+ (wxACCEL_CTRL, ord('F'), findID),
+ (wxACCEL_NORMAL, WXK_F3, findnextID)])
+ self.SetAcceleratorTable(aTable)
# Create a TreeCtrl
self.treeMap = {}
self.tree = wxTreeCtrl(splitter, tID,
style=wxTR_HAS_BUTTONS |
- wxTR_EDIT_LABELS |
- wxTR_HAS_VARIABLE_ROW_HEIGHT)
+ wxTR_HAS_VARIABLE_ROW_HEIGHT
+ )
#self.tree.SetBackgroundColour(wxNamedColour("Pink"))
root = self.tree.AddRoot("wxPython Overview")
# Set up a TextCtrl on the Demo Code Notebook page
self.txt = wxTextCtrl(self.nb, -1,
- style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
+ style = wxTE_MULTILINE|wxTE_READONLY|
+ wxHSCROLL|wxTE_RICH2|wxTE_NOHIDESEL)
self.nb.AddPage(self.txt, "Demo Code")
# But instead of the above we want to show how to use our own wxLog class
wxLog_SetActiveTarget(MyLog(self.log))
+ # for serious debugging
+ #wxLog_SetActiveTarget(wxLogStderr())
+ #wxLog_SetTraceMask(wxTraceMessages)
+ self.Show(True)
- self.Show(true)
# add the windows to the splitter and split it.
- splitter2.SplitHorizontally(self.nb, self.log)
- splitter.SplitVertically(self.tree, splitter2)
+ splitter2.SplitHorizontally(self.nb, self.log, 450)
+ splitter.SplitVertically(self.tree, splitter2, 180)
- splitter.SetSashPosition(180, true)
splitter.SetMinimumPaneSize(20)
- splitter2.SetSashPosition(450, true)
splitter2.SetMinimumPaneSize(20)
if self.nb.GetPageCount() == 3:
if self.nb.GetSelection() == 2:
self.nb.SetSelection(0)
+ # inform the window that it's time to quit if it cares
+ if self.window is not None:
+ if hasattr(self.window, "ShutdownDemo"):
+ self.window.ShutdownDemo()
+ wxSafeYield() # in case the page has pending events
self.nb.DeletePage(2)
if itemText == self.overviewText:
self.SetOverview(itemText + " Overview", module.overview)
finally:
wxEndBusyCursor()
+ self.tree.Refresh()
# in case runTest is modal, make sure things look right...
self.nb.Refresh();
- wxYield()
+ wxSafeYield()
self.window = module.runTest(self, self.nb, self) ###
- if self.window:
+ if self.window is not None:
self.nb.AddPage(self.window, 'Demo')
- #wxYield() TODO: Is this still needed?
self.nb.SetSelection(2)
self.nb.Refresh() # without this wxMac has troubles showing the just added page
self.curOverview = text
lead = text[:6]
if lead != '<html>' and lead != '<HTML>':
- text = string.join(string.split(text, '\n'), '<br>')
+ text = '<br>'.join(text.split('\n'))
self.ovr.SetPage(text)
self.nb.SetPageText(0, name)
def OnFileExit(self, *event):
self.Close()
-
def OnHelpAbout(self, event):
from About import MyAboutBox
about = MyAboutBox(self)
about.ShowModal()
about.Destroy()
+ def OnHelpFind(self, event):
+ self.nb.SetSelection(1)
+ self.finddlg = wxFindReplaceDialog(self, self.finddata, "Find",
+ wxFR_NOUPDOWN |
+ wxFR_NOMATCHCASE |
+ wxFR_NOWHOLEWORD)
+ self.finddlg.Show(True)
+
+ def OnFind(self, event):
+ self.nb.SetSelection(1)
+ end = self.txt.GetLastPosition()
+ textstring = self.txt.GetRange(0, end).lower()
+ start = self.txt.GetSelection()[1]
+ findstring = self.finddata.GetFindString().lower()
+ loc = textstring.find(findstring, start)
+ if loc == -1 and start != 0:
+ # string not found, start at beginning
+ start = 0
+ loc = textstring.find(findstring, start)
+ if loc == -1:
+ dlg = wxMessageDialog(self, 'Find String Not Found',
+ 'Find String Not Found in Demo File',
+ wxOK | wxICON_INFORMATION)
+ dlg.ShowModal()
+ dlg.Destroy()
+ if self.finddlg:
+ if loc == -1:
+ self.finddlg.SetFocus()
+ return
+ else:
+ self.finddlg.Destroy()
+ self.txt.SetSelection(loc, loc + len(findstring))
+ self.txt.ShowPosition(loc)
+
+
+
+ def OnFindNext(self, event):
+ if self.finddata.GetFindString():
+ self.OnFind(event)
+ else:
+ self.OnHelpFind(event)
+
+ def OnFindClose(self, event):
+ event.GetDialog().Destroy()
+
#---------------------------------------------
def OnCloseWindow(self, event):
- self.dying = true
+ self.dying = True
self.window = None
self.mainmenu = None
if hasattr(self, "tbicon"):
self.window = self.otherWin
self.otherWin = None
- if self.showTip:
- self.ShowTip()
- self.showTip = false
-
#---------------------------------------------
def ShowTip(self):
showTip, index = (1, 0)
if showTip:
tp = wxCreateFileTipProvider(opj("data/tips.txt"), index)
+ ##tp = MyTP(0)
showTip = wxShowTip(self, tp)
index = tp.GetCurrentTip()
open(opj("data/showTips"), "w").write(str( (showTip, index) ))
#---------------------------------------------
def OnTaskBarActivate(self, evt):
if self.IsIconized():
- self.Iconize(false)
+ self.Iconize(False)
if not self.IsShown():
- self.Show(true)
+ self.Show(True)
self.Raise()
#---------------------------------------------
bmp = wxImage(opj("bitmaps/splash.gif")).ConvertToBitmap()
wxSplashScreen.__init__(self, bmp,
wxSPLASH_CENTRE_ON_SCREEN|wxSPLASH_TIMEOUT,
- 4000, None, -1)
+ 4000, None, -1,
+ style = wxSIMPLE_BORDER|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP)
EVT_CLOSE(self, self.OnClose)
def OnClose(self, evt):
frame = wxPythonDemo(None, -1, "wxPython: (A Demonstration)")
- frame.Show(true)
+ frame.Show()
evt.Skip() # Make sure the default handler runs too...
Create and show the splash screen. It will then create and show
the main frame when it is time to do so.
"""
+
+ #import locale
+ #self.locale = wxLocale(wxLANGUAGE_FRENCH)
+ #locale.setlocale(locale.LC_ALL, 'fr')
+
wxInitAllImageHandlers()
splash = MySplashScreen()
splash.Show()
- return true
+ return True