]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/Main.py
Added stub for wxIcon(const char **xpm)
[wxWidgets.git] / wxPython / demo / Main.py
index 2fde4eadc1fe82f0025b5bb61fdd2e52ad9c018b..40f9425b844e052327d8f02774e3328187f68b76 100644 (file)
@@ -11,7 +11,7 @@
 # Licence:      wxWindows license
 #----------------------------------------------------------------------------
 
 # Licence:      wxWindows license
 #----------------------------------------------------------------------------
 
-import sys, os, time, string
+import sys, os, time
 from   wxPython.wx import *
 from   wxPython.html import wxHtmlWindow
 
 from   wxPython.wx import *
 from   wxPython.html import wxHtmlWindow
 
@@ -19,25 +19,25 @@ from   wxPython.html import wxHtmlWindow
 
 import images
 
 
 import images
 
+
 #---------------------------------------------------------------------------
 
 
 _treeList = [
     # new stuff
 #---------------------------------------------------------------------------
 
 
 _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',
     ('Base Frames and Dialogs', [
         'wxDialog',
         'wxFrame',
         'wxMDIWindows',
         'wxMiniFrame',
+        'wxWizard',
         ]),
 
     # the common dialogs
         ]),
 
     # the common dialogs
@@ -55,7 +55,7 @@ _treeList = [
         'wxTextEntryDialog',
         ]),
 
         'wxTextEntryDialog',
         ]),
 
-    # dialogs form libraries
+    # dialogs from libraries
     ('More Dialogs', [
         'ErrorDialogs',
         'ImageBrowser',
     ('More Dialogs', [
         'ErrorDialogs',
         'ImageBrowser',
@@ -65,7 +65,6 @@ _treeList = [
 
     # core controls
     ('Core Windows/Controls', [
 
     # core controls
     ('Core Windows/Controls', [
-        'VirtualListCtrl',
         'wxButton',
         'wxCheckBox',
         'wxCheckListBox',
         'wxButton',
         'wxCheckBox',
         'wxCheckListBox',
@@ -76,17 +75,20 @@ _treeList = [
         'wxGrid',
         'wxListBox',
         'wxListCtrl',
         'wxGrid',
         'wxListBox',
         'wxListCtrl',
+        'wxListCtrl_virtual',
+        'wxMenu',
         'wxNotebook',
         'wxPopupWindow',
         'wxRadioBox',
         'wxNotebook',
         'wxPopupWindow',
         'wxRadioBox',
+        'wxRadioButton',
         'wxSashWindow',
         'wxSashWindow',
-        'wxSlider',
         'wxScrolledWindow',
         'wxScrolledWindow',
-        'wxSplitterWindow',
+        'wxSlider',
         'wxSpinButton',
         'wxSpinCtrl',
         'wxSpinButton',
         'wxSpinCtrl',
-        'wxStaticText',
+        'wxSplitterWindow',
         'wxStaticBitmap',
         'wxStaticBitmap',
+        'wxStaticText',
         'wxStatusBar',
         'wxTextCtrl',
         'wxToggleButton',
         'wxStatusBar',
         'wxTextCtrl',
         'wxToggleButton',
@@ -97,6 +99,9 @@ _treeList = [
 
     # controls coming from other librairies
     ('More Windows/Controls', [
 
     # controls coming from other librairies
     ('More Windows/Controls', [
+        #'wxFloatBar',          deprecated
+        #'wxMVCTree',           deprecated
+        #'wxRightTextCtrl',    deprecated as we have wxTE_RIGHT now.
         'ColourSelect',
         'ContextHelp',
         'FancyText',
         'ColourSelect',
         'ContextHelp',
         'FancyText',
@@ -106,19 +111,23 @@ _treeList = [
         'PyCrustWithFilling',
         'SplitTree',
         'TablePrint',
         'PyCrustWithFilling',
         'SplitTree',
         'TablePrint',
+        'Throbber',
         'wxCalendar',
         'wxCalendarCtrl',
         'wxCalendar',
         'wxCalendarCtrl',
+        'wxPyColourChooser',
         'wxDynamicSashWindow',
         'wxEditableListBox',
         'wxEditor',
         'wxDynamicSashWindow',
         'wxEditableListBox',
         'wxEditor',
-        'wxFloatBar',
         'wxHtmlWindow',
         'wxHtmlWindow',
+        'wxIEHtmlWin',
+        'wxIntCtrl',
         'wxLEDNumberCtrl',
         'wxMimeTypesManager',
         'wxLEDNumberCtrl',
         'wxMimeTypesManager',
-        'wxMVCTree',
+        'wxMultiSash',
+        'wxPopupControl',
         'wxStyledTextCtrl_1',
         'wxStyledTextCtrl_2',
         'wxStyledTextCtrl_1',
         'wxStyledTextCtrl_2',
-        'wxRightTextCtrl',
+        'wxTimeCtrl',
         ]),
 
     # How to lay out the controls in a frame/dialog
         ]),
 
     # How to lay out the controls in a frame/dialog
@@ -128,15 +137,19 @@ _treeList = [
         'RowColSizer',
         'Sizers',
         'wxLayoutConstraints',
         'RowColSizer',
         'Sizers',
         'wxLayoutConstraints',
-        'XML_Resource',
+        'wxScrolledPanel',
+        'wxXmlResource',
+        'wxXmlResourceHandler',
         ]),
 
     # ditto
     ('Process and Events', [
         ]),
 
     # ditto
     ('Process and Events', [
+        'EventManager',
         'infoframe',
         'OOR',
         'PythonEvents',
         'Threads',
         'infoframe',
         'OOR',
         'PythonEvents',
         'Threads',
+        'wxKeyEvents',
         'wxProcess',
         'wxTimer',
         ]),
         'wxProcess',
         'wxTimer',
         ]),
@@ -149,7 +162,9 @@ _treeList = [
         ]),
 
     # Images
         ]),
 
     # Images
-    ('Images', [
+    ('Using Images', [
+        'Throbber',
+        'wxArtProvider',
         'wxDragImage',
         'wxImage',
         'wxImageFromStream',
         'wxDragImage',
         'wxImage',
         'wxImageFromStream',
@@ -163,6 +178,7 @@ _treeList = [
         'DrawXXXList',
         'FontEnumerator',
         'PrintFramework',
         'DrawXXXList',
         'FontEnumerator',
         'PrintFramework',
+        'Throbber',
         'Unicode',
         'wxFileHistory',
         'wxJoystick',
         'Unicode',
         'wxFileHistory',
         'wxJoystick',
@@ -178,7 +194,7 @@ _treeList = [
         'wxPlotCanvas',
         ]),
 
         'wxPlotCanvas',
         ]),
 
-    # pyTree, hangman, ... in the samples dir
+
     ('Check out the samples dir too', [
         ]),
 
     ('Check out the samples dir too', [
         ]),
 
@@ -198,14 +214,19 @@ class MyLog(wxPyLog):
         if self.logTime:
             message = time.strftime("%X", time.localtime(timeStamp)) + \
                       ": " + message
         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"""
 
 #---------------------------------------------------------------------------
 
 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('/')))
 
 
 #---------------------------------------------------------------------------
 
 
 #---------------------------------------------------------------------------
@@ -219,6 +240,7 @@ class wxPythonDemo(wxFrame):
 
         self.cwd = os.getcwd()
         self.curOverview = ""
 
         self.cwd = os.getcwd()
         self.curOverview = ""
+        self.window = None
 
         icon = images.getMondrianIcon()
         self.SetIcon(icon)
 
         icon = images.getMondrianIcon()
         self.SetIcon(icon)
@@ -232,9 +254,9 @@ class wxPythonDemo(wxFrame):
             EVT_MENU(self.tbicon, self.TBMENU_RESTORE, self.OnTaskBarActivate)
             EVT_MENU(self.tbicon, self.TBMENU_CLOSE, self.OnTaskBarClose)
 
             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.otherWin = None
-        self.showTip = true
         EVT_IDLE(self, self.OnIdle)
         EVT_CLOSE(self, self.OnCloseWindow)
         EVT_ICONIZE(self, self.OnIconfiy)
         EVT_IDLE(self, self.OnIdle)
         EVT_CLOSE(self, self.OnCloseWindow)
         EVT_ICONIZE(self, self.OnIconfiy)
@@ -250,8 +272,8 @@ class wxPythonDemo(wxFrame):
         EVT_ERASE_BACKGROUND(splitter, EmptyHandler)
         EVT_ERASE_BACKGROUND(splitter2, EmptyHandler)
 
         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()
 
         # Make a File menu
         self.mainmenu = wxMenuBar()
@@ -259,6 +281,7 @@ class wxPythonDemo(wxFrame):
         exitID = wxNewId()
         menu.Append(exitID, 'E&xit\tAlt-X', 'Get the heck outta here!')
         EVT_MENU(self, exitID, self.OnFileExit)
         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
         self.mainmenu.Append(menu, '&File')
 
         # Make a Demo menu
@@ -275,16 +298,33 @@ class wxPythonDemo(wxFrame):
 
         # Make a Help menu
         helpID = wxNewId()
 
         # Make a Help menu
         helpID = wxNewId()
+        findID = wxNewId()
+        findnextID = wxNewId()
         menu = wxMenu()
         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!!!')
         menu.Append(helpID, '&About\tCtrl-H', 'wxPython RULES!!!')
+        wxApp_SetMacAboutMenuItemId(helpID)
         EVT_MENU(self, helpID, self.OnHelpAbout)
         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)
 
         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
 
 
         # Create a TreeCtrl
@@ -292,8 +332,8 @@ class wxPythonDemo(wxFrame):
         self.treeMap = {}
         self.tree = wxTreeCtrl(splitter, tID,
                                style=wxTR_HAS_BUTTONS |
         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")
 
         #self.tree.SetBackgroundColour(wxNamedColour("Pink"))
         root = self.tree.AddRoot("wxPython Overview")
@@ -340,7 +380,8 @@ class wxPythonDemo(wxFrame):
 
         # Set up a TextCtrl on the Demo Code Notebook page
         self.txt = wxTextCtrl(self.nb, -1,
 
         # 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")
 
 
         self.nb.AddPage(self.txt, "Demo Code")
 
 
@@ -354,17 +395,18 @@ class wxPythonDemo(wxFrame):
         # But instead of the above we want to show how to use our own wxLog class
         wxLog_SetActiveTarget(MyLog(self.log))
 
         # 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.
 
         # 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)
         splitter.SetMinimumPaneSize(20)
-        splitter2.SetSashPosition(450, true)
         splitter2.SetMinimumPaneSize(20)
 
 
         splitter2.SetMinimumPaneSize(20)
 
 
@@ -432,6 +474,11 @@ class wxPythonDemo(wxFrame):
         if self.nb.GetPageCount() == 3:
             if self.nb.GetSelection() == 2:
                 self.nb.SetSelection(0)
         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.nb.DeletePage(2)
 
         if itemText == self.overviewText:
@@ -450,15 +497,15 @@ class wxPythonDemo(wxFrame):
                     self.SetOverview(itemText + " Overview", module.overview)
                 finally:
                     wxEndBusyCursor()
                     self.SetOverview(itemText + " Overview", module.overview)
                 finally:
                     wxEndBusyCursor()
+                self.tree.Refresh()
 
                 # in case runTest is modal, make sure things look right...
                 self.nb.Refresh();
 
                 # in case runTest is modal, make sure things look right...
                 self.nb.Refresh();
-                wxYield()
+                wxSafeYield()
 
                 self.window = module.runTest(self, self.nb, self) ###
 
                 self.window = module.runTest(self, self.nb, self) ###
-                if self.window:
+                if self.window is not None:
                     self.nb.AddPage(self.window, 'Demo')
                     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.nb.SetSelection(2)
                     self.nb.Refresh()  # without this wxMac has troubles showing the just added page
 
@@ -486,7 +533,7 @@ class wxPythonDemo(wxFrame):
         self.curOverview = text
         lead = text[:6]
         if lead != '<html>' and lead != '<HTML>':
         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)
 
         self.ovr.SetPage(text)
         self.nb.SetPageText(0, name)
 
@@ -495,17 +542,61 @@ class wxPythonDemo(wxFrame):
     def OnFileExit(self, *event):
         self.Close()
 
     def OnFileExit(self, *event):
         self.Close()
 
-
     def OnHelpAbout(self, event):
         from About import MyAboutBox
         about = MyAboutBox(self)
         about.ShowModal()
         about.Destroy()
 
     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):
 
     #---------------------------------------------
     def OnCloseWindow(self, event):
-        self.dying = true
+        self.dying = True
         self.window = None
         self.mainmenu = None
         if hasattr(self, "tbicon"):
         self.window = None
         self.mainmenu = None
         if hasattr(self, "tbicon"):
@@ -520,10 +611,6 @@ class wxPythonDemo(wxFrame):
             self.window = self.otherWin
             self.otherWin = None
 
             self.window = self.otherWin
             self.otherWin = None
 
-        if self.showTip:
-            self.ShowTip()
-            self.showTip = false
-
 
     #---------------------------------------------
     def ShowTip(self):
 
     #---------------------------------------------
     def ShowTip(self):
@@ -534,6 +621,7 @@ class wxPythonDemo(wxFrame):
             showTip, index = (1, 0)
         if showTip:
             tp = wxCreateFileTipProvider(opj("data/tips.txt"), index)
             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) ))
             showTip = wxShowTip(self, tp)
             index = tp.GetCurrentTip()
             open(opj("data/showTips"), "w").write(str( (showTip, index) ))
@@ -553,9 +641,9 @@ class wxPythonDemo(wxFrame):
     #---------------------------------------------
     def OnTaskBarActivate(self, evt):
         if self.IsIconized():
     #---------------------------------------------
     def OnTaskBarActivate(self, evt):
         if self.IsIconized():
-            self.Iconize(false)
+            self.Iconize(False)
         if not self.IsShown():
         if not self.IsShown():
-            self.Show(true)
+            self.Show(True)
         self.Raise()
 
     #---------------------------------------------
         self.Raise()
 
     #---------------------------------------------
@@ -600,12 +688,13 @@ class MySplashScreen(wxSplashScreen):
         bmp = wxImage(opj("bitmaps/splash.gif")).ConvertToBitmap()
         wxSplashScreen.__init__(self, bmp,
                                 wxSPLASH_CENTRE_ON_SCREEN|wxSPLASH_TIMEOUT,
         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)")
         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...
 
 
         evt.Skip()  # Make sure the default handler runs too...
 
 
@@ -615,10 +704,15 @@ class MyApp(wxApp):
         Create and show the splash screen.  It will then create and show
         the main frame when it is time to do so.
         """
         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()
         wxInitAllImageHandlers()
         splash = MySplashScreen()
         splash.Show()
-        return true
+        return True