]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/wxPython/demo/Main.py
Makefile for mingw/gcc-2.95
[wxWidgets.git] / utils / wxPython / demo / Main.py
index a5e15feb42b624dc63797da9a76c53273cdcbbb4..175b0c4e151d38a04f28b14b320dc6d3adee11b0 100644 (file)
@@ -23,7 +23,8 @@ _treeList = [
 
     ('Miscellaneous Windows', ['wxGrid', 'wxSashWindow',
                                'wxScrolledWindow', 'wxSplitterWindow',
-                               'wxStatusBar', 'wxToolBar', 'wxNotebook']),
+                               'wxStatusBar', 'wxToolBar', 'wxNotebook',
+                               'wxHtmlWindow']),
 
     ('Common Dialogs', ['wxColourDialog', 'wxDirDialog', 'wxFileDialog',
                         'wxSingleChoiceDialog', 'wxTextEntryDialog',
@@ -38,12 +39,12 @@ _treeList = [
     ('Window Layout', ['wxLayoutConstraints', 'Sizers']),
 
     ('Miscellaneous', ['wxTimer', 'wxGLCanvas', 'DialogUnits', 'wxImage',
-                      'PrintFramework']),
+                      'PrintFramework', 'wxOGL']),
 
     ('wxPython Library', ['Sizers', 'Layoutf', 'wxScrolledMessageDialog',
                           'wxMultipleChoiceDialog', 'wxPlotCanvas']),
 
-    ('Cool Contribs', ['pyTree', 'hangman', 'SlashDot']),
+    ('Cool Contribs', ['pyTree', 'hangman', 'SlashDot', 'XMLtreeview']),
 
     ]
 
@@ -71,34 +72,42 @@ class wxPythonDemo(wxFrame):
         # Make a File menu
         self.mainmenu = wxMenuBar()
         menu = wxMenu()
-        mID = NewId()
+        mID = wxNewId()
         menu.Append(mID, 'E&xit', 'Get the heck outta here!')
         EVT_MENU(self, mID, self.OnFileExit)
         self.mainmenu.Append(menu, '&File')
 
+        # Make a Demo menu
+        menu = wxMenu()
+        for item in _treeList:
+            submenu = wxMenu()
+            for childItem in item[1]:
+                mID = wxNewId()
+                submenu.Append(mID, childItem)
+                EVT_MENU(self, mID, self.OnDemoMenu)
+            menu.AppendMenu(wxNewId(), item[0], submenu)
+        self.mainmenu.Append(menu, '&Demo')
+
+
         # Make a Help menu
-        mID = NewId()
+        mID = wxNewId()
         menu = wxMenu()
         menu.Append(mID, '&About', 'wxPython RULES!!!')
         EVT_MENU(self, mID, self.OnHelpAbout)
         self.mainmenu.Append(menu, '&Help')
         self.SetMenuBar(self.mainmenu)
 
-        selectedDemo = None
-        selectedDemoName = "Nada"
-        if len(sys.argv) == 2:
-            selectedDemoName = sys.argv[1]
 
         # Create a TreeCtrl
-        tID = NewId()
+        tID = wxNewId()
+        self.treeMap = {}
         self.tree = wxTreeCtrl(splitter, tID)
         root = self.tree.AddRoot("Overview")
         for item in _treeList:
             child = self.tree.AppendItem(root, item[0])
             for childItem in item[1]:
                 theDemo = self.tree.AppendItem(child, childItem)
-                if childItem == selectedDemoName:
-                    selectedDemo = theDemo
+                self.treeMap[childItem] = theDemo
 
         self.tree.Expand(root)
         EVT_TREE_ITEM_EXPANDED   (self.tree, tID, self.OnItemExpanded)
@@ -109,21 +118,20 @@ class wxPythonDemo(wxFrame):
         self.nb = wxNotebook(splitter2, -1)
 
         # Set up a TextCtrl on the Overview Notebook page
-        self.ovr = wxTextCtrl(self.nb, -1, '', wxDefaultPosition, wxDefaultSize,
-                              wxTE_MULTILINE|wxTE_READONLY)
+        self.ovr = wxTextCtrl(self.nb, -1, style = wxTE_MULTILINE|wxTE_READONLY)
         self.nb.AddPage(self.ovr, "Overview")
 
 
         # Set up a TextCtrl on the Demo Code Notebook page
-        self.txt = wxTextCtrl(self.nb, -1, '', wxDefaultPosition, wxDefaultSize,
-                              wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
+        self.txt = wxTextCtrl(self.nb, -1,
+                              style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
         self.txt.SetFont(wxFont(9, wxMODERN, wxNORMAL, wxNORMAL, false))
         self.nb.AddPage(self.txt, "Demo Code")
 
 
         # Set up a log on the View Log Notebook page
-        self.log = wxTextCtrl(splitter2, -1, '', wxDefaultPosition, wxDefaultSize,
-                              wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
+        self.log = wxTextCtrl(splitter2, -1,
+                              style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
         (w, self.charHeight) = self.log.GetTextExtent('X')
         #self.WriteText('wxPython Demo Log:\n')
 
@@ -143,9 +151,16 @@ class wxPythonDemo(wxFrame):
         # select initial items
         self.nb.SetSelection(0)
         self.tree.SelectItem(root)
-        if selectedDemo:
-            self.tree.SelectItem(selectedDemo)
-            self.tree.EnsureVisible(selectedDemo)
+
+        if len(sys.argv) == 2:
+            try:
+                selectedDemo = self.treeMap[sys.argv[1]]
+            except:
+                selectedDemo = None
+            if selectedDemo:
+                self.tree.SelectItem(selectedDemo)
+                self.tree.EnsureVisible(selectedDemo)
+
 
     #---------------------------------------------
     def WriteText(self, text):
@@ -153,7 +168,9 @@ class wxPythonDemo(wxFrame):
         w, h = self.log.GetClientSizeTuple()
         numLines = h/self.charHeight
         x, y = self.log.PositionToXY(self.log.GetLastPosition())
-        self.log.ShowPosition(self.log.XYToPosition(x, y-numLines+1))
+        self.log.ShowPosition(self.log.XYToPosition(x, y-numLines))
+        ##self.log.ShowPosition(self.log.GetLastPosition())
+        self.log.SetInsertionPointEnd()
 
     def write(self, txt):
         self.WriteText(txt)
@@ -187,6 +204,7 @@ class wxPythonDemo(wxFrame):
             #self.nb.ResizeChildren();
             self.nb.Refresh();
             #wxYield()
+            self.window = None
 
         else:
             if os.path.exists(itemText + '.py'):
@@ -198,15 +216,16 @@ class wxPythonDemo(wxFrame):
                 self.nb.Refresh();
                 wxYield()
 
-                window = module.runTest(self, self.nb, self)
-                if window:
-                    self.nb.AddPage(window, 'Demo')
+                self.window = module.runTest(self, self.nb, self)
+                if self.window:
+                    self.nb.AddPage(self.window, 'Demo')
                     self.nb.SetSelection(2)
                     self.nb.ResizeChildren();
 
             else:
                 self.ovr.Clear()
                 self.txt.Clear()
+                self.window = None
 
 
     #---------------------------------------------
@@ -217,7 +236,7 @@ class wxPythonDemo(wxFrame):
         #    self.txt.WriteText("Cannot open %s file." % filename)
         try:
             self.txt.SetValue(open(filename).read())
-        except IOException:
+        except IOError:
             self.txt.WriteText("Cannot open %s file." % filename)
 
 
@@ -239,13 +258,14 @@ class wxPythonDemo(wxFrame):
 
 
     def OnHelpAbout(self, event):
-        about = wxMessageDialog(self,
-                                "wxPython is a Python extension module that\n"
-                                "encapsulates the wxWindows GUI classes.\n\n"
-                                "This demo shows off some of the capabilities\n"
-                                "of wxPython.\n\n"
-                                "          Developed by Robin Dunn",
-                               "About wxPython", wxOK)
+        #about = wxMessageDialog(self,
+        #                        "wxPython is a Python extension module that\n"
+        #                        "encapsulates the wxWindows GUI classes.\n\n"
+        #                        "This demo shows off some of the capabilities\n"
+        #                        "of wxPython.\n\n"
+        #                        "          Developed by Robin Dunn",
+        #                       "About wxPython", wxOK)
+        about = MyAboutBox(self)
         about.ShowModal()
         about.Destroy()
 
@@ -253,14 +273,66 @@ class wxPythonDemo(wxFrame):
     #---------------------------------------------
     def OnCloseWindow(self, event):
         self.dying = true
+        self.window = None
         self.Destroy()
 
     #---------------------------------------------
     def OnIdle(self, event):
         if self.otherWin:
             self.otherWin.Raise()
+            self.window = self.otherWin
             self.otherWin = None
 
+    #---------------------------------------------
+    def OnDemoMenu(self, event):
+        print event.GetId(), self.mainmenu.GetLabel(event.GetId())
+        try:
+            selectedDemo = self.treeMap[self.mainmenu.GetLabel(event.GetId())]
+        except:
+            selectedDemo = None
+        if selectedDemo:
+            self.tree.SelectItem(selectedDemo)
+            self.tree.EnsureVisible(selectedDemo)
+
+
+
+#---------------------------------------------------------------------------
+#---------------------------------------------------------------------------
+
+class MyAboutBox(wxDialog):
+    text = '''
+<html>
+<body bgcolor="#AC76DE">
+<center><table bgcolor="#458154" width="100%%" cellspacing="0" cellpadding="0" border="1">
+<tr>
+    <td align="center"><h1>wxPython %s</h1></td>
+</tr>
+</table>
+
+<p><b>wxPython</b> is a Python extension module that
+encapsulates the wxWindows GUI classes.</p>
+
+<p>This demo shows off some of the capabilities
+of <b>wxPython</b>.  Select items from the menu or tree control,
+sit back and enjoy.  Be sure to take a peek at the source code for each
+demo item so you can learn how to use the classes yourself.</p>
+
+<p><b>wxPython</b> is brought to you by <b>Robin Dunn</b> and<br>
+<b>Total Control Software</b>, copyright 1999.</p>
+
+<p><font size="-1">Please see <i>license.txt</i> for licensing information.</font></p>
+</center>
+</body>
+</html>
+'''
+    def __init__(self, parent):
+        from wxPython.html import *
+        wxDialog.__init__(self, parent, -1, 'About wxPython')
+        self.html = wxHtmlWindow(self, -1, wxPoint(5,5), wxSize(400, 350))
+        self.html.SetPage(self.text % wx.__version__)
+        wxButton(self, wxID_OK, 'OK', wxPoint(5, 365)).SetDefault()
+        self.Fit()
+
 
 #---------------------------------------------------------------------------
 #---------------------------------------------------------------------------