# Licence: wxWindows license
#----------------------------------------------------------------------------
-import sys, os, time, string
+import sys, os, time
from wxPython.wx import *
from wxPython.html import wxHtmlWindow
-import images
+##from wxPython.stc import *
-#---------------------------------------------------------------------------
+import images
-## _treeList = [
-## ('New since last release', ['wxGenericDirCtrl',
-## 'wxImageFromStream',
-## 'RowColSizer',
-## 'Unicode',
-## 'wxFileHistory',
-## ]),
-
-## ('Windows', ['wxFrame', 'wxDialog', 'wxMiniFrame',
-## 'wxGrid', 'wxSashWindow',
-## 'wxScrolledWindow', 'wxSplitterWindow',
-## 'wxStatusBar', 'wxNotebook',
-## 'wxHtmlWindow',
-## 'wxStyledTextCtrl_1', 'wxStyledTextCtrl_2',
-## 'wxPopupWindow',
-## 'wxDynamicSashWindow',
-## ]),
-
-## ('Common Dialogs', ['wxColourDialog', 'wxDirDialog', 'wxFileDialog',
-## 'wxSingleChoiceDialog', 'wxTextEntryDialog',
-## 'wxFontDialog', 'wxPageSetupDialog', 'wxPrintDialog',
-## 'wxMessageDialog', 'wxProgressDialog', 'wxFindReplaceDialog',
-## ]),
-
-## ('Controls', ['wxButton', 'wxCheckBox', 'wxCheckListBox', 'wxChoice',
-## 'wxComboBox', 'wxGauge', 'wxListBox', 'wxListCtrl', 'VirtualListCtrl',
-## 'wxTextCtrl',
-## 'wxTreeCtrl', 'wxSpinButton', 'wxSpinCtrl', 'wxStaticText',
-## 'wxStaticBitmap', 'wxRadioBox', 'wxSlider', 'wxToolBar',
-## 'wxCalendarCtrl', 'wxToggleButton',
-## 'wxEditableListBox', 'wxLEDNumberCtrl',
-## ]),
-
-## ('Window Layout', ['wxLayoutConstraints', 'LayoutAnchors', 'Sizers', 'XML_Resource',
-## 'RowColSizer',
-## ]),
-
-## ('Miscellaneous', [ 'DragAndDrop', 'CustomDragAndDrop', 'URLDragAndDrop',
-## 'FontEnumerator',
-## 'wxTimer', 'wxValidator', 'wxGLCanvas', 'DialogUnits',
-## 'wxImage', 'wxMask', 'PrintFramework', 'wxOGL',
-## 'PythonEvents', 'Threads',
-## 'ActiveXWrapper_Acrobat', 'ActiveXWrapper_IE',
-## 'wxDragImage', "wxProcess", "FancyText", "OOR", "wxWave",
-## 'wxJoystick', 'DrawXXXList', 'ErrorDialogs', 'wxMimeTypesManager',
-## 'ContextHelp', 'SplitTree', 'Unicode', 'wxFileHistory',
-## ]),
-
-## ('wxPython Library', ['Layoutf', 'wxScrolledMessageDialog',
-## 'wxMultipleChoiceDialog', 'wxPlotCanvas', 'wxFloatBar',
-## 'wxCalendar', 'wxMVCTree', 'wxVTKRenderWindow',
-## 'FileBrowseButton', 'GenericButtons', 'wxEditor',
-## 'ColourSelect', 'ImageBrowser',
-## 'infoframe', 'ColourDB', 'PyCrust', 'PyCrustWithFilling',
-## 'TablePrint',
-## 'wxRightTextCtrl',
-## ]),
-
-## ('Cool Contribs', ['pyTree', 'hangman',
-## #'SlashDot',
-## 'XMLtreeview'
-## ]),
-
-## ]
+#---------------------------------------------------------------------------
_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',
- 'wxTimer',
'wxToggleButton',
'wxToolBar',
'wxTreeCtrl',
# 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',
'ActiveXWrapper_IE',
'wxGLCanvas',
'wxPlotCanvas',
- 'wxVTKRenderWindow',
]),
- # 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
os.chdir(demoPath)
except:
pass
- app = MyApp(0)
+ app = MyApp(wxPlatform == "__WXMAC__")
app.MainLoop()