diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index 35946ef9e0..859c026e99 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -19,9 +19,11 @@ # * Annoying switching between tabs and resulting flicker # how to replace a page in the notebook without deleting/adding? # Where is SetPage!? tried freeze...tried reparent of dummy panel.... +# AG: It looks like this issue is fixed by Freeze()ing and Thaw()ing the +# main frame and not the notebook # TODO List: -# * UI design more prefessional +# * UI design more professional (is the new version more professional?) # * save file positions (new field in demoModules) (@ LoadDemoSource) # * Update main overview @@ -30,7 +32,10 @@ import sys, os, time, traceback, types import wx # This module uses the new wx namespace +import wx.aui import wx.html +import wx.lib.customtreectrl as CT +from wx.lib.mixins.treemixin import ExpansionState import images @@ -43,6 +48,9 @@ import images #--------------------------------------------------------------------------- +_demoPngs = ["overview", "recent", "frame", "dialog", "moredialog", "core", + "book", "custom", "morecontrols", "layout", "process", "clipboard", + "images", "miscellaneous"] _treeList = [ # new stuff @@ -731,7 +739,7 @@ class DemoCodePanel(wx.Panel): os.makedirs(GetModifiedDirectory()) if not os.path.exists(GetModifiedDirectory()): wx.LogMessage("BUG: Created demo directory but it still doesn't exist") - raise AssetionError + raise AssertionError except: wx.LogMessage("Error creating demo directory: %s" % GetModifiedDirectory()) return @@ -750,6 +758,8 @@ class DemoCodePanel(wx.Panel): self.demoModules.LoadFromFile(modModified, modifiedFilename) self.ActiveModuleChanged() + self.mainFrame.SetTreeModified(modifiedFilename, setIcon=True) + def OnRestore(self, event): # Handles the "Delete Modified" button modifiedFilename = GetModifiedFilename(self.demoModules.name) @@ -758,6 +768,8 @@ class DemoCodePanel(wx.Panel): busy = wx.BusyInfo("Reloading demo module...") self.ActiveModuleChanged() + self.mainFrame.SetTreeModified(modifiedFilename, setIcon=False) + #--------------------------------------------------------------------------- @@ -804,6 +816,16 @@ def DoesModifiedExist(name): return False +def SearchDemo(name, keyword): + """ Returns whether a demo contains the search keyword or not. """ + fid = open(GetOriginalFilename(name), "rt") + fullText = fid.read() + fid.close() + if fullText.find(keyword) >= 0: + return True + + return False + #--------------------------------------------------------------------------- class ModuleDictWrapper: @@ -1156,10 +1178,13 @@ class wxPythonDemo(wx.Frame): overviewText = "wxPython Overview" def __init__(self, parent, title): - wx.Frame.__init__(self, parent, -1, title, size = (950, 720), + wx.Frame.__init__(self, parent, -1, title, size = (970, 720), style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE) self.SetMinSize((640,480)) + + self.mgr = wx.aui.AuiManager() + self.mgr.SetManagedWindow(self) self.loaded = False self.cwd = os.getcwd() @@ -1189,119 +1214,66 @@ class wxPythonDemo(wx.Frame): self.Centre(wx.BOTH) self.CreateStatusBar(1, wx.ST_SIZEGRIP) - splitter = wx.SplitterWindow(self, -1, style=wx.CLIP_CHILDREN | wx.SP_LIVE_UPDATE | wx.SP_3D) - splitter2 = wx.SplitterWindow(splitter, -1, style=wx.CLIP_CHILDREN | wx.SP_LIVE_UPDATE | wx.SP_3D) - - def EmptyHandler(evt): pass - #splitter.Bind(wx.EVT_ERASE_BACKGROUND, EmptyHandler) - #splitter2.Bind(wx.EVT_ERASE_BACKGROUND, EmptyHandler) - - # Prevent TreeCtrl from displaying all items after destruction when True self.dying = False + def EmptyHandler(evt): pass + + self.ReadConfigurationFile() + # Create a Notebook - self.nb = wx.Notebook(splitter2, -1, style=wx.CLIP_CHILDREN) - - # Make a File menu - self.mainmenu = wx.MenuBar() - menu = wx.Menu() - item = menu.Append(-1, '&Redirect Output', - 'Redirect print statements to a window', - wx.ITEM_CHECK) - self.Bind(wx.EVT_MENU, self.OnToggleRedirect, item) - - 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[:-1]: - submenu = wx.Menu() - for childItem in item[1]: - mi = submenu.Append(-1, childItem) - self.Bind(wx.EVT_MENU, self.OnDemoMenu, mi) - menu.AppendMenu(wx.NewId(), item[0], submenu) - self.mainmenu.Append(menu, '&Demo') - - - # Make a Help menu - menu = wx.Menu() - findItem = menu.Append(-1, '&Find\tCtrl-F', 'Find in the Demo Code') - findnextItem = menu.Append(-1, 'Find &Next\tF3', 'Find Next') - menu.AppendSeparator() - - 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) - 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) + self.nb = wx.Notebook(self, -1, style=wx.CLIP_CHILDREN) + imgList = wx.ImageList(16, 16) + for png in ["overview", "code", "demo"]: + bmp = images.catalog[png].getBitmap() + imgList.Add(bmp) + self.nb.AssignImageList(imgList) + self.BuildMenuBar() + self.finddata = wx.FindReplaceData() self.finddata.SetFlags(wx.FR_DOWN) - 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'), 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) + leftPanel = wx.Panel(self) + self.treeMap = {} + self.searchItems = {} - self.filter = wx.SearchCtrl(leftPanel) + self.tree = wxPythonTreeCtrl(leftPanel) + + self.filter = wx.SearchCtrl(leftPanel, style=wx.TE_PROCESS_ENTER) 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(leftPanel, tID, style = - wx.TR_DEFAULT_STYLE #| wx.TR_HAS_VARIABLE_ROW_HEIGHT - ) + self.filter.Bind(wx.EVT_TEXT_ENTER, self.OnSearch) + + searchMenu = wx.Menu() + item = searchMenu.AppendRadioItem(-1, "Sample Name") + self.Bind(wx.EVT_MENU, self.OnSearchMenu, item) + item = searchMenu.AppendRadioItem(-1, "Sample Content") + self.Bind(wx.EVT_MENU, self.OnSearchMenu, item) + self.filter.SetMenu(searchMenu) - 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.SetExpansionState(self.expansionState) + self.tree.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded) + self.tree.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed) + self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged) 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 # the notebook... + if 0: # the old way self.ovr = wx.html.HtmlWindow(self.nb, -1, size=(400, 400)) - self.nb.AddPage(self.ovr, self.overviewText) + self.nb.AddPage(self.ovr, self.overviewText, imageId=0) else: # hopefully I can remove this hacky code soon, see SF bug #216861 panel = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN) self.ovr = wx.html.HtmlWindow(panel, -1, size=(400, 400)) - self.nb.AddPage(panel, self.overviewText) + self.nb.AddPage(panel, self.overviewText, imageId=0) def OnOvrSize(evt, ovr=self.ovr): ovr.SetSize(evt.GetSize()) @@ -1314,7 +1286,7 @@ class wxPythonDemo(wx.Frame): # Set up a log window - self.log = wx.TextCtrl(splitter2, -1, + self.log = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL) if wx.Platform == "__WXMAC__": self.log.MacCheckSpelling(False) @@ -1329,30 +1301,15 @@ class wxPythonDemo(wx.Frame): #wx.Log_SetActiveTarget(wx.LogStderr()) #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) 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) - - # Make the splitter on the right expand the top window when resized - def SplitterOnSize(evt): - splitter = evt.GetEventObject() - sz = splitter.GetSize() - splitter.SetSashPosition(sz.height - 160, False) - evt.Skip() - - splitter2.Bind(wx.EVT_SIZE, SplitterOnSize) # select initial items self.nb.SetSelection(0) @@ -1372,32 +1329,268 @@ class wxPythonDemo(wx.Frame): self.tree.SelectItem(selectedDemo) self.tree.EnsureVisible(selectedDemo) + # Use the aui manager to set up everything + self.mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().CenterPane().Name("Notebook")) + self.mgr.AddPane(leftPanel, wx.aui.AuiPaneInfo().Left().Layer(2).BestSize((240, -1)). + MinSize((160, -1)).FloatingSize((240, 700)).Caption("wxPython Demos"). + MaximizeButton().Name("TreeDemo")) + self.mgr.AddPane(self.log, wx.aui.AuiPaneInfo().Bottom().BestSize((-1, 150)). + MinSize((-1, 60)).FloatingSize((500, 160)).Caption("Event Handlers Messages"). + MaximizeButton().Name("LogWindow")) - #--------------------------------------------- - + self.auiConfigurations["Default Perspective"] = self.mgr.SavePerspective() + self.mgr.Update() + + self.mgr.SetFlags(self.mgr.GetFlags() ^ wx.aui.AUI_MGR_ALLOW_ACTIVE_PANE) + self.mgr.SetFlags(self.mgr.GetFlags() ^ wx.aui.AUI_MGR_TRANSPARENT_DRAG) + + + + def ReadConfigurationFile(self): + + self.auiConfigurations = {} + optionsFile = opj(wx.GetHomeDir() + "/.wxPyDemo/wxPythonOptions.txt") + if not os.path.isfile(optionsFile): + self.expansionState = [0, 1] + return + + fid = open(optionsFile, "rt") + self.expansionState = eval(fid.readline().strip().split(":")[1]) + auiConfigurations = fid.readline().strip().split(":")[1:] + auiConfigurations = ":".join(auiConfigurations) + self.auiConfigurations.update(eval(auiConfigurations)) + fid.close() + + + def BuildMenuBar(self): + + # Make a File menu + self.mainmenu = wx.MenuBar() + menu = wx.Menu() + item = menu.Append(-1, '&Redirect Output', + 'Redirect print statements to a window', + wx.ITEM_CHECK) + self.Bind(wx.EVT_MENU, self.OnToggleRedirect, item) + + exitItem = wx.MenuItem(menu, -1, 'E&xit\tCtrl-Q', 'Get the heck outta here!') + exitItem.SetBitmap(images.catalog['exit'].getBitmap()) + menu.AppendItem(exitItem) + 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 indx, item in enumerate(_treeList[:-1]): + menuItem = wx.MenuItem(menu, -1, item[0]) + submenu = wx.Menu() + for childItem in item[1]: + mi = submenu.Append(-1, childItem) + self.Bind(wx.EVT_MENU, self.OnDemoMenu, mi) + menuItem.SetBitmap(images.catalog[_demoPngs[indx+1]].getBitmap()) + menuItem.SetSubMenu(submenu) + menu.AppendItem(menuItem) + self.mainmenu.Append(menu, '&Demo') + + # Make an Option menu + menu = wx.Menu() + auiPerspectives = self.auiConfigurations.keys() + auiPerspectives.sort() + perspectivesMenu = wx.Menu() + item = wx.MenuItem(perspectivesMenu, -1, "Default Perspective", "Load startup default perspective", wx.ITEM_RADIO) + self.Bind(wx.EVT_MENU, self.OnAUIPerspectives, item) + perspectivesMenu.AppendItem(item) + for indx, key in enumerate(auiPerspectives): + if key == "Default Perspective": + continue + item = wx.MenuItem(perspectivesMenu, -1, key, "Load user perspective %d"%indx, wx.ITEM_RADIO) + perspectivesMenu.AppendItem(item) + self.Bind(wx.EVT_MENU, self.OnAUIPerspectives, item) + + menu.AppendMenu(wx.ID_ANY, "&AUI Perspectives", perspectivesMenu) + self.perspectives_menu = perspectivesMenu + + item = wx.MenuItem(menu, -1, 'Save Perspective', 'Save AUI perspective') + item.SetBitmap(images.catalog['saveperspective'].getBitmap()) + menu.AppendItem(item) + self.Bind(wx.EVT_MENU, self.OnSavePerspective, item) + + item = wx.MenuItem(menu, -1, 'Delete Perspective', 'Delete AUI perspective') + item.SetBitmap(images.catalog['deleteperspective'].getBitmap()) + menu.AppendItem(item) + self.Bind(wx.EVT_MENU, self.OnDeletePerspective, item) + + menu.AppendSeparator() + + item = wx.MenuItem(menu, -1, 'Restore Tree Expansion', 'Restore the initial tree expansion state') + item.SetBitmap(images.catalog['expansion'].getBitmap()) + menu.AppendItem(item) + self.Bind(wx.EVT_MENU, self.OnTreeExpansion, item) + + self.mainmenu.Append(menu, '&Options') + + # Make a Help menu + menu = wx.Menu() + findItem = wx.MenuItem(menu, -1, '&Find\tCtrl-F', 'Find in the Demo Code') + findItem.SetBitmap(images.catalog['find'].getBitmap()) + findNextItem = wx.MenuItem(menu, -1, 'Find &Next\tF3', 'Find Next') + findNextItem.SetBitmap(images.catalog['findnext'].getBitmap()) + menu.AppendItem(findItem) + menu.AppendItem(findNextItem) + menu.AppendSeparator() + + shellItem = wx.MenuItem(menu, -1, 'Open Py&Shell Window\tF5', + 'An interactive interpreter window with the demo app and frame objects in the namesapce') + shellItem.SetBitmap(images.catalog['pyshell'].getBitmap()) + menu.AppendItem(shellItem) + inspToolItem = wx.MenuItem(menu, -1, 'Open &Widget Inspector\tF6', + 'A tool that lets you browse the live widgets and sizers in an application') + inspToolItem.SetBitmap(images.catalog['inspect'].getBitmap()) + menu.AppendItem(inspToolItem) + 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) + 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) + + 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'), 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) + + + #--------------------------------------------- def RecreateTree(self, evt=None): + + # Catch the search type (name or content) + searchMenu = self.filter.GetMenu().GetMenuItems() + fullSearch = searchMenu[1].IsChecked() + + if evt: + if fullSearch: + # Do not`scan all the demo files for every char + # the user input, use wx.EVT_TEXT_ENTER instead + return + self.tree.Freeze() self.tree.DeleteAllItems() self.root = self.tree.AddRoot("wxPython Overview") + self.tree.SetItemImage(self.root, 0) + self.tree.SetPyData(self.root, 0) + + treeFont = self.tree.GetFont() + catFont = self.tree.GetFont() + treeFont.SetPointSize(10) + treeFont.SetWeight(wx.BOLD) + self.tree.SetItemFont(self.root, treeFont) + catFont.SetWeight(wx.BOLD) + firstChild = None filter = self.filter.GetValue() + count = 0 + bmp = images.catalog['modifiedexists'].getBitmap() for category, items in _treeList: + count += 1 if filter: - items = [item for item in items if filter.lower() in item.lower()] + if fullSearch: + items = self.searchItems[category] + else: + items = [item for item in items if filter.lower() in item.lower()] if items: - child = self.tree.AppendItem(self.root, category) + child = self.tree.AppendItem(self.root, category, image=count) + self.tree.SetItemFont(child, catFont) + self.tree.SetPyData(child, count) if not firstChild: firstChild = child for childItem in items: - theDemo = self.tree.AppendItem(child, childItem) + if DoesModifiedExist(childItem): + wnd = wx.StaticBitmap(self.tree, -1, bmp) + else: + wnd = None + theDemo = self.tree.AppendItem(child, childItem, image=count, wnd=wnd) + self.tree.SetPyData(theDemo, count) self.treeMap[childItem] = theDemo - + self.tree.Expand(self.root) if firstChild: self.tree.Expand(firstChild) if filter: self.tree.ExpandAll() self.tree.Thaw() - + self.searchItems = {} + + + def OnSearchMenu(self, event): + + # Catch the search type (name or content) + searchMenu = self.filter.GetMenu().GetMenuItems() + fullSearch = searchMenu[1].IsChecked() + + if fullSearch: + self.OnSearch() + else: + self.RecreateTree() + + + def OnSearch(self, event=None): + + value = self.filter.GetValue() + if not value: + self.RecreateTree() + return + + wx.BeginBusyCursor() + + for category, items in _treeList: + self.searchItems[category] = [] + for childItem in items: + if SearchDemo(childItem, value): + self.searchItems[category].append(childItem) + + wx.EndBusyCursor() + self.RecreateTree() + + + def SetTreeModified(self, modifiedFilename, setIcon): + + self.tree.Freeze() + treeItemText = os.path.split(os.path.splitext(modifiedFilename)[0])[1] + self.LoopTreeCtrl(self.root, treeItemText, setIcon) + self.tree.CalculatePositions() + self.tree.Thaw() + + + def LoopTreeCtrl(self, parentItem, itemText, setIcon): + + child, cookie = self.tree.GetFirstChild(parentItem) + while child: + text = self.tree.GetItemText(child) + if text == itemText: + child.DeleteWindow() + if setIcon: + bmp = images.catalog['modifiedexists'].getBitmap() + child.SetWindow(wx.StaticBitmap(self.tree, -1, bmp)) + + self.LoopTreeCtrl(child, itemText, setIcon) + child, cookie = self.tree.GetNextChild(parentItem, cookie) + + def WriteText(self, text): if text[-1:] == '\n': text = text[:-1] @@ -1440,6 +1633,7 @@ class wxPythonDemo(wx.Frame): def LoadDemo(self, demoName): try: wx.BeginBusyCursor() + self.Freeze() os.chdir(self.cwd) self.ShutdownDemoModule() @@ -1464,6 +1658,7 @@ class wxPythonDemo(wx.Frame): self.UpdateNotebook(0) finally: wx.EndBusyCursor() + self.Thaw() #--------------------------------------------- def LoadDemoSource(self): @@ -1494,6 +1689,10 @@ class wxPythonDemo(wx.Frame): self.demoPage = DemoErrorPanel(self.nb, self.codePage, DemoError(sys.exc_info()), self) + bg = self.nb.GetThemeBackgroundColour() + if bg: + self.demoPage.SetBackgroundColour(bg) + assert self.demoPage is not None, "runTest must return a window!" else: @@ -1524,6 +1723,7 @@ class wxPythonDemo(wx.Frame): def UpdateNotebook(self, select = -1): nb = self.nb debug = False + self.Freeze() def UpdatePage(page, pageText): pageExists = False @@ -1537,15 +1737,13 @@ class wxPythonDemo(wx.Frame): if page: if not pageExists: # Add a new page - nb.AddPage(page, pageText) + nb.AddPage(page, pageText, imageId=nb.GetPageCount()) if debug: wx.LogMessage("DBG: ADDED %s" % pageText) else: if nb.GetPage(pagePos) != page: # Reload an existing page - nb.Freeze() nb.DeletePage(pagePos) - nb.InsertPage(pagePos, page, pageText) - nb.Thaw() + nb.InsertPage(pagePos, page, pageText, imageId=pagePos) if debug: wx.LogMessage("DBG: RELOADED %s" % pageText) else: # Excellent! No redraw/flicker @@ -1565,7 +1763,9 @@ class wxPythonDemo(wx.Frame): if select >= 0 and select < nb.GetPageCount(): nb.SetSelection(select) - + + self.Thaw() + #--------------------------------------------- def SetOverview(self, name, text): self.curOverview = text @@ -1590,6 +1790,70 @@ class wxPythonDemo(wx.Frame): else: app.RestoreStdio() print "Print statements and other standard output will now be sent to the usual location." + + + def OnAUIPerspectives(self, event): + perspective = self.perspectives_menu.GetLabel(event.GetId()) + self.mgr.LoadPerspective(self.auiConfigurations[perspective]) + self.mgr.Update() + + + def OnSavePerspective(self, event): + dlg = wx.TextEntryDialog(self, "Enter a name for the new perspective:", "AUI Configuration") + + dlg.SetValue(("Perspective %d")%(len(self.auiConfigurations)+1)) + if dlg.ShowModal() != wx.ID_OK: + return + + perspectiveName = dlg.GetValue() + menuItems = self.perspectives_menu.GetMenuItems() + for item in menuItems: + if item.GetLabel() == perspectiveName: + wx.MessageBox("The selected perspective name:\n\n%s\n\nAlready exists."%perspectiveName, + "Error", style=wx.ICON_ERROR) + return + + item = wx.MenuItem(self.perspectives_menu, -1, dlg.GetValue(), + "Load user perspective %d"%(len(self.auiConfigurations)+1), + wx.ITEM_RADIO) + self.Bind(wx.EVT_MENU, self.OnAUIPerspectives, item) + self.perspectives_menu.AppendItem(item) + item.Check(True) + self.auiConfigurations.update({dlg.GetValue(): self.mgr.SavePerspective()}) + + + def OnDeletePerspective(self, event): + menuItems = self.perspectives_menu.GetMenuItems()[1:] + lst = [] + loadDefault = False + + for item in menuItems: + lst.append(item.GetLabel()) + + dlg = wx.MultiChoiceDialog(self, + "Please select the perspectives\nyou would like to delete:", + "Delete AUI Perspectives", lst) + + if dlg.ShowModal() == wx.ID_OK: + selections = dlg.GetSelections() + strings = [lst[x] for x in selections] + for sel in strings: + self.auiConfigurations.pop(sel) + item = menuItems[lst.index(sel)] + if item.IsChecked(): + loadDefault = True + self.perspectives_menu.GetMenuItems()[0].Check(True) + self.perspectives_menu.DeleteItem(item) + lst.remove(sel) + + if loadDefault: + self.mgr.LoadPerspective(self.auiConfigurations["Default Perspective"]) + self.mgr.Update() + + + def OnTreeExpansion(self, event): + self.tree.SetExpansionState(self.expansionState) + def OnHelpAbout(self, event): from About import MyAboutBox @@ -1710,6 +1974,15 @@ class wxPythonDemo(wx.Frame): self.mainmenu = None if self.tbicon is not None: self.tbicon.Destroy() + + optionsFile = opj(wx.GetHomeDir() + "/.wxPyDemo/wxPythonOptions.txt") + fid = open(optionsFile, "wt") + fid.write("ExpansionState: %s\n"%self.tree.GetExpansionState()) + fid.write("AUIPerspectives: %s\n"%self.auiConfigurations) + fid.close() + + self.mgr.UnInit() + del self.mgr self.Destroy() @@ -1800,7 +2073,30 @@ class MySplashScreen(wx.SplashScreen): if self.fc.IsRunning(): self.Raise() + +class wxPythonTreeCtrl(ExpansionState, CT.CustomTreeCtrl): + def __init__(self, parent): + CT.CustomTreeCtrl.__init__(self, parent, style=wx.TR_DEFAULT_STYLE| + wx.TR_HAS_VARIABLE_ROW_HEIGHT) + self.SetSpacing(10) + self.SetWindowStyle(self.GetWindowStyle() & ~wx.TR_LINES_AT_ROOT) + + self.BuildTreeImageList() + + + def BuildTreeImageList(self): + imgList = wx.ImageList(16, 16) + for png in _demoPngs: + imgList.Add(images.catalog[png].getBitmap()) + + self.SetImageList(imgList) + + def GetItemIdentity(self, item): + return self.GetPyData(item) + + + class MyApp(wx.App): def OnInit(self): """ @@ -1876,7 +2172,7 @@ is loaded in another tab for you to browse and learn from. #---------------------------------------------------------------------------- if __name__ == '__main__': - __name__ = 'Main' + __name__ = 'MainWithoutFNB' main() #---------------------------------------------------------------------------- diff --git a/wxPython/demo/TreeCtrl.py b/wxPython/demo/TreeCtrl.py index 397deb0a0a..fd2cbe1d20 100644 --- a/wxPython/demo/TreeCtrl.py +++ b/wxPython/demo/TreeCtrl.py @@ -30,8 +30,9 @@ class TestTreeCtrlPanel(wx.Panel): tID = wx.NewId() self.tree = MyTreeCtrl(self, tID, wx.DefaultPosition, wx.DefaultSize, - wx.TR_HAS_BUTTONS - | wx.TR_EDIT_LABELS + wx.TR_DEFAULT_STYLE + #wx.TR_HAS_BUTTONS + #| wx.TR_EDIT_LABELS #| wx.TR_MULTIPLE #| wx.TR_HIDE_ROOT , self.log) diff --git a/wxPython/demo/bmp_source/book.png b/wxPython/demo/bmp_source/book.png new file mode 100644 index 0000000000..7d863f9497 Binary files /dev/null and b/wxPython/demo/bmp_source/book.png differ diff --git a/wxPython/demo/bmp_source/clipboard.png b/wxPython/demo/bmp_source/clipboard.png new file mode 100644 index 0000000000..8e8b106dd4 Binary files /dev/null and b/wxPython/demo/bmp_source/clipboard.png differ diff --git a/wxPython/demo/bmp_source/code.png b/wxPython/demo/bmp_source/code.png new file mode 100644 index 0000000000..8fcf0f09ae Binary files /dev/null and b/wxPython/demo/bmp_source/code.png differ diff --git a/wxPython/demo/bmp_source/core.png b/wxPython/demo/bmp_source/core.png new file mode 100644 index 0000000000..1bbc1d39bc Binary files /dev/null and b/wxPython/demo/bmp_source/core.png differ diff --git a/wxPython/demo/bmp_source/custom.png b/wxPython/demo/bmp_source/custom.png new file mode 100644 index 0000000000..c1974cda74 Binary files /dev/null and b/wxPython/demo/bmp_source/custom.png differ diff --git a/wxPython/demo/bmp_source/deleteperspective.png b/wxPython/demo/bmp_source/deleteperspective.png new file mode 100644 index 0000000000..6d0d29d760 Binary files /dev/null and b/wxPython/demo/bmp_source/deleteperspective.png differ diff --git a/wxPython/demo/bmp_source/demo.png b/wxPython/demo/bmp_source/demo.png new file mode 100644 index 0000000000..47c73fc4a8 Binary files /dev/null and b/wxPython/demo/bmp_source/demo.png differ diff --git a/wxPython/demo/bmp_source/dialog.png b/wxPython/demo/bmp_source/dialog.png new file mode 100644 index 0000000000..bf02592036 Binary files /dev/null and b/wxPython/demo/bmp_source/dialog.png differ diff --git a/wxPython/demo/bmp_source/exit.png b/wxPython/demo/bmp_source/exit.png new file mode 100644 index 0000000000..63232417a4 Binary files /dev/null and b/wxPython/demo/bmp_source/exit.png differ diff --git a/wxPython/demo/bmp_source/expansion.png b/wxPython/demo/bmp_source/expansion.png new file mode 100644 index 0000000000..477387c611 Binary files /dev/null and b/wxPython/demo/bmp_source/expansion.png differ diff --git a/wxPython/demo/bmp_source/find.png b/wxPython/demo/bmp_source/find.png new file mode 100644 index 0000000000..caa587d78f Binary files /dev/null and b/wxPython/demo/bmp_source/find.png differ diff --git a/wxPython/demo/bmp_source/findnext.png b/wxPython/demo/bmp_source/findnext.png new file mode 100644 index 0000000000..f5a4e1dc06 Binary files /dev/null and b/wxPython/demo/bmp_source/findnext.png differ diff --git a/wxPython/demo/bmp_source/frame.png b/wxPython/demo/bmp_source/frame.png new file mode 100644 index 0000000000..4f9be452ff Binary files /dev/null and b/wxPython/demo/bmp_source/frame.png differ diff --git a/wxPython/demo/bmp_source/images.png b/wxPython/demo/bmp_source/images.png new file mode 100644 index 0000000000..cc4a4b9212 Binary files /dev/null and b/wxPython/demo/bmp_source/images.png differ diff --git a/wxPython/demo/bmp_source/inspect.png b/wxPython/demo/bmp_source/inspect.png new file mode 100644 index 0000000000..1dd74bea16 Binary files /dev/null and b/wxPython/demo/bmp_source/inspect.png differ diff --git a/wxPython/demo/bmp_source/layout.png b/wxPython/demo/bmp_source/layout.png new file mode 100644 index 0000000000..b4aaad9a45 Binary files /dev/null and b/wxPython/demo/bmp_source/layout.png differ diff --git a/wxPython/demo/bmp_source/miscellaneous.png b/wxPython/demo/bmp_source/miscellaneous.png new file mode 100644 index 0000000000..f06e510dea Binary files /dev/null and b/wxPython/demo/bmp_source/miscellaneous.png differ diff --git a/wxPython/demo/bmp_source/modifiedexists.png b/wxPython/demo/bmp_source/modifiedexists.png new file mode 100644 index 0000000000..99bec7a1b6 Binary files /dev/null and b/wxPython/demo/bmp_source/modifiedexists.png differ diff --git a/wxPython/demo/bmp_source/morecontrols.png b/wxPython/demo/bmp_source/morecontrols.png new file mode 100644 index 0000000000..31d03a583c Binary files /dev/null and b/wxPython/demo/bmp_source/morecontrols.png differ diff --git a/wxPython/demo/bmp_source/moredialog.png b/wxPython/demo/bmp_source/moredialog.png new file mode 100644 index 0000000000..6e61e0e0f8 Binary files /dev/null and b/wxPython/demo/bmp_source/moredialog.png differ diff --git a/wxPython/demo/bmp_source/overview.png b/wxPython/demo/bmp_source/overview.png new file mode 100644 index 0000000000..12ec79e4e0 Binary files /dev/null and b/wxPython/demo/bmp_source/overview.png differ diff --git a/wxPython/demo/bmp_source/process.png b/wxPython/demo/bmp_source/process.png new file mode 100644 index 0000000000..2206448e42 Binary files /dev/null and b/wxPython/demo/bmp_source/process.png differ diff --git a/wxPython/demo/bmp_source/pyshell.png b/wxPython/demo/bmp_source/pyshell.png new file mode 100644 index 0000000000..4eaa79a161 Binary files /dev/null and b/wxPython/demo/bmp_source/pyshell.png differ diff --git a/wxPython/demo/bmp_source/recent.png b/wxPython/demo/bmp_source/recent.png new file mode 100644 index 0000000000..6a9bf03707 Binary files /dev/null and b/wxPython/demo/bmp_source/recent.png differ diff --git a/wxPython/demo/bmp_source/saveperspective.png b/wxPython/demo/bmp_source/saveperspective.png new file mode 100644 index 0000000000..8d8bd6fed0 Binary files /dev/null and b/wxPython/demo/bmp_source/saveperspective.png differ diff --git a/wxPython/demo/encode_bitmaps.py b/wxPython/demo/encode_bitmaps.py index d2b5402c36..88f93d35a2 100644 --- a/wxPython/demo/encode_bitmaps.py +++ b/wxPython/demo/encode_bitmaps.py @@ -100,6 +100,33 @@ command_lines = [ "-a -u -n _book_green bmp_source/book_green.png images.py", "-a -u -n _book_blue bmp_source/book_blue.png images.py", + "-a -u -c bmp_source/book.png images.py", + "-a -u -c bmp_source/clipboard.png images.py", + "-a -u -c bmp_source/code.png images.py", + "-a -u -c bmp_source/core.png images.py", + "-a -u -c bmp_source/custom.png images.py", + "-a -u -c bmp_source/deleteperspective.png images.py", + "-a -u -c bmp_source/demo.png images.py", + "-a -u -c bmp_source/dialog.png images.py", + "-a -u -c bmp_source/exit.png images.py", + "-a -u -c bmp_source/expansion.png images.py", + "-a -u -c bmp_source/find.png images.py", + "-a -u -c bmp_source/findnext.png images.py", + "-a -u -c bmp_source/frame.png images.py", + "-a -u -c bmp_source/images.png images.py", + "-a -u -c bmp_source/inspect.png images.py", + "-a -u -c bmp_source/layout.png images.py", + "-a -u -c bmp_source/miscellaneous.png images.py", + "-a -u -c bmp_source/modifiedexists.png images.py", + "-a -u -c bmp_source/morecontrols.png images.py", + "-a -u -c bmp_source/moredialog.png images.py", + "-a -u -c bmp_source/overview.png images.py", + "-a -u -c bmp_source/process.png images.py", + "-a -u -c bmp_source/pyshell.png images.py", + "-a -u -c bmp_source/recent.png images.py", + "-a -u -c bmp_source/saveperspective.png images.py", + + " -u -c bmp_source/001.png throbImages.py", "-a -u -c bmp_source/002.png throbImages.py", "-a -u -c bmp_source/003.png throbImages.py", diff --git a/wxPython/demo/images.py b/wxPython/demo/images.py index 86e033f4a8..7c7827f6ff 100644 --- a/wxPython/demo/images.py +++ b/wxPython/demo/images.py @@ -1,8 +1,7 @@ #---------------------------------------------------------------------- # This file was generated by encode_bitmaps.py # -from wx import ImageFromStream, BitmapFromImage -from wx import EmptyIcon +from wx import ImageFromStream, BitmapFromImage, EmptyIcon import cStringIO @@ -13289,3 +13288,1124 @@ def get_book_blueImage(): stream = cStringIO.StringIO(get_book_blueData()) return ImageFromStream(stream) + +# ***************** Catalog starts here ******************* + +catalog = {} +index = [] + +class ImageClass: pass + +#---------------------------------------------------------------------- +def getbookData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\x15IDAT8\x8d\xa5\x931k\x14A\x14\xc7\x7f\'{\xc9y\x90\xbb\x8d\xa2\xd1\ +$\x8aJ\x161\x04-N\xbb\x83\x10\xc1\x08b\xa1\x85\xdf becec%\xf8\x01$\x9dB\x8a\ +\x94b\x11P!6b\xa5\x86D\x82\xb1\xf1\x0e1r\x85\xc8\xa5\xb9u\x03\xd9y\xef\xedX\ +\\\xf6H\xe0\x02\x82\x03\xc3\xc0\xbcy\xff\xf7\x9b\xff\xbc)x\xef\xf9\x9f\x11\ +\x00\xdc}\xbeR\xcb723lw.\xde\x9f^\x03\xb8\xfd\xe4UME\x10\x11D\x1c\xe2\xba\ +\xeb\x87\xf9{k\x85\xb9g\x9fj\xc0\xea\xe9\xa3e\xb2\xcc0\xcb\xc8\xccH\x9d\xf0\ +\xe3w\xe7\xa2\x8a06|\xf8\x0b\xdePUT\x04U\xe5\xeb\xf7_\x0c\x96\x06/\x07>\xb3U\ +\n\x87xx\xf3|\x0f+\xcb2\x96?\xff\xa4\xd1j/\xab\x08\xd7.E\xdc\xb8rn\x1fzm\xee\ +)\x03\xc5\xe2j\x00`f\x00lll`\xd6\xad435\xc5\xd9#\xc1\xc9\xa1\xa1\n\xa7F\x86Y\ +__\xc7\xccH\x92\x84z\xbd\x8es)\xe2\x06\xba\x1e\xa8*\x00Q\x14af\x88\x08\xadV\ +\x8b\xd6\xe6&\x93\x93\x93\xa4i\x99(\x8a\x10\x11\xe28\x06\xc0\xa5)np\x80\xc0{\ +P\x11\x00\x1a\x8d\x06Y\x96!"T\xabU\xe28&M\xd3^LUI\x92\x84\xd1\xd1Q\x9cs\x88s\ +\x04\x99)\xb2+\x10EQ\xd7(U\xda\xed6{\x9fxbb\x02U\xa5\xd3\xe9\x00 \xce!"\x04\ +\xaa\x8a8\x87\xf7\x9ef\xb3\xd9\xf3\xa0R\xa9\xf4\x92\xf3XN0>>\xde\x15p{\x04\ +\xf6\x128\xe7\xd8\xda\xda\xc2{\xdf\xa3\xc8\tr\x0fD\x04\x15G\xa0\xd2M\x00(\ +\x95J\xbd\x8a\xe5r\x990\x0c\t\xc3\x90 \x08(\x16\x8b\xfb\x04\xf3\xab\x06"\x0e\ +\x97\xa6L?X\xe8uX\x8ew\xab~\x01\xef=\x8bo>v+\xaab\xbb\x89f\x86\x8a\x12\x88\ +\x08g\xc6\x8e\xf5\xed\xf3\x97\xefWPQ\xae\xcf\xce\xf4\x8d/-\xbd&\xd8\xd9\xd9a\ +3\xfe\xb3\xaf\xc7s\x82\x13#\xc713\x96\xdf\xbe\xebK\x90\x99Q8\xe87Fw\x1e/lo\'\ +WU\x84j8\xfc\xad\xf9\xe2\xd1l\xbfs\x07\n\xfc\xeb\xf8\x0b\x86F\x9b\xeen\xf6F\ +\xb3\x00\x00\x00\x00IEND\xaeB`\x82' + +def getbookBitmap(): + return BitmapFromImage(getbookImage()) + +def getbookImage(): + stream = cStringIO.StringIO(getbookData()) + return ImageFromStream(stream) + +index.append('book') +catalog['book'] = ImageClass() +catalog['book'].getData = getbookData +catalog['book'].getImage = getbookImage +catalog['book'].getBitmap = getbookBitmap + + +#---------------------------------------------------------------------- +def getclipboardData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\x00IDAT8\x8d\xad\x91?k\x14Q\x14\xc5\x7f\xf3f6f\xb3k`\xdd` \xec\x86\ +\x80\x12-TP\xc4R\xc1T6\xe2\x17\xb0\x11\xfc\x06\x01S\xf8\xa7\x15\x02!\xc1\xc2\ +JK+\xf1\x13\x18\xb1\xb2\x08\x16\x11\x115.\x88Q\x82\xc9B\xd6\x1d7\x19g\xe6\ +\xdd{-\xd6\xac\t\x1bm\xf4t\x97\xfb\xce\x8f\xf3\xee\x81\x7fT\xf0\xa7\xc5\xdc\ +\xdc\xdc\xb1\xe1\xe1\xe1\xc7f&\xedv\xfb\xf2\xf4\xf4\xf4\xea_\x01\xf9\xbd\x13\ +ST\xeaw\x8d`\xb2\xa9\xd5p\xf3\xe8\xd5\xe2\xd0\xe8\x11W(\x14\xd8l,I\xe5\xed\ +\xfd\x1f\x15\xbf&\xe6YI\x93\xad\x99\xc37W\x17\x01\xa2\x1ejd|\xd6U\xab\xa7\ +\xddH\x99w\xcdK\\8w\x91<\xcf\x01\x18\x1b\xbb\x12>O\xa3\xd2\x94<\xc4o\'g\xe5\ +\xf3\xc7Y\xe0\xcc\x1e\x80j0\x19\x1d*\xf3\xe0\xe5I^\xbfy\xca\x8b\xa5W\x88\x08\ +\x00\xce9\x9a\x1bM>\x1d?\xcf\xb5\xda3|\xa6\x93;\xbe\x1e\xc0DAr\x8aC%\xe6\xe7\ +\x17\xf6\xfcS\x04\xbc\x87\xdb\xb7f\xa0\x1e \xe2\xe9\x03\xa8)x\x8f\x99\xd2\ +\xe9x\x1a\x8dm\xc20"\x8e\xd7i\xb7\xd7\xa8\xd5j\x98\x01\xaa\xe4\xbf\x92\xed\ +\x05d\x19H\x8e\xaaQ.G\x8c\x8f\x1f \x08\x1ci:J\x92T\x18\x1c<\xb8\x93\x15\xdd\ +\x17 \xde!\x8a\x99\xd1j\t\xcb\xcb\t\x03\x03\x05:\x9du\xe2\xf8\x0b\x13\x13\ +\xf5\x9e)\xf3b\xfd7\xd04\xc0{D\x0c\x11\xc5\xb9\x143\xc19%\x0c!\x08\x1c` \x8a\ +\xa9h\x1f@\xf2\x1cD03\x92$\'\x8e\xbfR(D\xe4\xf9\x16Y\xf6\x9d,\xcbv\xea"\xff\ +\xed\xdf]cN7A\x80sCT*%\xc2\xd0\xe1}D\xb1\x18Q*U\xbbG4Cu\x9f\x16\xf0\xdd\x04\ +\xa4-\x16\xe6ot\x1f\xef\x92\x19\xd4\xab%\x10A\xf7M\xe0\xfdJ\xda\x8eO]\xaf-B=\ +\x00Uz\x14\xd5\xde\xdc\xdah\x82\xd9\x87>@\'\xfevG\xcc?\x11o\x81\x99\x80\x19^\ +\x15\x11\xc5\x8b\xe0E\x10\x11\xbc\xca\xfb I\x1f\xf1\xbf\xf4\x132b+ao\xc1`\ +\xed\x00\x00\x00\x00IEND\xaeB`\x82' + +def getclipboardBitmap(): + return BitmapFromImage(getclipboardImage()) + +def getclipboardImage(): + stream = cStringIO.StringIO(getclipboardData()) + return ImageFromStream(stream) + +index.append('clipboard') +catalog['clipboard'] = ImageClass() +catalog['clipboard'].getData = getclipboardData +catalog['clipboard'].getImage = getclipboardImage +catalog['clipboard'].getBitmap = getclipboardBitmap + + +#---------------------------------------------------------------------- +def getcodeData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\xf6IDAT8\x8dU\xd3Mh\x1cu\x18\xc7\xf1\xef\xcc\xce\xec\xbb\xbb\xeb\ +\x9a\x90X\x83\xedz\xa8\x87\xf8\x82\x82\x8d9\xa4\nR\x15S\xc5I\xfaH\xad\ +\xe9\xf5C\xa5\x84\xe8\x00\xb8\xd9\x8b\x17\xbe<\xbd{\xff\xc4\xb5\xd5\xdb\xc8|\ +\x8a\xca\xab3`\xe1\xfe\xf7\x8e\x93(x\x84m\xc3\x95\xb9s\x04S\x07\xc8\xf8\xd0\ +\xea\xc5\xa8Xl,\xbc\xf5\xac\x05p\x01\x16\x86\xf6\x8a\x8f\xa6\x0e\xe3\xc5\x90\ +h4\xc0qq\x9b\r\xc2\x00\xd6N\x9cB\xe6\x8a`!\xeb\xb94\xda\x03\xb4\x88\xd7\xb7\ +\xae\xe7MU\xcf\x0e\x01o?89N\xafz\x86\xef\x96\x05\xb9\xae\xe6\xc7O.\x90\xf6-\ +\xbe\x07\xc9\xc4\xbf\x15\xb2\xb0Z\x0fQBll\x03Z\x88\xa7\x80\xe7~^^\xa3=\xf0\ +\xe8\xc5\x16\xa9-\xb1t\x10\xca\xa0\xb4\xc1XK\xb9X\xe4\xa5\xa7G\xb9\xd9\n\xd1\ +B4\xfe\x03\xa4|\xf4\xf9\'\x1f\xca\xbcq\xf8\xf1\xff\xfd\x80\xb6 \xb5E(\xc0\ +\xc2\xe9\x85u\xb2>t{!Z\xca\xd6N`\xedf3\xe0\xcc\xe22\xa5|\x86R!M)\x97\xa2\x98\ +KqG6I*\xe9\x92\xf2\\\x0eM\x8d\x90\xf2\xa0\xf1w\x17-\xe5\x8dm\xc0(u\xaevye\ +\xacvye7p\xd7fwnVL\'}?\x9d\xf6)\xe42\x94\nY~\xbdZ\xff\r\xf8a\x0b\xf8\x07_H\ +\x7f\xa7\xb7\xd5\xdc\xec\x00\x00\x00\x00IEND\xaeB`\x82' + +def getcodeBitmap(): + return BitmapFromImage(getcodeImage()) + +def getcodeImage(): + stream = cStringIO.StringIO(getcodeData()) + return ImageFromStream(stream) + +index.append('code') +catalog['code'] = ImageClass() +catalog['code'].getData = getcodeData +catalog['code'].getImage = getcodeImage +catalog['code'].getBitmap = getcodeBitmap + + +#---------------------------------------------------------------------- +def getcoreData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02aIDAT8\x8d\xa5\x92=K[a\x1c\xc5\x7f\xf7%\xe1\x9a\x171$$\x14I\xdb\x0c\ +\x01!\x15:t\x8b\x0e\xa1\x9f@\x08\x18\xbb\xd9\x8fRp\xc9*t(\xfd\x007\xae\x0e\ +\xea\xe0^i\t\x8aX\xa4\xa2\xf8\x9a\\1\x98\xa0I\xcc\x93\xfb\xe4y:XCR\x87\x0e=\ +\xfb\xf9\xfd\xcf\xf9s\x0c\xd7u5\xff!\x1b \x91HpssC,\x16\xc3\xb6m677\xd9\xd8\ +\xd8\xa0\xdb\xed\xd2j\xb5\xe8t:h\xfdt\xc7@J\x9ft:M\xb9\\\xc6p]W\x17\n\x05\ +\xda\xed6RJ\x94R\xf4z=\x84\x10H)\x11B\xa0\x94Bk\x03_\x82V\x1d\x942\x98\x9a\ +\x9a\xa2V\xab=&H&\x93$\x93\xc9\xb1hZk\xb4\xd6\x18\x86A\xb7\xdbC\xc9\x06\x11\ +\xeb\'\xc8.\x83H\x11\xdb\xb6\xa9T*\x8f\x80Q\xdd\xdd\xddq{{\x8b\x94\x92f\xb3\ +\xc9\xd9\xd9\x19\xdf\x7f\xec\xf2\xeeM\x88\xb7\xb9\x14/^\xe5\x91\xed.\x81\x80\ +\x05\x809jn4\x1a\x9c\x9e\x9e"\x84\xa0\xd9lr}}\xcd\xc9\xc9\t_\xbf|\xe6\xc3\ +\xc7O\xfc\xf2^\x13\x88d\xf1}1\xfeD\x00!\x04{{{X\x96E\xbd^\xa7V\xabQ\xaf\xd79\ +??\xa7\xef\xfbH_\xb0[\xfd\xc6\xfbB\x1e\xad5\xa6i\x8e\x03\x0e\x0f\x0f\xd9\xd9\ +\xd9\xc14M...\xf0<\x8f\xcb\xcbK\x8e\x8f\x8fi\xb7\xdb\x00\xac\xad\xad\xb1\xbc\ +\xbc\x8c\xe38X\x965\x0e\xb8\xba\xba\xc2u]\xd2\xe94\x9e\xe7\xe1y\x1e\x8dF\x83\ +~\xbf\xff\xd8\xd54yxx@J\x89m\xdb\xcf\x13\xc4\xe3q\x8e\x8e\x8e\xd8\xdf\xdf\ +\xc74M\x94R\x00\x04\x83A&\'\'\t\x85Bd2\x19&&&0\x0cc\x080\x01\x06\x83\x01\xb3\ +\xb3\xb3\x14\x8bE\x00\x94R\x04\x02\x01\x12\x89\x04\x99L\x86l6K4\x1aeaa\x81p8\ +<\xdc\xc60\x81a\x18\xd8\xb6M\xb9\\\xc6\xf3<\xb6\xb7\xb7\x89\xc7\xe3\xa4R)\ +\x1c\xc7A)\xc5\xd2\xd2\x12\xb1X\x8c\xf5\xf5\xf5\xe7S~\x8al\xdb6+++\xcc\xcf\ +\xcfspp\x00@4\x1a%\x9f\xcf377G\xb5Zeqq\x11\x80J\xa5B\xa9T\x8a\x8c\r)\x1c\x0e\ +333C.\x97C\x08A\xbf\xdf\'\x14\n\x11\x0c\x06\xb9\xbf\xbf\x07\xa0\xd5j\xb1\xb5\ +\xb5E\xa9Tr\x001\x048\x8e\xc3\xdf\xb0Q==\xed\x8f\xd9\x18\xab\xb0\xba\xbaZ\ +\xf7}\xdf\x9f\x9e\x9e~\xc9?4j\x06\xf8\r\xd2\xca\x1c\x80\xdd#\xb4\xdf\x00\x00\ +\x00\x00IEND\xaeB`\x82' + +def getcoreBitmap(): + return BitmapFromImage(getcoreImage()) + +def getcoreImage(): + stream = cStringIO.StringIO(getcoreData()) + return ImageFromStream(stream) + +index.append('core') +catalog['core'] = ImageClass() +catalog['core'].getData = getcoreData +catalog['core'].getImage = getcoreImage +catalog['core'].getBitmap = getcoreBitmap + + +#---------------------------------------------------------------------- +def getcustomData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x03\x04IDAT8\x8d\xa5\x93QlSu\x14\xc6\x7f\xff{o[z;\xdb\xb5u\xb3c\xe2,\ +\x1bA\x18f\xba,\x8bq\xa2\xa8K\xc0\x8c0\rq1D\xb2\xc0\x03\x12\x8d\t1&D\x91\xf8\ +`p\xb8DM \x91\xcd,\xf20%5\xfa\x02\xc1\xc0F@\x078p"n\x9a9\x9c\xba\xe9`\x16J\ +\xdbu\xdd\xed\xbdw\xb7\xed\xbd>\x98,@\x16_[E|\xe0\x12\xe5\xd1:\x9e\xf7\x0f\xbc\xb9\x90\x03Y\x08I\xf1\xa8\ +\x9c\xbf\x98\xa4F\xd1\t\xfe\x1e\xe3\x85\xf0\x05lg)\xf1\x9f\x0fbc\x92KW2u\xee\ +\n\xfb~l\xc5\xa5\xfa\x91e\xb1p=IZ\xd1\xbcg\xf2\xeb\xde\x827\x1f/\x1c\xfdl\ +\x88F\xa3\x87\xd5\x8f\xed\xc0s\xf5<\xe3G\xbfe\xb8/\xcd\xd0\xc9\x11v\x9di\xa1\ +\x94k\xfa\xe4\xd9/\xe6\xbd\xb5O\xef[\x00\xac\xd9z\xa0#T\xd7\x1cZVaGnf\xb4\ +\xee\xb1\xdf\x12X\xa3\xc7\x89\xd6\xad\xc5\xe7[\xc9\xe4\xd08\xef\x0e\xac\x9b\ +\x99\xca\x97\x9f\x92Uw4\\\xdbT\xb6f\xeb\x81\xbd\x8b&\x11\xa0\xed\xf1\x90Q\ +\xbf\xfc\x1e\xa5qU\x14\xc75?h$nn\xdb\xb8\xff\xa7\x89\xc5\xfe\x00\xe0\x1f\x95\ +A?\x1bMjg[\x00\x00\x00\x00IEND\xaeB`\x82' + +def getcustomBitmap(): + return BitmapFromImage(getcustomImage()) + +def getcustomImage(): + stream = cStringIO.StringIO(getcustomData()) + return ImageFromStream(stream) + +index.append('custom') +catalog['custom'] = ImageClass() +catalog['custom'].getData = getcustomData +catalog['custom'].getImage = getcustomImage +catalog['custom'].getBitmap = getcustomBitmap + + +#---------------------------------------------------------------------- +def getdeleteperspectiveData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02~IDAT8\x8d}\x93KHTQ\x1c\xc6\x7f\xe7\xdc{\xee\xd5\x19\xf3\x91\xf6\xb0\ +\xa4\xe8m\x85 -$($\xa4\xa0E\xb5\xb2E\xeb\x82"\n\xca \xa2 jc\x0f\x88 \x91\xa2\ +MD\x9b@\x08"\x08\x85\xa4\xa2\xac\x90\x1e\x9b^\x9a\xaf\xf2=\x9a:\xceL\x8c\xf7\ +\xde9\xa7E3\xa90\xf5_\x9d\xc5\xe1;\xdf\xf7\xfb\xfeG\xb4\xb5\x7f\x1e/\xcc\xcf\ +s\xb51dF\x1bH&g\xf0=\x9f\xf1\x89\xa8\x0c|=\x19\x8b\xc5w[\xb6\xfdQJ\xc9\xb7\ +\xce\x0e.\x9c;\x02\x80\xed:Nx\xe3\xfa\xb2\x1c\xe6\x8c1\x86\xa4\xa7I\x05\xd0\ +\xdd\xdbO^87\xd4\xdd7\xfct`ht\xbf\xeb\xba\xcf\xe6\xde\x95d\x19!\x04R\x82\x90\ +\x1aiI\x96\x96\x96\xb0c[E\xc9\x86u+[\x94m\xd7\xeaY\xb3\xd8\xd9\x04\x0c \x00\ +\xc7\xb1\xe9\xed\xeb\'2:J(\x9cC\xe0\xa7\x9c\xe9\xe8T\x93\xd6\xba\x0e\xb8\xfe\ +O\x07\x00B\n\xa4\x80E%\x0b\xf1\xb4`t$JWw?N\x8eC<>U\xff_\x07\x02\x90B\x10\xf8\ +\x01\x15\x95\xe5xI\x9f\xf1\xd8\x0c\x13\xc3\xc3(\xe5\xd0\xfe\xa6-\x0b\x03\x9d\ +\x82/\xed\xd0\xf1\x0e\r\x04\x06\x02\xa5\x88\xf7\xf4 \xaf\xd6\xa1Z\x1f\xa0Ba\ +\x1cGaYV\x16\x06\x03\x9d\xf0\xba\x19\x12S\x98\x1f=$\xb6\xd7b\xbewPt\xe3,nk3\ +\xb9+^\xe1o\xaeB.^\x8e\x10\xd9 \x96\xae\x81\x95\x1b\xe0\xc9\x03\xac\x8e;\x84\ +\xdf\xb6!\xbb\xbaP/\x9e\xe3/[\xcd\xe4\xb1\x8bX%KPB\xa7Cf\x04\xd2\xe7\xa4\xb4\ +\x11\xd5\xb5\x88_3\xa8\xfb\xb7p?=\x82\xc8$\xfe\xa6J&\xce7\xe2\xaf*\xc7\x8a\ +\xc7\xb1l\x1b1\xc7\x82\x9d\x81\x10\xa4@(\x0b[\xe6 \x06#04\x06\xb1$\x0c\xfeDh\ +\x81p\x14\x96\x00Kd\x8aNC\xd4\x19\xf2\xbe\x87s\xaf\x01\xf7\xca\x19\x18\x8b\ +\x92\xda\xb2\x15\x1d.F\xbd\xfbJ\xf1\x9e]\xb8\x8f\x1fAn(\xfd\xfa\xac\x83\xbf-\ +\xd8/\x9bQ\x8d\x97ad\x1c\xef\xc0Abw[H\\\xbb\x8d\xc9/\xc0\x8aD(A\xe2\xf0Q\xf4\x82\x02,?\x98\x17\xc1\xce\xecu\xb8(\x1f.\xdd\xc4\x00\nH\ +\xa5\xc0\x18H\xed\xac\xc6\xfb\xf0\x1e\xe1\x1b\xc2\t\x0f\xdbV\xf3!F\xa7\xa7\ +\x13\xf5W\x1a\x02)\xff4j\xd0\x08$\xc6h\x8c\x01\x93\xfe\x19\xc6\x180\x06!$\ +\xf1\xe9\xd8LF\xe07^\x86\x00n~\xcd\x9b\x1b\x00\x00\x00\x00IEND\xaeB`\x82' + +def getdeleteperspectiveBitmap(): + return BitmapFromImage(getdeleteperspectiveImage()) + +def getdeleteperspectiveImage(): + stream = cStringIO.StringIO(getdeleteperspectiveData()) + return ImageFromStream(stream) + +index.append('deleteperspective') +catalog['deleteperspective'] = ImageClass() +catalog['deleteperspective'].getData = getdeleteperspectiveData +catalog['deleteperspective'].getImage = getdeleteperspectiveImage +catalog['deleteperspective'].getBitmap = getdeleteperspectiveBitmap + + +#---------------------------------------------------------------------- +def getdemoData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\xe8IDAT8\x8d\xad\x93\xcdO\x9b\x05\x00\x87\x9f\xb7\xed\xcb\xdb\x8f\ +\x14F\xe8\x07lL\n\x1d-/k\xb72\xdan\x0b\xb8\xc4lx\xd8\x8c\x01\x13\x13c\xdc\ +\xc1\xc4\x7f\x80\xf3\xfe\x00\xb9x\xd6\xc3\xa2x\x14\x8d\x1e\x14\xb3\x83\xd9e\ +\xc8\xd6I\x0blmRR\x9b\xdab\xbf?^k)\xed\xdb/\xbc\xee\xe0a\x89>\xe7_~\xa7\xe7\ +\x81\xff\x88\xf0\x1a\x1b\xbd\xcf\xe7\x9b\xf1\xfb\xfdWo\xddZ\xbeY\xad*\xcd\ +\xf5\xf5\xf5\x07\xc0\xe0_\x0f&\'\'/\x04\x02\x81\xf9`\xd0\x1fXX\xb8\xe6\x9f\ +\x9arxM&\xf3\x94\xda9\x13;\x1d\x95y\xd9\x89,\xcb\xdex<\x1e\x05\xd0\xcd\xce\ +\xce\xce\xac\xac\xac\xdc^^\xbe\x11\xf4z./\xd8l\xe3\x97z\x03\xddH\xa1\xdc\xe2\ +\xa4^ \x97\xcb\xd3l\x15\xa85M\xe4rE&\xc6\xc7X]]\xbd\xb7\xb1\xb1\x11\x05\x10\ +\xb6\xb6\xb6~\xb9{\xef\x9d\xdb?=\xda#\x1a/\x93-\xaa\x08\xa2\x85\xc5\xcb&\xde\ +\x0c\xda\xb0\xda. \xea4\xb4\xdb\xa7<\t\xa5\xb1\x9e\xeb3b\xea>\x0b\x04o.\x01\ +\x03M2\x99(d\xb3\x05\x1e|\xfa\x98\xcdoS\x1c\xc4{\x88\xa2\x1e\xafl\xa1=\xb0\ +\x93\xce\xf7H\xfd\xa9RV@v\xbdA\xbe\xd4dN\x96\x17\x9dN\xa7\x0c\xa05\x18\x8c\ +\x13\x1f}\xf8\xfe\xdd\xdf\x0e\xf2T\x94\x1e\xfdA\x1f\xfb\xe8)&\xf38\x99\xc2\ +\x19\x85b\x95z\xa3MUQ\xa9T\x15\xca\x95\x06\xcei\x8b\xf6\xefz\xf5\x8f\xdd\xdd\ +\xa7\xbb\xdav\xbb-\xde\xbf\xff\xc1\xc7\xd9BS8\x88)\xf4{\x1d$m\x9d\x93S\x1d\ +\x85\xca\x19\xc3f=\xad\xd6\t\xb9\x82B\xb1X\xe1\xc7G\x87\xe8\x87\x06\xdcy\xeb\ +\xaa\xe9\xe1\xc3/\xbf\xd2d2\x99\xa3d2\x95\xbf2oG/\x19\xb9x\xd1I{`g\xdcj\xe0\ +\xbcM\x87\xddb\xc0\xe7\x9dAvM \n\'4NE\x9e\xefgq\xbb\xe7\xfc.\x97\xcb\xad\x01\ +\xaa\xe1\xc8al\xd6ae\xcc\xd1\xe0Ll0v\xceC\xb6:\x8ce\xd4\xc8y\x9b\x8eQs\x87^+\ +G\xbf\x95\xe0\xed%\x91\xeb\x8b\x93\x18\x8d\xc3Ckkk\xefi\x00\xc2\xe1\xc8\xde\ +\xa8YD\xf69\xf9k\xe9Wj\x8emF\x8c\x1a\x1a\xcd\x16\x89\xdf\xd3\x84\xc3\x11\xcc\ +\xc6\x017\xae_\xa3|\xfc\x04]?E6\x9bUJ\xa5\x92 \x00x<\x9e\xd5\xef\xbf\xfb\xe6\ +\x87\x97GZv\xcc?s\xc5\xec\xc0\xdd\xf5`\xb5I\x0c\x9b%4\x1aP\x14\xa5\xb7\xbf\ +\x7f\x98\xda\xdc\xfc:\x99H$\xeet\xbb\xdd\xc7\xe9t\xfa]\x01@\x92\xa4K\xdb\xdb\ +\xdb/\xa6\xa7\x1d\x06\t#\x08=\xca\xf5"GG\x89\xe3\xbd\xbd\xc8\xcbP(\xf44\x16\ +\x8b\x85j\xb5Z\x14(K\x92\xf4\x89^\xaf\xff\xbc^\xaf\x7f\xa6\x03PU5\xb3\xb3\ +\xb3\xb3\xaf(\xb5\xb9P\xe8\xf9a$\x12\tE\xa3\xd1g\xa5R\xe9\x05p\x0c\xf4^\xd5]\ +U\xd5/\xba\xdd\xee\x90 \x08\x96W[p\x03C@\x02h\xbf^\x8b\xff\x03\xff\x00|\xf0C\ +\xbc\xa9\xb6yV\x00\x00\x00\x00IEND\xaeB`\x82' + +def getdemoBitmap(): + return BitmapFromImage(getdemoImage()) + +def getdemoImage(): + stream = cStringIO.StringIO(getdemoData()) + return ImageFromStream(stream) + +index.append('demo') +catalog['demo'] = ImageClass() +catalog['demo'].getData = getdemoData +catalog['demo'].getImage = getdemoImage +catalog['demo'].getBitmap = getdemoBitmap + + +#---------------------------------------------------------------------- +def getdialogData(): + return \ +"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x00\x9eIDAT8\x8d\xad\x93Q\x0e\x820\x10D\xdf\x14.E\xe2\xcd*\xd1\x90z2H{\ +\xac\xf5\xc3\x14-\x02Z\xf1\xfdl2\xd9\x9dNvS\xc95\x1cAa\x08\xf6\xebp\x7f\xbd\ +\xa8\x05\xf0\xbdG\xba}=h\xe6\x91\x84\\\x83\x03\xaa\x86\x97\xfdmv\xacE:\x03<\ +\x12d\xd2\x94\xaa*\x00a\x08ff\x16\xc7XU\x01\x93k\x9e\x06\xb5&o\x06\x7fI\xf0\ +\n07\xaf\xe9\xd9`^\xe2\xda\x82\xbaS\xb7\xa9\x17g\xcc\xa2\xa4\xe2TiJ\x9bz\xa6\ +H`f\xc41\xce5'X\xd3\x8b\x04\xcb\x17j\xd0\xd1\xdf\xe8>\xb7\xecs\x07\xe8\xde\ +\x10_g\x07\x8b6\x00\x00\x00\x00IEND\xaeB`\x82" + +def getdialogBitmap(): + return BitmapFromImage(getdialogImage()) + +def getdialogImage(): + stream = cStringIO.StringIO(getdialogData()) + return ImageFromStream(stream) + +index.append('dialog') +catalog['dialog'] = ImageClass() +catalog['dialog'].getData = getdialogData +catalog['dialog'].getImage = getdialogImage +catalog['dialog'].getBitmap = getdialogBitmap + + +#---------------------------------------------------------------------- +def getexitData(): + return \ +"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\xecIDAT8\x8d\xa5\x92\xdfoSe\x18\xc7?\xef9o\x7f\xd8\xb5s\x1b+e?\xcc\ +\xea4\x82\x9aH\x14\x1d\x86\x1fj\x14CB\x8ch\xe2\xad\x17^(7\x06\x8d\xd1D\xe3\ +\xa5\x11\x07M\xa6w\xea\xa5\x89bDp\x98\xc5\x12\xc2\xc5\xd4\x10\x983\xc5\xad\ +\xba9*\x1bc\xae[\xbb\x1e\xca`=\xa7\xed\xe9y\xcf\xeb\xc5f\xf9\x03\xf8\xde=\ +\xc9\x93\xcf\xf3}\xbe\xcf#\xb4\xd6\xdc\x89$\xc0wB\xa0\x01\x05x\xb0M\x9a\xc6[\ +\xb1d\xdf\xc1h__\xa7\xefy\x94\xaf]+\x17\x96\x96\xd3v\xc3\xfbT\xc1\x9f\xb5\ +\x8d\xdeO\xb4^\x07\xfc/\x05\x87z\x07v\x0cm=|8\xb2\xe5\xd9\xe7\xb0\n\x05\xfc\ +\x15\x8b\xb8\xf6\x12\xf9\x9fG_\x1b\x1f>\xfd\xeatn\xf6C`h}\xd6\x86\x03\xbd^\ +\x1d\xda\xf6\xcaK_<\xf6\xf9\x97\xc8\xce\xcd\xdcZX\xe0jv\n\xe5\xd6\x91\x81\ +\x00\xc9\x9d\xbb\xe8\xbe\xbb]\xc6\xbe?q\xf4\xd7?\xb2\x00\xc7\x00\x84\xd6\x9a\ +\xaf\x85x\xa8k\xe7\x13\x99\xa7GF\xc22\x9e\xa0<9Iu~\x1e\x1d\x8f\xa3\x01gx\x98\ +\x16\xad\x89\xf9\x9a\xc8\xcd2\xdf\x9c9\xa3\xb2\xcb\xc5\x81!\xad/\x19\x00B\ +\x887\x1f|\xe7\xed\xb0\x8c'\xb8r\xea\x14\xf3\x99\x0c\xf9\xf1q\x84\xe7a\xb8.\ +\xa5|\x1ek\xfbv\xae\xcc\xcd\xa2\x8a\x16\xbb\xba{Li\x1a\x1f\x00\x18\x00\xb1\ +\xde\xc4\xcb\t\xb7\xc4\x8d\xd1\xb3\xf8\x86\xc9\xfd\xfb\xf6A~\x11\x1a\r\x84R\ +\xe8\xc5E\x92{\xf6\xd0\xfe\xfa\x1b\xcc\xfd\x95E\xfa5\xda\xa2\xd1\xe7\x9b\x19\ +D\xba\xbb6\xf9\xe9\x93\x14\xae\xae\xb1\xe5\xf49\xac\x93'\xe8\xd9\x14G\x86\ +\xc3`\x9atUl\x8aG\x07\xe9=\x96\xe2b[\x07\x91\x7f\xe7\x88\x05d\xb4\t\xf0}M\ +\xbdRE\x84\x83h\xd7E\xfd>\x86\xa1}\xea\x7f_\x064\xda\xb9Eml\x0cUu\x08&\x93\ +\xd4sS\xa8p\xe4\xf6\x1f\xac\x96Wo\xd4\xef\xbdg\xb3\x99/a\xb6\xb7\xe1Ye\x16\ +\xce\xa6Q\xe7~\xc4k\x80}\xdd\xa6c\xf7^d\xb4\x15],\xa2\x85\xc1\xaa\xdbp\x9a\ +\x19\x94\xf2\x85\xb4eD\x91\xd7Wp\xcf_ \xf1\xf1 \x81D\x0f\xb5e\x1b\xc7\xb2i\ +\xe9\xe8\xa4?\x95\xa2>3\x8d3y\t\xe7\xae\x10K\xb5\xfa/\xcd3\xa6\x84x$\xf9\xf0\ +\xd6\xcc\xee\xfb\xe2\xb2\x92[\xa2\xeb\x874*\x16\xc1\x1e\x1eA+E\xeb\x8b/\x10\ +\x08\x06\x998p\x80\xfa\xfc?\xfc\x86\xe1O\xae\xd9{\x8fk}\xc1\xd8\xd8#;3u\xf9\ +\xfd\xccR\x85@g\x0b\x85\x83\xfbq\x8f\x7fK\xcb\x8eG\x89=9@\xf5\xa7\x11\xa6\ +\x9fy\x8a\xc6l\x8e\x9c!\x99X\xb3\x8fH\xb8\xd8t\xf0\x99\x10\xd8 \x1dx\xb7\xbf\ +\xbf\xef\xc8\x03\xd1\xa0h]\xb1\x90\xca\xc7\xf7\x14kv\x95R \xc0\x8c0\x98\xa88\ +\x83\x1a>\n\x81\xf3\x95\xd6\xb7\x01\x0e\xe0\x00Ux\xdc\x0c\x85\xde\xeb\x08\ +\x87\xf6\x87\xf0\xa3J)V\x95vV\x1a\x8d\xd1\x9b\x9eJ\x19p^\x00\x01\xa0\t\xb8\ +\x13\xfd\x07\xd6\xc1c\x17\x8b?][\x00\x00\x00\x00IEND\xaeB`\x82" + +def getexitBitmap(): + return BitmapFromImage(getexitImage()) + +def getexitImage(): + stream = cStringIO.StringIO(getexitData()) + return ImageFromStream(stream) + +index.append('exit') +catalog['exit'] = ImageClass() +catalog['exit'].getData = getexitData +catalog['exit'].getImage = getexitImage +catalog['exit'].getBitmap = getexitBitmap + + +#---------------------------------------------------------------------- +def getexpansionData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02UIDAT8\x8d\x95\x92=o\\e\x10\x85\x9f\xf7c\xf7nlcol\x85\xc8\x05\x14HX\ +\xa2\x08XH\x81"Q\xa4H\x06\x916\xa1\x87\x86"\x12?\x00\x89\x1f\xc0\x7f\xa0w\ +\x83D\x85hh\\\xd0@\x83\x85\x14\x89\x84\xc2\x92\x8b4\xb6\xacX^\xef\xde\xbd\ +\xf7}gN\x8a\xdd`>*N33\xc593gf\xc2\xado\x8e\x7f\xda\x1a7\xf7k/\xfai\xa5o\x8d\ +\xbe\xad\xf4\xb3\xab\xbc\xcc\x8d~f\x94\xb6P;\xc7\xbb\x8a\xea\x1c\xb5\xc7\x07\ +\xf9\xe6\x8d\xd5{\xbb;\x9b\xf9\xfc\x1c./`:\x85\xc9\x05L/\x16\xb5\x02\x14\x03\ +\x8b\xd0\x1bx\x07\x08\x08\x80~\xbc\x977G\xa1\xbc\xbdF3\tP\xd6\xe0r\x02\xf3\r\ +h\xe70o\xa1\x9d-c\x0b\xed\x14\xfa\x0e\\\x10\x11\x7f\xfe\x9eK\xde\xd9\x12\x9f\ +\xbf\x0b\xa7\xa7g\x1c\x1e\xfe\xc6\xde\'\x1f\xc1\xb2\ti\xd1I\x02/`\xd517\xbc\ +\x8af\x00\x9f}\x1d\xc9\t\x18D\x18\x04\xc3\xfa\x19\xcd\x80+\x9c=\x81\xd9\x19\ +\x84\x80^\x7f\x1f\x1f\xadP\xab\xf0,\x9a\x049\x8a\x8c\x1b\x00.\x91R\xe6\xef\ +\x98\x7f\xff\x05\xf6\xc7\xaf\x90 \x7f\xf93z\xe3\x0eV\x85\xbb\x88\x80\x99\xc8\ +\xb6\xe0\xd34\rGGG\xec\xef\xef\xd3u\x1d\xbb\xb7\xef\xb2;\xde\xa2[m &D\xa2\ +\x1a\xc8\x1d3\xc7\x03\xb8\x9c\x8c\x04@)\x85\xed\xedm\xf6\xf6\xf6\x90\xc4\xb5\ +\x95U\xea\xd3\x15X\xd9\x80\x980\x12ra\xe6\x98\x89\x8apw\xb2\x96\x02\x92\x18\ +\x0e\x87\x8c\xc7\xe3e\r\xf5\xd3\xef\x88\x80W\xf0\xae\xa7\xb63\xdc\x17\x16*B\ +\x12\xd9]\xfc\x1b\x12\xd4\xe2\xd80"\xa0\xc4\xc5\xe9\xbc\n\x93\xe3\xeeD-\x05p\ +\xff\x8b\x18\xc2\x95\x80\x06\x11\xfd\xf0\x18\x8e\x7f!\xa5\x84}\xfc-\xb6y\x0b\ +\xef\xa6\x98\x89\xe8B\xe2j\x07\x00\x93\xc9%\'\'\'\xf4}\xa1\xd9\xd8\xe4\xb5\ +\xd3g\xe8\xf9\x13bJh>\xc1=b\xb6\xb0\xe0Q \x91_\xf1\xd7\xd7\xd7iF#\x0e\x0e\ +\x0e\xe8\xba\x9e\x9d\xf7>\xe4v,\xd4b\xe0\x86\xb9a\x0e\xeeZL\x80# \xa7\xc5\ +\xcf1\x1a\x8dx\xf4\xf0\xe1?vQ\xc2c\xc2[\x0f\x10\x81\xe6\xfa\x9b$fX2<\xc20\ +\x8bA\n\x84\x0f\xbe:|\xf1\xcev^\xebf\x85\xdaWj\xd7SK\xa1v\x86\xa9\xa1\xd4@\ +\xed\x0b\xde\xbe\x00\xaf\xbc2\x9cb\xe0\xe9\xd1\xf9e\x90\xfe{\x85\xff\x83\x97\ +\x08{\x81\x04G\xd2\xe2\xfd\x00\x00\x00\x00IEND\xaeB`\x82' + +def getexpansionBitmap(): + return BitmapFromImage(getexpansionImage()) + +def getexpansionImage(): + stream = cStringIO.StringIO(getexpansionData()) + return ImageFromStream(stream) + +index.append('expansion') +catalog['expansion'] = ImageClass() +catalog['expansion'].getData = getexpansionData +catalog['expansion'].getImage = getexpansionImage +catalog['expansion'].getBitmap = getexpansionBitmap + + +#---------------------------------------------------------------------- +def getfindData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\xdeIDAT8\x8dU\x93Mo\x1bU\x14\x86\x9f;\x1fwf\xec\x19\x7f\xc6\x934Np\ +\x8d\x92\x96\x80\x04\x95@\xa5U%\x84 \nH]\xb0-\x9b\xee\x80MYA\xc5/h\x17\xb0*\ +bC\x85\xb2`\xc1\x8a\rEE\x08\xa8\x00U\x88@iB\xa2@\x92\xa6\x89\xd26\xa8qj\xc73\ +\x89\x9d\xf1\xcce\x91\xc6\x89_\xe9HW\xe7\xdc\xfb\xe8\xd59\xe7\n\xa5\x14\x00W\ +\x7f\xb9\xed\xe6\xb3\xce\xcd\xfeBj(I\x926\x8f\x14+h\xed j\x0f\x03k~a\xfe\x93\ +\xad \xbc\xe0\xa4\\VVW\xb9\xf8\xd19\x8c\xfd\x8bJ\xe4]\xcb\xab\x0efl\xc0\xde\ +\xcb\'@=\x84D\xc1\xf1\xe7\x9e\xf9\xf0\xd6\xd4\x9c\xdd\x0c\xc2\xf7\xf7\xea\ +\x1a\x07\x94\x1c8+\xa5PJ\xa1\x01\xd2\xdc\xcd\r\x14,N\x8f?\x7f\xde\xf7K\x9f&I\ +,\x80}\x07\xa641\rA+\xdcfr\xf2_\xda;\x11v\xcab` \xcf\xc0p\x19\xcf\xb5\x99]\ +\xb8G\x0ch\xa6\xf3\x8e\x10F\x068\xdb\x05\xac\xcc/\xd3ix\\[\\\xa2X=\xccHu\x08\ +\xc7\x10\xdc\xaf5Y\xfbo\x96\xca\xe8\x08\xa5\xbe\x12\x8bw\xee\xa10\x10B\x7fS%\ +\xc9\xe3]\xc0O\xdf\\\xf3\xfd\xa1A\xfb\xc8+\xaf1\xf6b\x95\xa2\t\x12\xb0+\xfd\ +\xac\xcc\xae\xb2\xbcp\x9bt\xb1\x9f\x8c\x97\xc6\x90\x0e\x96e\x08\x85\xd2\xba\ +\x80\x9dv\xeb\\\xcb;\x9cu+U6\x1eB\xe4\x80\xd4\xa0\xa5`\xd3=D\xe7\xee\x06\x87\ +\xe4&\xae\xebaH\x0bS\x9a\n\x85\xda\x9fB\x1c?\xbd\xbe\x9da}\r\xcc6\x04\xe9\ +\xdd\xae6[\xb0\x11h8Q\x9a\x8a\x01\xb6-1\xa5\x85\xa1k\xbdS\x08\xc3\xad\x9a\ +\x95lRHAVB\xc1\x02O\x82\xa5@t\x04\xaa\x1d\xa0\t\r\xdb\x928\xb6\x89\xa1\x89^\ +\xc0f\xa3\xf9ec\xf1\xf7\x8e\x16\xd59:\x02\xa3e\x18\x1b\x86#U(\xe9\x0fp\xe2\ +\x06\xe9B\t\xdd0\xd05\x10\x9a\xde\x0b\x18?\xf3\xfa\x8d\xb1\x11\xbf\xf6\xc3\ +\xc4\x15f~\x9bC\x04\xdb\x88`\x9b\xbb\xd3\xff\xb0t\xe3:a\x10\xc1\xf2\xb7\x88\ +\x9d:\xba\t\xe2\xd1\xbbn\x0f^zc\x9cr\x9f\xc3\x9d\xe9i\xbe\xff\xfa;n\xfe\x98\ +\xc1vl\n\xb9,\xe5\xfe"\x0f&\xbf\xc0\xf3k\xe8\xed\xeb\xc4\xc7>F\x18V/ \x0cB\ +\x92\x9c\xe4\xd5\xd3\xa7x\xe1\xe5\x13l4B\x94\xd2\xc8\xe4\\\xb6\x9au\xfe\xfc\ +\xeb=\xf2\xb2\x88=j\xd2\x9c\xfd\x80Nx\\\x81\x16\xf7\xac\xf2\x9e-[\xea\x0c\ +\x962\x94}\x97\xb4\x84\xbeb\x8e\xa7\xde\xbd\xca\xad_\xebDs\x7f\x90\x19KqR\ +\xff\xdc\x1e\xce)\xbf\xeb@\x1a\xa6\x9a[Z\r\xa7\xfe\x9eJ\x14z[\x01q\x02J\xed\ +\x860=\xd6J\x17\x98\x998\xaf\xbf\xad\x12y\xf2\xd9\xc7\xec\x13G\xf3ou\x01\xb9\ +\\>\xb8\xf2\xd9\xa5S_M\\\xce\x818\xf8\xaf\x0eH\x8f*Y\xfch\xfd\xe7\xcb\xd1\ +\x13g\x8f\xcdl=\xd9\xfc\x1f\xfc\xf7\x0c{\xf4\xc4\x89e\x00\x00\x00\x00IEND\ +\xaeB`\x82' + +def getfindBitmap(): + return BitmapFromImage(getfindImage()) + +def getfindImage(): + stream = cStringIO.StringIO(getfindData()) + return ImageFromStream(stream) + +index.append('find') +catalog['find'] = ImageClass() +catalog['find'].getData = getfindData +catalog['find'].getImage = getfindImage +catalog['find'].getBitmap = getfindBitmap + + +#---------------------------------------------------------------------- +def getfindnextData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\xedIDAT8\x8dm\x93Il\x1bu\x14\x87\xbfY=Nl\xcf8n\x9c\xc8I\x9c\xb8Y\ +\x9c\xb0\xa9\x05\t\x1a\x02\x08A\xca*\xc1\x81\x03\x17\x10(\'\x96\x0b\x07$Z\tq\ +\x05q\x888\xd0SEU\xe5\x80\x10\\\xb8P\xa9,\x05\x03QZH)4\x04\xc2\x92\x14**\xda\ +\x12\'vg\xc6\x9e\xf1,\x7f\x0eML"\xf1\x93\x9e\xf4\x0e\xef}\xfa\xe9-\x92\x10\ +\x02\x80\x13_\xaf\xa5\xb2f\xf2\\OWG\x7f\x1c\xc7>[\x8a\x04XGg\xcd8\x0c\xc5\ +\xc5\xce\xdc\xe9;^}\xf9NvH\xfe\xafPH\xd9T"]*d\x8c\xe1~\xcb\xdc\x8e\x91\x01\ +\xcb\x0c}\x1fc\xff~\xa9\x887y\xe6\xd0kg\xff\x17\x00\x10\xef\xc8\x85\x10\x08!\ +\x90\x81\xd0u\x11a\x88^,R\x08\x1b\xb7\x9e\x9ey\xee\xe7C\xaf\x1f\x97\x00\xd4\ +\xed\x06M\xd7\xd0T\t\xcfm\xb2\xb8\xf8+~+\xc0\xe8H\xd0\xdb\x9bEm6\x89=\x8f\ +\xd0q\xd0\x87\x87\xe9\xae~3>\xf5\xd9\x07\xab\x1c~vo\x1bp\xf1\xb7?\t\xebiN\ +\xae^ W\x1ab\xa4\xd4OR\x95\xf8\xbbj\xd3[\xaf\x13y\x1e\xadj\x15\x00\xbd\\f\ +\xef\x95+\xa5S\x85\xc2\xa56\xe0\x8b\x8fN\xe6\xf3\xfd\x05c\xec\xe0CL\xdc["\ +\xa7\x81\x0e\x18\x83=\xb4j5b\xdf\'\xb2m$MC\x02\xe2f\x93V\x14\xad\xb4\x01-\ +\xdf\x9b\xf1\xd2Cfj\xb0\xc4\xc6&\x04I\xd0e\xf0\x04\x18[\x0e\x00PU6+\x15~\x17\ +\x89`\xe6\xea\xd5\xe7\xdb\x80(\x8anYofX\xbf\x0c\x9a\x0fN\xe7\xf5\xa9\xda\x1e\ +\x94k5B\xc7A\xd246+\x15\xdc\xa1q\xd6\xee~\xaca\x7f\xf9I\xd4\xde\x82\xeb6\xaa\ +\x89\xf8\x1a]\x1d`\xea\xd0\x95\x80\xb4\x0e\t\x01A\xa3\x81\xf0<6\xe7\xe7\xf1F\ +ob\xe0\xad\xa3\xa8\xb2\xb4{\x8d\xd7\xea\xf6\xbb\xf5\xd5oC9\xa8Q\x1e\x81\xd1>\ +\x98\x18\x80\xb1\x12DB\xb0\xbe\xb0\x803v3=o\xbc\x8d"\x83$+\xbb\x01\xd3\x8f?\ +\xb201\x92\xaf\x9e\x9a;\xc6\xf2\x99\x15$\xa7\x89\xe44\xb9\xb4\xf4\x0b^\x14\ +\xb1f\xf6\xd1=3\x8d\xd4\xaa\xa1h m\xf5\xb5gp\xdf\xa3\xd3\xf4\xedI\xf2\xc7\ +\xd2\x12\x9f~\xf81\xe7>\xcf`$\r\xba,\x13c\xf6=\xfeY<\xce]\x1b\xc7P\xfc\n\xd1\ +\xbeY$5\xb1\x1b\xe0:.\xb1\xa5\xf3\xc0\xc3S\xdcs\xff\x016\xea.B\xc8d\xac\x14\ +\r\xbb\xc6w\xdf\xbfHV\xcfa\x8cj\xd8?\xbdB\xe8\xde.@\x8ev\x9d\xf2\xb6-CW(tg\ +\xe8\xcb\xa7\xe8\xd4aO\xce\xe2\xc6\x17N\xf0\xc3|\x8d`\xe5,\x99\x89\x0e&\x95w\ +\x8c\x01K\xe4\xdb\x0etU\x13+\x17\xfer\xcf\xffx>\x16(\xbe\x00\xa2\x18\x84\xb8\ +\x1e\x92\x96\xe6r\xf7a\x96\xe7^R\x9e\x16\xb1>y[\xd18P\xce>\xd1\x06<8Yt\x9e|\ +\xe6\xcd\xa9\xf7\xe7\x8eX \xed\xfc\xab\x1dR\x82A\x93|\xb0\xfe\xd5\x91`\xfc\ +\xa9}\xcb\x8d\x1b\xec\x7f\x01\x00\x016\x03\x14F\xf4\xdc\x00\x00\x00\x00IEND\ +\xaeB`\x82' + +def getfindnextBitmap(): + return BitmapFromImage(getfindnextImage()) + +def getfindnextImage(): + stream = cStringIO.StringIO(getfindnextData()) + return ImageFromStream(stream) + +index.append('findnext') +catalog['findnext'] = ImageClass() +catalog['findnext'].getData = getfindnextData +catalog['findnext'].getImage = getfindnextImage +catalog['findnext'].getBitmap = getfindnextBitmap + + +#---------------------------------------------------------------------- +def getframeData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x00xIDAT8\x8d\xed\x931\n\x84@\x14C_\xfe\xcc\xad]Qd\xf6d.z\xaco1\x88\x82\ +\xa0\xfb\xb55M\x9a$\xa4H$K<\x81\xcaP\xfc\xae\xb9\xed;e\x80\xa6m\x90\xbe\x97\ +\x06\xf7\xaa\xab,d\t\x03\xfe2\xefu{}^\x93\xa3\x90>\x00\xb5\xc1\x8a\xf97\x87\ +\x18\x802\x14ww\x9f\xc6)\xc4\x80\xcb\xd2\x16\x10\r9\x04\xbc\r\xee7\xc8u\x14\ +\n\x0fi\x1b\xd4\xc37\xda\xb5\xe4\x1c\x0b,\xf4\x85\x18\xa6\x9em\xfd\x00\x00\ +\x00\x00IEND\xaeB`\x82' + +def getframeBitmap(): + return BitmapFromImage(getframeImage()) + +def getframeImage(): + stream = cStringIO.StringIO(getframeData()) + return ImageFromStream(stream) + +index.append('frame') +catalog['frame'] = ImageClass() +catalog['frame'].getData = getframeData +catalog['frame'].getImage = getframeImage +catalog['frame'].getBitmap = getframeBitmap + + +#---------------------------------------------------------------------- +def getimagesData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x03VIDAT8\x8d]\x93[h[u\x00\xc6\x7f\xffsN.M\xda\xae\xe9r\x9a\xac\x97\xad\ +\x17m\xdam:7\xa6\x8e\x81\x94\xadB\x99\xe2\xdc\x10\x86+\xd3\x81\xcc\n\x13\xd1\ +\x97\r}\x90=\x0c\x86>\xf8\xa0/\x82 \x82\xa2\x0f\xba\xa1\xc8l\x8auN\xa9V\x9cc\ +NJ\xbd4]\x9b^\xb3&]\x93\x9c\x9d\xe4\\\x92s\x8e\x0f\x11\x06\xfe^\xbf\x0b|\x0f\ +\x9fH\xde\xd0\xa8\xe1\x81\xa9!p\xcev\xc4\xeb\xcf\xc8\x92\x80{\nvE\xa0\x95LR\ +\xa9\xf9\xaf\xf5\x92\xf6\xa2O\xf1\xbb\xbaQA\xf1~>\x8f\xf0\x00\x9f\x0f\xaf\ +\xff\x04J\xa3\xda\xd8\xd7\xd9\x1c\xbd\x17\xafq\xd7\x82\xc5\x8c\xce\xce\x1d\ +\x89\x17ff\xe7\xca\x1b\x1b\xf9W\x00\xe4a1\t\xb3\x930;\x81\x93\xfa\x12\xa5m\ +\xd7\xfe\xce\xde\xc4\xc1\xff\x17T=\xd0J\x15"\xf5\n\xbd\xf7u<\x92\xc9\x16\x82\ +\xc5\xbb\xe5+\n\x81\xff\x1c\x02\x9c\x85U\xbf\xfd\xdd\x9bm\xcbui\xcc\xb5y\xe4\ +P\x13R8\x86\xbac\x80Pk\x1f\xe1p\x88\xe5\x95\x15\xc2A\x85\x86\x86\xc6\xd7\xb9\ +\x9d\xb7\xc47Gk#\x9d*\xc7\xea\xe3\x9bO7\xec<\xb07M"\x8cTO\xa2\xdd\x87\x9b\ +\xfd\x8bB&M\xa8c7\x1dG\xce\xb1\x9cw\xb95\xbb\x80nT\xc9\xe6r\x15\xc5uA\x12\\\ +\xe8\x1cz\xea\x8d\xfe\xe1\xb7\xb8Q\xee\xe6\xe2D\x00G\x86]\xe5%\x9e?Z\xe6Nz\ +\x8a\xd5\xd1\x0f\xc8\xbc{\x82\xc4\xa9\x8fQU\x95M\x96\x8dV,\x94\xe5\xe3\tF"\ +\xf7\xf7\xbcM]\xd3\xb7\xa5\xa5\xeb\xd9\xf5j\xa8\xe3\xfch\x94\x9b\x7fB\xa7\ +\x91\xe4\xf7\xf8G\\\r\xcdQ\xd9\xdaC\xdfL\x8a\xd4\xdf\xd3D\x1f8\x84_\x81\xf5\ +\x8d\x82%\x8f<\xder\xb1y\xfb\x83\xc1\xeb\x9f&G\x96\xfe\x98J\xef\x1b\xd8\xf2t\ +\x7f\xccb\x97w\x8d\xd7\x0e\xe6\xb9\x90\xf9\x82\xab\xc6\x8f\xa8k%^\xdd;\xc4\ +\xb5\xcb\x9f\x13{\xf4\x18\xe1\xc6f2kYK\t\xc5\xa2\xed\xdb\x9fyR\t5\xca\x97d\ +\xe1\xc9[b\x12\xcf\xb5\xff\x02}&T\x04\xef\xac\xf71\xb9\x12\xe6p5\x8e\x7f\xf3\ +\x0cM~\x03#\x97Fm\xdd\x86O\x92QV\xa6\xe7\xc6\xd5\x9f\xc6\x0fu=\xdc\x1bE\xd8p\ +{\x01\x0c\x1dl\x03,\x83A\xcfdp>\x8e\x13|\x0c\xed\x9f$\x94\x8a\xe0\xb9\xf8\ +\xfd\x02I\x16(z\xde<\xf9\xfd{_\x1dnjk:\xf5\xd0@b_wO\xa4f\xb2\xca`\x96p\xaa%6\ +\x92\xabD\x17\x16\xc9IK\xac\xedq\xe9jiE\x02\x84\x10H\x92L\xceu\xf9pi\xb6\xf0\ +\xc4\xe5O~\xfdlq*\r\xae\x01e\x1d\x0c\x03\xc9\xb2p\x13\x05\x16\xea\xd3\xe4\ +\xbal\xaaj7\xcd\xf1N<\x17\x84\x00\t@H\x10\x08\x90/[\x9c\x1e\x1fK\xdd\xac\xe4\ +\xf3\xb5\x12\xa3\x84\xd0\xca\xc4v;l{\xc9\xe1\x96\n]\x03#\x04\xc3A\xc0\x05\ +\x04\x92W\x05\xd7\x84\x8d"\x18:\xc5\x1c\xd1\xb1\xe4D\x91\xd5T\x16\xabP\xc4\ +\xd3L\xf29\x97K\x93P\xd8z\x80=G^\xc66+\xb5\x87\x01\x8a\xa2F\x89\x0c\x1e\xc7O\ +\x1d\x8e\xed\x12\xed\xdf_\xe9\x8a\x98\xfc6\xf6>\xdeZ\n\x1f.w*A"C\xc3<{\xf2\ +\x1cR \x80Qv\t\xf8$\x14E\t\x88\xd1\x1f\xa6\x917\xb5!\t\t!\xa0j\x1bgm3\x7f\ +\xc6\xd25t]\xc7q@Q\x14\xc2\x91\x16\x1c\xdb\xc4\xb6,\\\xcfC\x96d\x963Y\xed_\ +\x8b\xf2~\x05\xbf\xa2\xca\x13\x00\x00\x00\x00IEND\xaeB`\x82' + +def getimagesBitmap(): + return BitmapFromImage(getimagesImage()) + +def getimagesImage(): + stream = cStringIO.StringIO(getimagesData()) + return ImageFromStream(stream) + +index.append('images') +catalog['images'] = ImageClass() +catalog['images'].getData = getimagesData +catalog['images'].getImage = getimagesImage +catalog['images'].getBitmap = getimagesBitmap + + +#---------------------------------------------------------------------- +def getinspectData(): + return \ +"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\xbcIDAT8\x8d\xa5\x93[H\xd3Q\x1c\xc7\xbfg\xff\xddt\x17\xafs*s\x16&\ +\x16\xe6\x15\xd34\xb7d\x19\x96\x05\x12\n\x15I\x84\x08\xf5\xe2\xa5\xdbCD\x81\ +\xe5\x9b\x0fj>\x85a\x05\x05\x95>J\x84Q\x16M\tGF\xa1\xcbk\xe56un\xfb\xdb\x96\ +\xee\xe2\x9c\xff\xd3C\xcb\xe6\xc0'\x0f\x1c8\xfc~\xe7\xf7\xe3\xf3\xfd\x9d\xef\ +!\x94R\xecd\xf1vT\r\x80\x1f\x1e\xa0\x1c\xf2;\xdb_<\xb0\xcc\xcf\xe5\x05\x02\ +\x1cX\x87\x1d\x02\xa1\xc8x\xa7\xb5!W\xa5J\\\x0f\xbfOB%\x94i\xabcj\xaak\x96K\ +\xb59\xfey\x93\xc9;\xf8\xea\xbd[\xaf\xff\xe4/\xd6\x1dS-.\xfe\xe4\xcb\xa4\xf1\ +\xe9\xdd=\xb7g\xb6%\xd8\xb77wyn\xf6\xebR\xed\xb9\x13rU|r\xc03&\x9a\xe0\xc7\ +\xab\x1c\x86\xfe\xb7\xf3\x19G\xf2\xb3\xac6\xd34\x00\x12Z\xc3\x03\x00\x8dFC.7\ +\xb6\xd7\x18\x86\xde\x98\x0e\xa4i\x17\x8d\xef\xcc\x93\x0bS\xac\xd5\xed\xf2\ +\xb8\x00\xac\x14\xa7V\xcc}{m\x18/(\xd0\xe1JS\xfb]B\x08o\x0b\x81^\xaf\xe7\x97\ +\x95^\xe8t.\xb0\xab\x93/\xed\xe3\xd3\x0c\xeb'\x11\x1c\xcb\xc8\x03\xbf]^\xd6%\ +\x16D*\x0b\xd4:j\xb3\x983\xe4qqM\x00Z\x01\xacm\x12\x00\x10\xf9|\xee\xa4xi\ +\xe2*\x8f\xf0\xd77\x02\x9c\xd3a\xb3\xcf\x0c\x8f\x0c\xe9g\xd8\xb1Q\x8f\x7fe\ +\x9aG\x18;k\xb5\xba\xf6g\x16\xc9\x00\x08\xb7H\x00\xc0\x88\xc5\x92>\x97\xef\ +\x97\x98!L\x80!\x8c_\xc0\x08\xdd\x04`\xd76\xbc6!?\xc2I\x08\xd6\xb2\xf2r\xa4\ +\xc9\x89\xea\x91\xd0\xd9\xfd;\xd0\xee\x9e\x96.\x99 \xfa\xa9\xc3\xb3\x18\x99 \ +Q\xb9\xe5\xe2\xb8\xe8\xc2\x94r%\xa5\\\x80\x10\x12=\xfcc \xad\xff\xe6#E\xf1!\ +\xdd%\x004\x9c`}\xc9f\xb6W\x9d\xa9\x9fx6\xdaUhs[b\xa5By\xb2\\\x14\x93\x15%\ +\x8e\xcd1\xda\x0c\x87koUi\x8d\x93\xdf\xbf|\x1c\x19\x9c\x01\xb0\xe9\x07B)\x05\ +!\x84\x01\xa0\x00\xa0\xbe\xda\xdcymj\xec\xb3n\xdc`\xb0\x88y\x91^\xb9R&\xed\ +\x1dx\xb2g\xd9\xf8p6;\x96d\xaaO\xddK\xb7,,\xcdq\x1c\xb7\xbe\xc5H\x84\x90H\ +\x00\xca\xe0F\xc5\xd1\xd3\xf9\x89JI\x82\xc7\xe7v\xf4\xf6=\x1f\x05\xc04V\xee>\ +_Y\xae\xa9\x9fr\x8aS\x1bZ\xee\x9b\xfe\x8a\xa7\x14\xc1&<\x00\x12\x00)\x00\xb2\ +\x01\x14\x01(\x01p\x10@\x1e\x80]\x00\xa47\xaa\xd3\xbb\xda.j\xa9y\xec\xc3qJ\ +\xe9\xff\x06\x94R\xb4\xb5\xb5\x91\xe0\x13\xc9\x01$\x00H\n\x12E\x01\x10\xd6\ +\xd5\xd5\x11J)jK\x14=\xd7\xcf\x96\xd0\x8e\xe6\x93\x1dd\xbb\xef\x1c\xea6J)\ +\x17\x9e\xaf\xc8U\x11\xd5+\xc2\x0b\ +\x91\x0e\xb9,\xf6\xaby\xcd\x8b\xac\xe6\x1b\xd3\xefim\x97\x02\xaa`\xbb\x93\ +\xcf\xfd\xe0}C\xdd\xee4u\xf2\xf6\r\xf0\x83\x15\x02\xd3\x0f\x12\x82uw{\x99\ +\x8a\x04h\xa9\xabm_\xd5\x99\x7f\r@7\xf5\x04\x07#\x0f\xe1\xc30\xe8\xab\xc0\ +\x14\x08\xf8\xb9\x92\x93\xc3\xcc\x85\xc1\xe8\xfb\xb3\xed\x8e\xf4n\x0f[N\xb4\ +\xe0hv\xf2z\x02,eQ\xb8\xd3\xd5\xa0\xd7\xa7x\xb4p\xd4\x82\xa9\x00\xac\xcd\x82\ +\xb1\xaf`\x18P}\x14\xb6\xec\xa5x\xd2=`O\xad\x19\xf57m\xc5g~\xe3\xd1\xd0s\x1e\ +{z0\xf4 {2*\xd1\xfc\x92\xad\x1b\xb3\x16\x99\xd3\xe1\xdf@6\x96\x808a\xb0\x1f\ +\xa6\xbf\x10\x8dZ`\x9b\x9fc\xca\x8e\x87\x11\xca\x8b\xca0\xccy\x8c\x9fst\xf8n\ +A\xccDoz6\xd3\xf6`MJ\x8d\x16\x8bA\x14\x98\x9e\x00\x11P\x8ap\xc4\xd4F\xbdcoYm\ ++Fi\x8c\x87\xa7\x19\x8b\xf8\x10\xb1@\x81\xdd4Q"B~\x82*\x1c:\x94\xebM\xb1+\ +\xf0\x05\x99\x8ciT\xf5\x04\xef\x0c\x9ar\\D\x0cgk\xf6\xcd\xe8&U\xefJ\xc9f<\ +\xf4\x03\xa5\x14\xb6\x81\xe0\xd8\x82;R\xbd\x98(\'dz\x0e\xac\x97\xfdN\xad\x17\ +\xc8Y\x9a\xb8\x84}\xc9\xe7\n\xdc\xe5\x92|>+B\x12\xd5q\xa3\x0c\xd8\x96\xfb\ +\x8d?\xf3R@\xfb\xbb\xa7V\xfa\xce\xbf\x00\xbe\xd8\x909\xec\xce\xb6\xb3\x00\ +\x00\x00\x00IEND\xaeB`\x82' + +def getmiscellaneousBitmap(): + return BitmapFromImage(getmiscellaneousImage()) + +def getmiscellaneousImage(): + stream = cStringIO.StringIO(getmiscellaneousData()) + return ImageFromStream(stream) + +index.append('miscellaneous') +catalog['miscellaneous'] = ImageClass() +catalog['miscellaneous'].getData = getmiscellaneousData +catalog['miscellaneous'].getImage = getmiscellaneousImage +catalog['miscellaneous'].getBitmap = getmiscellaneousBitmap + + +#---------------------------------------------------------------------- +def getmodifiedexistsData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\t\x00\x00\x00\x0e\x08\x06\ +\x00\x00\x00\xfd\x946\xa8\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x01aIDAT(\x91e\x90K+\x84a\x18\x86\xaf\xf7}?c\xc6\xf8\x8c\xe93\xa7\x9cBV\ +\xe2\x07 )~\x80&\x1b\x94\x85\x85\xb2 \x0b{\xf9\r\nKC\x96\xb2\xb5\xb1QV$\x87$\ +\x8d\xc6L\x86\x91\x9c\xc6ga\x90\xc7\x02\x83\xdc\xf5\xac\x9e\xab\xee\xbb\x0b\ +\xa5\r\xdfW\xe2\x94J\xb0;,\xc4\xb4L\xccLJ\xf1\xa7\xb4\x01`xvD\x02\xf1\x08\ +\xe7&\xc7\x99\x9bAm\xbe\xd0\xbe\xd3\xca\xdc\xfc\x82\xd2\x00\xb5\r5\xd2<\xd8B\ +y\xd4\xa6\xb2\xa4\x02\xbb1\x00\xf5\x86\xe5\x95e\x004\x80(\xe1\xc4\x9cq\xcc)\ +\xb7Owd\xb8\xe0\xf1"O\xbc/\x0e\x80\x05\xe0/\xf3\x93\xcc&q\x1b\n\x987\xc8\xe3\ +\xf2\xbc}Ebi_\x15!m4\xb9\xf7k\xde\xb3p\x1b\xcb\xe3\xec\x96\xe3\xae>\xf2\x1d\ +\r\xe0\xf3\xfb0\xf7\n\xef\xb5E(\x1d\xc0I\xd9D\xec\xf0_\xc8\t:\x18W\xf1Vx\xc5\ +\xca\xc2\xcdF\x8e\xc1\xfe\x81"TT\x10\xea\x89J\xb0#\x8c\xbb\xf7@\xe82\xc0\xc1\ +\xce\xa1\xfa\xa1\xbe\x84\x8dN\x8f\tM\x968ma\xf9-Xi\xf3Yg:\xbc\xe2\x99r\x18Z\ +\x1f\xc5\xbbU\x87\xd5\xee\x13~E\x03\xf4v\xf6\x90L%I=e\xf0\xa4\x155\x91j&\xa6\ +\xc6\xe5\xcf\xa6hKL\xbc\x89\x18\xf7\x95.\xf6\x91\x07k\xb1@z\xed\xf4\xff&_U\ +\x99Pg\xc4\xe9\x8a\xfe\xdb\xf4\x01\xb4\xabp\xe3-6"\xdb\x00\x00\x00\x00IEND\ +\xaeB`\x82' + +def getmodifiedexistsBitmap(): + return BitmapFromImage(getmodifiedexistsImage()) + +def getmodifiedexistsImage(): + stream = cStringIO.StringIO(getmodifiedexistsData()) + return ImageFromStream(stream) + +index.append('modifiedexists') +catalog['modifiedexists'] = ImageClass() +catalog['modifiedexists'].getData = getmodifiedexistsData +catalog['modifiedexists'].getImage = getmodifiedexistsImage +catalog['modifiedexists'].getBitmap = getmodifiedexistsBitmap + + +#---------------------------------------------------------------------- +def getmorecontrolsData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02\xaaIDAT8\x8d\x85\xd2\xc1K\x1bY\x00\xc7\xf1\xef\xbc\x99\xc4\xa8\t\ +\xd1\x8e$P\xc9\x1e\nR\x17\xf5 K\xa1\x18]\xea\xa9\xf6 \xbd\xb8L\xfa\x17\xf4\ +\xd2\x7f\xa0\xd0\x1e\xa5\x90C/\xfe\x01{\x11:\xd2\x83\x87\xb2\xc4\x80b\xaf\ +\xd2\x92\xae\x88\xa0\x15\xe3\xc1\x1a\xa7$\xa4A\x13\x9b7\x99yo\x0f\xc5\xc6\ +\xec\xa5\xbf\xdb\xe3\xc1\x87\x1f\xef\xfd\x0c\xd7u5\xbf\xc8\xe7\x0f\x1f\x10\ +\x85\x02\xda0P\x0b\x0b\xdc\xbdw\xef\xe7\x9d\x05022B\xb5Zexx\x18\xcb\xb2\xd8\ +\xd8\xd8\xa0P(puuE\xa3\xd1 \xe2\xfb\xbc{\xf1\x02\xc2\x90\xc5W\xaf\xa8\xbe~M&\ +\x93!\x9f\xcfc\xb8\xae\xab\xe7\xe7\xe7i6\x9b\x04A\x80R\x8av\xbb\x8d\x94\x92 \ +\x08\x90RRz\xff\x9ey\xd3D\x07\x01\x9b*`\xe2\xfe\x0cCCCT*\x95\x1f\rR\xa9\x14\ +\xa9T\xaa\xa7v\xb3\xd9\x04@\x08A\xa3|\x82\xfe\xf7\x13:\xe80\xf5G\x8c?\x1f<\ +\xc04M\xca\xe5\xf2\x0f\xe0f...\xa8\xd7\xeb\xfc33\xc3\xed\xc9IB)\t\xb5\x86L\ +\x06\xd1\xe9\x10\xbe\xad\xb3\xfd\xe61J).J\xa5^\xa0V\xabQ\xa9T\xe8\xeb\xeb#\ +\x95N396\x86\x90\x12\xdam\xae\xeaut\x18\xf2{r\x98@k\x02\xadi%\x93]@J\xc9\xee\ +\xee.\xa6ir~~\xce\xc6\xe1!\x9b\'\'\x04A@\xd8j\xf1lz\x1a|\x9f\xbf?~$\x92H`\ +\x1a\x06_\xbf}\xeb\x02\x07\x07\x07\xec\xec\xec \x84\xe0\xf4\xf4\x94\xe6\xa3G\ +\x1c|\xf9\xc2\xf1\xf11\xba\xd5\xe2\xf9\xe1!h\xcd\xf8\xcb\x97\xfc\xf5\xf4)\ +\xf1x\x9c\xf5\xf5\xf5.pvv\x86\xeb\xbad2\x19<\xcf\xc3\xf3V\xb8z\xe72V\x96w\x0f+\xe4\xb3\x93\x00\x04\x8b\x81q[\x1b\ +\x8cY\xe9;\xe0\xc4\xb8%\x7f7\xc6\xca\xf2t\xc3\xb2\xf79\xc0\x18C\xb0\x18\xe0\ +\x02}\xc8q+\x1aHYv\xed\x17\xac,&e1\xe6\xfeQ\xc5\x98\x11\x17@\n\xfe\xa0\x9f[\ +\xf7\xb8\xe1]\xc71bX w\x08\xc9r\xeb\xc1w\x9a\x94\xa97.\xf2\xe1\xb0\xf1\xc9M\ +\x92\xa2r\x84_\xf0\x89\xca\x11\x17F\xc7\xb9\x99?\x0fN\xccO\x9a|\xdd\xddF\xb2\ +\\\x99L\x13[q)w\x96go\xe3\xd3n/\xb2_\xf0y}\xafJ\xfd\xcd\x0f\xf6\xf7\xf69p\ +\x0e\x98\x99\xcd!\x0eY\x7f\x141vj\x8cZ\xad\x06ClS\\.\xaa\x8d\xb0\x14\xf6\x8c\ +\x0b+\x0b\x9a\xab\x8eh\xaezRkO\xd6\x14\x96B\x01\x92D_\x05\xc9\x98\xcde\x19N_\ +\x03\x03[\xef\xb7\x98\x9f\x9d?\xf6\x9dT\x90\x04\xd0Q\xb0\xfaxU\xb7_z\x9ay\ +\xe5\x89\x0c]\n:\x03~\x97\xddjPX\n\xb5\xd3\xdc\xd1\xf3\xe8\x85\xea\xdf\x1a\ +\x9a\xf0&\x92\xf5c\x0b~\xc1\xc7\x18\xd3\xf5\x94m\x1b\xbd\xf2m8\xc9\xa4$\xc2R\ +\xd8\x89\xed;\xe8\x95o\xa3\xf5\x13\xbbO\xf8\x17\x98#;\xff\x0fgp\xcb\xdf\xf1\ +\x0b\xf3\xebQ\xc0\xa7\x02\t\xc4\x00\x00\x00\x00IEND\xaeB`\x82' + +def getmoredialogBitmap(): + return BitmapFromImage(getmoredialogImage()) + +def getmoredialogImage(): + stream = cStringIO.StringIO(getmoredialogData()) + return ImageFromStream(stream) + +index.append('moredialog') +catalog['moredialog'] = ImageClass() +catalog['moredialog'].getData = getmoredialogData +catalog['moredialog'].getImage = getmoredialogImage +catalog['moredialog'].getBitmap = getmoredialogBitmap + + +#---------------------------------------------------------------------- +def getoverviewData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x02FIDAT8\x8d}\x91ILSQ\x14\x86\xbf\xfb\xfah\xfbJ- \xa5\x0f(\xc4!\x06\ +\x03\x1b\x12\x1c!&MH\\\xb8\xab\x89F\xbb\xea\n\x87\xb8t\xe7\xc2\x95;\xd6\x86\ +\xc4H\xe2\xc6\x8d&\x0e\xc1Dqh\x88H\x08 D\x84\x04\xad\x860\xa8\xa5\xa5\xb6\ +\x85\xd0\x89\xf6\xbd\xe7\x82BZ\n\xfe\xc9\xcd\xb9\xc39\xff\xf9\xffs\x05\x05\ +\x04\x02\x81\xac\xae\xeb9\xf6\x80$I\xa6p8<\xe9\xf3\xf9.\x01+e\tv\xbb\xfdb>\ +\x9f7\xf6[\xe9t\xda\x08\x06\x83F\x7f\x7f\xff8\xe0(!/Dc\xaf\xce\xc5H&\x93\xf8\ +\xfd\xfeS}}}o\x00\xe7n\x82\xffB\x96e\xf2\xf9<\xd1h\x94\x9e\x9e\x9e\xce\xde\ +\xde\xde\x01\xa0\x1e@\x14,x\x13\x89\xc4\xf3\xed\x82\x95\xe8\x1aO^O\xb1\x1aOa\ +`P\xebPhi0\xe1V\xab\xd14\x8d\x9a\x9a\x1a<\x1e\xcf\xf5P(\xf4@.\xeed\x18\x06\ +\x1fF\xe7\x18\x9e\x8e\xe0\xf7vq\xb4Q!\xbdi\xf0{5\xc3\xa3\x17\xa3\x9c\x96\xe1\ +|W\x1b\x8a\xa2 \x840\x95Y\x88\xad\xa5x9\xbc\xc8\x89\xf6\x16F\xbe,\x91L\xe5\ +\x98\xf9\x11fhr\x81\xae\x8e\xe3\xbc\x9d\x88\x90\xd8\xc8\x96\xda+>\x0c\x0c\ +\xcd"\x94\x83\xbc\x9bX\xc2n\xab \xf2\xea;\xeb\x1bYV\xd72\x0c\x8e-\xb3\x10J\ +\xf1\xec\xfd,\xb7|\xe7\xf6&\x98\xfe\x19e\xe6\x8f\x85\\^\xa3\xc1U\xc9\xed+\ +\xed\x0cN\xfe\xe2\xe1\xfd\xcfh\xb9\x1c\x92d\xe2\xeb|l\x7f\x05&\xb3\xcc|4\x83\ +\x00\x82\xe1\x18\xdfB\x1bh@\x16\x19\xe5\x80\x15\x80\n\xf3\x96k]\xd7)\x9bAg\ +\xab\x8ad1c\xb6Z\xa9rTb\xae\x90\xb1\xca\x12U\xd5v\x14\x9b\x15Y\xb1p\xa6\xd5\ +\xb5\xbf\x82\xee\x93\x87\xe9\xf8\xf4\x97\xb8\xa8\xc7e\xd3\xa8\xb2\x08\x9ak\ +\x15\xda\x9a\x1d$\x8dJ\xecz\x84\x0bg\x8f\x94\x10H\x00\x9a\xa6\x15di\xdc\xf1\ +\xbapg\xc6i\xaa\xab\xe6\xe9h\x9a\xc0\x9c\xe0X\x93\x8a{s\x8a\xbb^\'Bl}\xf7vM\ +\x89\x02]\xd7q7\xd4q\xeff7\x1fG\xc6X^\\GH\x82\x0e\xd5\x81\xe7\x86\x07\x9b\ +\xcd\x86a\x18;\xfe\xcb\x08\x9cN\xe7\xce\xe3\xd5\xcb\x8d%\xc4%\xc36\x99v\xf6\ +\xa2\x10\x0f\xa9\xaazM/\xca\xdc]Tt/\x00\xe2\xf1\xf8c`\xee\x1f\xc2\xda\x00/<\ +\xcd4>\x00\x00\x00\x00IEND\xaeB`\x82' + +def getoverviewBitmap(): + return BitmapFromImage(getoverviewImage()) + +def getoverviewImage(): + stream = cStringIO.StringIO(getoverviewData()) + return ImageFromStream(stream) + +index.append('overview') +catalog['overview'] = ImageClass() +catalog['overview'].getData = getoverviewData +catalog['overview'].getImage = getoverviewImage +catalog['overview'].getBitmap = getoverviewBitmap + + +#---------------------------------------------------------------------- +def getprocessData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x03xIDAT8\x8d]\x93_lSu\x14\xc7\xbf\xf7\xde\xdf\xdd\xed\xfd\xc3\xee\xed\ +\xbd\xfd\xb3-\xfb\xdb\xd2.\xa6\xac\x13F\xec\\T2GC\xcc\x1e0S`}\xf1\xc1\x10\ +\x88{0&\xb0\x98\x10\x8c\t\xce\x07\x8cA\xd4\x10\xf72c\xf0\x8dhB\x10\x12\xcc@\ +\x1d+\xa5\x9dK::G\xc7Z\xba\xc6\xbae\xb8\xd9\xae\xb4\xde\xeeOo\xe7\x83\xc3?;\ +\xaf\xe7|?999\x1f`Gi\x9a\x0f\x14\xc5\xa1\xad\xad\xef\x0b\xbf\x7f\xa8 \xcb\ +\xce\x80\xd9\xec\xf0\x1f9r~v`\xe0\xd3\x9f(\x8a\xb5\xfcw\x9e\xda\t0\x9b;`\xb5\ +:.\xed\xde\xed\x1b\x90e\x1e\x84TA\x92DX\xad\xbbPWgE(\xf4}\xe8\xf2\xe5s\xaf\ +\x01\xc6\xd2\xff\x00\x1c\xa7\xee\xd9\xb7/\xf0\xb5\xae\x1b\xb4\xaa\xd6{\x1d\ +\x0e\x1bdY\x82$\x89\xe0y\x13X\x96\x81\xd3i\x83a\xb0\x18\x1c|\xf7\x87\xf9\xf9\ +k\xbd\x00\xd6\x99\xa7\x00\x8f\'0*I\x8d\xed\xb5\xb5V\xfb\xd1\xa3/\xe1\xe0\xc1\ +g\xe1r\xd5A\x10x\x18F\x05\x82\xc0\x81\xa6)P\x14\xc0q\xbc6;;yw}\xbd8\xcf\xfc\ +\xbb\xfa\x9e\xb7\x1c\x8e\x16\xfb\x89\x13\x87\xa0i\xd5\x08\x87S\x08\x06\x1f"\ +\x1c\x8e\xa1\xb6VA}\xbd\x05\x0cCCU\x05\xf4\xf4<\xc7\x11\xd2\xd0\x15\x89\xfc8\ +\xc6\x00@s\xb3\xff\xb3\xd6\xd6\xe7_\xe9\xef?\xc0\x88\xa2\x80[\xb7\xe2\x08\ +\x85~\xde\x8c\xc5\xc2\x8f\x82\xc1K\xa7\x0b\x852\xe9\xea\xeav\xcb2\x07\x9e\'\ +\x90e\x0e[[\x92\x16\x0c\xde\xcd\x93\xf6\xf6\xd7\x87\xdd\xee\x97O64\x98\xd1\ +\xd8h\xc1\xed\xdb\xb3\x88F\x7f\xd9\x0c\x85F>.\x16\x7f\xbd\n \xa6\xeb\x05/\ +\xcb\xb2P\x94\xbfo\xb1\xb8\xb8\n\x86\xa9\xa0\xb3\xb3\xff4q\xbb{NZ\xad\x12\ +\x9a\x9a\xec\xc8\xe5J\x98\x9e\x9e\xc3\xf8\xf8\xf0E]\xcf\\\x01\x10S\xd5\x16_ \ +\xf0f_M\r\x0f\x96\xa5\x91\xc9\xe4\x10\x8f/`q1\x87\xd5\xd5\\\x89\xce\xe7\xe7\ +\xc79\x8e\x83aT\x90\xcf\xeb\xc8\xe5V\xa1\xeb\xbfE\x00L)J\xe3\xfe\xb3g\x87o\ +\xf6\xf6\xbe\xd8\xa4(U(\x97\r\ +\xbf\xee\xf7\xef\xaf\xa6\xa8MH\x12\x87\xba:\x19O\x9e\xe8\x98\x9b\x8b\xe7\x13\ +\x89o>,\x16\x17n\x10\xa7\xd3\xd3\xaa(\x028\x8e\x80\xe7Y\x1c>\xfc\x02ii\xb90\ +\xd4\xd3s\xc0j\xb3\x99 \x8a\x14L&\x11\x8a\xc2\xc30\xb6\xc0q\x14\x92\xc9\x1b#\ +\xb9\\\xea\x1a\x80E\xe6\xd8\xb1\xb7\xcf{\x9b\x80CS\xc8\xdc\xbc\x81L\ +\xe7#X\xa6\x05\x9a\xe6\xdf/\x8b\xe4\xbbO\x12$\x11\x01\xa8\x80y\x00cz\xd7c\ +\xfa\x87\x06\x18\xfa1Co\xff+\x02\xa8+\xe4\x91\x84\xf3\xe0~V\xde\xbfC\x92y\ +\xc0\x9e\x8a\n>\x08\x87YH\xf0\xbd\xebg\xe8\xdb$+?\x8dP\x85\x82\x1fK\x8b\xe1r\ +=\xf7>\x89\x12\x80\xbd\x08\x00@\x00\xd3k\xe7i\xff\xf8\x18k\x8dI\xea\x1d\xf7\ +\x08 P(V\x1e\xf7\x9b\xc0\\\xc2R\xde\xf2gE`)\x9d$\xbc\xd1N\xd6M\x19\xf4\x8d\ +\x8f\x11\x9a\x8a\x97\xc6v\xf4\xc6\xb8\xedj+K}jCc\x9e\xba\x1a\x0eAS\x82\xec\ +\xd0\x00hZG\xd7u\xae.\x88\xed\xcd\xcd\x10\x91\xb3E_Q\x8aR\xb7\xab?\x8f\xe4v\ +\xcfLq\xa7a\x10\xc0\xe8Fu\x9a\xdf?\x1f6\xbe\xd0y\xea\x04\x01(\x92\xf9=\x10\ +\x11\xbd\xec\xda\xe5\x15\xdf\xc5K\xb0\xdblH\xbe\xec\xc1rW\x1c\xa2\xbb\xd6\ +\xcf\xce4Qu\xeb:r\xd5A\xccE\xea#$\'l\xc5\xe0j\x06\xbf-\x0b9\x11\x945\x9dFY\ +\xd3\x19`\xc3\xfcI"k\x99Xz\xd8\x01\x00\x89\xe2&\xae\xfd_\x87[\x7f\x81\x9a\ +\x9a\xc3\x00\xe0\t\x06\xb0\xb4\xb8\x00\xcd\xe1\x84\x95\\\x06h\x01Y\x13\x98\ +\xfa\xfe\x1a\xc0q\x92\xa9u\x80\x7f\xb5?\xa0\xbfG\xab\xac\xdc\x93\x9b\x00\x00\ +\x00\x00IEND\xaeB`\x82' + +def getpyshellBitmap(): + return BitmapFromImage(getpyshellImage()) + +def getpyshellImage(): + stream = cStringIO.StringIO(getpyshellData()) + return ImageFromStream(stream) + +index.append('pyshell') +catalog['pyshell'] = ImageClass() +catalog['pyshell'].getData = getpyshellData +catalog['pyshell'].getImage = getpyshellImage +catalog['pyshell'].getBitmap = getpyshellBitmap + + +#---------------------------------------------------------------------- +def getrecentData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x01?IDAT8\x8d\xed\x92=K\xc3p\x10\xc6\x7fi\xd3\x1ah\x16]\xda\xcdE\xc5\ +\xc1E\x1d\xda]g\xc1\xd9Q\xb1(up(\xfd\x04\x0e\xa6\x8b \xd2E\x10t\xd2\x0e\x82\ +\x9b\x0en*\xe8\x07\x88-\x82V|\x89C\xe2[kK\xb09\x87\x84\xd8\xce]\x1c<8\xee\ +\xe1\xfe\xf7\x01\xef\xc0]\xf0>\x14\xf0\xb4\x90#\x06\x8e4\x1d\x91\xfdi\ +\x11\x03K\xea\x96\x8f\xdd\xba\x88S\x15y\xbe\x12\xb9.\x8bl\xe8"\xc7\x8b\xbe\ +\x1b\x98b\x9b"[)Q\x01\rU\x83\x99\x03\xd8\x1c\xd0\x89\xeb\x90\x9a\x04\xb7\x0e\ +\xdb#/\xc4\xf5$\xd9\x1a\x8c\xe7`p\xca\xef\xdfz\x1b%\xa6C\xc3zP\x01\x0f\xf1\ +\xa0R\x86t!\x11~N\xeb\x87\x85j\x92\xa6\r7G0\x91\x83\xef\x16D\xfb ]\x00\xdb\ +\x040\xd5\x90p\x92m\xb0\xe2\xfc\n\xb4^\xfd\t\xe0\x16%\x9aa\xf5\x0b\xeeO\xc1\ +\xfd\x84\xe1Y\xd8\x19\x03(uo\xe1r\x1db\x89\xee\t\xe6.2H\xbb\x89\xb4\xe1\xa3\ +\x06\x8fg\x10Q\xc1\xa9@^\x0e\x151(vl!\xd1\x81\xe7\x81\x1a`\x03\xe7A~\x17\xf0\ +\xc2\x9a\xbc,+\xff\xa7\xdc\xbb\xc0\x0f\xa8\x17\x8a\x92\xa1;\xffs\x00\x00\x00\ +\x00IEND\xaeB`\x82' + +def getrecentBitmap(): + return BitmapFromImage(getrecentImage()) + +def getrecentImage(): + stream = cStringIO.StringIO(getrecentData()) + return ImageFromStream(stream) + +index.append('recent') +catalog['recent'] = ImageClass() +catalog['recent'].getData = getrecentData +catalog['recent'].getImage = getrecentImage +catalog['recent'].getBitmap = getrecentBitmap + + +#---------------------------------------------------------------------- +def getsaveperspectiveData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x03\xa2IDAT8\x8d]\xcckL[e\x00\xc6\xf1\xe7}O[\xe9\x95B)-\xb4\xd2\x96K\ +\xd9\x8aPG\x8d\xd0\xce\xb1%\x8e\xa5\xc9\xa4\n!\xce\x05\xd4y\t\x18\x12c\xb2(\ +\x89\xf3\x8bA\x13\x9d\x8bn\xde\x96,nK\xd4-\x93\xc8\x8c\x1b\xba\xba\xe9&\x0e\ +\xeb\xd8\x04\x1d\t\x0e\x17@`\xb4PHC\x81B{\xda\x9es^?\x91\x18\x7f\xc9\xff\xcb\ +\xf3\xe1!\x1d\x1d\x1d`\x8c\x01\x00\x08!\x90$\t\xa2(j\x0c\x86\x82\xe0\x8d\x1b\ +\xbf\r\x87B\xa1\xd7\x00\x08\xad\xad\xad(,4!\x99\xdc\xd0\x1b\x8d\xc67\x9dNW\ +\xfb\xd1\xa3\x1f\\\xa0\xa9T\n\xc9d\x12\xeb\xeb\xeb\xe0y\x1e\xcb\xcb\xcbX[K<\ +\xe2\xf7\xef\xf5y}\xbb\xba\x00\x94\x02\x00\xcf\xf3\xe0\xf9\x14\xccf\xd3;\xdd\ +\xdd\x87^\xd1\xe9\x8a\rKK\x8b\x95\x94\x10\x82\xcd\x04A\x84\\.\xab\xdf\xf7T\ +\xfb9Qb\x14\xe9{\xf22\xbb\xf5`\x81\xc1\x00\xc6$\x88b\xd6\xe9r\xb9\xdb\x06\ +\x7f\xfd\x1d\xc7\x8e\xbd\xbb\x11\x8b-\xf5pn\xb7\x1b\x8c1\x08\x82\x00\x85B\ +\xde\xf0D\xf3\x93A\x9d6/7\xbe0\x8c\x97\xbaZHM\xf5\xfd\x9ePhL\xab\xd1\xe9\xe7\ +\xfd\xfe\xc0\xf5\x91\x91\xdb\xfaC\xaf\x1f\xbc4;;\xd9\r\xe0\x07\xce\xedv#\x9b\ +\xcd\x82\xe3\xe8\xce\xa6\xa6\xd6~\x8d:O\xb7\x12\x1dB \xe0\x83ZeB\x99\xa3\x88\ +XL\xeaz\x99\xb2\xfc\xc0\x9d\xf1\t\xed\xc9\x93\x1f\x9f\x10\x84L\x1b\xa5t\x821\ +\x06*\x8a"\xe4r\xd9\xce@`\xffE\xb5Z\xaf[\x9c\xfe\x11~\xff6\xa84"\x84\x8d\x19\ +\x0c\x86\xc2\xd0\x16x\xa8\xbdH\xa5\xbez\xe9\xcb\xbfDQ\xe8R*d\x90$\t\x84\x00\ +\x9c\xd7\xebki\n\xec\xfbF\xa5Vkb3\xbf\xa0\xb2"\x1f\x1a\x99\x027\x8f\x0715\ +\xcf#\x9d\xef\xc0\xe8\xf0\x18v\xd4\x19\xf0\xd8n\x97q|t\xa2\x880\xe9\xfb\xf8F\ +\x1ar\x19\x05\xe7p8\x9e]Y\xcd\xee\x90\xd6\xbe\xa2m\xadf\x98\xca\x1b\x11\xf9s\ +\n\xec\x9f\x04VnO`2r\x17\x8f\xb7oG&-GU\xf5\x16\xf2\xd0\x03F\xcf\x95\x9f\x86\ +\xad\xd1x\xb2_\xceQp)&\r\x05\xfb\xfb\xfa#\x91\x98\xbe\xee\xe1\xf4\x16\x84WIl\ +X\x80\xddjB&\x18\xc4\xbd\x81\xabp=\xd3\x02\xa7]\x81\xd4\x06\x85\xd5\xb9\x95x\ +\xcau\xb53\xe3\x13\xb6h\xd7)\xd36\x8b\x82\xee\xf1\x14\ +\x93\x95h\x18g\x06\x80\\\xcc\xa0aO\x15\xa6F\xfe\xc6\xfe\xce\xc3\xd3c\xe1\xc4\ +\xd3\xe81\x17\x9e\x9e?\x7f\x96\t\xc1>\xb6\xbc\xb7\x8e]6+\xd9\xd6\x9c\x9c9\ +\x00\x8f\xdasi\xf7w\x9f\xbc\x90\xcdD/\xb2k\xbd\xaf\xb2\xd5\xbb\xa7\xd8\xado\ +\x0f\xb3J\x93v\x1a\x80\x0b\x00p\xab\xad9\xc3\xae\xf42\xa1\xc5\xc7~6\xdd\xc7\ +\x1eT\xc8\x17\x00\xd4Q\x02\x00\x80Y\x89\x97\xfb\x8e\xb4eXj\x80\r\x9d\x7f\x8b\ +U\x16\xaa&\x018\xb1\xe9\xc3\xb2\xa2h\xa4\xb1\x9a\xf5\x9a\x95\xcc\xc9\xd1I\ +\x00\x1e\x00\xa0\x04PQ\n\x00\xb0hI\xe7{\x9d^\xbe\xc6\xa6\x9f\x06P\x81\xff\ +\xaa\x02\xea\xab\x81k\xb9\x84|\x01\xc0\xb2\xb9o\x1e(\t@\x01\xc8\x80F\x005\ +\xf8\x9f\x7f\x01\xffc\x82t\x0c\xb6\x936\x00\x00\x00\x00IEND\xaeB`\x82' + +def getsaveperspectiveBitmap(): + return BitmapFromImage(getsaveperspectiveImage()) + +def getsaveperspectiveImage(): + stream = cStringIO.StringIO(getsaveperspectiveData()) + return ImageFromStream(stream) + +index.append('saveperspective') +catalog['saveperspective'] = ImageClass() +catalog['saveperspective'].getData = getsaveperspectiveData +catalog['saveperspective'].getImage = getsaveperspectiveImage +catalog['saveperspective'].getBitmap = getsaveperspectiveBitmap + + diff --git a/wxPython/demo/throbImages.py b/wxPython/demo/throbImages.py index b4a8ce235b..d4a991746a 100644 --- a/wxPython/demo/throbImages.py +++ b/wxPython/demo/throbImages.py @@ -1,7 +1,7 @@ #---------------------------------------------------------------------- # This file was generated by encode_bitmaps.py # -from wx import ImageFromStream, BitmapFromImage +from wx import ImageFromStream, BitmapFromImage, EmptyIcon import cStringIO