Andrea's patch (plus some changes of my own) to add icons and other
features to the demo's main frame. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@45897 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
@@ -19,9 +19,11 @@
|
|||||||
# * Annoying switching between tabs and resulting flicker
|
# * Annoying switching between tabs and resulting flicker
|
||||||
# how to replace a page in the notebook without deleting/adding?
|
# how to replace a page in the notebook without deleting/adding?
|
||||||
# Where is SetPage!? tried freeze...tried reparent of dummy panel....
|
# 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:
|
# TODO List:
|
||||||
# * UI design more prefessional
|
# * UI design more professional (is the new version more professional?)
|
||||||
# * save file positions (new field in demoModules) (@ LoadDemoSource)
|
# * save file positions (new field in demoModules) (@ LoadDemoSource)
|
||||||
# * Update main overview
|
# * Update main overview
|
||||||
|
|
||||||
@@ -30,7 +32,10 @@
|
|||||||
import sys, os, time, traceback, types
|
import sys, os, time, traceback, types
|
||||||
|
|
||||||
import wx # This module uses the new wx namespace
|
import wx # This module uses the new wx namespace
|
||||||
|
import wx.aui
|
||||||
import wx.html
|
import wx.html
|
||||||
|
import wx.lib.customtreectrl as CT
|
||||||
|
from wx.lib.mixins.treemixin import ExpansionState
|
||||||
|
|
||||||
import images
|
import images
|
||||||
|
|
||||||
@@ -43,6 +48,9 @@ import images
|
|||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_demoPngs = ["overview", "recent", "frame", "dialog", "moredialog", "core",
|
||||||
|
"book", "custom", "morecontrols", "layout", "process", "clipboard",
|
||||||
|
"images", "miscellaneous"]
|
||||||
|
|
||||||
_treeList = [
|
_treeList = [
|
||||||
# new stuff
|
# new stuff
|
||||||
@@ -731,7 +739,7 @@ class DemoCodePanel(wx.Panel):
|
|||||||
os.makedirs(GetModifiedDirectory())
|
os.makedirs(GetModifiedDirectory())
|
||||||
if not os.path.exists(GetModifiedDirectory()):
|
if not os.path.exists(GetModifiedDirectory()):
|
||||||
wx.LogMessage("BUG: Created demo directory but it still doesn't exist")
|
wx.LogMessage("BUG: Created demo directory but it still doesn't exist")
|
||||||
raise AssetionError
|
raise AssertionError
|
||||||
except:
|
except:
|
||||||
wx.LogMessage("Error creating demo directory: %s" % GetModifiedDirectory())
|
wx.LogMessage("Error creating demo directory: %s" % GetModifiedDirectory())
|
||||||
return
|
return
|
||||||
@@ -750,6 +758,8 @@ class DemoCodePanel(wx.Panel):
|
|||||||
self.demoModules.LoadFromFile(modModified, modifiedFilename)
|
self.demoModules.LoadFromFile(modModified, modifiedFilename)
|
||||||
self.ActiveModuleChanged()
|
self.ActiveModuleChanged()
|
||||||
|
|
||||||
|
self.mainFrame.SetTreeModified(modifiedFilename, setIcon=True)
|
||||||
|
|
||||||
|
|
||||||
def OnRestore(self, event): # Handles the "Delete Modified" button
|
def OnRestore(self, event): # Handles the "Delete Modified" button
|
||||||
modifiedFilename = GetModifiedFilename(self.demoModules.name)
|
modifiedFilename = GetModifiedFilename(self.demoModules.name)
|
||||||
@@ -758,6 +768,8 @@ class DemoCodePanel(wx.Panel):
|
|||||||
busy = wx.BusyInfo("Reloading demo module...")
|
busy = wx.BusyInfo("Reloading demo module...")
|
||||||
self.ActiveModuleChanged()
|
self.ActiveModuleChanged()
|
||||||
|
|
||||||
|
self.mainFrame.SetTreeModified(modifiedFilename, setIcon=False)
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -804,6 +816,16 @@ def DoesModifiedExist(name):
|
|||||||
return False
|
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:
|
class ModuleDictWrapper:
|
||||||
@@ -1156,10 +1178,13 @@ class wxPythonDemo(wx.Frame):
|
|||||||
overviewText = "wxPython Overview"
|
overviewText = "wxPython Overview"
|
||||||
|
|
||||||
def __init__(self, parent, title):
|
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)
|
style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
|
||||||
|
|
||||||
self.SetMinSize((640,480))
|
self.SetMinSize((640,480))
|
||||||
|
|
||||||
|
self.mgr = wx.aui.AuiManager()
|
||||||
|
self.mgr.SetManagedWindow(self)
|
||||||
|
|
||||||
self.loaded = False
|
self.loaded = False
|
||||||
self.cwd = os.getcwd()
|
self.cwd = os.getcwd()
|
||||||
@@ -1189,119 +1214,66 @@ class wxPythonDemo(wx.Frame):
|
|||||||
self.Centre(wx.BOTH)
|
self.Centre(wx.BOTH)
|
||||||
self.CreateStatusBar(1, wx.ST_SIZEGRIP)
|
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
|
self.dying = False
|
||||||
|
|
||||||
|
def EmptyHandler(evt): pass
|
||||||
|
|
||||||
|
self.ReadConfigurationFile()
|
||||||
|
|
||||||
# Create a Notebook
|
# Create a Notebook
|
||||||
self.nb = wx.Notebook(splitter2, -1, style=wx.CLIP_CHILDREN)
|
self.nb = wx.Notebook(self, -1, style=wx.CLIP_CHILDREN)
|
||||||
|
imgList = wx.ImageList(16, 16)
|
||||||
# Make a File menu
|
for png in ["overview", "code", "demo"]:
|
||||||
self.mainmenu = wx.MenuBar()
|
bmp = images.catalog[png].getBitmap()
|
||||||
menu = wx.Menu()
|
imgList.Add(bmp)
|
||||||
item = menu.Append(-1, '&Redirect Output',
|
self.nb.AssignImageList(imgList)
|
||||||
'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.BuildMenuBar()
|
||||||
|
|
||||||
self.finddata = wx.FindReplaceData()
|
self.finddata = wx.FindReplaceData()
|
||||||
self.finddata.SetFlags(wx.FR_DOWN)
|
self.finddata.SetFlags(wx.FR_DOWN)
|
||||||
|
|
||||||
if False:
|
|
||||||
# This is another way to set Accelerators, in addition to
|
|
||||||
# using the '\t<key>' 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
|
# Create a TreeCtrl
|
||||||
tID = wx.NewId()
|
leftPanel = wx.Panel(self)
|
||||||
leftPanel = wx.Panel(splitter)
|
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.ShowCancelButton(True)
|
||||||
self.filter.Bind(wx.EVT_TEXT, self.RecreateTree)
|
self.filter.Bind(wx.EVT_TEXT, self.RecreateTree)
|
||||||
self.filter.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN,
|
self.filter.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN,
|
||||||
lambda e: self.filter.SetValue(''))
|
lambda e: self.filter.SetValue(''))
|
||||||
|
self.filter.Bind(wx.EVT_TEXT_ENTER, self.OnSearch)
|
||||||
self.treeMap = {}
|
|
||||||
self.tree = wx.TreeCtrl(leftPanel, tID, style =
|
searchMenu = wx.Menu()
|
||||||
wx.TR_DEFAULT_STYLE #| wx.TR_HAS_VARIABLE_ROW_HEIGHT
|
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.RecreateTree()
|
||||||
self.tree.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, id=tID)
|
self.tree.SetExpansionState(self.expansionState)
|
||||||
self.tree.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, id=tID)
|
self.tree.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
|
||||||
self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=tID)
|
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)
|
self.tree.Bind(wx.EVT_LEFT_DOWN, self.OnTreeLeftDown)
|
||||||
|
|
||||||
# Set up a wx.html.HtmlWindow on the Overview Notebook page
|
# Set up a wx.html.HtmlWindow on the Overview Notebook page
|
||||||
# we put it in a panel first because there seems to be a
|
# we put it in a panel first because there seems to be a
|
||||||
# refresh bug of some sort (wxGTK) when it is directly in
|
# refresh bug of some sort (wxGTK) when it is directly in
|
||||||
# the notebook...
|
# the notebook...
|
||||||
|
|
||||||
if 0: # the old way
|
if 0: # the old way
|
||||||
self.ovr = wx.html.HtmlWindow(self.nb, -1, size=(400, 400))
|
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
|
else: # hopefully I can remove this hacky code soon, see SF bug #216861
|
||||||
panel = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN)
|
panel = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN)
|
||||||
self.ovr = wx.html.HtmlWindow(panel, -1, size=(400, 400))
|
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):
|
def OnOvrSize(evt, ovr=self.ovr):
|
||||||
ovr.SetSize(evt.GetSize())
|
ovr.SetSize(evt.GetSize())
|
||||||
@@ -1314,7 +1286,7 @@ class wxPythonDemo(wx.Frame):
|
|||||||
|
|
||||||
|
|
||||||
# Set up a log window
|
# 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)
|
style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
|
||||||
if wx.Platform == "__WXMAC__":
|
if wx.Platform == "__WXMAC__":
|
||||||
self.log.MacCheckSpelling(False)
|
self.log.MacCheckSpelling(False)
|
||||||
@@ -1329,30 +1301,15 @@ class wxPythonDemo(wx.Frame):
|
|||||||
#wx.Log_SetActiveTarget(wx.LogStderr())
|
#wx.Log_SetActiveTarget(wx.LogStderr())
|
||||||
#wx.Log_SetTraceMask(wx.TraceMessages)
|
#wx.Log_SetTraceMask(wx.TraceMessages)
|
||||||
|
|
||||||
|
|
||||||
self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
|
self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
|
||||||
wx.GetApp().Bind(wx.EVT_ACTIVATE_APP, self.OnAppActivate)
|
wx.GetApp().Bind(wx.EVT_ACTIVATE_APP, self.OnAppActivate)
|
||||||
|
|
||||||
# add the windows to the splitter and split it.
|
# add the windows to the splitter and split it.
|
||||||
splitter2.SplitHorizontally(self.nb, self.log, -160)
|
|
||||||
leftBox = wx.BoxSizer(wx.VERTICAL)
|
leftBox = wx.BoxSizer(wx.VERTICAL)
|
||||||
leftBox.Add(self.tree, 1, wx.EXPAND)
|
leftBox.Add(self.tree, 1, wx.EXPAND)
|
||||||
leftBox.Add(wx.StaticText(leftPanel, label = "Filter Demos:"), 0, wx.TOP|wx.LEFT, 5)
|
leftBox.Add(wx.StaticText(leftPanel, label = "Filter Demos:"), 0, wx.TOP|wx.LEFT, 5)
|
||||||
leftBox.Add(self.filter, 0, wx.EXPAND|wx.ALL, 5)
|
leftBox.Add(self.filter, 0, wx.EXPAND|wx.ALL, 5)
|
||||||
leftPanel.SetSizer(leftBox)
|
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
|
# select initial items
|
||||||
self.nb.SetSelection(0)
|
self.nb.SetSelection(0)
|
||||||
@@ -1372,32 +1329,268 @@ class wxPythonDemo(wx.Frame):
|
|||||||
self.tree.SelectItem(selectedDemo)
|
self.tree.SelectItem(selectedDemo)
|
||||||
self.tree.EnsureVisible(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<key>' 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):
|
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.Freeze()
|
||||||
self.tree.DeleteAllItems()
|
self.tree.DeleteAllItems()
|
||||||
self.root = self.tree.AddRoot("wxPython Overview")
|
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
|
firstChild = None
|
||||||
filter = self.filter.GetValue()
|
filter = self.filter.GetValue()
|
||||||
|
count = 0
|
||||||
|
bmp = images.catalog['modifiedexists'].getBitmap()
|
||||||
for category, items in _treeList:
|
for category, items in _treeList:
|
||||||
|
count += 1
|
||||||
if filter:
|
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:
|
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
|
if not firstChild: firstChild = child
|
||||||
for childItem in items:
|
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.treeMap[childItem] = theDemo
|
||||||
|
|
||||||
self.tree.Expand(self.root)
|
self.tree.Expand(self.root)
|
||||||
if firstChild:
|
if firstChild:
|
||||||
self.tree.Expand(firstChild)
|
self.tree.Expand(firstChild)
|
||||||
if filter:
|
if filter:
|
||||||
self.tree.ExpandAll()
|
self.tree.ExpandAll()
|
||||||
self.tree.Thaw()
|
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):
|
def WriteText(self, text):
|
||||||
if text[-1:] == '\n':
|
if text[-1:] == '\n':
|
||||||
text = text[:-1]
|
text = text[:-1]
|
||||||
@@ -1440,6 +1633,7 @@ class wxPythonDemo(wx.Frame):
|
|||||||
def LoadDemo(self, demoName):
|
def LoadDemo(self, demoName):
|
||||||
try:
|
try:
|
||||||
wx.BeginBusyCursor()
|
wx.BeginBusyCursor()
|
||||||
|
self.Freeze()
|
||||||
|
|
||||||
os.chdir(self.cwd)
|
os.chdir(self.cwd)
|
||||||
self.ShutdownDemoModule()
|
self.ShutdownDemoModule()
|
||||||
@@ -1464,6 +1658,7 @@ class wxPythonDemo(wx.Frame):
|
|||||||
self.UpdateNotebook(0)
|
self.UpdateNotebook(0)
|
||||||
finally:
|
finally:
|
||||||
wx.EndBusyCursor()
|
wx.EndBusyCursor()
|
||||||
|
self.Thaw()
|
||||||
|
|
||||||
#---------------------------------------------
|
#---------------------------------------------
|
||||||
def LoadDemoSource(self):
|
def LoadDemoSource(self):
|
||||||
@@ -1494,6 +1689,10 @@ class wxPythonDemo(wx.Frame):
|
|||||||
self.demoPage = DemoErrorPanel(self.nb, self.codePage,
|
self.demoPage = DemoErrorPanel(self.nb, self.codePage,
|
||||||
DemoError(sys.exc_info()), self)
|
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!"
|
assert self.demoPage is not None, "runTest must return a window!"
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1524,6 +1723,7 @@ class wxPythonDemo(wx.Frame):
|
|||||||
def UpdateNotebook(self, select = -1):
|
def UpdateNotebook(self, select = -1):
|
||||||
nb = self.nb
|
nb = self.nb
|
||||||
debug = False
|
debug = False
|
||||||
|
self.Freeze()
|
||||||
|
|
||||||
def UpdatePage(page, pageText):
|
def UpdatePage(page, pageText):
|
||||||
pageExists = False
|
pageExists = False
|
||||||
@@ -1537,15 +1737,13 @@ class wxPythonDemo(wx.Frame):
|
|||||||
if page:
|
if page:
|
||||||
if not pageExists:
|
if not pageExists:
|
||||||
# Add a new page
|
# Add a new page
|
||||||
nb.AddPage(page, pageText)
|
nb.AddPage(page, pageText, imageId=nb.GetPageCount())
|
||||||
if debug: wx.LogMessage("DBG: ADDED %s" % pageText)
|
if debug: wx.LogMessage("DBG: ADDED %s" % pageText)
|
||||||
else:
|
else:
|
||||||
if nb.GetPage(pagePos) != page:
|
if nb.GetPage(pagePos) != page:
|
||||||
# Reload an existing page
|
# Reload an existing page
|
||||||
nb.Freeze()
|
|
||||||
nb.DeletePage(pagePos)
|
nb.DeletePage(pagePos)
|
||||||
nb.InsertPage(pagePos, page, pageText)
|
nb.InsertPage(pagePos, page, pageText, imageId=pagePos)
|
||||||
nb.Thaw()
|
|
||||||
if debug: wx.LogMessage("DBG: RELOADED %s" % pageText)
|
if debug: wx.LogMessage("DBG: RELOADED %s" % pageText)
|
||||||
else:
|
else:
|
||||||
# Excellent! No redraw/flicker
|
# Excellent! No redraw/flicker
|
||||||
@@ -1565,7 +1763,9 @@ class wxPythonDemo(wx.Frame):
|
|||||||
|
|
||||||
if select >= 0 and select < nb.GetPageCount():
|
if select >= 0 and select < nb.GetPageCount():
|
||||||
nb.SetSelection(select)
|
nb.SetSelection(select)
|
||||||
|
|
||||||
|
self.Thaw()
|
||||||
|
|
||||||
#---------------------------------------------
|
#---------------------------------------------
|
||||||
def SetOverview(self, name, text):
|
def SetOverview(self, name, text):
|
||||||
self.curOverview = text
|
self.curOverview = text
|
||||||
@@ -1590,6 +1790,70 @@ class wxPythonDemo(wx.Frame):
|
|||||||
else:
|
else:
|
||||||
app.RestoreStdio()
|
app.RestoreStdio()
|
||||||
print "Print statements and other standard output will now be sent to the usual location."
|
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):
|
def OnHelpAbout(self, event):
|
||||||
from About import MyAboutBox
|
from About import MyAboutBox
|
||||||
@@ -1710,6 +1974,15 @@ class wxPythonDemo(wx.Frame):
|
|||||||
self.mainmenu = None
|
self.mainmenu = None
|
||||||
if self.tbicon is not None:
|
if self.tbicon is not None:
|
||||||
self.tbicon.Destroy()
|
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()
|
self.Destroy()
|
||||||
|
|
||||||
|
|
||||||
@@ -1800,7 +2073,30 @@ class MySplashScreen(wx.SplashScreen):
|
|||||||
if self.fc.IsRunning():
|
if self.fc.IsRunning():
|
||||||
self.Raise()
|
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):
|
class MyApp(wx.App):
|
||||||
def OnInit(self):
|
def OnInit(self):
|
||||||
"""
|
"""
|
||||||
@@ -1876,7 +2172,7 @@ is loaded in another tab for you to browse and learn from.
|
|||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
__name__ = 'Main'
|
__name__ = 'MainWithoutFNB'
|
||||||
main()
|
main()
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
@@ -30,8 +30,9 @@ class TestTreeCtrlPanel(wx.Panel):
|
|||||||
tID = wx.NewId()
|
tID = wx.NewId()
|
||||||
|
|
||||||
self.tree = MyTreeCtrl(self, tID, wx.DefaultPosition, wx.DefaultSize,
|
self.tree = MyTreeCtrl(self, tID, wx.DefaultPosition, wx.DefaultSize,
|
||||||
wx.TR_HAS_BUTTONS
|
wx.TR_DEFAULT_STYLE
|
||||||
| wx.TR_EDIT_LABELS
|
#wx.TR_HAS_BUTTONS
|
||||||
|
#| wx.TR_EDIT_LABELS
|
||||||
#| wx.TR_MULTIPLE
|
#| wx.TR_MULTIPLE
|
||||||
#| wx.TR_HIDE_ROOT
|
#| wx.TR_HIDE_ROOT
|
||||||
, self.log)
|
, self.log)
|
||||||
|
BIN
wxPython/demo/bmp_source/book.png
Normal file
After Width: | Height: | Size: 622 B |
BIN
wxPython/demo/bmp_source/clipboard.png
Normal file
After Width: | Height: | Size: 693 B |
BIN
wxPython/demo/bmp_source/code.png
Normal file
After Width: | Height: | Size: 868 B |
BIN
wxPython/demo/bmp_source/core.png
Normal file
After Width: | Height: | Size: 807 B |
BIN
wxPython/demo/bmp_source/custom.png
Normal file
After Width: | Height: | Size: 833 B |
BIN
wxPython/demo/bmp_source/deleteperspective.png
Normal file
After Width: | Height: | Size: 892 B |
BIN
wxPython/demo/bmp_source/demo.png
Normal file
After Width: | Height: | Size: 817 B |
BIN
wxPython/demo/bmp_source/dialog.png
Normal file
After Width: | Height: | Size: 237 B |
BIN
wxPython/demo/bmp_source/exit.png
Normal file
After Width: | Height: | Size: 995 B |
BIN
wxPython/demo/bmp_source/expansion.png
Normal file
After Width: | Height: | Size: 894 B |
BIN
wxPython/demo/bmp_source/find.png
Normal file
After Width: | Height: | Size: 985 B |
BIN
wxPython/demo/bmp_source/findnext.png
Normal file
After Width: | Height: | Size: 811 B |
BIN
wxPython/demo/bmp_source/frame.png
Normal file
After Width: | Height: | Size: 199 B |
BIN
wxPython/demo/bmp_source/images.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wxPython/demo/bmp_source/inspect.png
Normal file
After Width: | Height: | Size: 766 B |
BIN
wxPython/demo/bmp_source/layout.png
Normal file
After Width: | Height: | Size: 519 B |
BIN
wxPython/demo/bmp_source/miscellaneous.png
Normal file
After Width: | Height: | Size: 716 B |
BIN
wxPython/demo/bmp_source/modifiedexists.png
Normal file
After Width: | Height: | Size: 440 B |
BIN
wxPython/demo/bmp_source/morecontrols.png
Normal file
After Width: | Height: | Size: 740 B |
BIN
wxPython/demo/bmp_source/moredialog.png
Normal file
After Width: | Height: | Size: 495 B |
BIN
wxPython/demo/bmp_source/overview.png
Normal file
After Width: | Height: | Size: 655 B |
BIN
wxPython/demo/bmp_source/process.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
wxPython/demo/bmp_source/pyshell.png
Normal file
After Width: | Height: | Size: 664 B |
BIN
wxPython/demo/bmp_source/recent.png
Normal file
After Width: | Height: | Size: 378 B |
BIN
wxPython/demo/bmp_source/saveperspective.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
@@ -100,6 +100,33 @@ command_lines = [
|
|||||||
"-a -u -n _book_green bmp_source/book_green.png images.py",
|
"-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 -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",
|
" -u -c bmp_source/001.png throbImages.py",
|
||||||
"-a -u -c bmp_source/002.png throbImages.py",
|
"-a -u -c bmp_source/002.png throbImages.py",
|
||||||
"-a -u -c bmp_source/003.png throbImages.py",
|
"-a -u -c bmp_source/003.png throbImages.py",
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# This file was generated by encode_bitmaps.py
|
# This file was generated by encode_bitmaps.py
|
||||||
#
|
#
|
||||||
from wx import ImageFromStream, BitmapFromImage
|
from wx import ImageFromStream, BitmapFromImage, EmptyIcon
|
||||||
import cStringIO
|
import cStringIO
|
||||||
|
|
||||||
|
|
||||||
|