home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 September / maximum-cd-2009-09.iso / DiscContents / digsby_setup.exe / lib / wx / lib / inspection.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  27.0 KB  |  549 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import wx
  5. import wx.py as wx
  6. import wx.stc as wx
  7. import wx.aui as wx
  8. import sys
  9.  
  10. class InspectionTool:
  11.     __shared_state = { }
  12.     
  13.     def __init__(self):
  14.         self.__dict__ = self._InspectionTool__shared_state
  15.         if not hasattr(self, 'initialized'):
  16.             self.initialized = False
  17.         
  18.  
  19.     
  20.     def Init(self, pos = wx.DefaultPosition, size = wx.Size(850, 700), config = None, locals = None, app = None):
  21.         self._frame = None
  22.         self._pos = pos
  23.         self._size = size
  24.         self._config = config
  25.         self._locals = locals
  26.         self._app = app
  27.         if not self._app:
  28.             self._app = wx.GetApp()
  29.         
  30.         self.initialized = True
  31.  
  32.     
  33.     def Show(self, selectObj = None, refreshTree = False):
  34.         if not self.initialized:
  35.             self.Init()
  36.         
  37.         parent = self._app.GetTopWindow()
  38.         if not selectObj:
  39.             selectObj = parent
  40.         
  41.         if not self._frame:
  42.             self._frame = InspectionFrame(parent = parent, pos = self._pos, size = self._size, config = self._config, locals = self._locals, app = self._app)
  43.         
  44.         if selectObj:
  45.             self._frame.SetObj(selectObj)
  46.         
  47.         if refreshTree:
  48.             self._frame.RefreshTree()
  49.         
  50.         self._frame.Show()
  51.         if self._frame.IsIconized():
  52.             self._frame.Iconize(False)
  53.         
  54.         self._frame.Raise()
  55.  
  56.  
  57.  
  58. class InspectionFrame(wx.Frame):
  59.     
  60.     def __init__(self, wnd = None, locals = None, config = None, app = None, title = 'wxPython Widget Inspection Tool', *args, **kw):
  61.         kw['title'] = title
  62.         wx.Frame.__init__(self, *args, **kw)
  63.         self.includeSizers = False
  64.         self.started = False
  65.         self.SetIcon(Icon.GetIcon())
  66.         self.MakeToolBar()
  67.         panel = wx.Panel(self, size = self.GetClientSize())
  68.         self.mgr = wx.aui.AuiManager(panel, wx.aui.AUI_MGR_DEFAULT | wx.aui.AUI_MGR_TRANSPARENT_DRAG | wx.aui.AUI_MGR_ALLOW_ACTIVE_PANE)
  69.         self.tree = InspectionTree(panel)
  70.         self.info = InspectionInfoPanel(panel, style = wx.NO_BORDER)
  71.         if not locals:
  72.             locals = { }
  73.         
  74.         myIntroText = "Python %s on %s\nNOTE: The 'obj' variable refers to the object selected in the tree." % (sys.version.split()[0], sys.platform)
  75.         self.crust = wx.py.crust.Crust(panel, locals = locals, intro = myIntroText, showInterpIntro = False, style = wx.NO_BORDER)
  76.         self.locals = self.crust.shell.interp.locals
  77.         self.crust.shell.interp.introText = ''
  78.         self.locals['obj'] = self.obj = wnd
  79.         self.locals['app'] = app
  80.         self.locals['wx'] = wx
  81.         wx.CallAfter(self._postStartup)
  82.         self.mgr.AddPane(self.info, wx.aui.AuiPaneInfo().Name('info').Caption('Object Info').CenterPane().CaptionVisible(True).CloseButton(False).MaximizeButton(True))
  83.         self.mgr.AddPane(self.tree, wx.aui.AuiPaneInfo().Name('tree').Caption('Widget Tree').CaptionVisible(True).Left().Dockable(True).Floatable(True).BestSize((280, 200)).CloseButton(False).MaximizeButton(True))
  84.         self.mgr.AddPane(self.crust, wx.aui.AuiPaneInfo().Name('crust').Caption('PyCrust').CaptionVisible(True).Bottom().Dockable(True).Floatable(True).BestSize((400, 200)).CloseButton(False).MaximizeButton(True))
  85.         self.mgr.Update()
  86.         if config is None:
  87.             config = wx.Config('wxpyinspector')
  88.         
  89.         self.config = config
  90.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  91.         self.LoadSettings(self.config)
  92.         self.crust.shell.lineNumbers = False
  93.         self.crust.shell.setDisplayLineNumbers(False)
  94.         self.crust.shell.SetMarginWidth(1, 0)
  95.  
  96.     
  97.     def MakeToolBar(self):
  98.         tbar = self.CreateToolBar(wx.TB_HORIZONTAL | wx.TB_FLAT | wx.TB_TEXT | wx.NO_BORDER)
  99.         tbar.SetToolBitmapSize((24, 24))
  100.         refreshBmp = Refresh.GetBitmap()
  101.         findWidgetBmp = Find.GetBitmap()
  102.         showSizersBmp = ShowSizers.GetBitmap()
  103.         toggleFillingBmp = ShowFilling.GetBitmap()
  104.         refreshTool = tbar.AddLabelTool(-1, 'Refresh', refreshBmp, shortHelp = 'Refresh widget tree')
  105.         findWidgetTool = tbar.AddLabelTool(-1, 'Find', findWidgetBmp, shortHelp = 'Find new target widget.  Click here and\nthen on another widget in the app.')
  106.         showSizersTool = tbar.AddLabelTool(-1, 'Sizers', showSizersBmp, shortHelp = 'Include sizers in widget tree', kind = wx.ITEM_CHECK)
  107.         toggleFillingTool = tbar.AddLabelTool(-1, 'Filling', toggleFillingBmp, shortHelp = "Show PyCrust 'filling'", kind = wx.ITEM_CHECK)
  108.         tbar.Realize()
  109.         self.Bind(wx.EVT_TOOL, self.OnRefreshTree, refreshTool)
  110.         self.Bind(wx.EVT_TOOL, self.OnFindWidget, findWidgetTool)
  111.         self.Bind(wx.EVT_TOOL, self.OnShowSizers, showSizersTool)
  112.         self.Bind(wx.EVT_TOOL, self.OnToggleFilling, toggleFillingTool)
  113.         self.Bind(wx.EVT_UPDATE_UI, self.OnShowSizersUI, showSizersTool)
  114.         self.Bind(wx.EVT_UPDATE_UI, self.OnToggleFillingUI, toggleFillingTool)
  115.  
  116.     
  117.     def _postStartup(self):
  118.         if self.crust.ToolsShown():
  119.             self.crust.ToggleTools()
  120.         
  121.         self.UpdateInfo()
  122.         self.started = True
  123.  
  124.     
  125.     def OnClose(self, evt):
  126.         self.SaveSettings(self.config)
  127.         self.mgr.UnInit()
  128.         del self.mgr
  129.         evt.Skip()
  130.  
  131.     
  132.     def UpdateInfo(self):
  133.         self.info.Update(self.obj)
  134.  
  135.     
  136.     def SetObj(self, obj):
  137.         if self.obj is obj:
  138.             return None
  139.         
  140.         self.locals['obj'] = self.obj = obj
  141.         self.UpdateInfo()
  142.         if not self.tree.built:
  143.             self.tree.BuildTree(obj, includeSizers = self.includeSizers)
  144.         else:
  145.             self.tree.SelectObj(obj)
  146.  
  147.     
  148.     def RefreshTree(self):
  149.         self.tree.BuildTree(self.obj, includeSizers = self.includeSizers)
  150.  
  151.     
  152.     def OnRefreshTree(self, evt):
  153.         self.RefreshTree()
  154.         self.UpdateInfo()
  155.  
  156.     
  157.     def OnFindWidget(self, evt):
  158.         self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
  159.         self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, self.OnCaptureLost)
  160.         self.CaptureMouse()
  161.         self.finding = wx.BusyInfo('Click on any widget in the app...')
  162.  
  163.     
  164.     def OnCaptureLost(self, evt):
  165.         self.Unbind(wx.EVT_LEFT_DOWN)
  166.         self.Unbind(wx.EVT_MOUSE_CAPTURE_LOST)
  167.         del self.finding
  168.  
  169.     
  170.     def OnLeftDown(self, evt):
  171.         self.ReleaseMouse()
  172.         wnd = wx.FindWindowAtPointer()
  173.         if wnd is not None:
  174.             self.SetObj(wnd)
  175.         else:
  176.             wx.Bell()
  177.         self.OnCaptureLost(evt)
  178.  
  179.     
  180.     def OnShowSizers(self, evt):
  181.         self.includeSizers = not (self.includeSizers)
  182.         self.RefreshTree()
  183.  
  184.     
  185.     def OnToggleFilling(self, evt):
  186.         self.crust.ToggleTools()
  187.  
  188.     
  189.     def OnShowSizersUI(self, evt):
  190.         evt.Check(self.includeSizers)
  191.  
  192.     
  193.     def OnToggleFillingUI(self, evt):
  194.         if self.started:
  195.             evt.Check(self.crust.ToolsShown())
  196.         
  197.  
  198.     
  199.     def LoadSettings(self, config):
  200.         self.crust.LoadSettings(config)
  201.         self.info.LoadSettings(config)
  202.         pos = wx.Point(config.ReadInt('Window/PosX', -1), config.ReadInt('Window/PosY', -1))
  203.         size = wx.Size(config.ReadInt('Window/Width', -1), config.ReadInt('Window/Height', -1))
  204.         self.SetSize(size)
  205.         self.Move(pos)
  206.         perspective = config.Read('perspective', '')
  207.         if perspective:
  208.             self.mgr.LoadPerspective(perspective)
  209.         
  210.         self.includeSizers = config.ReadBool('includeSizers', False)
  211.  
  212.     
  213.     def SaveSettings(self, config):
  214.         self.crust.SaveSettings(config)
  215.         self.info.SaveSettings(config)
  216.         if not self.IsIconized() and not self.IsMaximized():
  217.             (w, h) = self.GetSize()
  218.             config.WriteInt('Window/Width', w)
  219.             config.WriteInt('Window/Height', h)
  220.             (px, py) = self.GetPosition()
  221.             config.WriteInt('Window/PosX', px)
  222.             config.WriteInt('Window/PosY', py)
  223.         
  224.         perspective = self.mgr.SavePerspective()
  225.         config.Write('perspective', perspective)
  226.         config.WriteBool('includeSizers', self.includeSizers)
  227.  
  228.  
  229. INCLUDE_INSPECTOR = True
  230.  
  231. class InspectionTree(wx.TreeCtrl):
  232.     
  233.     def __init__(self, *args, **kw):
  234.         wx.TreeCtrl.__init__(self, *args, **kw)
  235.         self.roots = []
  236.         self.built = False
  237.         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelectionChanged)
  238.         self.toolFrame = wx.GetTopLevelParent(self)
  239.         if 'wxMac' in wx.PlatformInfo:
  240.             self.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
  241.         
  242.  
  243.     
  244.     def BuildTree(self, startWidget, includeSizers = False):
  245.         if self.GetCount():
  246.             self.DeleteAllItems()
  247.             self.roots = []
  248.             self.built = False
  249.         
  250.         realRoot = self.AddRoot('Top-level Windows')
  251.         for w in wx.GetTopLevelWindows():
  252.             if w is wx.GetTopLevelParent(self) and not INCLUDE_INSPECTOR:
  253.                 continue
  254.             
  255.             root = self._AddWidget(realRoot, w, includeSizers)
  256.             self.roots.append(root)
  257.         
  258.         if not startWidget or not isinstance(startWidget, wx.Window):
  259.             startWidget = wx.GetApp().GetTopWindow()
  260.         
  261.         top = wx.GetTopLevelParent(startWidget)
  262.         topItem = self.FindWidgetItem(top)
  263.         if topItem:
  264.             self.ExpandAllChildren(topItem)
  265.         
  266.         self.SelectObj(startWidget)
  267.         self.built = True
  268.  
  269.     
  270.     def _AddWidget(self, parentItem, widget, includeSizers):
  271.         text = self.GetTextForWidget(widget)
  272.         item = self.AppendItem(parentItem, text)
  273.         self.SetItemPyData(item, widget)
  274.         widgetsInSizer = []
  275.         if includeSizers and widget.GetSizer() is not None:
  276.             widgetsInSizer = self._AddSizer(item, widget.GetSizer())
  277.         
  278.         for child in widget.GetChildren():
  279.             if child not in widgetsInSizer and not child.IsTopLevel():
  280.                 self._AddWidget(item, child, includeSizers)
  281.                 continue
  282.         
  283.         return item
  284.  
  285.     
  286.     def _AddSizer(self, parentItem, sizer):
  287.         widgets = []
  288.         text = self.GetTextForSizer(sizer)
  289.         item = self.AppendItem(parentItem, text)
  290.         self.SetItemPyData(item, sizer)
  291.         self.SetItemTextColour(item, 'blue')
  292.         for si in sizer.GetChildren():
  293.             if si.IsWindow():
  294.                 w = si.GetWindow()
  295.                 self._AddWidget(item, w, True)
  296.                 widgets.append(w)
  297.                 continue
  298.             if si.IsSizer():
  299.                 widgets += self._AddSizer(item, si.GetSizer())
  300.                 continue
  301.             i = self.AppendItem(item, 'Spacer')
  302.             self.SetItemPyData(i, si)
  303.             self.SetItemTextColour(i, 'blue')
  304.         
  305.         return widgets
  306.  
  307.     
  308.     def FindWidgetItem(self, widget):
  309.         for item in self.roots:
  310.             found = self._FindWidgetItem(widget, item)
  311.             if found:
  312.                 return found
  313.                 continue
  314.         
  315.  
  316.     
  317.     def _FindWidgetItem(self, widget, item):
  318.         if self.GetItemPyData(item) is widget:
  319.             return item
  320.         
  321.         (child, cookie) = self.GetFirstChild(item)
  322.         while child:
  323.             found = self._FindWidgetItem(widget, child)
  324.             if found:
  325.                 return found
  326.             
  327.             (child, cookie) = self.GetNextChild(item, cookie)
  328.  
  329.     
  330.     def GetTextForWidget(self, widget):
  331.         return '%s ("%s")' % (widget.__class__.__name__, widget.GetName())
  332.  
  333.     
  334.     def GetTextForSizer(self, sizer):
  335.         return '%s' % sizer.__class__.__name__
  336.  
  337.     
  338.     def SelectObj(self, obj):
  339.         item = self.FindWidgetItem(obj)
  340.         if item:
  341.             self.EnsureVisible(item)
  342.             self.SelectItem(item)
  343.         
  344.  
  345.     
  346.     def OnSelectionChanged(self, evt):
  347.         obj = self.GetItemPyData(evt.GetItem())
  348.         self.toolFrame.SetObj(obj)
  349.  
  350.  
  351.  
  352. class InspectionInfoPanel(wx.stc.StyledTextCtrl):
  353.     
  354.     def __init__(self, *args, **kw):
  355.         wx.stc.StyledTextCtrl.__init__(self, *args, **kw)
  356.         FACES = FACES
  357.         import wx.py.editwindow
  358.         self.StyleSetSpec(wx.stc.STC_STYLE_DEFAULT, 'face:%(mono)s,size:%(size)d,back:%(backcol)s' % FACES)
  359.         self.StyleClearAll()
  360.         self.SetReadOnly(True)
  361.         self.SetMarginType(1, 0)
  362.         self.SetMarginWidth(1, 0)
  363.         self.SetSelForeground(True, wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT))
  364.         self.SetSelBackground(True, wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT))
  365.  
  366.     
  367.     def LoadSettings(self, config):
  368.         zoom = config.ReadInt('View/Zoom/Info', 0)
  369.         self.SetZoom(zoom)
  370.  
  371.     
  372.     def SaveSettings(self, config):
  373.         config.WriteInt('View/Zoom/Info', self.GetZoom())
  374.  
  375.     
  376.     def Update(self, obj):
  377.         st = []
  378.         if not obj:
  379.             st.append('Item is None or has been destroyed.')
  380.         elif isinstance(obj, wx.Window):
  381.             st += self.FmtWidget(obj)
  382.         elif isinstance(obj, wx.Sizer):
  383.             st += self.FmtSizer(obj)
  384.         elif isinstance(obj, wx.SizerItem):
  385.             st += self.FmtSizerItem(obj)
  386.         
  387.         self.SetReadOnly(False)
  388.         self.SetText('\n'.join(st))
  389.         self.SetReadOnly(True)
  390.  
  391.     
  392.     def Fmt(self, name, value):
  393.         if isinstance(value, (str, unicode)):
  394.             return "    %s = '%s'" % (name, value)
  395.         else:
  396.             return '    %s = %s' % (name, value)
  397.  
  398.     
  399.     def FmtWidget(self, obj):
  400.         st = [
  401.             'Widget:']
  402.         st.append(self.Fmt('name', obj.GetName()))
  403.         st.append(self.Fmt('class', obj.__class__))
  404.         st.append(self.Fmt('bases', obj.__class__.__bases__))
  405.         if hasattr(obj, 'this'):
  406.             st.append(self.Fmt('this', repr(obj.this)))
  407.         
  408.         st.append(self.Fmt('id', obj.GetId()))
  409.         st.append(self.Fmt('style', obj.GetWindowStyle()))
  410.         st.append(self.Fmt('pos', obj.GetPosition()))
  411.         st.append(self.Fmt('size', obj.GetSize()))
  412.         st.append(self.Fmt('minsize', obj.GetMinSize()))
  413.         st.append(self.Fmt('bestsize', obj.GetBestSize()))
  414.         st.append(self.Fmt('client size', obj.GetClientSize()))
  415.         st.append(self.Fmt('IsEnabled', obj.IsEnabled()))
  416.         st.append(self.Fmt('IsShown', obj.IsShown()))
  417.         st.append(self.Fmt('fg color', obj.GetForegroundColour()))
  418.         st.append(self.Fmt('bg color', obj.GetBackgroundColour()))
  419.         st.append(self.Fmt('label', obj.GetLabel()))
  420.         if hasattr(obj, 'GetTitle'):
  421.             st.append(self.Fmt('title', obj.GetTitle()))
  422.         
  423.         if hasattr(obj, 'GetValue'):
  424.             st.append(self.Fmt('value', obj.GetValue()))
  425.         
  426.         if obj.GetContainingSizer() is not None:
  427.             st.append('')
  428.             sizer = obj.GetContainingSizer()
  429.             st += self.FmtSizerItem(sizer.GetItem(obj))
  430.         
  431.         return st
  432.  
  433.     
  434.     def FmtSizerItem(self, obj):
  435.         if obj is None:
  436.             return [
  437.                 'SizerItem: None']
  438.         
  439.         st = [
  440.             'SizerItem:']
  441.         st.append(self.Fmt('proportion', obj.GetProportion()))
  442.         st.append(self.Fmt('flag', FlagsFormatter(itemFlags, obj.GetFlag())))
  443.         st.append(self.Fmt('border', obj.GetBorder()))
  444.         st.append(self.Fmt('pos', obj.GetPosition()))
  445.         st.append(self.Fmt('size', obj.GetSize()))
  446.         st.append(self.Fmt('minsize', obj.GetMinSize()))
  447.         st.append(self.Fmt('ratio', obj.GetRatio()))
  448.         st.append(self.Fmt('IsWindow', obj.IsWindow()))
  449.         st.append(self.Fmt('IsSizer', obj.IsSizer()))
  450.         st.append(self.Fmt('IsSpacer', obj.IsSpacer()))
  451.         st.append(self.Fmt('IsShown', obj.IsShown()))
  452.         if isinstance(obj, wx.GBSizerItem):
  453.             st.append(self.Fmt('cellpos', obj.GetPos()))
  454.             st.append(self.Fmt('cellspan', obj.GetSpan()))
  455.             st.append(self.Fmt('endpos', obj.GetEndPos()))
  456.         
  457.         return st
  458.  
  459.     
  460.     def FmtSizer(self, obj):
  461.         st = [
  462.             'Sizer:']
  463.         st.append(self.Fmt('class', obj.__class__))
  464.         if hasattr(obj, 'this'):
  465.             st.append(self.Fmt('this', repr(obj.this)))
  466.         
  467.         st.append(self.Fmt('pos', obj.GetPosition()))
  468.         st.append(self.Fmt('size', obj.GetSize()))
  469.         st.append(self.Fmt('minsize', obj.GetMinSize()))
  470.         if isinstance(obj, wx.BoxSizer):
  471.             st.append(self.Fmt('orientation', FlagsFormatter(orientFlags, obj.GetOrientation())))
  472.         
  473.         if isinstance(obj, wx.GridSizer):
  474.             st.append(self.Fmt('cols', obj.GetCols()))
  475.             st.append(self.Fmt('rows', obj.GetRows()))
  476.             st.append(self.Fmt('vgap', obj.GetVGap()))
  477.             st.append(self.Fmt('hgap', obj.GetHGap()))
  478.         
  479.         if isinstance(obj, wx.FlexGridSizer):
  480.             st.append(self.Fmt('rowheights', obj.GetRowHeights()))
  481.             st.append(self.Fmt('colwidths', obj.GetColWidths()))
  482.             st.append(self.Fmt('flexdir', FlagsFormatter(orientFlags, obj.GetFlexibleDirection())))
  483.             st.append(self.Fmt('nonflexmode', FlagsFormatter(flexmodeFlags, obj.GetNonFlexibleGrowMode())))
  484.         
  485.         if isinstance(obj, wx.GridBagSizer):
  486.             st.append(self.Fmt('emptycell', obj.GetEmptyCellSize()))
  487.         
  488.         if obj.GetContainingWindow():
  489.             si = obj.GetContainingWindow().GetSizer().GetItem(obj)
  490.             if si:
  491.                 st.append('')
  492.                 st += self.FmtSizerItem(si)
  493.             
  494.         
  495.         return st
  496.  
  497.  
  498.  
  499. class FlagsFormatter(object):
  500.     
  501.     def __init__(self, d, val):
  502.         self.d = d
  503.         self.val = val
  504.  
  505.     
  506.     def __str__(self):
  507.         st = []
  508.         for k in self.d.keys():
  509.             if self.val & k:
  510.                 st.append(self.d[k])
  511.                 continue
  512.         
  513.         if st:
  514.             return '|'.join(st)
  515.         else:
  516.             return '0'
  517.  
  518.  
  519. orientFlags = {
  520.     wx.HORIZONTAL: 'wx.HORIZONTAL',
  521.     wx.VERTICAL: 'wx.VERTICAL' }
  522. itemFlags = {
  523.     wx.TOP: 'wx.TOP',
  524.     wx.BOTTOM: 'wx.BOTTOM',
  525.     wx.LEFT: 'wx.LEFT',
  526.     wx.RIGHT: 'wx.RIGHT',
  527.     wx.EXPAND: 'wx.EXPAND',
  528.     wx.SHAPED: 'wx.SHAPED',
  529.     wx.STRETCH_NOT: 'wx.STRETCH_NOT',
  530.     wx.ALIGN_CENTER: 'wx.ALIGN_CENTER',
  531.     wx.ALIGN_LEFT: 'wx.ALIGN_LEFT',
  532.     wx.ALIGN_RIGHT: 'wx.ALIGN_RIGHT',
  533.     wx.ALIGN_TOP: 'wx.ALIGN_TOP',
  534.     wx.ALIGN_BOTTOM: 'wx.ALIGN_BOTTOM',
  535.     wx.ALIGN_CENTER_VERTICAL: 'wx.ALIGN_CENTER_VERTICAL',
  536.     wx.ALIGN_CENTER_HORIZONTAL: 'wx.ALIGN_CENTER_HORIZONTAL',
  537.     wx.ADJUST_MINSIZE: 'wx.ADJUST_MINSIZE',
  538.     wx.FIXED_MINSIZE: 'wx.FIXED_MINSIZE' }
  539. flexmodeFlags = {
  540.     wx.FLEX_GROWMODE_NONE: 'wx.FLEX_GROWMODE_NONE',
  541.     wx.FLEX_GROWMODE_SPECIFIED: 'wx.FLEX_GROWMODE_SPECIFIED',
  542.     wx.FLEX_GROWMODE_ALL: 'wx.FLEX_GROWMODE_ALL' }
  543. from wx.lib.embeddedimage import PyEmbeddedImage
  544. Refresh = PyEmbeddedImage('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')
  545. Find = PyEmbeddedImage('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')
  546. ShowSizers = PyEmbeddedImage('iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAABChJREFUSIm1lU1oXFUUx3/33nn3zbx5mcm0M5OZxGlNAn6XUqlRKIIWKrXqRlCLOwvitrooqKDgRhcirkSpigSECl0WBa104UKoSIoLS8TWlja1NTOTyUzz5s37uNdFWpumJSktHriry//8zj38z7nwP4dY5/7BUqn0quu62621i9cJhSjGcTzTarUOAr/dFn1sbGy/N+SdksgoQ2bh2mFBQpTzvdP1ev3AWjkya10qpe4yPbPZ3GeUecEMswQoYK4I3w+wzWiz3qgbtw0AQoHoswWfNxyYLYE28GcVfr8IzU5gjOnfCWA5YuCvHPw0CRkLhGDjW5LeGiAFWjGcaYKyUHLAwvoeWQcgpczZjM3zA3CiD5fPAlikFXRicNy8lNJbK4das/A0VdKVJd/4oWqJZhSGVcJUeH3n5JA/NGe1OhEG/W+iKJq9LUAURe1KuVJQrrqnn4YVrXXkOE5gFCpf8NteLvdts9k8AgRXJDf0bC1ArlgsTiVJsqfX6+1K03RQLpenfd//tdvtbh0MBvdaaxe01pcGg8FFlq1wU8jNoqiUeq5Wqx3SWlutdWvTpk3vANuBbY1G423Xdecdx7EjIyOHlVLPA6X1kl4lK6XU7rGxsU+UUkue54XlcvlL4LEVL36kUql8ns/nl6SUwejo6EGl1DNcM81/r7ihRfl8fmehUHil2Wzu1Vr3Xdc9lCTJZ4PB4DhXzAlcAOa01koIMdntdqdKpZInhGjHcXx6ZT4FjDQajR21Wm2L7/sPJ0nyYr/ff1ZKOV8ul2eTJDnS6XSOsjwN4mp1cRw3s9lssVQq1cIwVEmSbNVa+9VqNTsyMjLh+/744uJiT3ied8BxnJcx6QMS0wkHUaEfJe6w4mc8v5AINWOS+KMgCGZWVuZ53taMlPtRaqovTRAv9LaTdQIn5y0oYzZkkaejOJ6mXq8fk0IkCGVxci2UnsfNz1MatSDtUN7rT0xMvLa6lePj4/v8wlAfsCVUuJFMZxh1eQMqyIFFirRerx/LGGMCYa3ioV1f8el30/w4k8V178bNfMjHL3mcPREA0U1MES3ZNK2R6Z9katpgkpBUjFLovcnJRz8QF54wxgTXVoUQl9iBzz/bniQlT39JIdecQywICfEwQwFkd4KqdAmDS8gKEMLKXZTaOVImsbyOpM1QXiPkmgBAZBApeOEsS5OSjD8gJYsG6AFkhBA5C3D6+G72vudTGYXg8gYQ0J6DDB4sK67LLISjhXQ6xLm3+OXxU6RuBGxEM0sPLFkhRC5jjDmntD5D2N4jDr8LsMCV+bCQt8Xhs0mStFYD4jhu55B/LEpx//vi/A5gieWdJLBoV+m2MeacAJ6uVqt7pZQNa+11v5MQohAEwdFut/sFcH4VY9T3/X2+7z9lre2t0mXTNP17fn7+6/V6fMfxL1klnkaQRVDaAAAAAElFTkSuQmCC')
  547. ShowFilling = PyEmbeddedImage('iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAZ5JREFUSIntlc9KAkEcxz+tu7OxLRSuGUXtIfUpukW9QJcO3nqELoLXLr2Bt47dRBAqgxJ6BqMwPJe0FEliaLNrFxV1zXatY9/TMDPf72eG3/yBf/2guaH2DrALrADtGfME8AKUgCsAdWhwX1XVbSnlMtCZEaApivrqeXJxEmBDSrl+dHQoNjf3OD9/xjSDJ5vmMre3Z1xeHi8AG/3+YcAH8GEYSbG6uoVtP2IYwQFLS2s8PT0MciYBALi5uUfTrrEsB88LDtB1C027A+h+N6cAvBUK+e6surg46wLvvSwAlHFKu/0ZfNkBvD6AEGJmwCSvrwaNRgOAZrMZKtw0zYF3KiCXy1Eul2m1WqEAhmFQq9VgrMg+QKVSoVqt4oU5QoCiKHQ6/vvpA2QyGdLpNPV6PRQgHo+Tz+fJZrPTAYlEgmQyiW3boQBCCFKpFIy+b36ArusDQ1j1vCM18B3TaDQaOrgvy7Jgyg7mgflisQiA4zihwmOxGKVSCUDvZTFOO/mL5zoSiby6rnsFHMDoDk6llA6//HBc1+1/OP8Kpi8497f1tG0HzQAAAABJRU5ErkJggg==')
  548. Icon = PyEmbeddedImage('iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAALhJREFUWIXtl80SgyAMhHeR99Y+eJseLAdHbJM0TjiwN2dI+MgfQpYFmSqpu0+AEQDqrwXyeorHMcvCEIBdm3F7/fr0FKgBRFaIrHkAdykdQFmEGm2HL233BAIAYmxYEqjePo9SBYBvBKppclDzprMcqAhbAtknJx+3AKRHgGhnv4iApQY+jtSWpOY27BnifNt5uyk9BekAoZNwl21yDBSBi/63yOMiLAXaf8AuwP9n94vzaTYBsgHeht4lXXmb7yQAAAAASUVORK5CYII=')
  549.