1#!/usr/bin/env python
2
3import wx
4import wx.grid
5import wx.html
6import wx.aui as aui
7
8from six import BytesIO
9
10ID_CreateTree = wx.NewIdRef()
11ID_CreateGrid = wx.NewIdRef()
12ID_CreateText = wx.NewIdRef()
13ID_CreateHTML = wx.NewIdRef()
14ID_CreateSizeReport = wx.NewIdRef()
15ID_GridContent = wx.NewIdRef()
16ID_TextContent = wx.NewIdRef()
17ID_TreeContent = wx.NewIdRef()
18ID_HTMLContent = wx.NewIdRef()
19ID_SizeReportContent = wx.NewIdRef()
20ID_CreatePerspective = wx.NewIdRef()
21ID_CopyPerspective = wx.NewIdRef()
22
23ID_TransparentHint = wx.NewIdRef()
24ID_VenetianBlindsHint = wx.NewIdRef()
25ID_RectangleHint = wx.NewIdRef()
26ID_NoHint = wx.NewIdRef()
27ID_HintFade = wx.NewIdRef()
28ID_AllowFloating = wx.NewIdRef()
29ID_NoVenetianFade = wx.NewIdRef()
30ID_TransparentDrag = wx.NewIdRef()
31ID_AllowActivePane = wx.NewIdRef()
32ID_NoGradient = wx.NewIdRef()
33ID_VerticalGradient = wx.NewIdRef()
34ID_HorizontalGradient = wx.NewIdRef()
35
36ID_Settings = wx.NewIdRef()
37ID_About = wx.NewIdRef()
38
39# This reserves count IDs and returns a list of WindowIDRef objects
40ID_FirstPerspective = wx.NewIdRef(100)
41
42
43
44#----------------------------------------------------------------------
45def GetMondrianData():
46    return \
47b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\
48\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00qID\
49ATX\x85\xed\xd6;\n\x800\x10E\xd1{\xc5\x8d\xb9r\x97\x16\x0b\xad$\x8a\x82:\x16\
50o\xda\x84pB2\x1f\x81Fa\x8c\x9c\x08\x04Z{\xcf\xa72\xbcv\xfa\xc5\x08 \x80r\x80\
51\xfc\xa2\x0e\x1c\xe4\xba\xfaX\x1d\xd0\xde]S\x07\x02\xd8>\xe1wa-`\x9fQ\xe9\
52\x86\x01\x04\x10\x00\\(Dk\x1b-\x04\xdc\x1d\x07\x14\x98;\x0bS\x7f\x7f\xf9\x13\
53\x04\x10@\xf9X\xbe\x00\xc9 \x14K\xc1<={\x00\x00\x00\x00IEND\xaeB`\x82'
54
55
56def GetMondrianBitmap():
57    return wx.Bitmap(GetMondrianImage())
58
59
60def GetMondrianImage():
61    stream = BytesIO(GetMondrianData())
62    return wx.Image(stream)
63
64
65def GetMondrianIcon():
66    icon = wx.Icon()
67    icon.CopyFromBitmap(GetMondrianBitmap())
68    return icon
69
70
71class PyAUIFrame(wx.Frame):
72
73    def __init__(self, parent, id=-1, title="", pos=wx.DefaultPosition,
74                 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
75                                            wx.SUNKEN_BORDER |
76                                            wx.CLIP_CHILDREN):
77
78        wx.Frame.__init__(self, parent, id, title, pos, size, style)
79
80        # tell FrameManager to manage this frame
81        self._mgr = aui.AuiManager()
82        self._mgr.SetManagedWindow(self)
83
84        self._perspectives = []
85        self.n = 0
86        self.x = 0
87
88        self.SetIcon(GetMondrianIcon())
89
90        # create menu
91        mb = wx.MenuBar()
92
93        file_menu = wx.Menu()
94        file_menu.Append(wx.ID_EXIT, "Exit")
95
96        view_menu = wx.Menu()
97        view_menu.Append(ID_CreateText, "Create Text Control")
98        view_menu.Append(ID_CreateHTML, "Create HTML Control")
99        view_menu.Append(ID_CreateTree, "Create Tree")
100        view_menu.Append(ID_CreateGrid, "Create Grid")
101        view_menu.Append(ID_CreateSizeReport, "Create Size Reporter")
102        view_menu.AppendSeparator()
103        view_menu.Append(ID_GridContent, "Use a Grid for the Content Pane")
104        view_menu.Append(ID_TextContent, "Use a Text Control for the Content Pane")
105        view_menu.Append(ID_HTMLContent, "Use an HTML Control for the Content Pane")
106        view_menu.Append(ID_TreeContent, "Use a Tree Control for the Content Pane")
107        view_menu.Append(ID_SizeReportContent, "Use a Size Reporter for the Content Pane")
108
109        options_menu = wx.Menu()
110        options_menu.AppendRadioItem(ID_TransparentHint, "Transparent Hint")
111        options_menu.AppendRadioItem(ID_VenetianBlindsHint, "Venetian Blinds Hint")
112        options_menu.AppendRadioItem(ID_RectangleHint, "Rectangle Hint")
113        options_menu.AppendRadioItem(ID_NoHint, "No Hint")
114        options_menu.AppendSeparator();
115        options_menu.AppendCheckItem(ID_HintFade, "Hint Fade-in")
116        options_menu.AppendCheckItem(ID_AllowFloating, "Allow Floating")
117        options_menu.AppendCheckItem(ID_NoVenetianFade, "Disable Venetian Blinds Hint Fade-in")
118        options_menu.AppendCheckItem(ID_TransparentDrag, "Transparent Drag")
119        options_menu.AppendCheckItem(ID_AllowActivePane, "Allow Active Pane")
120        options_menu.AppendSeparator();
121        options_menu.AppendRadioItem(ID_NoGradient, "No Caption Gradient")
122        options_menu.AppendRadioItem(ID_VerticalGradient, "Vertical Caption Gradient")
123        options_menu.AppendRadioItem(ID_HorizontalGradient, "Horizontal Caption Gradient")
124        options_menu.AppendSeparator();
125        options_menu.Append(ID_Settings, "Settings Pane")
126
127        self._perspectives_menu = wx.Menu()
128        self._perspectives_menu.Append(ID_CreatePerspective, "Create Perspective")
129        self._perspectives_menu.Append(ID_CopyPerspective, "Copy Perspective Data To Clipboard")
130        self._perspectives_menu.AppendSeparator()
131        self._perspectives_menu.Append(ID_FirstPerspective[0], "Default Startup")
132        self._perspectives_menu.Append(ID_FirstPerspective[1], "All Panes")
133        self._perspectives_menu.Append(ID_FirstPerspective[2], "Vertical Toolbar")
134
135        help_menu = wx.Menu()
136        help_menu.Append(ID_About, "About...")
137
138        mb.Append(file_menu, "File")
139        mb.Append(view_menu, "View")
140        mb.Append(self._perspectives_menu, "Perspectives")
141        mb.Append(options_menu, "Options")
142        mb.Append(help_menu, "Help")
143
144        self.SetMenuBar(mb)
145
146        self.statusbar = self.CreateStatusBar(2, wx.STB_SIZEGRIP)
147        self.statusbar.SetStatusWidths([-2, -3])
148        self.statusbar.SetStatusText("Ready", 0)
149        self.statusbar.SetStatusText("Welcome To wxPython!", 1)
150
151        # min size for the frame itself isn't completely done.
152        # see the end up FrameManager::Update() for the test
153        # code. For now, just hard code a frame minimum size
154        self.SetMinSize(wx.Size(400, 300))
155
156        # create some toolbars
157        tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
158                         wx.TB_FLAT | wx.TB_NODIVIDER)
159        tb1.SetToolBitmapSize(wx.Size(48,48))
160        tb1.AddTool(101, "Test", wx.ArtProvider.GetBitmap(wx.ART_ERROR))
161        tb1.AddSeparator()
162        tb1.AddTool(102, "Test", wx.ArtProvider.GetBitmap(wx.ART_QUESTION))
163        tb1.AddTool(103, "Test", wx.ArtProvider.GetBitmap(wx.ART_INFORMATION))
164        tb1.AddTool(103, "Test", wx.ArtProvider.GetBitmap(wx.ART_WARNING))
165        tb1.AddTool(103, "Test", wx.ArtProvider.GetBitmap(wx.ART_MISSING_IMAGE))
166        tb1.Realize()
167
168        tb2 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
169                         wx.TB_FLAT | wx.TB_NODIVIDER)
170        tb2.SetToolBitmapSize(wx.Size(16,16))
171        tb2_bmp1 = wx.ArtProvider.GetBitmap(wx.ART_QUESTION, wx.ART_OTHER, wx.Size(16, 16))
172        tb2.AddTool(101, "Test", tb2_bmp1)
173        tb2.AddTool(101, "Test", tb2_bmp1)
174        tb2.AddTool(101, "Test", tb2_bmp1)
175        tb2.AddTool(101, "Test", tb2_bmp1)
176        tb2.AddSeparator()
177        tb2.AddTool(101, "Test", tb2_bmp1)
178        tb2.AddTool(101, "Test", tb2_bmp1)
179        tb2.AddSeparator()
180        tb2.AddTool(101, "Test", tb2_bmp1)
181        tb2.AddTool(101, "Test", tb2_bmp1)
182        tb2.AddTool(101, "Test", tb2_bmp1)
183        tb2.AddTool(101, "Test", tb2_bmp1)
184        tb2.Realize()
185
186        tb3 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
187                         wx.TB_FLAT | wx.TB_NODIVIDER)
188        tb3.SetToolBitmapSize(wx.Size(16,16))
189        tb3_bmp1 = wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16, 16))
190        tb3.AddTool(101, "Test", tb3_bmp1)
191        tb3.AddTool(101, "Test", tb3_bmp1)
192        tb3.AddTool(101, "Test", tb3_bmp1)
193        tb3.AddTool(101, "Test", tb3_bmp1)
194        tb3.AddSeparator()
195        tb3.AddTool(101, "Test", tb3_bmp1)
196        tb3.AddTool(101, "Test", tb3_bmp1)
197        tb3.Realize()
198
199        tb4 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
200                         wx.TB_FLAT | wx.TB_NODIVIDER | wx.TB_HORZ_TEXT)
201        tb4.SetToolBitmapSize(wx.Size(16,16))
202        tb4_bmp1 = wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16, 16))
203        tb4.AddTool(101, "Item 1", tb4_bmp1)
204        tb4.AddTool(101, "Item 2", tb4_bmp1)
205        tb4.AddTool(101, "Item 3", tb4_bmp1)
206        tb4.AddTool(101, "Item 4", tb4_bmp1)
207        tb4.AddSeparator()
208        tb4.AddTool(101, "Item 5", tb4_bmp1)
209        tb4.AddTool(101, "Item 6", tb4_bmp1)
210        tb4.AddTool(101, "Item 7", tb4_bmp1)
211        tb4.AddTool(101, "Item 8", tb4_bmp1)
212        tb4.Realize()
213
214        tb5 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
215                         wx.TB_FLAT | wx.TB_NODIVIDER | wx.TB_VERTICAL)
216        tb5.SetToolBitmapSize(wx.Size(48, 48))
217        tb5.AddTool(101, "Test", wx.ArtProvider.GetBitmap(wx.ART_ERROR))
218        tb5.AddSeparator()
219        tb5.AddTool(102, "Test", wx.ArtProvider.GetBitmap(wx.ART_QUESTION))
220        tb5.AddTool(103, "Test", wx.ArtProvider.GetBitmap(wx.ART_INFORMATION))
221        tb5.AddTool(103, "Test", wx.ArtProvider.GetBitmap(wx.ART_WARNING))
222        tb5.AddTool(103, "Test", wx.ArtProvider.GetBitmap(wx.ART_MISSING_IMAGE))
223        tb5.Realize()
224
225        # add a bunch of panes
226        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
227                          Name("test1").Caption("Pane Caption").Top().
228                          CloseButton(True).MaximizeButton(True))
229
230        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
231                          Name("test2").Caption("Client Size Reporter").
232                          Bottom().Position(1).CloseButton(True).MaximizeButton(True))
233
234        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
235                          Name("test3").Caption("Client Size Reporter").
236                          Bottom().CloseButton(True).MaximizeButton(True))
237
238        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
239                          Name("test4").Caption("Pane Caption").
240                          Left().CloseButton(True).MaximizeButton(True))
241
242        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
243                          Name("test5").Caption("Pane Caption").
244                          Right().CloseButton(True).MaximizeButton(True))
245
246        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
247                          Name("test6").Caption("Client Size Reporter").
248                          Right().Row(1).CloseButton(True).MaximizeButton(True))
249
250        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
251                          Name("test7").Caption("Client Size Reporter").
252                          Left().Layer(1).CloseButton(True).MaximizeButton(True))
253
254        self._mgr.AddPane(self.CreateTreeCtrl(), aui.AuiPaneInfo().
255                          Name("test8").Caption("Tree Pane").
256                          Left().Layer(1).Position(1).CloseButton(True).MaximizeButton(True))
257
258        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
259                          Name("test9").Caption("Min Size 200x100").
260                          BestSize(wx.Size(200,100)).MinSize(wx.Size(200,100)).
261                          Bottom().Layer(1).CloseButton(True).MaximizeButton(True))
262
263        self._mgr.AddPane(self.CreateTextCtrl(), aui.AuiPaneInfo().
264                          Name("test10").Caption("Text Pane").
265                          Bottom().Layer(1).Position(1).CloseButton(True).MaximizeButton(True))
266
267        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
268                          Name("test11").Caption("Fixed Pane").
269                          Bottom().Layer(1).Position(2).Fixed().CloseButton(True).MaximizeButton(True))
270
271        self._mgr.AddPane(SettingsPanel(self, self), aui.AuiPaneInfo().
272                          Name("settings").Caption("Dock Manager Settings").
273                          Dockable(False).Float().Hide().CloseButton(True).MaximizeButton(True))
274
275        # create some center panes
276
277        self._mgr.AddPane(self.CreateGrid(), aui.AuiPaneInfo().Name("grid_content").
278                          CenterPane().Hide())
279
280        self._mgr.AddPane(self.CreateTreeCtrl(), aui.AuiPaneInfo().Name("tree_content").
281                          CenterPane().Hide())
282
283        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().Name("sizereport_content").
284                          CenterPane().Hide())
285
286        self._mgr.AddPane(self.CreateTextCtrl(), aui.AuiPaneInfo().Name("text_content").
287                          CenterPane().Hide())
288
289        self._mgr.AddPane(self.CreateHTMLCtrl(), aui.AuiPaneInfo().Name("html_content").
290                          CenterPane())
291
292        # add the toolbars to the manager
293
294        self._mgr.AddPane(tb1, aui.AuiPaneInfo().
295                          Name("tb1").Caption("Big Toolbar").
296                          ToolbarPane().Top().
297                          LeftDockable(False).RightDockable(False))
298
299        self._mgr.AddPane(tb2, aui.AuiPaneInfo().
300                          Name("tb2").Caption("Toolbar 2").
301                          ToolbarPane().Top().Row(1).
302                          LeftDockable(False).RightDockable(False))
303
304        self._mgr.AddPane(tb3, aui.AuiPaneInfo().
305                          Name("tb3").Caption("Toolbar 3").
306                          ToolbarPane().Top().Row(1).Position(1).
307                          LeftDockable(False).RightDockable(False))
308
309        self._mgr.AddPane(tb4, aui.AuiPaneInfo().
310                          Name("tb4").Caption("Sample Bookmark Toolbar").
311                          ToolbarPane().Top().Row(2).
312                          LeftDockable(False).RightDockable(False))
313
314        self._mgr.AddPane(tb5, aui.AuiPaneInfo().
315                          Name("tbvert").Caption("Sample Vertical Toolbar").
316                          ToolbarPane().Left().GripperTop().
317                          TopDockable(False).BottomDockable(False))
318
319        self._mgr.AddPane(wx.Button(self, -1, "Test Button"),
320                          aui.AuiPaneInfo().Name("tb5").
321                          ToolbarPane().Top().Row(2).Position(1).
322                          LeftDockable(False).RightDockable(False))
323
324        # make some default perspectives
325
326        self._mgr.GetPane("tbvert").Hide()
327
328        perspective_all = self._mgr.SavePerspective()
329
330        all_panes = self._mgr.GetAllPanes()
331
332        for ii in range(len(all_panes)):
333            if not all_panes[ii].IsToolbar():
334                all_panes[ii].Hide()
335
336        self._mgr.GetPane("tb1").Hide()
337        self._mgr.GetPane("tb5").Hide()
338        self._mgr.GetPane("test8").Show().Left().Layer(0).Row(0).Position(0)
339        self._mgr.GetPane("test10").Show().Bottom().Layer(0).Row(0).Position(0)
340        self._mgr.GetPane("html_content").Show()
341
342        perspective_default = self._mgr.SavePerspective()
343
344        for ii in range(len(all_panes)):
345            if not all_panes[ii].IsToolbar():
346                all_panes[ii].Hide()
347
348        self._mgr.GetPane("tb1").Hide()
349        self._mgr.GetPane("tb5").Hide()
350        self._mgr.GetPane("tbvert").Show()
351        self._mgr.GetPane("grid_content").Show()
352        self._mgr.GetPane("test8").Show().Left().Layer(0).Row(0).Position(0)
353        self._mgr.GetPane("test10").Show().Bottom().Layer(0).Row(0).Position(0)
354        self._mgr.GetPane("html_content").Show()
355
356        perspective_vert = self._mgr.SavePerspective()
357
358        self._perspectives.append(perspective_default)
359        self._perspectives.append(perspective_all)
360        self._perspectives.append(perspective_vert)
361
362        self._mgr.GetPane("tbvert").Hide()
363        self._mgr.GetPane("grid_content").Hide()
364
365        # "commit" all changes made to FrameManager
366        self._mgr.Update()
367
368        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
369        self.Bind(wx.EVT_SIZE, self.OnSize)
370        self.Bind(wx.EVT_CLOSE, self.OnClose)
371
372        # Show How To Use The Closing Panes Event
373        self.Bind(aui.EVT_AUI_PANE_CLOSE, self.OnPaneClose)
374
375        self.Bind(wx.EVT_MENU, self.OnCreateTree, id=ID_CreateTree)
376        self.Bind(wx.EVT_MENU, self.OnCreateGrid, id=ID_CreateGrid)
377        self.Bind(wx.EVT_MENU, self.OnCreateText, id=ID_CreateText)
378        self.Bind(wx.EVT_MENU, self.OnCreateHTML, id=ID_CreateHTML)
379        self.Bind(wx.EVT_MENU, self.OnCreateSizeReport, id=ID_CreateSizeReport)
380        self.Bind(wx.EVT_MENU, self.OnCreatePerspective, id=ID_CreatePerspective)
381        self.Bind(wx.EVT_MENU, self.OnCopyPerspective, id=ID_CopyPerspective)
382
383        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_AllowFloating)
384        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_TransparentHint)
385        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_VenetianBlindsHint)
386        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_RectangleHint)
387        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_NoHint)
388        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_HintFade)
389        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_NoVenetianFade)
390        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_TransparentDrag)
391        self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_AllowActivePane)
392
393        self.Bind(wx.EVT_MENU, self.OnGradient, id=ID_NoGradient)
394        self.Bind(wx.EVT_MENU, self.OnGradient, id=ID_VerticalGradient)
395        self.Bind(wx.EVT_MENU, self.OnGradient, id=ID_HorizontalGradient)
396        self.Bind(wx.EVT_MENU, self.OnSettings, id=ID_Settings)
397        self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_GridContent)
398        self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TreeContent)
399        self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TextContent)
400        self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_SizeReportContent)
401        self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_HTMLContent)
402        self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
403        self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_About)
404
405        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_TransparentHint)
406        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_VenetianBlindsHint)
407        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_RectangleHint)
408        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_NoHint)
409        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_HintFade)
410        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_AllowFloating)
411        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_NoVenetianFade)
412        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_TransparentDrag)
413        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_AllowActivePane)
414        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_NoGradient)
415        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_VerticalGradient)
416        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_HorizontalGradient)
417
418
419        self.Bind(wx.EVT_MENU_RANGE, self.OnRestorePerspective,
420                  id=ID_FirstPerspective[0], id2=ID_FirstPerspective[-1])
421
422
423    def OnPaneClose(self, event):
424
425        caption = event.GetPane().caption
426
427        if caption in ["Tree Pane", "Dock Manager Settings", "Fixed Pane"]:
428            msg = "Are You Sure You Want To Close This Pane?"
429            dlg = wx.MessageDialog(self, msg, "AUI Question",
430                                   wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
431
432            if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
433                event.Veto()
434            dlg.Destroy()
435
436
437    def OnClose(self, event):
438        self._mgr.UnInit()
439        del self._mgr
440        self.Destroy()
441
442
443    def OnExit(self, event):
444        self.Close()
445
446    def OnAbout(self, event):
447
448        msg = "wx.aui Demo\n" + \
449              "An advanced window management library for wxWidgets\n" + \
450              "(c) Copyright 2005-2006, Kirix Corporation"
451        dlg = wx.MessageDialog(self, msg, "About wx.aui Demo",
452                               wx.OK | wx.ICON_INFORMATION)
453        dlg.ShowModal()
454        dlg.Destroy()
455
456
457    def GetDockArt(self):
458
459        return self._mgr.GetArtProvider()
460
461
462    def DoUpdate(self):
463
464        self._mgr.Update()
465
466
467    def OnEraseBackground(self, event):
468
469        event.Skip()
470
471
472    def OnSize(self, event):
473
474        event.Skip()
475
476
477    def OnSettings(self, event):
478
479        # show the settings pane, and float it
480        floating_pane = self._mgr.GetPane("settings").Float().Show()
481
482        if floating_pane.floating_pos == wx.DefaultPosition:
483            floating_pane.FloatingPosition(self.GetStartPosition())
484
485        self._mgr.Update()
486
487
488    def OnGradient(self, event):
489
490        gradient = 0
491
492        if event.GetId() == ID_NoGradient:
493            gradient = aui.AUI_GRADIENT_NONE
494        elif event.GetId() == ID_VerticalGradient:
495            gradient = aui.AUI_GRADIENT_VERTICAL
496        elif event.GetId() == ID_HorizontalGradient:
497            gradient = aui.AUI_GRADIENT_HORIZONTAL
498
499        self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, gradient)
500        self._mgr.Update()
501
502
503    def OnManagerFlag(self, event):
504
505        flag = 0
506        eid = event.GetId()
507
508        if eid in [ ID_TransparentHint, ID_VenetianBlindsHint, ID_RectangleHint, ID_NoHint ]:
509            flags = self._mgr.GetFlags()
510            flags &= ~aui.AUI_MGR_TRANSPARENT_HINT
511            flags &= ~aui.AUI_MGR_VENETIAN_BLINDS_HINT
512            flags &= ~aui.AUI_MGR_RECTANGLE_HINT
513            self._mgr.SetFlags(flags)
514
515        if eid == ID_AllowFloating:
516            flag = aui.AUI_MGR_ALLOW_FLOATING
517        elif eid == ID_TransparentDrag:
518            flag = aui.AUI_MGR_TRANSPARENT_DRAG
519        elif eid == ID_HintFade:
520            flag = aui.AUI_MGR_HINT_FADE
521        elif eid == ID_NoVenetianFade:
522            flag = aui.AUI_MGR_NO_VENETIAN_BLINDS_FADE
523        elif eid == ID_AllowActivePane:
524            flag = aui.AUI_MGR_ALLOW_ACTIVE_PANE
525        elif eid == ID_TransparentHint:
526            flag = aui.AUI_MGR_TRANSPARENT_HINT
527        elif eid == ID_VenetianBlindsHint:
528            flag = aui.AUI_MGR_VENETIAN_BLINDS_HINT
529        elif eid == ID_RectangleHint:
530            flag = aui.AUI_MGR_RECTANGLE_HINT
531
532        self._mgr.SetFlags(self._mgr.GetFlags() ^ flag)
533
534
535    def OnUpdateUI(self, event):
536
537        flags = self._mgr.GetFlags()
538        eid = event.GetId()
539
540        if eid == ID_NoGradient:
541            event.Check(self._mgr.GetArtProvider().GetMetric(aui.AUI_DOCKART_GRADIENT_TYPE) == aui.AUI_GRADIENT_NONE)
542
543        elif eid == ID_VerticalGradient:
544            event.Check(self._mgr.GetArtProvider().GetMetric(aui.AUI_DOCKART_GRADIENT_TYPE) == aui.AUI_GRADIENT_VERTICAL)
545
546        elif eid == ID_HorizontalGradient:
547            event.Check(self._mgr.GetArtProvider().GetMetric(aui.AUI_DOCKART_GRADIENT_TYPE) == aui.AUI_GRADIENT_HORIZONTAL)
548
549        elif eid == ID_AllowFloating:
550            event.Check((flags & aui.AUI_MGR_ALLOW_FLOATING) != 0)
551
552        elif eid == ID_TransparentDrag:
553            event.Check((flags & aui.AUI_MGR_TRANSPARENT_DRAG) != 0)
554
555        elif eid == ID_TransparentHint:
556            event.Check((flags & aui.AUI_MGR_TRANSPARENT_HINT) != 0)
557
558        elif eid == ID_VenetianBlindsHint:
559            event.Check((flags & aui.AUI_MGR_VENETIAN_BLINDS_HINT) != 0)
560
561        elif eid == ID_RectangleHint:
562            event.Check((flags & aui.AUI_MGR_RECTANGLE_HINT) != 0)
563
564        elif eid == ID_NoHint:
565            event.Check(((aui.AUI_MGR_TRANSPARENT_HINT |
566                          aui.AUI_MGR_VENETIAN_BLINDS_HINT |
567                          aui.AUI_MGR_RECTANGLE_HINT) & flags) == 0)
568
569        elif eid == ID_HintFade:
570            event.Check((flags & aui.AUI_MGR_HINT_FADE) != 0);
571
572        elif eid == ID_NoVenetianFade:
573            event.Check((flags & aui.AUI_MGR_NO_VENETIAN_BLINDS_FADE) != 0);
574
575
576
577
578    def OnCreatePerspective(self, event):
579
580        dlg = wx.TextEntryDialog(self, "Enter a name for the new perspective:", "AUI Test")
581
582        dlg.SetValue(("Perspective %d")%(len(self._perspectives)+1))
583        if dlg.ShowModal() != wx.ID_OK:
584            return
585
586        if len(self._perspectives) == 0:
587            self._perspectives_menu.AppendSeparator()
588
589        self._perspectives_menu.Append(ID_FirstPerspective[len(self._perspectives)], dlg.GetValue())
590        self._perspectives.append(self._mgr.SavePerspective())
591
592
593    def OnCopyPerspective(self, event):
594
595        s = self._mgr.SavePerspective()
596
597        if wx.TheClipboard.Open():
598
599            wx.TheClipboard.SetData(wx.TextDataObject(s))
600            wx.TheClipboard.Close()
601
602    def OnRestorePerspective(self, event):
603
604        self._mgr.LoadPerspective(self._perspectives[event.GetId() - ID_FirstPerspective[0].Value])
605
606
607    def GetStartPosition(self):
608
609        self.x = self.x + 20
610        x = self.x
611        pt = self.ClientToScreen(wx.Point(0, 0))
612
613        return wx.Point(pt.x + x, pt.y + x)
614
615
616    def OnCreateTree(self, event):
617        self._mgr.AddPane(self.CreateTreeCtrl(), aui.AuiPaneInfo().
618                          Caption("Tree Control").
619                          Float().FloatingPosition(self.GetStartPosition()).
620                          FloatingSize(wx.Size(150, 300)).CloseButton(True).MaximizeButton(True))
621        self._mgr.Update()
622
623
624    def OnCreateGrid(self, event):
625        self._mgr.AddPane(self.CreateGrid(), aui.AuiPaneInfo().
626                          Caption("Grid").
627                          Float().FloatingPosition(self.GetStartPosition()).
628                          FloatingSize(wx.Size(300, 200)).CloseButton(True).MaximizeButton(True))
629        self._mgr.Update()
630
631
632    def OnCreateHTML(self, event):
633        self._mgr.AddPane(self.CreateHTMLCtrl(), aui.AuiPaneInfo().
634                          Caption("HTML Content").
635                          Float().FloatingPosition(self.GetStartPosition()).
636                          FloatingSize(wx.Size(300, 200)).CloseButton(True).MaximizeButton(True))
637        self._mgr.Update()
638
639
640    def OnCreateText(self, event):
641        self._mgr.AddPane(self.CreateTextCtrl(), aui.AuiPaneInfo().
642                          Caption("Text Control").
643                          Float().FloatingPosition(self.GetStartPosition()).
644                          CloseButton(True).MaximizeButton(True))
645        self._mgr.Update()
646
647
648    def OnCreateSizeReport(self, event):
649        self._mgr.AddPane(self.CreateSizeReportCtrl(), aui.AuiPaneInfo().
650                          Caption("Client Size Reporter").
651                          Float().FloatingPosition(self.GetStartPosition()).
652                          CloseButton(True).MaximizeButton(True))
653        self._mgr.Update()
654
655
656    def OnChangeContentPane(self, event):
657
658        self._mgr.GetPane("grid_content").Show(event.GetId() == ID_GridContent)
659        self._mgr.GetPane("text_content").Show(event.GetId() == ID_TextContent)
660        self._mgr.GetPane("tree_content").Show(event.GetId() == ID_TreeContent)
661        self._mgr.GetPane("sizereport_content").Show(event.GetId() == ID_SizeReportContent)
662        self._mgr.GetPane("html_content").Show(event.GetId() == ID_HTMLContent)
663        self._mgr.Update()
664
665
666    def CreateTextCtrl(self):
667
668        text = ("This is text box %d")%(self.n + 1)
669
670        return wx.TextCtrl(self,-1, text, wx.Point(0, 0), wx.Size(150, 90),
671                           wx.NO_BORDER | wx.TE_MULTILINE)
672
673
674
675    def CreateGrid(self):
676
677        grid = wx.grid.Grid(self, -1, wx.Point(0, 0), wx.Size(150, 250),
678                            wx.NO_BORDER | wx.WANTS_CHARS)
679
680        grid.CreateGrid(50, 20)
681
682        return grid
683
684
685    def CreateTreeCtrl(self):
686
687        tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.Size(160, 250),
688                           wx.TR_DEFAULT_STYLE | wx.NO_BORDER)
689
690        root = tree.AddRoot("AUI Project")
691        items = []
692
693        imglist = wx.ImageList(16, 16, True, 2)
694        imglist.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16)))
695        imglist.Add(wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16)))
696        tree.AssignImageList(imglist)
697
698        items.append(tree.AppendItem(root, "Item 1", 0))
699        items.append(tree.AppendItem(root, "Item 2", 0))
700        items.append(tree.AppendItem(root, "Item 3", 0))
701        items.append(tree.AppendItem(root, "Item 4", 0))
702        items.append(tree.AppendItem(root, "Item 5", 0))
703
704        for ii in range(len(items)):
705
706            id = items[ii]
707            tree.AppendItem(id, "Subitem 1", 1)
708            tree.AppendItem(id, "Subitem 2", 1)
709            tree.AppendItem(id, "Subitem 3", 1)
710            tree.AppendItem(id, "Subitem 4", 1)
711            tree.AppendItem(id, "Subitem 5", 1)
712
713        tree.Expand(root)
714
715        return tree
716
717
718    def CreateSizeReportCtrl(self, width=80, height=80):
719
720        ctrl = SizeReportCtrl(self, -1, wx.DefaultPosition,
721                              wx.Size(width, height), self._mgr)
722        return ctrl
723
724
725    def CreateHTMLCtrl(self):
726        ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
727        if "gtk2" in wx.PlatformInfo or "gtk3" in wx.PlatformInfo:
728            ctrl.SetStandardFonts()
729        ctrl.SetPage(self.GetIntroText())
730        return ctrl
731
732
733    def GetIntroText(self):
734        return overview
735
736
737# -- wx.SizeReportCtrl --
738# (a utility control that always reports it's client size)
739
740class SizeReportCtrl(wx.Control):
741
742    def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
743                 size=wx.DefaultSize, mgr=None):
744
745        wx.Control.__init__(self, parent, id, pos, size, wx.NO_BORDER)
746
747        self._mgr = mgr
748
749        self.Bind(wx.EVT_PAINT, self.OnPaint)
750        self.Bind(wx.EVT_SIZE, self.OnSize)
751        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
752
753
754    def OnPaint(self, event):
755
756        dc = wx.PaintDC(self)
757
758        size = self.GetClientSize()
759        s = ("Size: %d x %d")%(size.x, size.y)
760
761        dc.SetFont(wx.NORMAL_FONT)
762        w, height = dc.GetTextExtent(s)
763        height = height + 3
764        dc.SetBrush(wx.WHITE_BRUSH)
765        dc.SetPen(wx.WHITE_PEN)
766        dc.DrawRectangle(0, 0, size.x, size.y)
767        dc.SetPen(wx.LIGHT_GREY_PEN)
768        dc.DrawLine(0, 0, size.x, size.y)
769        dc.DrawLine(0, size.y, size.x, 0)
770        dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2))
771
772        if self._mgr:
773
774            pi = self._mgr.GetPane(self)
775
776            s = ("Layer: %d")%pi.dock_layer
777            w, h = dc.GetTextExtent(s)
778            dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*1))
779
780            s = ("Dock: %d Row: %d")%(pi.dock_direction, pi.dock_row)
781            w, h = dc.GetTextExtent(s)
782            dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*2))
783
784            s = ("Position: %d")%pi.dock_pos
785            w, h = dc.GetTextExtent(s)
786            dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*3))
787
788            s = ("Proportion: %d")%pi.dock_proportion
789            w, h = dc.GetTextExtent(s)
790            dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*4))
791
792
793    def OnEraseBackground(self, event):
794        # intentionally empty
795        pass
796
797
798    def OnSize(self, event):
799
800        self.Refresh()
801        event.Skip()
802
803
804ID_PaneBorderSize = wx.ID_HIGHEST + 1
805ID_SashSize = ID_PaneBorderSize + 1
806ID_CaptionSize = ID_PaneBorderSize + 2
807ID_BackgroundColor = ID_PaneBorderSize + 3
808ID_SashColor = ID_PaneBorderSize + 4
809ID_InactiveCaptionColor =  ID_PaneBorderSize + 5
810ID_InactiveCaptionGradientColor = ID_PaneBorderSize + 6
811ID_InactiveCaptionTextColor = ID_PaneBorderSize + 7
812ID_ActiveCaptionColor = ID_PaneBorderSize + 8
813ID_ActiveCaptionGradientColor = ID_PaneBorderSize + 9
814ID_ActiveCaptionTextColor = ID_PaneBorderSize + 10
815ID_BorderColor = ID_PaneBorderSize + 11
816ID_GripperColor = ID_PaneBorderSize + 12
817
818class SettingsPanel(wx.Panel):
819
820    def __init__(self, parent, frame):
821
822        wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition,
823                          wx.DefaultSize)
824
825        self._frame = frame
826
827        vert = wx.BoxSizer(wx.VERTICAL)
828
829        s1 = wx.BoxSizer(wx.HORIZONTAL)
830        self._border_size = wx.SpinCtrl(self, ID_PaneBorderSize, "", wx.DefaultPosition, wx.Size(50,20))
831        s1.Add((1, 1), 1, wx.EXPAND)
832        s1.Add(wx.StaticText(self, -1, "Pane Border Size:"))
833        s1.Add(self._border_size)
834        s1.Add((1, 1), 1, wx.EXPAND)
835        s1.SetItemMinSize(1, (180, 20))
836        #vert.Add(s1, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5)
837
838        s2 = wx.BoxSizer(wx.HORIZONTAL)
839        self._sash_size = wx.SpinCtrl(self, ID_SashSize, "", wx.DefaultPosition, wx.Size(50,20))
840        s2.Add((1, 1), 1, wx.EXPAND)
841        s2.Add(wx.StaticText(self, -1, "Sash Size:"))
842        s2.Add(self._sash_size)
843        s2.Add((1, 1), 1, wx.EXPAND)
844        s2.SetItemMinSize(1, (180, 20))
845        #vert.Add(s2, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5)
846
847        s3 = wx.BoxSizer(wx.HORIZONTAL)
848        self._caption_size = wx.SpinCtrl(self, ID_CaptionSize, "", wx.DefaultPosition, wx.Size(50,20))
849        s3.Add((1, 1), 1, wx.EXPAND)
850        s3.Add(wx.StaticText(self, -1, "Caption Size:"))
851        s3.Add(self._caption_size)
852        s3.Add((1, 1), 1, wx.EXPAND)
853        s3.SetItemMinSize(1, (180, 20))
854        #vert.Add(s3, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5)
855
856        #vert.Add(1, 1, 1, wx.EXPAND)
857
858        b = self.CreateColorBitmap(wx.BLACK)
859
860        s4 = wx.BoxSizer(wx.HORIZONTAL)
861        self._background_color = wx.BitmapButton(self, ID_BackgroundColor, b, wx.DefaultPosition, wx.Size(50,25))
862        s4.Add((1, 1), 1, wx.EXPAND)
863        s4.Add(wx.StaticText(self, -1, "Background Color:"))
864        s4.Add(self._background_color)
865        s4.Add((1, 1), 1, wx.EXPAND)
866        s4.SetItemMinSize(1, (180, 20))
867
868        s5 = wx.BoxSizer(wx.HORIZONTAL)
869        self._sash_color = wx.BitmapButton(self, ID_SashColor, b, wx.DefaultPosition, wx.Size(50,25))
870        s5.Add((1, 1), 1, wx.EXPAND)
871        s5.Add(wx.StaticText(self, -1, "Sash Color:"))
872        s5.Add(self._sash_color)
873        s5.Add((1, 1), 1, wx.EXPAND)
874        s5.SetItemMinSize(1, (180, 20))
875
876        s6 = wx.BoxSizer(wx.HORIZONTAL)
877        self._inactive_caption_color = wx.BitmapButton(self, ID_InactiveCaptionColor, b,
878                                                       wx.DefaultPosition, wx.Size(50,25))
879        s6.Add((1, 1), 1, wx.EXPAND)
880        s6.Add(wx.StaticText(self, -1, "Normal Caption:"))
881        s6.Add(self._inactive_caption_color)
882        s6.Add((1, 1), 1, wx.EXPAND)
883        s6.SetItemMinSize(1, (180, 20))
884
885        s7 = wx.BoxSizer(wx.HORIZONTAL)
886        self._inactive_caption_gradient_color = wx.BitmapButton(self, ID_InactiveCaptionGradientColor,
887                                                                b, wx.DefaultPosition, wx.Size(50,25))
888        s7.Add((1, 1), 1, wx.EXPAND)
889        s7.Add(wx.StaticText(self, -1, "Normal Caption Gradient:"))
890        s7.Add(self._inactive_caption_gradient_color)
891        s7.Add((1, 1), 1, wx.EXPAND)
892        s7.SetItemMinSize(1, (180, 20))
893
894        s8 = wx.BoxSizer(wx.HORIZONTAL)
895        self._inactive_caption_text_color = wx.BitmapButton(self, ID_InactiveCaptionTextColor, b,
896                                                            wx.DefaultPosition, wx.Size(50,25))
897        s8.Add((1, 1), 1, wx.EXPAND)
898        s8.Add(wx.StaticText(self, -1, "Normal Caption Text:"))
899        s8.Add(self._inactive_caption_text_color)
900        s8.Add((1, 1), 1, wx.EXPAND)
901        s8.SetItemMinSize(1, (180, 20))
902
903        s9 = wx.BoxSizer(wx.HORIZONTAL)
904        self._active_caption_color = wx.BitmapButton(self, ID_ActiveCaptionColor, b,
905                                                     wx.DefaultPosition, wx.Size(50,25))
906        s9.Add((1, 1), 1, wx.EXPAND)
907        s9.Add(wx.StaticText(self, -1, "Active Caption:"))
908        s9.Add(self._active_caption_color)
909        s9.Add((1, 1), 1, wx.EXPAND)
910        s9.SetItemMinSize(1, (180, 20))
911
912        s10 = wx.BoxSizer(wx.HORIZONTAL)
913        self._active_caption_gradient_color = wx.BitmapButton(self, ID_ActiveCaptionGradientColor,
914                                                              b, wx.DefaultPosition, wx.Size(50,25))
915        s10.Add((1, 1), 1, wx.EXPAND)
916        s10.Add(wx.StaticText(self, -1, "Active Caption Gradient:"))
917        s10.Add(self._active_caption_gradient_color)
918        s10.Add((1, 1), 1, wx.EXPAND)
919        s10.SetItemMinSize(1, (180, 20))
920
921        s11 = wx.BoxSizer(wx.HORIZONTAL)
922        self._active_caption_text_color = wx.BitmapButton(self, ID_ActiveCaptionTextColor,
923                                                          b, wx.DefaultPosition, wx.Size(50,25))
924        s11.Add((1, 1), 1, wx.EXPAND)
925        s11.Add(wx.StaticText(self, -1, "Active Caption Text:"))
926        s11.Add(self._active_caption_text_color)
927        s11.Add((1, 1), 1, wx.EXPAND)
928        s11.SetItemMinSize(1, (180, 20))
929
930        s12 = wx.BoxSizer(wx.HORIZONTAL)
931        self._border_color = wx.BitmapButton(self, ID_BorderColor, b, wx.DefaultPosition,
932                                             wx.Size(50,25))
933        s12.Add((1, 1), 1, wx.EXPAND)
934        s12.Add(wx.StaticText(self, -1, "Border Color:"))
935        s12.Add(self._border_color)
936        s12.Add((1, 1), 1, wx.EXPAND)
937        s12.SetItemMinSize(1, (180, 20))
938
939        s13 = wx.BoxSizer(wx.HORIZONTAL)
940        self._gripper_color = wx.BitmapButton(self, ID_GripperColor, b, wx.DefaultPosition,
941                                              wx.Size(50,25))
942        s13.Add((1, 1), 1, wx.EXPAND)
943        s13.Add(wx.StaticText(self, -1, "Gripper Color:"))
944        s13.Add(self._gripper_color)
945        s13.Add((1, 1), 1, wx.EXPAND)
946        s13.SetItemMinSize(1, (180, 20))
947
948        grid_sizer = wx.GridSizer(cols=2)
949        grid_sizer.SetHGap(5)
950        grid_sizer.Add(s1)
951        grid_sizer.Add(s4)
952        grid_sizer.Add(s2)
953        grid_sizer.Add(s5)
954        grid_sizer.Add(s3)
955        grid_sizer.Add(s13)
956        grid_sizer.Add((1, 1))
957        grid_sizer.Add(s12)
958        grid_sizer.Add(s6)
959        grid_sizer.Add(s9)
960        grid_sizer.Add(s7)
961        grid_sizer.Add(s10)
962        grid_sizer.Add(s8)
963        grid_sizer.Add(s11)
964
965        cont_sizer = wx.BoxSizer(wx.VERTICAL)
966        cont_sizer.Add(grid_sizer, 1, wx.EXPAND | wx.ALL, 5)
967        self.SetSizer(cont_sizer)
968        self.GetSizer().SetSizeHints(self)
969
970        self._border_size.SetValue(frame.GetDockArt().GetMetric(aui.AUI_DOCKART_PANE_BORDER_SIZE))
971        self._sash_size.SetValue(frame.GetDockArt().GetMetric(aui.AUI_DOCKART_SASH_SIZE))
972        self._caption_size.SetValue(frame.GetDockArt().GetMetric(aui.AUI_DOCKART_CAPTION_SIZE))
973
974        self.UpdateColors()
975
976        self.Bind(wx.EVT_SPINCTRL, self.OnPaneBorderSize, id=ID_PaneBorderSize)
977        self.Bind(wx.EVT_SPINCTRL, self.OnSashSize, id=ID_SashSize)
978        self.Bind(wx.EVT_SPINCTRL, self.OnCaptionSize, id=ID_CaptionSize)
979        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_BackgroundColor)
980        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_SashColor)
981        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionColor)
982        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionGradientColor)
983        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionTextColor)
984        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionColor)
985        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionGradientColor)
986        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionTextColor)
987        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_BorderColor)
988        self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_GripperColor)
989
990
991    def CreateColorBitmap(self, c):
992        image = wx.Image(25, 14)
993
994        for x in range(25):
995            for y in range(14):
996                pixcol = c
997                if x == 0 or x == 24 or y == 0 or y == 13:
998                    pixcol = wx.BLACK
999
1000                image.SetRGB(x, y, pixcol.Red(), pixcol.Green(), pixcol.Blue())
1001
1002        return image.ConvertToBitmap()
1003
1004
1005    def UpdateColors(self):
1006
1007        bk = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_BACKGROUND_COLOUR)
1008        self._background_color.SetBitmapLabel(self.CreateColorBitmap(bk))
1009
1010        cap = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_INACTIVE_CAPTION_COLOUR)
1011        self._inactive_caption_color.SetBitmapLabel(self.CreateColorBitmap(cap))
1012
1013        capgrad = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR)
1014        self._inactive_caption_gradient_color.SetBitmapLabel(self.CreateColorBitmap(capgrad))
1015
1016        captxt = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR)
1017        self._inactive_caption_text_color.SetBitmapLabel(self.CreateColorBitmap(captxt))
1018
1019        acap = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_ACTIVE_CAPTION_COLOUR)
1020        self._active_caption_color.SetBitmapLabel(self.CreateColorBitmap(acap))
1021
1022        acapgrad = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR)
1023        self._active_caption_gradient_color.SetBitmapLabel(self.CreateColorBitmap(acapgrad))
1024
1025        acaptxt = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR)
1026        self._active_caption_text_color.SetBitmapLabel(self.CreateColorBitmap(acaptxt))
1027
1028        sash = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_SASH_COLOUR)
1029        self._sash_color.SetBitmapLabel(self.CreateColorBitmap(sash))
1030
1031        border = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_BORDER_COLOUR)
1032        self._border_color.SetBitmapLabel(self.CreateColorBitmap(border))
1033
1034        gripper = self._frame.GetDockArt().GetColour(aui.AUI_DOCKART_GRIPPER_COLOUR)
1035        self._gripper_color.SetBitmapLabel(self.CreateColorBitmap(gripper))
1036
1037
1038    def OnPaneBorderSize(self, event):
1039
1040        self._frame.GetDockArt().SetMetric(aui.AUI_DOCKART_PANE_BORDER_SIZE,
1041                                           event.GetInt())
1042        self._frame.DoUpdate()
1043
1044
1045    def OnSashSize(self, event):
1046
1047        self._frame.GetDockArt().SetMetric(aui.AUI_DOCKART_SASH_SIZE,
1048                                           event.GetInt())
1049        self._frame.DoUpdate()
1050
1051
1052    def OnCaptionSize(self, event):
1053
1054        self._frame.GetDockArt().SetMetric(aui.AUI_DOCKART_CAPTION_SIZE,
1055                                           event.GetInt())
1056        self._frame.DoUpdate()
1057
1058
1059    def OnSetColor(self, event):
1060
1061        dlg = wx.ColourDialog(self._frame)
1062
1063        dlg.SetTitle("Color Picker")
1064
1065        if dlg.ShowModal() != wx.ID_OK:
1066            return
1067
1068        var = 0
1069        if event.GetId() == ID_BackgroundColor:
1070            var = aui.AUI_DOCKART_BACKGROUND_COLOUR
1071        elif event.GetId() == ID_SashColor:
1072            var = aui.AUI_DOCKART_SASH_COLOUR
1073        elif event.GetId() == ID_InactiveCaptionColor:
1074            var = aui.AUI_DOCKART_INACTIVE_CAPTION_COLOUR
1075        elif event.GetId() == ID_InactiveCaptionGradientColor:
1076            var = aui.AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR
1077        elif event.GetId() == ID_InactiveCaptionTextColor:
1078            var = aui.AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR
1079        elif event.GetId() == ID_ActiveCaptionColor:
1080            var = aui.AUI_DOCKART_ACTIVE_CAPTION_COLOUR
1081        elif event.GetId() == ID_ActiveCaptionGradientColor:
1082            var = aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR
1083        elif event.GetId() == ID_ActiveCaptionTextColor:
1084            var = aui.AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR
1085        elif event.GetId() == ID_BorderColor:
1086            var = aui.AUI_DOCKART_BORDER_COLOUR
1087        elif event.GetId() == ID_GripperColor:
1088            var = aui.AUI_DOCKART_GRIPPER_COLOUR
1089        else:
1090            return
1091
1092        self._frame.GetDockArt().SetColor(var, dlg.GetColourData().GetColour())
1093        self._frame.DoUpdate()
1094        self.UpdateColors()
1095
1096
1097
1098#----------------------------------------------------------------------
1099
1100class TestPanel(wx.Panel):
1101    def __init__(self, parent, log):
1102        self.log = log
1103        wx.Panel.__init__(self, parent, -1)
1104        b = wx.Button(self, -1, "Show the aui Demo Frame", (50,50))
1105        self.Bind(wx.EVT_BUTTON, self.OnButton, b)
1106
1107    def OnButton(self, evt):
1108        frame = PyAUIFrame(self, wx.ID_ANY, "aui wxPython Demo", size=(750, 590))
1109        frame.Show()
1110
1111#----------------------------------------------------------------------
1112
1113def runTest(frame, nb, log):
1114    win = TestPanel(nb, log)
1115    return win
1116
1117#----------------------------------------------------------------------
1118
1119
1120
1121overview = """\
1122<html><body>
1123<h3>aui, the Advanced User Interface module</h3>
1124
1125<br/><b>Overview</b><br/>
1126
1127<p>aui is an Advanced User Interface library for the wxWidgets toolkit
1128that allows developers to create high-quality, cross-platform user
1129interfaces quickly and easily.</p>
1130
1131<p><b>Features</b></p>
1132
1133<p>With aui developers can create application frameworks with:</p>
1134
1135<ul>
1136<li>Native, dockable floating frames</li>
1137<li>Perspective saving and loading</li>
1138<li>Native toolbars incorporating real-time, &quot;spring-loaded&quot; dragging</li>
1139<li>Customizable floating/docking behavior</li>
1140<li>Completely customizable look-and-feel</li>
1141<li>Optional transparent window effects (while dragging or docking)</li>
1142</ul>
1143
1144</body></html>
1145"""
1146
1147
1148
1149
1150if __name__ == '__main__':
1151    import sys,os
1152    import run
1153    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
1154
1155