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, "spring-loaded" 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