X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8412feb0287df26ef6e944927d3b6f2764a4b9a4..0263d0bb05db0416d5c4fd1881e3b55b08be5051:/wxPython/demo/Main.py diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index fa4338f2fd..152a858a44 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -47,9 +47,10 @@ import images _treeList = [ # new stuff ('Recent Additions/Updates', [ - 'StockButtons', - 'Ticker', - 'Choicebook', + 'FoldPanelBar', + 'GIFAnimationCtrl', + 'HyperLinkCtrl', + 'MultiSplitterWindow', ]), # managed windows == things with a (optional) caption you can close @@ -69,6 +70,7 @@ _treeList = [ 'FindReplaceDialog', 'FontDialog', 'MessageDialog', + 'MultiChoiceDialog', 'PageSetupDialog', 'PrintDialog', 'ProgressDialog', @@ -98,6 +100,7 @@ _treeList = [ 'ListBox', 'ListCtrl', 'ListCtrl_virtual', + 'ListCtrl_edit', 'Listbook', 'Menu', 'Notebook', @@ -112,6 +115,7 @@ _treeList = [ 'SpinCtrl', 'SplitterWindow', 'StaticBitmap', + 'StaticBox', 'StaticText', 'StatusBar', 'StockButtons', @@ -144,14 +148,20 @@ _treeList = [ 'Calendar', 'CalendarCtrl', 'ContextHelp', + 'DatePickerCtrl', 'DynamicSashWindow', 'EditableListBox', 'FancyText', 'FileBrowseButton', 'FloatBar', 'FloatCanvas', + 'FoldPanelBar', + 'GIFAnimationCtrl', 'HtmlWindow', + 'HyperLinkCtrl', 'IntCtrl', + 'MediaCtrl', + 'MultiSplitterWindow', 'MVCTree', 'MaskedEditControls', 'MaskedNumCtrl', @@ -192,7 +202,7 @@ _treeList = [ 'PythonEvents', 'Threads', 'Timer', - ##'infoframe', # needs better explaination and some fixing + ##'infoframe', # needs better explanation and some fixing ]), # Clipboard and DnD @@ -207,6 +217,7 @@ _treeList = [ 'ArtProvider', 'Cursor', 'DragImage', + 'GIFAnimationCtrl', 'Image', 'ImageAlpha', 'ImageFromStream', @@ -217,15 +228,17 @@ _treeList = [ # Other stuff ('Miscellaneous', [ 'ColourDB', - ##'DialogUnits', # needs more explainations + ##'DialogUnits', # needs more explanations 'DrawXXXList', 'FileHistory', 'FontEnumerator', 'Joystick', + 'MouseGestures', 'OGL', 'PrintFramework', 'ShapedWindow', 'Sound', + 'StandardPaths', 'Unicode', ]), @@ -252,9 +265,10 @@ class MyLog(wx.PyLog): self.logTime = logTime def DoLogString(self, message, timeStamp): - if self.logTime: - message = time.strftime("%X", time.localtime(timeStamp)) + \ - ": " + message + #print message, timeStamp + #if self.logTime: + # message = time.strftime("%X", time.localtime(timeStamp)) + \ + # ": " + message if self.tc: self.tc.AppendText(message + '\n') @@ -263,6 +277,60 @@ class MyTP(wx.PyTipProvider): def GetTip(self): return "This is my tip" +#--------------------------------------------------------------------------- +# A class to be used to simply display a message in the demo pane +# rather than running the sample itself. + +class MessagePanel(wx.Panel): + def __init__(self, parent, message, caption='', flags=0): + wx.Panel.__init__(self, parent) + + # Make widgets + if flags: + artid = None + if flags & wx.ICON_EXCLAMATION: + artid = wx.ART_WARNING + elif flags & wx.ICON_ERROR: + artid = wx.ART_ERROR + elif flags & wx.ICON_QUESTION: + artid = wx.ART_QUESTION + elif flags & wx.ICON_INFORMATION: + artid = wx.ART_INFORMATION + + if artid is not None: + bmp = wx.ArtProvider.GetBitmap(artid, wx.ART_MESSAGE_BOX, (32,32)) + icon = wx.StaticBitmap(self, -1, bmp) + else: + icon = (32,32) # make a spacer instead + + if caption: + caption = wx.StaticText(self, -1, caption) + caption.SetFont(wx.Font(28, wx.SWISS, wx.NORMAL, wx.BOLD)) + + message = wx.StaticText(self, -1, message) + + # add to sizers for layout + tbox = wx.BoxSizer(wx.VERTICAL) + if caption: + tbox.Add(caption) + tbox.Add((10,10)) + tbox.Add(message) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((10,10), 1) + hbox.Add(icon) + hbox.Add((10,10)) + hbox.Add(tbox) + hbox.Add((10,10), 1) + + box = wx.BoxSizer(wx.VERTICAL) + box.Add((10,10), 1) + box.Add(hbox, 0, wx.EXPAND) + box.Add((10,10), 2) + + self.SetSizer(box) + self.Fit() + #--------------------------------------------------------------------------- # A class to be used to display source code in the demo. Try using the @@ -398,8 +466,7 @@ try: # The rest remains unchanged. # Line numbers in margin - self.StyleSetSpec(wx.stc.STC_STYLE_LINENUMBER,'fore:#000000,back:#99A9C2') - + self.StyleSetSpec(wx.stc.STC_STYLE_LINENUMBER,'fore:#000000,back:#99A9C2') # Highlighted brace self.StyleSetSpec(wx.stc.STC_STYLE_BRACELIGHT,'fore:#00009D,back:#FFFF00') # Unmatched brace @@ -460,13 +527,13 @@ except ImportError: def GetText(self): return self.GetValue() - def GetPositionFromLine(line): + def GetPositionFromLine(self, line): return self.XYToPosition(0,line) def GotoLine(self, line): - pos = self.editor.GetPositionFromLine(line) - self.editor.SetInsertionPoint(pos) - self.editor.ShowPosition(pos) + pos = self.GetPositionFromLine(line) + self.SetInsertionPoint(pos) + self.ShowPosition(pos) def SelectLine(self, line): start = self.GetPositionFromLine(line) @@ -611,7 +678,7 @@ class DemoCodePanel(wx.Panel): try: os.makedirs(GetModifiedDirectory()) if not os.path.exists(GetModifiedDirectory()): - wx.LogMessage("BUG: Created demo directory but it still doesn't exit") + wx.LogMessage("BUG: Created demo directory but it still doesn't exist") raise AssetionError except: wx.LogMessage("Error creating demo directory: %s" % GetModifiedDirectory()) @@ -872,7 +939,7 @@ class DemoErrorPanel(wx.Panel): self.box = wx.BoxSizer(wx.VERTICAL) # Main Label - self.box.Add(wx.StaticText(self, -1, "An error has occured while trying to run the demo") + self.box.Add(wx.StaticText(self, -1, "An error has occurred while trying to run the demo") , 0, wx.ALIGN_CENTER | wx.TOP, 10) # Exception Information @@ -960,8 +1027,9 @@ class DemoTaskBarIcon(wx.TaskBarIcon): self.frame = frame # Set the image - icon = self.MakeIcon(images.getMondrianImage()) + icon = self.MakeIcon(images.getWXPdemoImage()) self.SetIcon(icon, "wxPython Demo") + self.imgidx = 1 # bind some events self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarActivate) @@ -993,10 +1061,10 @@ class DemoTaskBarIcon(wx.TaskBarIcon): icon size... """ if "wxMSW" in wx.PlatformInfo: - img.Scale(16, 16) + img = img.Scale(16, 16) elif "wxGTK" in wx.PlatformInfo: - img.Scale(20, 20) - # wxMac can be any size upto 128.128.... + img = img.Scale(22, 22) + # wxMac can be any size upto 128x128, so leave the source img alone.... icon = wx.IconFromBitmap(img.ConvertToBitmap() ) return icon @@ -1014,8 +1082,16 @@ class DemoTaskBarIcon(wx.TaskBarIcon): def OnTaskBarChange(self, evt): - icon = self.MakeIcon(images.getBlom10MaskedImage()) - self.SetIcon(icon, "This is a new icon") + names = [ "WXPdemo", "Mondrian", "Pencil", "Carrot" ] + name = names[self.imgidx] + + getFunc = getattr(images, "get%sImage" % name) + self.imgidx += 1 + if self.imgidx >= len(names): + self.imgidx = 0 + + icon = self.MakeIcon(getFunc()) + self.SetIcon(icon, "This is a new icon: " + name) def OnTaskBarRemove(self, evt): @@ -1030,6 +1106,8 @@ class wxPythonDemo(wx.Frame): wx.Frame.__init__(self, parent, -1, title, size = (950, 720), style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE) + self.SetMinSize((640,480)) + self.loaded = False self.cwd = os.getcwd() self.curOverview = "" @@ -1037,8 +1115,9 @@ class wxPythonDemo(wx.Frame): self.codePage = None self.shell = None self.firstTime = True + self.finddlg = None - icon = images.getMondrianIcon() + icon = images.getWXPdemoIcon() self.SetIcon(icon) self.tbicon = DemoTaskBarIcon(self) @@ -1050,8 +1129,6 @@ class wxPythonDemo(wx.Frame): self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) self.Bind(wx.EVT_ICONIZE, self.OnIconfiy) self.Bind(wx.EVT_MAXIMIZE, self.OnMaximize) - self.Bind(wx.EVT_ACTIVATE, self.OnActivate) - wx.GetApp().Bind(wx.EVT_ACTIVATE_APP, self.OnAppActivate) self.Centre(wx.BOTH) self.CreateStatusBar(1, wx.ST_SIZEGRIP) @@ -1079,7 +1156,7 @@ class wxPythonDemo(wx.Frame): 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()) + wx.App.SetMacExitMenuItemId(item.GetId()) self.mainmenu.Append(menu, '&File') # Make a Demo menu @@ -1119,15 +1196,17 @@ class wxPythonDemo(wx.Frame): 'An interactive interpreter window with the demo app and frame objects in the namesapce') menu.AppendSeparator() helpItem = menu.Append(-1, '&About\tCtrl-H', 'wxPython RULES!!!') - wx.App_SetMacAboutMenuItemId(helpItem.GetId()) + wx.App.SetMacAboutMenuItemId(helpItem.GetId()) self.Bind(wx.EVT_MENU, self.OnOpenShellWindow, shellItem) self.Bind(wx.EVT_MENU, self.OnHelpAbout, helpItem) self.Bind(wx.EVT_MENU, self.OnHelpFind, findItem) self.Bind(wx.EVT_MENU, self.OnFindNext, findnextItem) - self.Bind(wx.EVT_COMMAND_FIND, self.OnFind) - self.Bind(wx.EVT_COMMAND_FIND_NEXT, self.OnFind) - self.Bind(wx.EVT_COMMAND_FIND_CLOSE, self.OnFindClose) + self.Bind(wx.EVT_FIND, self.OnFind) + self.Bind(wx.EVT_FIND_NEXT, self.OnFind) + self.Bind(wx.EVT_FIND_CLOSE, self.OnFindClose) + self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateFindItems, findItem) + self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateFindItems, findnextItem) self.mainmenu.Append(menu, '&Help') self.SetMenuBar(self.mainmenu) @@ -1205,12 +1284,15 @@ class wxPythonDemo(wx.Frame): #wx.Log_SetTraceMask(wx.TraceMessages) + self.Bind(wx.EVT_ACTIVATE, self.OnActivate) + wx.GetApp().Bind(wx.EVT_ACTIVATE_APP, self.OnAppActivate) + # add the windows to the splitter and split it. splitter2.SplitHorizontally(self.nb, self.log, -160) splitter.SplitVertically(self.tree, splitter2, 200) - splitter.SetMinimumPaneSize(20) - splitter2.SetMinimumPaneSize(20) + splitter.SetMinimumPaneSize(120) + splitter2.SetMinimumPaneSize(60) # Make the splitter on the right expand the top window when resized def SplitterOnSize(evt): @@ -1324,7 +1406,7 @@ class wxPythonDemo(wx.Frame): # o The RunTest() for all samples must now return a window that can # be palced in a tab in the main notebook. - # o If an error occurs (or has occured before) an error tab is created. + # o If an error occurs (or has occurred before) an error tab is created. if module is not None: wx.LogMessage("Running demo module...") @@ -1441,6 +1523,9 @@ class wxPythonDemo(wx.Frame): about.Destroy() def OnHelpFind(self, event): + if self.finddlg != None: + return + self.nb.SetSelection(1) self.finddlg = wx.FindReplaceDialog(self, self.finddata, "Find", wx.FR_NOUPDOWN | @@ -1448,6 +1533,11 @@ class wxPythonDemo(wx.Frame): wx.FR_NOWHOLEWORD) self.finddlg.Show(True) + + def OnUpdateFindItems(self, evt): + evt.Enable(self.finddlg == None) + + def OnFind(self, event): editor = self.codePage.editor self.nb.SetSelection(1) @@ -1472,6 +1562,7 @@ class wxPythonDemo(wx.Frame): return else: self.finddlg.Destroy() + self.finddlg = None editor.ShowPosition(loc) editor.SetSelection(loc, loc + len(findstring)) @@ -1485,6 +1576,7 @@ class wxPythonDemo(wx.Frame): def OnFindClose(self, event): event.GetDialog().Destroy() + self.finddlg = None def OnOpenShellWindow(self, evt): @@ -1584,18 +1676,33 @@ class wxPythonDemo(wx.Frame): class MySplashScreen(wx.SplashScreen): def __init__(self): - bmp = wx.Image(opj("bitmaps/splash.gif")).ConvertToBitmap() + bmp = wx.Image(opj("bitmaps/splash.png")).ConvertToBitmap() wx.SplashScreen.__init__(self, bmp, wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT, - 3000, None, -1) + 5000, None, -1) self.Bind(wx.EVT_CLOSE, self.OnClose) + self.fc = wx.FutureCall(2000, self.ShowMain) + def OnClose(self, evt): + # Make sure the default handler runs too so this window gets + # destroyed + evt.Skip() self.Hide() + + # if the timer is still running then go ahead and show the + # main frame now + if self.fc.IsRunning(): + self.fc.Stop() + self.ShowMain() + + + def ShowMain(self): frame = wxPythonDemo(None, "wxPython: (A Demonstration)") frame.Show() - evt.Skip() # Make sure the default handler runs too... - + if self.fc.IsRunning(): + self.Raise() + class MyApp(wx.App): def OnInit(self): @@ -1604,6 +1711,8 @@ class MyApp(wx.App): the main frame when it is time to do so. """ + wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1) + # For debugging #self.SetAssertMode(wx.PYAPP_ASSERT_DIALOG) @@ -1612,7 +1721,7 @@ class MyApp(wx.App): # initialization, finally creating and showing the main # application window(s). In this case we have nothing else to # do so we'll delay showing the main frame until later (see - # OnClose above) so the users can see the SplashScreen effect. + # ShowMain above) so the users can see the SplashScreen effect. splash = MySplashScreen() splash.Show()