X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c35bf68e332d5a491a6ab4373ea784fce83a1518..c1dda21b64f300d89cbc084802082d37c694e971:/wxPython/demo/Main.py diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index 2b441e9dfc..c5ec3fa129 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -47,13 +47,6 @@ import images _treeList = [ # new stuff ('Recent Additions/Updates', [ - 'AnalogClock', - 'AUI_DockingWindowMgr', - 'AUI_Notebook', - 'CheckListCtrlMixin', - 'ComboTreeBox', - 'Pickers', - 'PseudoDC', 'RichTextCtrl', 'Treebook', 'Toolbook', @@ -66,14 +59,23 @@ _treeList = [ 'FlatNotebook', 'CustomTreeCtrl', 'AboutBox', - 'AnimateCtrl', 'AlphaDrawing', 'GraphicsContext', + 'CollapsiblePane', + 'ComboCtrl', + 'OwnerDrawnComboBox', + 'BitmapComboBox', + 'I18N', + 'Img2PyArtProvider', + 'SearchCtrl', + 'SizedControls', + 'AUI_MDI', ]), # managed windows == things with a (optional) caption you can close ('Frames and Dialogs', [ 'AUI_DockingWindowMgr', + 'AUI_MDI', 'Dialog', 'Frame', 'MDIWindows', @@ -126,6 +128,7 @@ _treeList = [ 'RadioButton', 'SashWindow', 'ScrolledWindow', + 'SearchCtrl', 'Slider', 'SpinButton', 'SpinCtrl', @@ -173,10 +176,12 @@ _treeList = [ 'ActiveX_FlashWindow', 'ActiveX_IEHtmlWindow', 'ActiveX_PDFWindow', - #'RightTextCtrl', deprecated as we have wxTE_RIGHT now. + 'BitmapComboBox', 'Calendar', 'CalendarCtrl', 'CheckListCtrlMixin', + 'CollapsiblePane', + 'ComboCtrl', 'ContextHelp', 'DatePickerCtrl', 'DynamicSashWindow', @@ -195,6 +200,7 @@ _treeList = [ 'MaskedNumCtrl', 'MediaCtrl', 'MultiSplitterWindow', + 'OwnerDrawnComboBox', 'Pickers', 'PyCrust', 'PyPlot', @@ -219,6 +225,7 @@ _treeList = [ 'Layoutf', 'RowColSizer', 'ScrolledPanel', + 'SizedControls', 'Sizers', 'XmlResource', 'XmlResourceHandler', @@ -255,6 +262,7 @@ _treeList = [ 'Image', 'ImageAlpha', 'ImageFromStream', + 'Img2PyArtProvider', 'Mask', 'RawBitmapAccess', 'Throbber', @@ -271,6 +279,7 @@ _treeList = [ 'FontEnumerator', 'GraphicsContext', 'GLCanvas', + 'I18N', 'Joystick', 'MimeTypesManager', 'MouseGestures', @@ -990,7 +999,7 @@ class DemoErrorPanel(wx.Panel): boxInfoGrid = wx.FlexGridSizer(0, 2, 0, 0) textFlags = wx.ALIGN_RIGHT | wx.LEFT | wx.RIGHT | wx.TOP boxInfoGrid.Add(wx.StaticText(self, -1, "Type: "), 0, textFlags, 5 ) - boxInfoGrid.Add(wx.StaticText(self, -1, demoError.exception_type) , 0, textFlags, 5 ) + boxInfoGrid.Add(wx.StaticText(self, -1, str(demoError.exception_type)) , 0, textFlags, 5 ) boxInfoGrid.Add(wx.StaticText(self, -1, "Details: ") , 0, textFlags, 5 ) boxInfoGrid.Add(wx.StaticText(self, -1, demoError.exception_details) , 0, textFlags, 5 ) boxInfoSizer.Add(boxInfoGrid, 0, wx.ALIGN_CENTRE | wx.ALL, 5 ) @@ -1199,14 +1208,14 @@ class wxPythonDemo(wx.Frame): wx.ITEM_CHECK) self.Bind(wx.EVT_MENU, self.OnToggleRedirect, item) - item = menu.Append(-1, 'E&xit\tAlt-X', 'Get the heck outta here!') - self.Bind(wx.EVT_MENU, self.OnFileExit, item) - wx.App.SetMacExitMenuItemId(item.GetId()) + exitItem = menu.Append(-1, 'E&xit\tCtrl-Q', 'Get the heck outta here!') + self.Bind(wx.EVT_MENU, self.OnFileExit, exitItem) + wx.App.SetMacExitMenuItemId(exitItem.GetId()) self.mainmenu.Append(menu, '&File') # Make a Demo menu menu = wx.Menu() - for item in _treeList: + for item in _treeList[:-1]: submenu = wx.Menu() for childItem in item[1]: mi = submenu.Append(-1, childItem) @@ -1223,11 +1232,14 @@ class wxPythonDemo(wx.Frame): shellItem = menu.Append(-1, 'Open Py&Shell Window\tF5', 'An interactive interpreter window with the demo app and frame objects in the namesapce') + inspToolItem = menu.Append(-1, 'Open &Widget Inspector\tF6', + 'A tool that lets you browse the live widgets and sizers in an application') menu.AppendSeparator() helpItem = menu.Append(-1, '&About wxPython Demo', 'wxPython RULES!!!') wx.App.SetMacAboutMenuItemId(helpItem.GetId()) self.Bind(wx.EVT_MENU, self.OnOpenShellWindow, shellItem) + self.Bind(wx.EVT_MENU, self.OnOpenWidgetInspector, inspToolItem) self.Bind(wx.EVT_MENU, self.OnHelpAbout, helpItem) self.Bind(wx.EVT_MENU, self.OnHelpFind, findItem) self.Bind(wx.EVT_MENU, self.OnFindNext, findnextItem) @@ -1242,40 +1254,40 @@ class wxPythonDemo(wx.Frame): self.finddata = wx.FindReplaceData() self.finddata.SetFlags(wx.FR_DOWN) - if 0: + if False: # This is another way to set Accelerators, in addition to # using the '\t' syntax in the menu items. - aTable = wx.AcceleratorTable([(wx.ACCEL_ALT, ord('X'), exitID), - (wx.ACCEL_CTRL, ord('H'), helpID), - (wx.ACCEL_CTRL, ord('F'), findID), - (wx.ACCEL_NORMAL, WXK_F3, findnextID) + aTable = wx.AcceleratorTable([(wx.ACCEL_ALT, ord('X'), exitItem.GetId()), + (wx.ACCEL_CTRL, ord('H'), helpItem.GetId()), + (wx.ACCEL_CTRL, ord('F'), findItem.GetId()), + (wx.ACCEL_NORMAL, wx.WXK_F3, findnextItem.GetId()), + (wx.ACCEL_NORMAL, wx.WXK_F9, shellItem.GetId()), ]) self.SetAcceleratorTable(aTable) # Create a TreeCtrl tID = wx.NewId() + leftPanel = wx.Panel(splitter) + + self.filter = wx.SearchCtrl(leftPanel) + self.filter.ShowCancelButton(True) + self.filter.Bind(wx.EVT_TEXT, self.RecreateTree) + self.filter.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN, + lambda e: self.filter.SetValue('')) + self.treeMap = {} - self.tree = wx.TreeCtrl(splitter, tID, style = + self.tree = wx.TreeCtrl(leftPanel, tID, style = wx.TR_DEFAULT_STYLE #| wx.TR_HAS_VARIABLE_ROW_HEIGHT ) - root = self.tree.AddRoot("wxPython Overview") - firstChild = None - for item in _treeList: - child = self.tree.AppendItem(root, item[0]) - if not firstChild: firstChild = child - for childItem in item[1]: - theDemo = self.tree.AppendItem(child, childItem) - self.treeMap[childItem] = theDemo - - self.tree.Expand(root) - self.tree.Expand(firstChild) + self.root = self.tree.AddRoot("wxPython Overview") + self.RecreateTree() self.tree.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, id=tID) self.tree.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, id=tID) self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=tID) self.tree.Bind(wx.EVT_LEFT_DOWN, self.OnTreeLeftDown) - + # Set up a wx.html.HtmlWindow on the Overview Notebook page # we put it in a panel first because there seems to be a # refresh bug of some sort (wxGTK) when it is directly in @@ -1302,6 +1314,8 @@ class wxPythonDemo(wx.Frame): # Set up a log window self.log = wx.TextCtrl(splitter2, -1, style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL) + if wx.Platform == "__WXMAC__": + self.log.MacCheckSpelling(False) # Set the wxWindows log target to be this textctrl #wx.Log_SetActiveTarget(wx.LogTextCtrl(self.log)) @@ -1319,7 +1333,12 @@ class wxPythonDemo(wx.Frame): # add the windows to the splitter and split it. splitter2.SplitHorizontally(self.nb, self.log, -160) - splitter.SplitVertically(self.tree, splitter2, 200) + leftBox = wx.BoxSizer(wx.VERTICAL) + leftBox.Add(self.tree, 1, wx.EXPAND) + leftBox.Add(wx.StaticText(leftPanel, label = "Filter Demos:"), 0, wx.TOP|wx.LEFT, 5) + leftBox.Add(self.filter, 0, wx.EXPAND|wx.ALL, 5) + leftPanel.SetSizer(leftBox) + splitter.SplitVertically(leftPanel, splitter2, 220) splitter.SetMinimumPaneSize(120) splitter2.SetMinimumPaneSize(60) @@ -1335,7 +1354,7 @@ class wxPythonDemo(wx.Frame): # select initial items self.nb.SetSelection(0) - self.tree.SelectItem(root) + self.tree.SelectItem(self.root) # Load 'Main' module self.LoadDemo(self.overviewText) @@ -1353,6 +1372,30 @@ class wxPythonDemo(wx.Frame): #--------------------------------------------- + + def RecreateTree(self, evt=None): + self.tree.Freeze() + self.tree.DeleteAllItems() + self.root = self.tree.AddRoot("wxPython Overview") + firstChild = None + filter = self.filter.GetValue() + for category, items in _treeList: + if filter: + items = [item for item in items if filter.lower() in item.lower()] + if items: + child = self.tree.AppendItem(self.root, category) + if not firstChild: firstChild = child + for childItem in items: + theDemo = self.tree.AppendItem(child, childItem) + self.treeMap[childItem] = theDemo + + self.tree.Expand(self.root) + if firstChild: + self.tree.Expand(firstChild) + if filter: + self.tree.ExpandAll() + self.tree.Thaw() + def WriteText(self, text): if text[-1:] == '\n': text = text[:-1] @@ -1642,6 +1685,20 @@ class wxPythonDemo(wx.Frame): evt.Skip() self.Bind(wx.EVT_CLOSE, CloseShell) + + def OnOpenWidgetInspector(self, evt): + # Activate the widget inspection tool + from wx.lib.inspect import InspectionTool + if not InspectionTool().initialized: + InspectionTool().Init() + + # Find a widget to be selected in the tree. Use either the + # one under the cursor, if any, or this frame. + wnd = wx.FindWindowAtPointer() + if not wnd: + wnd = self + InspectionTool().Show(wnd, True) + #--------------------------------------------- def OnCloseWindow(self, event): @@ -1740,8 +1797,8 @@ class MySplashScreen(wx.SplashScreen): frame.Show() if self.fc.IsRunning(): self.Raise() - + class MyApp(wx.App): def OnInit(self): """