X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..2dace059ee7aefeea0f2b843f1808b117f112795:/wxPython/demo/Main.py diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index 10ed61edd0..6f1c2b2787 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -16,11 +16,13 @@ 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', ['wxTextCtrl', 'XML_Resource' ]), ('Managed Windows', ['wxFrame', 'wxDialog', 'wxMiniFrame']), @@ -40,23 +42,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', ]), ('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']), + 'FileBrowseButton', 'GenericButtons', 'wxEditor', + 'PyShellWindow', 'ColourSelect', 'ImageBrowser', + 'infoframe', 'ColourDB', + ]), ('Cool Contribs', ['pyTree', 'hangman', 'SlashDot', 'XMLtreeview']), @@ -65,19 +71,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 +111,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 +178,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") + + def OnOvrSize(evt, ovr=self.ovr): + ovr.SetSize(evt.GetSize()) - # Set up a TextCtrl on the Overview Notebook page - self.ovr = wxHtmlWindow(self.nb, -1) - self.nb.AddPage(self.ovr, "Overview") + 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 +261,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 +275,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 +353,7 @@ class wxPythonDemo(wxFrame): #--------------------------------------------- # Menu methods - def OnFileExit(self, event): + def OnFileExit(self, *event): self.Close() @@ -322,8 +369,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 +391,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 +462,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 +474,7 @@ class MyApp(wxApp): def main(): try: - demoPath = os.path.split(__file__)[0] + demoPath = os.path.dirname(__file__) os.chdir(demoPath) except: pass