X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..53fe40bac2443a81d05c4803942731a77de0880d:/wxPython/demo/Main.py diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index 10ed61edd0..74318bcd62 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -16,20 +16,25 @@ from wxPython.wx import * from wxPython.lib.splashscreen import SplashScreen from wxPython.html import wxHtmlWindow +import images + #--------------------------------------------------------------------------- _treeList = [ - ('New since last release', ['PyShellWindow', + ('New since last release', ['ContextHelp', + 'PyCrust', + 'VirtualListCtrl', + 'wxListCtrl', + 'TablePrint', ]), - ('Managed Windows', ['wxFrame', 'wxDialog', 'wxMiniFrame']), - - ('Non-Managed Windows', ['wxGrid', 'wxSashWindow', - 'wxScrolledWindow', 'wxSplitterWindow', - 'wxStatusBar', 'wxNotebook', - 'wxHtmlWindow', - 'wxStyledTextCtrl_1', 'wxStyledTextCtrl_2',]), + ('Windows', ['wxFrame', 'wxDialog', 'wxMiniFrame', + 'wxGrid', 'wxSashWindow', + 'wxScrolledWindow', 'wxSplitterWindow', + 'wxStatusBar', 'wxNotebook', + 'wxHtmlWindow', + 'wxStyledTextCtrl_1', 'wxStyledTextCtrl_2',]), ('Common Dialogs', ['wxColourDialog', 'wxDirDialog', 'wxFileDialog', 'wxSingleChoiceDialog', 'wxTextEntryDialog', @@ -40,23 +45,27 @@ _treeList = [ 'wxComboBox', 'wxGauge', 'wxListBox', 'wxListCtrl', 'wxTextCtrl', 'wxTreeCtrl', 'wxSpinButton', 'wxSpinCtrl', 'wxStaticText', 'wxStaticBitmap', 'wxRadioBox', 'wxSlider', 'wxToolBar', - 'wxCalendarCtrl', + 'wxCalendarCtrl', 'wxToggleButton', ]), - ('Window Layout', ['wxLayoutConstraints', 'Sizers', 'OldSizers']), + ('Window Layout', ['wxLayoutConstraints', 'LayoutAnchors', 'Sizers', 'XML_Resource']), ('Miscellaneous', [ 'DragAndDrop', 'CustomDragAndDrop', 'FontEnumerator', 'wxTimer', 'wxValidator', 'wxGLCanvas', 'DialogUnits', 'wxImage', 'wxMask', 'PrintFramework', 'wxOGL', 'PythonEvents', 'Threads', 'ActiveXWrapper_Acrobat', 'ActiveXWrapper_IE', - 'wxDragImage', 'PyShellWindow', + 'wxDragImage', "wxProcess", "FancyText", "OOR", "wxWave", + 'wxJoystick', ]), ('wxPython Library', ['Layoutf', 'wxScrolledMessageDialog', 'wxMultipleChoiceDialog', 'wxPlotCanvas', 'wxFloatBar', - 'PyShell', 'wxCalendar', 'wxMVCTree', 'wxVTKRenderWindow', - 'FileBrowseButton', 'GenericButtons', 'wxEditor']), + 'wxCalendar', 'wxMVCTree', 'wxVTKRenderWindow', + 'FileBrowseButton', 'GenericButtons', 'wxEditor', + 'ColourSelect', 'ImageBrowser', + 'infoframe', 'ColourDB', 'PyCrust', 'TablePrint', + ]), ('Cool Contribs', ['pyTree', 'hangman', 'SlashDot', 'XMLtreeview']), @@ -65,19 +74,39 @@ _treeList = [ #--------------------------------------------------------------------------- class wxPythonDemo(wxFrame): + def __init__(self, parent, id, title): wxFrame.__init__(self, parent, -1, title, size = (800, 600), style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE) self.cwd = os.getcwd() + self.curOverview = "" + + if 1: + icon = wxIconFromXPMData(images.getMondrianData()) + else: + # another way to do it + bmp = images.getMondrianBitmap() + icon = wxEmptyIcon() + icon.CopyFromBitmap(bmp) + + self.SetIcon(icon) if wxPlatform == '__WXMSW__': - self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO) - self.SetIcon(self.icon) + # setup a taskbar icon, and catch some events from it + self.tbicon = wxTaskBarIcon() + self.tbicon.SetIcon(icon, "wxPython Demo") + EVT_TASKBAR_LEFT_DCLICK(self.tbicon, self.OnTaskBarActivate) + EVT_TASKBAR_RIGHT_UP(self.tbicon, self.OnTaskBarMenu) + EVT_MENU(self.tbicon, self.TBMENU_RESTORE, self.OnTaskBarActivate) + EVT_MENU(self.tbicon, self.TBMENU_CLOSE, self.OnTaskBarClose) + self.otherWin = None EVT_IDLE(self, self.OnIdle) EVT_CLOSE(self, self.OnCloseWindow) + EVT_ICONIZE(self, self.OnIconfiy) + EVT_MAXIMIZE(self, self.OnMaximize) self.Centre(wxBOTH) self.CreateStatusBar(1, wxST_SIZEGRIP) @@ -85,6 +114,9 @@ class wxPythonDemo(wxFrame): splitter = wxSplitterWindow(self, -1, style=wxNO_3D|wxSP_3D) splitter2 = wxSplitterWindow(splitter, -1, style=wxNO_3D|wxSP_3D) + def EmptyHandler(evt): pass + EVT_ERASE_BACKGROUND(splitter, EmptyHandler) + EVT_ERASE_BACKGROUND(splitter2, EmptyHandler) # Prevent TreeCtrl from displaying all items after destruction self.dying = false @@ -149,11 +181,29 @@ class wxPythonDemo(wxFrame): EVT_LEFT_DOWN (self.tree, self.OnTreeLeftDown) # Create a Notebook - self.nb = wxNotebook(splitter2, -1) + self.nb = wxNotebook(splitter2, -1, style=wxCLIP_CHILDREN) + + # Set up a wxHtmlWindow 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 + # the notebook... + if 0: # the old way + self.ovr = wxHtmlWindow(self.nb, -1, size=(400, 400)) + self.nb.AddPage(self.ovr, "Overview") + + else: # hopefully I can remove this hacky code soon, see bug #216861 + panel = wxPanel(self.nb, -1, style=wxCLIP_CHILDREN) + self.ovr = wxHtmlWindow(panel, -1, size=(400, 400)) + self.nb.AddPage(panel, "Overview") - # Set up a TextCtrl on the Overview Notebook page - self.ovr = wxHtmlWindow(self.nb, -1) - self.nb.AddPage(self.ovr, "Overview") + def OnOvrSize(evt, ovr=self.ovr): + ovr.SetSize(evt.GetSize()) + + EVT_SIZE(panel, OnOvrSize) + EVT_ERASE_BACKGROUND(panel, EmptyHandler) + + + self.SetOverview("Overview", overview) # Set up a TextCtrl on the Demo Code Notebook page @@ -214,12 +264,13 @@ class wxPythonDemo(wxFrame): def OnItemExpanded(self, event): item = event.GetItem() wxLogMessage("OnItemExpanded: %s" % self.tree.GetItemText(item)) + event.Skip() #--------------------------------------------- def OnItemCollapsed(self, event): item = event.GetItem() wxLogMessage("OnItemCollapsed: %s" % self.tree.GetItemText(item)) - + event.Skip() #--------------------------------------------- def OnTreeLeftDown(self, event): @@ -227,8 +278,7 @@ class wxPythonDemo(wxFrame): item, flags = self.tree.HitTest(pt) if item == self.tree.GetSelection(): self.SetOverview(self.tree.GetItemText(item), self.curOverview) - else: - event.Skip() + event.Skip() #--------------------------------------------- def OnSelChanged(self, event): @@ -306,7 +356,7 @@ class wxPythonDemo(wxFrame): #--------------------------------------------- # Menu methods - def OnFileExit(self, event): + def OnFileExit(self, *event): self.Close() @@ -322,8 +372,11 @@ class wxPythonDemo(wxFrame): self.dying = true self.window = None self.mainmenu = None + if hasattr(self, "tbicon"): + del self.tbicon self.Destroy() + #--------------------------------------------- def OnIdle(self, event): if self.otherWin: @@ -341,6 +394,49 @@ class wxPythonDemo(wxFrame): self.tree.SelectItem(selectedDemo) self.tree.EnsureVisible(selectedDemo) + + #--------------------------------------------- + def OnTaskBarActivate(self, evt): + if self.IsIconized(): + self.Iconize(false) + if not self.IsShown(): + self.Show(true) + self.Raise() + + #--------------------------------------------- + + TBMENU_RESTORE = 1000 + TBMENU_CLOSE = 1001 + + def OnTaskBarMenu(self, evt): + menu = wxMenu() + menu.Append(self.TBMENU_RESTORE, "Restore wxPython Demo") + menu.Append(self.TBMENU_CLOSE, "Close") + self.tbicon.PopupMenu(menu) + menu.Destroy() + + #--------------------------------------------- + def OnTaskBarClose(self, evt): + self.Close() + + # because of the way wxTaskBarIcon.PopupMenu is implemented we have to + # prod the main idle handler a bit to get the window to actually close + wxGetApp().ProcessIdle() + + + #--------------------------------------------- + def OnIconfiy(self, evt): + wxLogMessage("OnIconfiy") + evt.Skip() + + #--------------------------------------------- + def OnMaximize(self, evt): + wxLogMessage("OnMaximize") + evt.Skip() + + + + #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- @@ -369,7 +465,7 @@ class MyApp(wxApp): showTip, index = eval(showTipText) except IOError: showTip, index = (1, 0) - print showTip, index + #print showTip, index if showTip: tp = wxCreateFileTipProvider("data/tips.txt", index) showTip = wxShowTip(frame, tp) @@ -381,7 +477,7 @@ class MyApp(wxApp): def main(): try: - demoPath = os.path.split(__file__)[0] + demoPath = os.path.dirname(__file__) os.chdir(demoPath) except: pass