1/////////////////////////////////////////////////////////////////////////////// 2// Name: auidemo.cpp 3// Purpose: wxaui: wx advanced user interface - sample/test program 4// Author: Benjamin I. Williams 5// Modified by: 6// Created: 2005-10-03 7// RCS-ID: $Id: auidemo.cpp 59606 2009-03-18 13:52:21Z BIW $ 8// Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. 9// Licence: wxWindows Library Licence, Version 3.1 10/////////////////////////////////////////////////////////////////////////////// 11 12// For compilers that support precompilation, includes "wx/wx.h". 13#include "wx/wxprec.h" 14 15#ifdef __BORLANDC__ 16 #pragma hdrstop 17#endif 18 19#include "wx/app.h" 20#include "wx/grid.h" 21#include "wx/treectrl.h" 22#include "wx/spinctrl.h" 23#include "wx/artprov.h" 24#include "wx/clipbrd.h" 25#include "wx/image.h" 26#include "wx/colordlg.h" 27#include "wx/wxhtml.h" 28#include "wx/imaglist.h" 29#include "wx/dataobj.h" 30#include "wx/dcclient.h" 31#include "wx/bmpbuttn.h" 32#include "wx/menu.h" 33#include "wx/toolbar.h" 34#include "wx/statusbr.h" 35#include "wx/msgdlg.h" 36#include "wx/textdlg.h" 37 38#include "wx/aui/aui.h" 39#include "../sample.xpm" 40 41// -- application -- 42 43class MyApp : public wxApp 44{ 45public: 46 bool OnInit(); 47}; 48 49DECLARE_APP(MyApp) 50IMPLEMENT_APP(MyApp) 51 52 53class wxSizeReportCtrl; 54 55// -- frame -- 56 57class MyFrame : public wxFrame 58{ 59 enum 60 { 61 ID_CreateTree = wxID_HIGHEST+1, 62 ID_CreateGrid, 63 ID_CreateText, 64 ID_CreateHTML, 65 ID_CreateNotebook, 66 ID_CreateSizeReport, 67 ID_GridContent, 68 ID_TextContent, 69 ID_TreeContent, 70 ID_HTMLContent, 71 ID_NotebookContent, 72 ID_SizeReportContent, 73 ID_CreatePerspective, 74 ID_CopyPerspectiveCode, 75 ID_AllowFloating, 76 ID_AllowActivePane, 77 ID_TransparentHint, 78 ID_VenetianBlindsHint, 79 ID_RectangleHint, 80 ID_NoHint, 81 ID_HintFade, 82 ID_NoVenetianFade, 83 ID_TransparentDrag, 84 ID_NoGradient, 85 ID_VerticalGradient, 86 ID_HorizontalGradient, 87 ID_LiveUpdate, 88 ID_Settings, 89 ID_CustomizeToolbar, 90 ID_DropDownToolbarItem, 91 ID_NotebookNoCloseButton, 92 ID_NotebookCloseButton, 93 ID_NotebookCloseButtonAll, 94 ID_NotebookCloseButtonActive, 95 ID_NotebookAllowTabMove, 96 ID_NotebookAllowTabExternalMove, 97 ID_NotebookAllowTabSplit, 98 ID_NotebookWindowList, 99 ID_NotebookScrollButtons, 100 ID_NotebookTabFixedWidth, 101 ID_NotebookArtGloss, 102 ID_NotebookArtSimple, 103 ID_NotebookAlignTop, 104 ID_NotebookAlignBottom, 105 106 ID_SampleItem, 107 108 ID_FirstPerspective = ID_CreatePerspective+1000 109 }; 110 111public: 112 MyFrame(wxWindow* parent, 113 wxWindowID id, 114 const wxString& title, 115 const wxPoint& pos = wxDefaultPosition, 116 const wxSize& size = wxDefaultSize, 117 long style = wxDEFAULT_FRAME_STYLE | wxSUNKEN_BORDER); 118 119 ~MyFrame(); 120 121 wxAuiDockArt* GetDockArt(); 122 void DoUpdate(); 123 124private: 125 wxTextCtrl* CreateTextCtrl(const wxString& text = wxEmptyString); 126 wxGrid* CreateGrid(); 127 wxTreeCtrl* CreateTreeCtrl(); 128 wxSizeReportCtrl* CreateSizeReportCtrl(int width = 80, int height = 80); 129 wxPoint GetStartPosition(); 130 wxHtmlWindow* CreateHTMLCtrl(wxWindow* parent = NULL); 131 wxAuiNotebook* CreateNotebook(); 132 133 wxString GetIntroText(); 134 135private: 136 137 void OnEraseBackground(wxEraseEvent& evt); 138 void OnSize(wxSizeEvent& evt); 139 140 void OnCreateTree(wxCommandEvent& evt); 141 void OnCreateGrid(wxCommandEvent& evt); 142 void OnCreateHTML(wxCommandEvent& evt); 143 void OnCreateNotebook(wxCommandEvent& evt); 144 void OnCreateText(wxCommandEvent& evt); 145 void OnCreateSizeReport(wxCommandEvent& evt); 146 void OnChangeContentPane(wxCommandEvent& evt); 147 void OnDropDownToolbarItem(wxAuiToolBarEvent& evt); 148 void OnCreatePerspective(wxCommandEvent& evt); 149 void OnCopyPerspectiveCode(wxCommandEvent& evt); 150 void OnRestorePerspective(wxCommandEvent& evt); 151 void OnSettings(wxCommandEvent& evt); 152 void OnCustomizeToolbar(wxCommandEvent& evt); 153 void OnAllowNotebookDnD(wxAuiNotebookEvent& evt); 154 void OnNotebookPageClose(wxAuiNotebookEvent& evt); 155 void OnExit(wxCommandEvent& evt); 156 void OnAbout(wxCommandEvent& evt); 157 void OnTabAlignment(wxCommandEvent &evt); 158 159 void OnGradient(wxCommandEvent& evt); 160 void OnManagerFlag(wxCommandEvent& evt); 161 void OnNotebookFlag(wxCommandEvent& evt); 162 void OnUpdateUI(wxUpdateUIEvent& evt); 163 164 void OnPaneClose(wxAuiManagerEvent& evt); 165 166private: 167 168 wxAuiManager m_mgr; 169 wxArrayString m_perspectives; 170 wxMenu* m_perspectives_menu; 171 long m_notebook_style; 172 long m_notebook_theme; 173 174 DECLARE_EVENT_TABLE() 175}; 176 177 178// -- wxSizeReportCtrl -- 179// (a utility control that always reports it's client size) 180 181class wxSizeReportCtrl : public wxControl 182{ 183public: 184 185 wxSizeReportCtrl(wxWindow* parent, wxWindowID id = wxID_ANY, 186 const wxPoint& pos = wxDefaultPosition, 187 const wxSize& size = wxDefaultSize, 188 wxAuiManager* mgr = NULL) 189 : wxControl(parent, id, pos, size, wxNO_BORDER) 190 { 191 m_mgr = mgr; 192 } 193 194private: 195 196 void OnPaint(wxPaintEvent& WXUNUSED(evt)) 197 { 198 wxPaintDC dc(this); 199 wxSize size = GetClientSize(); 200 wxString s; 201 int h, w, height; 202 203 s.Printf(wxT("Size: %d x %d"), size.x, size.y); 204 205 dc.SetFont(*wxNORMAL_FONT); 206 dc.GetTextExtent(s, &w, &height); 207 height += 3; 208 dc.SetBrush(*wxWHITE_BRUSH); 209 dc.SetPen(*wxWHITE_PEN); 210 dc.DrawRectangle(0, 0, size.x, size.y); 211 dc.SetPen(*wxLIGHT_GREY_PEN); 212 dc.DrawLine(0, 0, size.x, size.y); 213 dc.DrawLine(0, size.y, size.x, 0); 214 dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)); 215 216 if (m_mgr) 217 { 218 wxAuiPaneInfo pi = m_mgr->GetPane(this); 219 220 s.Printf(wxT("Layer: %d"), pi.dock_layer); 221 dc.GetTextExtent(s, &w, &h); 222 dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*1)); 223 224 s.Printf(wxT("Dock: %d Row: %d"), pi.dock_direction, pi.dock_row); 225 dc.GetTextExtent(s, &w, &h); 226 dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*2)); 227 228 s.Printf(wxT("Position: %d"), pi.dock_pos); 229 dc.GetTextExtent(s, &w, &h); 230 dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*3)); 231 232 s.Printf(wxT("Proportion: %d"), pi.dock_proportion); 233 dc.GetTextExtent(s, &w, &h); 234 dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*4)); 235 } 236 } 237 238 void OnEraseBackground(wxEraseEvent& WXUNUSED(evt)) 239 { 240 // intentionally empty 241 } 242 243 void OnSize(wxSizeEvent& WXUNUSED(evt)) 244 { 245 Refresh(); 246 } 247private: 248 249 wxAuiManager* m_mgr; 250 251 DECLARE_EVENT_TABLE() 252}; 253 254BEGIN_EVENT_TABLE(wxSizeReportCtrl, wxControl) 255 EVT_PAINT(wxSizeReportCtrl::OnPaint) 256 EVT_SIZE(wxSizeReportCtrl::OnSize) 257 EVT_ERASE_BACKGROUND(wxSizeReportCtrl::OnEraseBackground) 258END_EVENT_TABLE() 259 260 261class SettingsPanel : public wxPanel 262{ 263 enum 264 { 265 ID_PaneBorderSize = wxID_HIGHEST+1, 266 ID_SashSize, 267 ID_CaptionSize, 268 ID_BackgroundColor, 269 ID_SashColor, 270 ID_InactiveCaptionColor, 271 ID_InactiveCaptionGradientColor, 272 ID_InactiveCaptionTextColor, 273 ID_ActiveCaptionColor, 274 ID_ActiveCaptionGradientColor, 275 ID_ActiveCaptionTextColor, 276 ID_BorderColor, 277 ID_GripperColor 278 }; 279 280public: 281 282 SettingsPanel(wxWindow* parent, MyFrame* frame) 283 : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize), 284 m_frame(frame) 285 { 286 //wxBoxSizer* vert = new wxBoxSizer(wxVERTICAL); 287 288 //vert->Add(1, 1, 1, wxEXPAND); 289 290 wxBoxSizer* s1 = new wxBoxSizer(wxHORIZONTAL); 291 m_border_size = new wxSpinCtrl(this, ID_PaneBorderSize, wxString::Format(wxT("%d"), frame->GetDockArt()->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE)), wxDefaultPosition, wxSize(50,20), wxSP_ARROW_KEYS, 0, 100, frame->GetDockArt()->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE)); 292 s1->Add(1, 1, 1, wxEXPAND); 293 s1->Add(new wxStaticText(this, wxID_ANY, wxT("Pane Border Size:"))); 294 s1->Add(m_border_size); 295 s1->Add(1, 1, 1, wxEXPAND); 296 s1->SetItemMinSize((size_t)1, 180, 20); 297 //vert->Add(s1, 0, wxEXPAND | wxLEFT | wxBOTTOM, 5); 298 299 wxBoxSizer* s2 = new wxBoxSizer(wxHORIZONTAL); 300 m_sash_size = new wxSpinCtrl(this, ID_SashSize, wxString::Format(wxT("%d"), frame->GetDockArt()->GetMetric(wxAUI_DOCKART_SASH_SIZE)), wxDefaultPosition, wxSize(50,20), wxSP_ARROW_KEYS, 0, 100, frame->GetDockArt()->GetMetric(wxAUI_DOCKART_SASH_SIZE)); 301 s2->Add(1, 1, 1, wxEXPAND); 302 s2->Add(new wxStaticText(this, wxID_ANY, wxT("Sash Size:"))); 303 s2->Add(m_sash_size); 304 s2->Add(1, 1, 1, wxEXPAND); 305 s2->SetItemMinSize((size_t)1, 180, 20); 306 //vert->Add(s2, 0, wxEXPAND | wxLEFT | wxBOTTOM, 5); 307 308 wxBoxSizer* s3 = new wxBoxSizer(wxHORIZONTAL); 309 m_caption_size = new wxSpinCtrl(this, ID_CaptionSize, wxString::Format(wxT("%d"), frame->GetDockArt()->GetMetric(wxAUI_DOCKART_CAPTION_SIZE)), wxDefaultPosition, wxSize(50,20), wxSP_ARROW_KEYS, 0, 100, frame->GetDockArt()->GetMetric(wxAUI_DOCKART_CAPTION_SIZE)); 310 s3->Add(1, 1, 1, wxEXPAND); 311 s3->Add(new wxStaticText(this, wxID_ANY, wxT("Caption Size:"))); 312 s3->Add(m_caption_size); 313 s3->Add(1, 1, 1, wxEXPAND); 314 s3->SetItemMinSize((size_t)1, 180, 20); 315 //vert->Add(s3, 0, wxEXPAND | wxLEFT | wxBOTTOM, 5); 316 317 //vert->Add(1, 1, 1, wxEXPAND); 318 319 320 wxBitmap b = CreateColorBitmap(*wxBLACK); 321 322 wxBoxSizer* s4 = new wxBoxSizer(wxHORIZONTAL); 323 m_background_color = new wxBitmapButton(this, ID_BackgroundColor, b, wxDefaultPosition, wxSize(50,25)); 324 s4->Add(1, 1, 1, wxEXPAND); 325 s4->Add(new wxStaticText(this, wxID_ANY, wxT("Background Color:"))); 326 s4->Add(m_background_color); 327 s4->Add(1, 1, 1, wxEXPAND); 328 s4->SetItemMinSize((size_t)1, 180, 20); 329 330 wxBoxSizer* s5 = new wxBoxSizer(wxHORIZONTAL); 331 m_sash_color = new wxBitmapButton(this, ID_SashColor, b, wxDefaultPosition, wxSize(50,25)); 332 s5->Add(1, 1, 1, wxEXPAND); 333 s5->Add(new wxStaticText(this, wxID_ANY, wxT("Sash Color:"))); 334 s5->Add(m_sash_color); 335 s5->Add(1, 1, 1, wxEXPAND); 336 s5->SetItemMinSize((size_t)1, 180, 20); 337 338 wxBoxSizer* s6 = new wxBoxSizer(wxHORIZONTAL); 339 m_inactive_caption_color = new wxBitmapButton(this, ID_InactiveCaptionColor, b, wxDefaultPosition, wxSize(50,25)); 340 s6->Add(1, 1, 1, wxEXPAND); 341 s6->Add(new wxStaticText(this, wxID_ANY, wxT("Normal Caption:"))); 342 s6->Add(m_inactive_caption_color); 343 s6->Add(1, 1, 1, wxEXPAND); 344 s6->SetItemMinSize((size_t)1, 180, 20); 345 346 wxBoxSizer* s7 = new wxBoxSizer(wxHORIZONTAL); 347 m_inactive_caption_gradient_color = new wxBitmapButton(this, ID_InactiveCaptionGradientColor, b, wxDefaultPosition, wxSize(50,25)); 348 s7->Add(1, 1, 1, wxEXPAND); 349 s7->Add(new wxStaticText(this, wxID_ANY, wxT("Normal Caption Gradient:"))); 350 s7->Add(m_inactive_caption_gradient_color); 351 s7->Add(1, 1, 1, wxEXPAND); 352 s7->SetItemMinSize((size_t)1, 180, 20); 353 354 wxBoxSizer* s8 = new wxBoxSizer(wxHORIZONTAL); 355 m_inactive_caption_text_color = new wxBitmapButton(this, ID_InactiveCaptionTextColor, b, wxDefaultPosition, wxSize(50,25)); 356 s8->Add(1, 1, 1, wxEXPAND); 357 s8->Add(new wxStaticText(this, wxID_ANY, wxT("Normal Caption Text:"))); 358 s8->Add(m_inactive_caption_text_color); 359 s8->Add(1, 1, 1, wxEXPAND); 360 s8->SetItemMinSize((size_t)1, 180, 20); 361 362 wxBoxSizer* s9 = new wxBoxSizer(wxHORIZONTAL); 363 m_active_caption_color = new wxBitmapButton(this, ID_ActiveCaptionColor, b, wxDefaultPosition, wxSize(50,25)); 364 s9->Add(1, 1, 1, wxEXPAND); 365 s9->Add(new wxStaticText(this, wxID_ANY, wxT("Active Caption:"))); 366 s9->Add(m_active_caption_color); 367 s9->Add(1, 1, 1, wxEXPAND); 368 s9->SetItemMinSize((size_t)1, 180, 20); 369 370 wxBoxSizer* s10 = new wxBoxSizer(wxHORIZONTAL); 371 m_active_caption_gradient_color = new wxBitmapButton(this, ID_ActiveCaptionGradientColor, b, wxDefaultPosition, wxSize(50,25)); 372 s10->Add(1, 1, 1, wxEXPAND); 373 s10->Add(new wxStaticText(this, wxID_ANY, wxT("Active Caption Gradient:"))); 374 s10->Add(m_active_caption_gradient_color); 375 s10->Add(1, 1, 1, wxEXPAND); 376 s10->SetItemMinSize((size_t)1, 180, 20); 377 378 wxBoxSizer* s11 = new wxBoxSizer(wxHORIZONTAL); 379 m_active_caption_text_color = new wxBitmapButton(this, ID_ActiveCaptionTextColor, b, wxDefaultPosition, wxSize(50,25)); 380 s11->Add(1, 1, 1, wxEXPAND); 381 s11->Add(new wxStaticText(this, wxID_ANY, wxT("Active Caption Text:"))); 382 s11->Add(m_active_caption_text_color); 383 s11->Add(1, 1, 1, wxEXPAND); 384 s11->SetItemMinSize((size_t)1, 180, 20); 385 386 wxBoxSizer* s12 = new wxBoxSizer(wxHORIZONTAL); 387 m_border_color = new wxBitmapButton(this, ID_BorderColor, b, wxDefaultPosition, wxSize(50,25)); 388 s12->Add(1, 1, 1, wxEXPAND); 389 s12->Add(new wxStaticText(this, wxID_ANY, wxT("Border Color:"))); 390 s12->Add(m_border_color); 391 s12->Add(1, 1, 1, wxEXPAND); 392 s12->SetItemMinSize((size_t)1, 180, 20); 393 394 wxBoxSizer* s13 = new wxBoxSizer(wxHORIZONTAL); 395 m_gripper_color = new wxBitmapButton(this, ID_GripperColor, b, wxDefaultPosition, wxSize(50,25)); 396 s13->Add(1, 1, 1, wxEXPAND); 397 s13->Add(new wxStaticText(this, wxID_ANY, wxT("Gripper Color:"))); 398 s13->Add(m_gripper_color); 399 s13->Add(1, 1, 1, wxEXPAND); 400 s13->SetItemMinSize((size_t)1, 180, 20); 401 402 wxGridSizer* grid_sizer = new wxGridSizer(2); 403 grid_sizer->SetHGap(5); 404 grid_sizer->Add(s1); grid_sizer->Add(s4); 405 grid_sizer->Add(s2); grid_sizer->Add(s5); 406 grid_sizer->Add(s3); grid_sizer->Add(s13); 407 grid_sizer->Add(1,1); grid_sizer->Add(s12); 408 grid_sizer->Add(s6); grid_sizer->Add(s9); 409 grid_sizer->Add(s7); grid_sizer->Add(s10); 410 grid_sizer->Add(s8); grid_sizer->Add(s11); 411 412 wxBoxSizer* cont_sizer = new wxBoxSizer(wxVERTICAL); 413 cont_sizer->Add(grid_sizer, 1, wxEXPAND | wxALL, 5); 414 SetSizer(cont_sizer); 415 GetSizer()->SetSizeHints(this); 416#if 0 417 m_border_size->SetValue(frame->GetDockArt()->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE)); 418 m_sash_size->SetValue(frame->GetDockArt()->GetMetric(wxAUI_DOCKART_SASH_SIZE)); 419 m_caption_size->SetValue(frame->GetDockArt()->GetMetric(wxAUI_DOCKART_CAPTION_SIZE)); 420#endif 421 UpdateColors(); 422 } 423 424private: 425 426 wxBitmap CreateColorBitmap(const wxColour& c) 427 { 428 wxImage image; 429 image.Create(25,14); 430 for (int x = 0; x < 25; ++x) 431 for (int y = 0; y < 14; ++y) 432 { 433 wxColour pixcol = c; 434 if (x == 0 || x == 24 || y == 0 || y == 13) 435 pixcol = *wxBLACK; 436 image.SetRGB(x, y, pixcol.Red(), pixcol.Green(), pixcol.Blue()); 437 } 438 return wxBitmap(image); 439 } 440 441 void UpdateColors() 442 { 443 wxColour bk = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_BACKGROUND_COLOUR); 444 m_background_color->SetBitmapLabel(CreateColorBitmap(bk)); 445 446 wxColour cap = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR); 447 m_inactive_caption_color->SetBitmapLabel(CreateColorBitmap(cap)); 448 449 wxColour capgrad = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR); 450 m_inactive_caption_gradient_color->SetBitmapLabel(CreateColorBitmap(capgrad)); 451 452 wxColour captxt = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR); 453 m_inactive_caption_text_color->SetBitmapLabel(CreateColorBitmap(captxt)); 454 455 wxColour acap = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR); 456 m_active_caption_color->SetBitmapLabel(CreateColorBitmap(acap)); 457 458 wxColour acapgrad = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR); 459 m_active_caption_gradient_color->SetBitmapLabel(CreateColorBitmap(acapgrad)); 460 461 wxColour acaptxt = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR); 462 m_active_caption_text_color->SetBitmapLabel(CreateColorBitmap(acaptxt)); 463 464 wxColour sash = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_SASH_COLOUR); 465 m_sash_color->SetBitmapLabel(CreateColorBitmap(sash)); 466 467 wxColour border = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_BORDER_COLOUR); 468 m_border_color->SetBitmapLabel(CreateColorBitmap(border)); 469 470 wxColour gripper = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_GRIPPER_COLOUR); 471 m_gripper_color->SetBitmapLabel(CreateColorBitmap(gripper)); 472 } 473 474 void OnPaneBorderSize(wxSpinEvent& event) 475 { 476 m_frame->GetDockArt()->SetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE, 477 event.GetPosition()); 478 m_frame->DoUpdate(); 479 } 480 481 void OnSashSize(wxSpinEvent& event) 482 { 483 m_frame->GetDockArt()->SetMetric(wxAUI_DOCKART_SASH_SIZE, 484 event.GetPosition()); 485 m_frame->DoUpdate(); 486 } 487 488 void OnCaptionSize(wxSpinEvent& event) 489 { 490 m_frame->GetDockArt()->SetMetric(wxAUI_DOCKART_CAPTION_SIZE, 491 event.GetPosition()); 492 m_frame->DoUpdate(); 493 } 494 495 void OnSetColor(wxCommandEvent& event) 496 { 497 wxColourDialog dlg(m_frame); 498 dlg.SetTitle(_("Color Picker")); 499 if (dlg.ShowModal() != wxID_OK) 500 return; 501 502 int var = 0; 503 switch (event.GetId()) 504 { 505 case ID_BackgroundColor: var = wxAUI_DOCKART_BACKGROUND_COLOUR; break; 506 case ID_SashColor: var = wxAUI_DOCKART_SASH_COLOUR; break; 507 case ID_InactiveCaptionColor: var = wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR; break; 508 case ID_InactiveCaptionGradientColor: var = wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR; break; 509 case ID_InactiveCaptionTextColor: var = wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR; break; 510 case ID_ActiveCaptionColor: var = wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR; break; 511 case ID_ActiveCaptionGradientColor: var = wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR; break; 512 case ID_ActiveCaptionTextColor: var = wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR; break; 513 case ID_BorderColor: var = wxAUI_DOCKART_BORDER_COLOUR; break; 514 case ID_GripperColor: var = wxAUI_DOCKART_GRIPPER_COLOUR; break; 515 default: return; 516 } 517 518 m_frame->GetDockArt()->SetColor(var, dlg.GetColourData().GetColour()); 519 m_frame->DoUpdate(); 520 UpdateColors(); 521 } 522 523private: 524 525 MyFrame* m_frame; 526 wxSpinCtrl* m_border_size; 527 wxSpinCtrl* m_sash_size; 528 wxSpinCtrl* m_caption_size; 529 wxBitmapButton* m_inactive_caption_text_color; 530 wxBitmapButton* m_inactive_caption_gradient_color; 531 wxBitmapButton* m_inactive_caption_color; 532 wxBitmapButton* m_active_caption_text_color; 533 wxBitmapButton* m_active_caption_gradient_color; 534 wxBitmapButton* m_active_caption_color; 535 wxBitmapButton* m_sash_color; 536 wxBitmapButton* m_background_color; 537 wxBitmapButton* m_border_color; 538 wxBitmapButton* m_gripper_color; 539 540 DECLARE_EVENT_TABLE() 541}; 542 543BEGIN_EVENT_TABLE(SettingsPanel, wxPanel) 544 EVT_SPINCTRL(ID_PaneBorderSize, SettingsPanel::OnPaneBorderSize) 545 EVT_SPINCTRL(ID_SashSize, SettingsPanel::OnSashSize) 546 EVT_SPINCTRL(ID_CaptionSize, SettingsPanel::OnCaptionSize) 547 EVT_BUTTON(ID_BackgroundColor, SettingsPanel::OnSetColor) 548 EVT_BUTTON(ID_SashColor, SettingsPanel::OnSetColor) 549 EVT_BUTTON(ID_InactiveCaptionColor, SettingsPanel::OnSetColor) 550 EVT_BUTTON(ID_InactiveCaptionGradientColor, SettingsPanel::OnSetColor) 551 EVT_BUTTON(ID_InactiveCaptionTextColor, SettingsPanel::OnSetColor) 552 EVT_BUTTON(ID_ActiveCaptionColor, SettingsPanel::OnSetColor) 553 EVT_BUTTON(ID_ActiveCaptionGradientColor, SettingsPanel::OnSetColor) 554 EVT_BUTTON(ID_ActiveCaptionTextColor, SettingsPanel::OnSetColor) 555 EVT_BUTTON(ID_BorderColor, SettingsPanel::OnSetColor) 556 EVT_BUTTON(ID_GripperColor, SettingsPanel::OnSetColor) 557END_EVENT_TABLE() 558 559 560bool MyApp::OnInit() 561{ 562 wxFrame* frame = new MyFrame(NULL, 563 wxID_ANY, 564 wxT("wxAUI Sample Application"), 565 wxDefaultPosition, 566 wxSize(800, 600)); 567 SetTopWindow(frame); 568 frame->Show(); 569 570 return true; 571} 572 573BEGIN_EVENT_TABLE(MyFrame, wxFrame) 574 EVT_ERASE_BACKGROUND(MyFrame::OnEraseBackground) 575 EVT_SIZE(MyFrame::OnSize) 576 EVT_MENU(MyFrame::ID_CreateTree, MyFrame::OnCreateTree) 577 EVT_MENU(MyFrame::ID_CreateGrid, MyFrame::OnCreateGrid) 578 EVT_MENU(MyFrame::ID_CreateText, MyFrame::OnCreateText) 579 EVT_MENU(MyFrame::ID_CreateHTML, MyFrame::OnCreateHTML) 580 EVT_MENU(MyFrame::ID_CreateSizeReport, MyFrame::OnCreateSizeReport) 581 EVT_MENU(MyFrame::ID_CreateNotebook, MyFrame::OnCreateNotebook) 582 EVT_MENU(MyFrame::ID_CreatePerspective, MyFrame::OnCreatePerspective) 583 EVT_MENU(MyFrame::ID_CopyPerspectiveCode, MyFrame::OnCopyPerspectiveCode) 584 EVT_MENU(ID_AllowFloating, MyFrame::OnManagerFlag) 585 EVT_MENU(ID_TransparentHint, MyFrame::OnManagerFlag) 586 EVT_MENU(ID_VenetianBlindsHint, MyFrame::OnManagerFlag) 587 EVT_MENU(ID_RectangleHint, MyFrame::OnManagerFlag) 588 EVT_MENU(ID_NoHint, MyFrame::OnManagerFlag) 589 EVT_MENU(ID_HintFade, MyFrame::OnManagerFlag) 590 EVT_MENU(ID_NoVenetianFade, MyFrame::OnManagerFlag) 591 EVT_MENU(ID_TransparentDrag, MyFrame::OnManagerFlag) 592 EVT_MENU(ID_LiveUpdate, MyFrame::OnManagerFlag) 593 EVT_MENU(ID_AllowActivePane, MyFrame::OnManagerFlag) 594 EVT_MENU(ID_NotebookTabFixedWidth, MyFrame::OnNotebookFlag) 595 EVT_MENU(ID_NotebookNoCloseButton, MyFrame::OnNotebookFlag) 596 EVT_MENU(ID_NotebookCloseButton, MyFrame::OnNotebookFlag) 597 EVT_MENU(ID_NotebookCloseButtonAll, MyFrame::OnNotebookFlag) 598 EVT_MENU(ID_NotebookCloseButtonActive, MyFrame::OnNotebookFlag) 599 EVT_MENU(ID_NotebookAllowTabMove, MyFrame::OnNotebookFlag) 600 EVT_MENU(ID_NotebookAllowTabExternalMove, MyFrame::OnNotebookFlag) 601 EVT_MENU(ID_NotebookAllowTabSplit, MyFrame::OnNotebookFlag) 602 EVT_MENU(ID_NotebookScrollButtons, MyFrame::OnNotebookFlag) 603 EVT_MENU(ID_NotebookWindowList, MyFrame::OnNotebookFlag) 604 EVT_MENU(ID_NotebookArtGloss, MyFrame::OnNotebookFlag) 605 EVT_MENU(ID_NotebookArtSimple, MyFrame::OnNotebookFlag) 606 EVT_MENU(ID_NotebookAlignTop, MyFrame::OnTabAlignment) 607 EVT_MENU(ID_NotebookAlignBottom, MyFrame::OnTabAlignment) 608 EVT_MENU(ID_NoGradient, MyFrame::OnGradient) 609 EVT_MENU(ID_VerticalGradient, MyFrame::OnGradient) 610 EVT_MENU(ID_HorizontalGradient, MyFrame::OnGradient) 611 EVT_MENU(ID_Settings, MyFrame::OnSettings) 612 EVT_MENU(ID_CustomizeToolbar, MyFrame::OnCustomizeToolbar) 613 EVT_MENU(ID_GridContent, MyFrame::OnChangeContentPane) 614 EVT_MENU(ID_TreeContent, MyFrame::OnChangeContentPane) 615 EVT_MENU(ID_TextContent, MyFrame::OnChangeContentPane) 616 EVT_MENU(ID_SizeReportContent, MyFrame::OnChangeContentPane) 617 EVT_MENU(ID_HTMLContent, MyFrame::OnChangeContentPane) 618 EVT_MENU(ID_NotebookContent, MyFrame::OnChangeContentPane) 619 EVT_MENU(wxID_EXIT, MyFrame::OnExit) 620 EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) 621 EVT_UPDATE_UI(ID_NotebookTabFixedWidth, MyFrame::OnUpdateUI) 622 EVT_UPDATE_UI(ID_NotebookNoCloseButton, MyFrame::OnUpdateUI) 623 EVT_UPDATE_UI(ID_NotebookCloseButton, MyFrame::OnUpdateUI) 624 EVT_UPDATE_UI(ID_NotebookCloseButtonAll, MyFrame::OnUpdateUI) 625 EVT_UPDATE_UI(ID_NotebookCloseButtonActive, MyFrame::OnUpdateUI) 626 EVT_UPDATE_UI(ID_NotebookAllowTabMove, MyFrame::OnUpdateUI) 627 EVT_UPDATE_UI(ID_NotebookAllowTabExternalMove, MyFrame::OnUpdateUI) 628 EVT_UPDATE_UI(ID_NotebookAllowTabSplit, MyFrame::OnUpdateUI) 629 EVT_UPDATE_UI(ID_NotebookScrollButtons, MyFrame::OnUpdateUI) 630 EVT_UPDATE_UI(ID_NotebookWindowList, MyFrame::OnUpdateUI) 631 EVT_UPDATE_UI(ID_AllowFloating, MyFrame::OnUpdateUI) 632 EVT_UPDATE_UI(ID_TransparentHint, MyFrame::OnUpdateUI) 633 EVT_UPDATE_UI(ID_VenetianBlindsHint, MyFrame::OnUpdateUI) 634 EVT_UPDATE_UI(ID_RectangleHint, MyFrame::OnUpdateUI) 635 EVT_UPDATE_UI(ID_NoHint, MyFrame::OnUpdateUI) 636 EVT_UPDATE_UI(ID_HintFade, MyFrame::OnUpdateUI) 637 EVT_UPDATE_UI(ID_NoVenetianFade, MyFrame::OnUpdateUI) 638 EVT_UPDATE_UI(ID_TransparentDrag, MyFrame::OnUpdateUI) 639 EVT_UPDATE_UI(ID_LiveUpdate, MyFrame::OnUpdateUI) 640 EVT_UPDATE_UI(ID_NoGradient, MyFrame::OnUpdateUI) 641 EVT_UPDATE_UI(ID_VerticalGradient, MyFrame::OnUpdateUI) 642 EVT_UPDATE_UI(ID_HorizontalGradient, MyFrame::OnUpdateUI) 643 EVT_MENU_RANGE(MyFrame::ID_FirstPerspective, MyFrame::ID_FirstPerspective+1000, 644 MyFrame::OnRestorePerspective) 645 EVT_AUITOOLBAR_TOOL_DROPDOWN(ID_DropDownToolbarItem, MyFrame::OnDropDownToolbarItem) 646 EVT_AUI_PANE_CLOSE(MyFrame::OnPaneClose) 647 EVT_AUINOTEBOOK_ALLOW_DND(wxID_ANY, MyFrame::OnAllowNotebookDnD) 648 EVT_AUINOTEBOOK_PAGE_CLOSE(wxID_ANY, MyFrame::OnNotebookPageClose) 649END_EVENT_TABLE() 650 651 652MyFrame::MyFrame(wxWindow* parent, 653 wxWindowID id, 654 const wxString& title, 655 const wxPoint& pos, 656 const wxSize& size, 657 long style) 658 : wxFrame(parent, id, title, pos, size, style) 659{ 660 // tell wxAuiManager to manage this frame 661 m_mgr.SetManagedWindow(this); 662 663 // set frame icon 664 SetIcon(wxIcon(sample_xpm)); 665 666 // set up default notebook style 667 m_notebook_style = wxAUI_NB_DEFAULT_STYLE | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER; 668 m_notebook_theme = 0; 669 670 // create menu 671 wxMenuBar* mb = new wxMenuBar; 672 673 wxMenu* file_menu = new wxMenu; 674 file_menu->Append(wxID_EXIT, _("Exit")); 675 676 wxMenu* view_menu = new wxMenu; 677 view_menu->Append(ID_CreateText, _("Create Text Control")); 678 view_menu->Append(ID_CreateHTML, _("Create HTML Control")); 679 view_menu->Append(ID_CreateTree, _("Create Tree")); 680 view_menu->Append(ID_CreateGrid, _("Create Grid")); 681 view_menu->Append(ID_CreateNotebook, _("Create Notebook")); 682 view_menu->Append(ID_CreateSizeReport, _("Create Size Reporter")); 683 view_menu->AppendSeparator(); 684 view_menu->Append(ID_GridContent, _("Use a Grid for the Content Pane")); 685 view_menu->Append(ID_TextContent, _("Use a Text Control for the Content Pane")); 686 view_menu->Append(ID_HTMLContent, _("Use an HTML Control for the Content Pane")); 687 view_menu->Append(ID_TreeContent, _("Use a Tree Control for the Content Pane")); 688 view_menu->Append(ID_NotebookContent, _("Use a wxAuiNotebook control for the Content Pane")); 689 view_menu->Append(ID_SizeReportContent, _("Use a Size Reporter for the Content Pane")); 690 691 wxMenu* options_menu = new wxMenu; 692 options_menu->AppendRadioItem(ID_TransparentHint, _("Transparent Hint")); 693 options_menu->AppendRadioItem(ID_VenetianBlindsHint, _("Venetian Blinds Hint")); 694 options_menu->AppendRadioItem(ID_RectangleHint, _("Rectangle Hint")); 695 options_menu->AppendRadioItem(ID_NoHint, _("No Hint")); 696 options_menu->AppendSeparator(); 697 options_menu->AppendCheckItem(ID_HintFade, _("Hint Fade-in")); 698 options_menu->AppendCheckItem(ID_AllowFloating, _("Allow Floating")); 699 options_menu->AppendCheckItem(ID_NoVenetianFade, _("Disable Venetian Blinds Hint Fade-in")); 700 options_menu->AppendCheckItem(ID_TransparentDrag, _("Transparent Drag")); 701 options_menu->AppendCheckItem(ID_AllowActivePane, _("Allow Active Pane")); 702 options_menu->AppendCheckItem(ID_LiveUpdate, _("Live Resize Update")); 703 options_menu->AppendSeparator(); 704 options_menu->AppendRadioItem(ID_NoGradient, _("No Caption Gradient")); 705 options_menu->AppendRadioItem(ID_VerticalGradient, _("Vertical Caption Gradient")); 706 options_menu->AppendRadioItem(ID_HorizontalGradient, _("Horizontal Caption Gradient")); 707 options_menu->AppendSeparator(); 708 options_menu->Append(ID_Settings, _("Settings Pane")); 709 710 wxMenu* notebook_menu = new wxMenu; 711 notebook_menu->AppendRadioItem(ID_NotebookArtGloss, _("Glossy Theme (Default)")); 712 notebook_menu->AppendRadioItem(ID_NotebookArtSimple, _("Simple Theme")); 713 notebook_menu->AppendSeparator(); 714 notebook_menu->AppendRadioItem(ID_NotebookNoCloseButton, _("No Close Button")); 715 notebook_menu->AppendRadioItem(ID_NotebookCloseButton, _("Close Button at Right")); 716 notebook_menu->AppendRadioItem(ID_NotebookCloseButtonAll, _("Close Button on All Tabs")); 717 notebook_menu->AppendRadioItem(ID_NotebookCloseButtonActive, _("Close Button on Active Tab")); 718 notebook_menu->AppendSeparator(); 719 notebook_menu->AppendRadioItem(ID_NotebookAlignTop, _("Tab Top Alignment")); 720 notebook_menu->AppendRadioItem(ID_NotebookAlignBottom, _("Tab Bottom Alignment")); 721 notebook_menu->AppendSeparator(); 722 notebook_menu->AppendCheckItem(ID_NotebookAllowTabMove, _("Allow Tab Move")); 723 notebook_menu->AppendCheckItem(ID_NotebookAllowTabExternalMove, _("Allow External Tab Move")); 724 notebook_menu->AppendCheckItem(ID_NotebookAllowTabSplit, _("Allow Notebook Split")); 725 notebook_menu->AppendCheckItem(ID_NotebookScrollButtons, _("Scroll Buttons Visible")); 726 notebook_menu->AppendCheckItem(ID_NotebookWindowList, _("Window List Button Visible")); 727 notebook_menu->AppendCheckItem(ID_NotebookTabFixedWidth, _("Fixed-width Tabs")); 728 729 m_perspectives_menu = new wxMenu; 730 m_perspectives_menu->Append(ID_CreatePerspective, _("Create Perspective")); 731 m_perspectives_menu->Append(ID_CopyPerspectiveCode, _("Copy Perspective Data To Clipboard")); 732 m_perspectives_menu->AppendSeparator(); 733 m_perspectives_menu->Append(ID_FirstPerspective+0, _("Default Startup")); 734 m_perspectives_menu->Append(ID_FirstPerspective+1, _("All Panes")); 735 736 wxMenu* help_menu = new wxMenu; 737 help_menu->Append(wxID_ABOUT, _("About...")); 738 739 mb->Append(file_menu, _("File")); 740 mb->Append(view_menu, _("View")); 741 mb->Append(m_perspectives_menu, _("Perspectives")); 742 mb->Append(options_menu, _("Options")); 743 mb->Append(notebook_menu, _("Notebook")); 744 mb->Append(help_menu, _("Help")); 745 746 SetMenuBar(mb); 747 748 CreateStatusBar(); 749 GetStatusBar()->SetStatusText(_("Ready")); 750 751 752 // min size for the frame itself isn't completely done. 753 // see the end up wxAuiManager::Update() for the test 754 // code. For now, just hard code a frame minimum size 755 SetMinSize(wxSize(400,300)); 756 757 758 759 // prepare a few custom overflow elements for the toolbars' overflow buttons 760 761 wxAuiToolBarItemArray prepend_items; 762 wxAuiToolBarItemArray append_items; 763 wxAuiToolBarItem item; 764 item.SetKind(wxITEM_SEPARATOR); 765 append_items.Add(item); 766 item.SetKind(wxITEM_NORMAL); 767 item.SetId(ID_CustomizeToolbar); 768 item.SetLabel(_("Customize...")); 769 append_items.Add(item); 770 771 772 // create some toolbars 773 wxAuiToolBar* tb1 = new wxAuiToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 774 wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_OVERFLOW); 775 tb1->SetToolBitmapSize(wxSize(48,48)); 776 tb1->AddTool(ID_SampleItem+1, wxT("Test"), wxArtProvider::GetBitmap(wxART_ERROR)); 777 tb1->AddSeparator(); 778 tb1->AddTool(ID_SampleItem+2, wxT("Test"), wxArtProvider::GetBitmap(wxART_QUESTION)); 779 tb1->AddTool(ID_SampleItem+3, wxT("Test"), wxArtProvider::GetBitmap(wxART_INFORMATION)); 780 tb1->AddTool(ID_SampleItem+4, wxT("Test"), wxArtProvider::GetBitmap(wxART_WARNING)); 781 tb1->AddTool(ID_SampleItem+5, wxT("Test"), wxArtProvider::GetBitmap(wxART_MISSING_IMAGE)); 782 tb1->SetCustomOverflowItems(prepend_items, append_items); 783 tb1->Realize(); 784 785 786 wxAuiToolBar* tb2 = new wxAuiToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 787 wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_OVERFLOW); 788 tb2->SetToolBitmapSize(wxSize(16,16)); 789 790 wxBitmap tb2_bmp1 = wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(16,16)); 791 tb2->AddTool(ID_SampleItem+6, wxT("Test"), tb2_bmp1); 792 tb2->AddTool(ID_SampleItem+7, wxT("Test"), tb2_bmp1); 793 tb2->AddTool(ID_SampleItem+8, wxT("Test"), tb2_bmp1); 794 tb2->AddTool(ID_SampleItem+9, wxT("Test"), tb2_bmp1); 795 tb2->AddSeparator(); 796 tb2->AddTool(ID_SampleItem+10, wxT("Test"), tb2_bmp1); 797 tb2->AddTool(ID_SampleItem+11, wxT("Test"), tb2_bmp1); 798 tb2->AddSeparator(); 799 tb2->AddTool(ID_SampleItem+12, wxT("Test"), tb2_bmp1); 800 tb2->AddTool(ID_SampleItem+13, wxT("Test"), tb2_bmp1); 801 tb2->AddTool(ID_SampleItem+14, wxT("Test"), tb2_bmp1); 802 tb2->AddTool(ID_SampleItem+15, wxT("Test"), tb2_bmp1); 803 tb2->SetCustomOverflowItems(prepend_items, append_items); 804 tb2->Realize(); 805 806 807 wxAuiToolBar* tb3 = new wxAuiToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 808 wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_OVERFLOW); 809 tb3->SetToolBitmapSize(wxSize(16,16)); 810 wxBitmap tb3_bmp1 = wxArtProvider::GetBitmap(wxART_FOLDER, wxART_OTHER, wxSize(16,16)); 811 tb3->AddTool(ID_SampleItem+16, wxT("Check 1"), tb3_bmp1, wxT("Check 1"), wxITEM_CHECK); 812 tb3->AddTool(ID_SampleItem+17, wxT("Check 2"), tb3_bmp1, wxT("Check 2"), wxITEM_CHECK); 813 tb3->AddTool(ID_SampleItem+18, wxT("Check 3"), tb3_bmp1, wxT("Check 3"), wxITEM_CHECK); 814 tb3->AddTool(ID_SampleItem+19, wxT("Check 4"), tb3_bmp1, wxT("Check 4"), wxITEM_CHECK); 815 tb3->AddSeparator(); 816 tb3->AddTool(ID_SampleItem+20, wxT("Radio 1"), tb3_bmp1, wxT("Radio 1"), wxITEM_RADIO); 817 tb3->AddTool(ID_SampleItem+21, wxT("Radio 2"), tb3_bmp1, wxT("Radio 2"), wxITEM_RADIO); 818 tb3->AddTool(ID_SampleItem+22, wxT("Radio 3"), tb3_bmp1, wxT("Radio 3"), wxITEM_RADIO); 819 tb3->AddSeparator(); 820 tb3->AddTool(ID_SampleItem+23, wxT("Radio 1 (Group 2)"), tb3_bmp1, wxT("Radio 1 (Group 2)"), wxITEM_RADIO); 821 tb3->AddTool(ID_SampleItem+24, wxT("Radio 2 (Group 2)"), tb3_bmp1, wxT("Radio 2 (Group 2)"), wxITEM_RADIO); 822 tb3->AddTool(ID_SampleItem+25, wxT("Radio 3 (Group 2)"), tb3_bmp1, wxT("Radio 3 (Group 2)"), wxITEM_RADIO); 823 tb3->SetCustomOverflowItems(prepend_items, append_items); 824 tb3->Realize(); 825 826 827 wxAuiToolBar* tb4 = new wxAuiToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 828 wxAUI_TB_DEFAULT_STYLE | 829 wxAUI_TB_OVERFLOW | 830 wxAUI_TB_TEXT | 831 wxAUI_TB_HORZ_TEXT); 832 tb4->SetToolBitmapSize(wxSize(16,16)); 833 wxBitmap tb4_bmp1 = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16)); 834 tb4->AddTool(ID_DropDownToolbarItem, wxT("Item 1"), tb4_bmp1); 835 tb4->AddTool(ID_SampleItem+23, wxT("Item 2"), tb4_bmp1); 836 tb4->AddTool(ID_SampleItem+24, wxT("Item 3"), tb4_bmp1); 837 tb4->AddTool(ID_SampleItem+25, wxT("Item 4"), tb4_bmp1); 838 tb4->AddSeparator(); 839 tb4->AddTool(ID_SampleItem+26, wxT("Item 5"), tb4_bmp1); 840 tb4->AddTool(ID_SampleItem+27, wxT("Item 6"), tb4_bmp1); 841 tb4->AddTool(ID_SampleItem+28, wxT("Item 7"), tb4_bmp1); 842 tb4->AddTool(ID_SampleItem+29, wxT("Item 8"), tb4_bmp1); 843 tb4->SetToolDropDown(ID_DropDownToolbarItem, true); 844 tb4->SetCustomOverflowItems(prepend_items, append_items); 845 tb4->Realize(); 846 847 848 wxAuiToolBar* tb5 = new wxAuiToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 849 wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_OVERFLOW | wxAUI_TB_VERTICAL); 850 tb5->SetToolBitmapSize(wxSize(48,48)); 851 tb5->AddTool(ID_SampleItem+30, wxT("Test"), wxArtProvider::GetBitmap(wxART_ERROR)); 852 tb5->AddSeparator(); 853 tb5->AddTool(ID_SampleItem+31, wxT("Test"), wxArtProvider::GetBitmap(wxART_QUESTION)); 854 tb5->AddTool(ID_SampleItem+32, wxT("Test"), wxArtProvider::GetBitmap(wxART_INFORMATION)); 855 tb5->AddTool(ID_SampleItem+33, wxT("Test"), wxArtProvider::GetBitmap(wxART_WARNING)); 856 tb5->AddTool(ID_SampleItem+34, wxT("Test"), wxArtProvider::GetBitmap(wxART_MISSING_IMAGE)); 857 tb5->SetCustomOverflowItems(prepend_items, append_items); 858 tb5->Realize(); 859 860 // add a bunch of panes 861 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 862 Name(wxT("test1")).Caption(wxT("Pane Caption")). 863 Top()); 864 865 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 866 Name(wxT("test2")).Caption(wxT("Client Size Reporter")). 867 Bottom().Position(1). 868 CloseButton(true).MaximizeButton(true)); 869 870 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 871 Name(wxT("test3")).Caption(wxT("Client Size Reporter")). 872 Bottom(). 873 CloseButton(true).MaximizeButton(true)); 874 875 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 876 Name(wxT("test4")).Caption(wxT("Pane Caption")). 877 Left()); 878 879 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 880 Name(wxT("test5")).Caption(wxT("No Close Button")). 881 Right().CloseButton(false)); 882 883 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 884 Name(wxT("test6")).Caption(wxT("Client Size Reporter")). 885 Right().Row(1). 886 CloseButton(true).MaximizeButton(true)); 887 888 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 889 Name(wxT("test7")).Caption(wxT("Client Size Reporter")). 890 Left().Layer(1). 891 CloseButton(true).MaximizeButton(true)); 892 893 m_mgr.AddPane(CreateTreeCtrl(), wxAuiPaneInfo(). 894 Name(wxT("test8")).Caption(wxT("Tree Pane")). 895 Left().Layer(1).Position(1). 896 CloseButton(true).MaximizeButton(true)); 897 898 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 899 Name(wxT("test9")).Caption(wxT("Min Size 200x100")). 900 BestSize(wxSize(200,100)).MinSize(wxSize(200,100)). 901 Bottom().Layer(1). 902 CloseButton(true).MaximizeButton(true)); 903 904 wxWindow* wnd10 = CreateTextCtrl(wxT("This pane will prompt the user before hiding.")); 905 m_mgr.AddPane(wnd10, wxAuiPaneInfo(). 906 Name(wxT("test10")).Caption(wxT("Text Pane with Hide Prompt")). 907 Bottom().Layer(1).Position(1)); 908 909 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 910 Name(wxT("test11")).Caption(wxT("Fixed Pane")). 911 Bottom().Layer(1).Position(2).Fixed()); 912 913 914 m_mgr.AddPane(new SettingsPanel(this,this), wxAuiPaneInfo(). 915 Name(wxT("settings")).Caption(wxT("Dock Manager Settings")). 916 Dockable(false).Float().Hide()); 917 918 // create some center panes 919 920 m_mgr.AddPane(CreateGrid(), wxAuiPaneInfo().Name(wxT("grid_content")). 921 CenterPane().Hide()); 922 923 m_mgr.AddPane(CreateTreeCtrl(), wxAuiPaneInfo().Name(wxT("tree_content")). 924 CenterPane().Hide()); 925 926 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo().Name(wxT("sizereport_content")). 927 CenterPane().Hide()); 928 929 m_mgr.AddPane(CreateTextCtrl(), wxAuiPaneInfo().Name(wxT("text_content")). 930 CenterPane().Hide()); 931 932 m_mgr.AddPane(CreateHTMLCtrl(), wxAuiPaneInfo().Name(wxT("html_content")). 933 CenterPane().Hide()); 934 935 m_mgr.AddPane(CreateNotebook(), wxAuiPaneInfo().Name(wxT("notebook_content")). 936 CenterPane().PaneBorder(false)); 937 938 // add the toolbars to the manager 939 m_mgr.AddPane(tb1, wxAuiPaneInfo(). 940 Name(wxT("tb1")).Caption(wxT("Big Toolbar")). 941 ToolbarPane().Top(). 942 LeftDockable(false).RightDockable(false)); 943 944 m_mgr.AddPane(tb2, wxAuiPaneInfo(). 945 Name(wxT("tb2")).Caption(wxT("Toolbar 2")). 946 ToolbarPane().Top().Row(1). 947 LeftDockable(false).RightDockable(false)); 948 949 m_mgr.AddPane(tb3, wxAuiPaneInfo(). 950 Name(wxT("tb3")).Caption(wxT("Toolbar 3")). 951 ToolbarPane().Top().Row(1).Position(1). 952 LeftDockable(false).RightDockable(false)); 953 954 m_mgr.AddPane(tb4, wxAuiPaneInfo(). 955 Name(wxT("tb4")).Caption(wxT("Sample Bookmark Toolbar")). 956 ToolbarPane().Top().Row(2). 957 LeftDockable(false).RightDockable(false)); 958 959 m_mgr.AddPane(tb5, wxAuiPaneInfo(). 960 Name(wxT("tb5")).Caption(wxT("Sample Vertical Toolbar")). 961 ToolbarPane().Left(). 962 GripperTop(). 963 TopDockable(false).BottomDockable(false)); 964 965 m_mgr.AddPane(new wxButton(this, wxID_ANY, _("Test Button")), 966 wxAuiPaneInfo().Name(wxT("tb6")). 967 ToolbarPane().Top().Row(2).Position(1). 968 LeftDockable(false).RightDockable(false)); 969 970 // make some default perspectives 971 972 wxString perspective_all = m_mgr.SavePerspective(); 973 974 int i, count; 975 wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes(); 976 for (i = 0, count = all_panes.GetCount(); i < count; ++i) 977 if (!all_panes.Item(i).IsToolbar()) 978 all_panes.Item(i).Hide(); 979 m_mgr.GetPane(wxT("tb1")).Hide(); 980 m_mgr.GetPane(wxT("tb6")).Hide(); 981 m_mgr.GetPane(wxT("test8")).Show().Left().Layer(0).Row(0).Position(0); 982 m_mgr.GetPane(wxT("test10")).Show().Bottom().Layer(0).Row(0).Position(0); 983 m_mgr.GetPane(wxT("notebook_content")).Show(); 984 wxString perspective_default = m_mgr.SavePerspective(); 985 986 m_perspectives.Add(perspective_default); 987 m_perspectives.Add(perspective_all); 988 989 // "commit" all changes made to wxAuiManager 990 m_mgr.Update(); 991} 992 993MyFrame::~MyFrame() 994{ 995 m_mgr.UnInit(); 996} 997 998wxAuiDockArt* MyFrame::GetDockArt() 999{ 1000 return m_mgr.GetArtProvider(); 1001} 1002 1003void MyFrame::DoUpdate() 1004{ 1005 m_mgr.Update(); 1006} 1007 1008void MyFrame::OnEraseBackground(wxEraseEvent& event) 1009{ 1010 event.Skip(); 1011} 1012 1013void MyFrame::OnSize(wxSizeEvent& event) 1014{ 1015 event.Skip(); 1016} 1017 1018void MyFrame::OnSettings(wxCommandEvent& WXUNUSED(evt)) 1019{ 1020 // show the settings pane, and float it 1021 wxAuiPaneInfo& floating_pane = m_mgr.GetPane(wxT("settings")).Float().Show(); 1022 1023 if (floating_pane.floating_pos == wxDefaultPosition) 1024 floating_pane.FloatingPosition(GetStartPosition()); 1025 1026 m_mgr.Update(); 1027} 1028 1029void MyFrame::OnCustomizeToolbar(wxCommandEvent& WXUNUSED(evt)) 1030{ 1031 wxMessageBox(_("Customize Toolbar clicked")); 1032} 1033 1034void MyFrame::OnGradient(wxCommandEvent& event) 1035{ 1036 int gradient = 0; 1037 1038 switch (event.GetId()) 1039 { 1040 case ID_NoGradient: gradient = wxAUI_GRADIENT_NONE; break; 1041 case ID_VerticalGradient: gradient = wxAUI_GRADIENT_VERTICAL; break; 1042 case ID_HorizontalGradient: gradient = wxAUI_GRADIENT_HORIZONTAL; break; 1043 } 1044 1045 m_mgr.GetArtProvider()->SetMetric(wxAUI_DOCKART_GRADIENT_TYPE, gradient); 1046 m_mgr.Update(); 1047} 1048 1049void MyFrame::OnManagerFlag(wxCommandEvent& event) 1050{ 1051 unsigned int flag = 0; 1052 1053#if !defined(__WXMSW__) && !defined(__WXMAC__) && !defined(__WXGTK__) 1054 if (event.GetId() == ID_TransparentDrag || 1055 event.GetId() == ID_TransparentHint || 1056 event.GetId() == ID_HintFade) 1057 { 1058 wxMessageBox(wxT("This option is presently only available on wxGTK, wxMSW and wxMac")); 1059 return; 1060 } 1061#endif 1062 1063 int id = event.GetId(); 1064 1065 if (id == ID_TransparentHint || 1066 id == ID_VenetianBlindsHint || 1067 id == ID_RectangleHint || 1068 id == ID_NoHint) 1069 { 1070 unsigned int flags = m_mgr.GetFlags(); 1071 flags &= ~wxAUI_MGR_TRANSPARENT_HINT; 1072 flags &= ~wxAUI_MGR_VENETIAN_BLINDS_HINT; 1073 flags &= ~wxAUI_MGR_RECTANGLE_HINT; 1074 m_mgr.SetFlags(flags); 1075 } 1076 1077 switch (id) 1078 { 1079 case ID_AllowFloating: flag = wxAUI_MGR_ALLOW_FLOATING; break; 1080 case ID_TransparentDrag: flag = wxAUI_MGR_TRANSPARENT_DRAG; break; 1081 case ID_HintFade: flag = wxAUI_MGR_HINT_FADE; break; 1082 case ID_NoVenetianFade: flag = wxAUI_MGR_NO_VENETIAN_BLINDS_FADE; break; 1083 case ID_AllowActivePane: flag = wxAUI_MGR_ALLOW_ACTIVE_PANE; break; 1084 case ID_TransparentHint: flag = wxAUI_MGR_TRANSPARENT_HINT; break; 1085 case ID_VenetianBlindsHint: flag = wxAUI_MGR_VENETIAN_BLINDS_HINT; break; 1086 case ID_RectangleHint: flag = wxAUI_MGR_RECTANGLE_HINT; break; 1087 case ID_LiveUpdate: flag = wxAUI_MGR_LIVE_RESIZE; break; 1088 } 1089 1090 if (flag) 1091 { 1092 m_mgr.SetFlags(m_mgr.GetFlags() ^ flag); 1093 } 1094 1095 m_mgr.Update(); 1096} 1097 1098 1099void MyFrame::OnNotebookFlag(wxCommandEvent& event) 1100{ 1101 int id = event.GetId(); 1102 1103 if (id == ID_NotebookNoCloseButton || 1104 id == ID_NotebookCloseButton || 1105 id == ID_NotebookCloseButtonAll || 1106 id == ID_NotebookCloseButtonActive) 1107 { 1108 m_notebook_style &= ~(wxAUI_NB_CLOSE_BUTTON | 1109 wxAUI_NB_CLOSE_ON_ACTIVE_TAB | 1110 wxAUI_NB_CLOSE_ON_ALL_TABS); 1111 1112 switch (id) 1113 { 1114 case ID_NotebookNoCloseButton: break; 1115 case ID_NotebookCloseButton: m_notebook_style |= wxAUI_NB_CLOSE_BUTTON; break; 1116 case ID_NotebookCloseButtonAll: m_notebook_style |= wxAUI_NB_CLOSE_ON_ALL_TABS; break; 1117 case ID_NotebookCloseButtonActive: m_notebook_style |= wxAUI_NB_CLOSE_ON_ACTIVE_TAB; break; 1118 } 1119 } 1120 1121 if (id == ID_NotebookAllowTabMove) 1122 { 1123 m_notebook_style ^= wxAUI_NB_TAB_MOVE; 1124 } 1125 if (id == ID_NotebookAllowTabExternalMove) 1126 { 1127 m_notebook_style ^= wxAUI_NB_TAB_EXTERNAL_MOVE; 1128 } 1129 else if (id == ID_NotebookAllowTabSplit) 1130 { 1131 m_notebook_style ^= wxAUI_NB_TAB_SPLIT; 1132 } 1133 else if (id == ID_NotebookWindowList) 1134 { 1135 m_notebook_style ^= wxAUI_NB_WINDOWLIST_BUTTON; 1136 } 1137 else if (id == ID_NotebookScrollButtons) 1138 { 1139 m_notebook_style ^= wxAUI_NB_SCROLL_BUTTONS; 1140 } 1141 else if (id == ID_NotebookTabFixedWidth) 1142 { 1143 m_notebook_style ^= wxAUI_NB_TAB_FIXED_WIDTH; 1144 } 1145 1146 1147 size_t i, count; 1148 wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes(); 1149 for (i = 0, count = all_panes.GetCount(); i < count; ++i) 1150 { 1151 wxAuiPaneInfo& pane = all_panes.Item(i); 1152 if (pane.window->IsKindOf(CLASSINFO(wxAuiNotebook))) 1153 { 1154 wxAuiNotebook* nb = (wxAuiNotebook*)pane.window; 1155 1156 if (id == ID_NotebookArtGloss) 1157 { 1158 nb->SetArtProvider(new wxAuiDefaultTabArt); 1159 m_notebook_theme = 0; 1160 } 1161 else if (id == ID_NotebookArtSimple) 1162 { 1163 nb->SetArtProvider(new wxAuiSimpleTabArt); 1164 m_notebook_theme = 1; 1165 } 1166 1167 1168 nb->SetWindowStyleFlag(m_notebook_style); 1169 nb->Refresh(); 1170 } 1171 } 1172 1173 1174} 1175 1176 1177void MyFrame::OnUpdateUI(wxUpdateUIEvent& event) 1178{ 1179 unsigned int flags = m_mgr.GetFlags(); 1180 1181 switch (event.GetId()) 1182 { 1183 case ID_NoGradient: 1184 event.Check(m_mgr.GetArtProvider()->GetMetric(wxAUI_DOCKART_GRADIENT_TYPE) == wxAUI_GRADIENT_NONE); 1185 break; 1186 case ID_VerticalGradient: 1187 event.Check(m_mgr.GetArtProvider()->GetMetric(wxAUI_DOCKART_GRADIENT_TYPE) == wxAUI_GRADIENT_VERTICAL); 1188 break; 1189 case ID_HorizontalGradient: 1190 event.Check(m_mgr.GetArtProvider()->GetMetric(wxAUI_DOCKART_GRADIENT_TYPE) == wxAUI_GRADIENT_HORIZONTAL); 1191 break; 1192 case ID_AllowFloating: 1193 event.Check((flags & wxAUI_MGR_ALLOW_FLOATING) != 0); 1194 break; 1195 case ID_TransparentDrag: 1196 event.Check((flags & wxAUI_MGR_TRANSPARENT_DRAG) != 0); 1197 break; 1198 case ID_TransparentHint: 1199 event.Check((flags & wxAUI_MGR_TRANSPARENT_HINT) != 0); 1200 break; 1201 case ID_LiveUpdate: 1202 event.Check((flags & wxAUI_MGR_LIVE_RESIZE) != 0); 1203 break; 1204 case ID_VenetianBlindsHint: 1205 event.Check((flags & wxAUI_MGR_VENETIAN_BLINDS_HINT) != 0); 1206 break; 1207 case ID_RectangleHint: 1208 event.Check((flags & wxAUI_MGR_RECTANGLE_HINT) != 0); 1209 break; 1210 case ID_NoHint: 1211 event.Check(((wxAUI_MGR_TRANSPARENT_HINT | 1212 wxAUI_MGR_VENETIAN_BLINDS_HINT | 1213 wxAUI_MGR_RECTANGLE_HINT) & flags) == 0); 1214 break; 1215 case ID_HintFade: 1216 event.Check((flags & wxAUI_MGR_HINT_FADE) != 0); 1217 break; 1218 case ID_NoVenetianFade: 1219 event.Check((flags & wxAUI_MGR_NO_VENETIAN_BLINDS_FADE) != 0); 1220 break; 1221 1222 case ID_NotebookNoCloseButton: 1223 event.Check((m_notebook_style & (wxAUI_NB_CLOSE_BUTTON|wxAUI_NB_CLOSE_ON_ALL_TABS|wxAUI_NB_CLOSE_ON_ACTIVE_TAB)) != 0); 1224 break; 1225 case ID_NotebookCloseButton: 1226 event.Check((m_notebook_style & wxAUI_NB_CLOSE_BUTTON) != 0); 1227 break; 1228 case ID_NotebookCloseButtonAll: 1229 event.Check((m_notebook_style & wxAUI_NB_CLOSE_ON_ALL_TABS) != 0); 1230 break; 1231 case ID_NotebookCloseButtonActive: 1232 event.Check((m_notebook_style & wxAUI_NB_CLOSE_ON_ACTIVE_TAB) != 0); 1233 break; 1234 case ID_NotebookAllowTabSplit: 1235 event.Check((m_notebook_style & wxAUI_NB_TAB_SPLIT) != 0); 1236 break; 1237 case ID_NotebookAllowTabMove: 1238 event.Check((m_notebook_style & wxAUI_NB_TAB_MOVE) != 0); 1239 break; 1240 case ID_NotebookAllowTabExternalMove: 1241 event.Check((m_notebook_style & wxAUI_NB_TAB_EXTERNAL_MOVE) != 0); 1242 break; 1243 case ID_NotebookScrollButtons: 1244 event.Check((m_notebook_style & wxAUI_NB_SCROLL_BUTTONS) != 0); 1245 break; 1246 case ID_NotebookWindowList: 1247 event.Check((m_notebook_style & wxAUI_NB_WINDOWLIST_BUTTON) != 0); 1248 break; 1249 case ID_NotebookTabFixedWidth: 1250 event.Check((m_notebook_style & wxAUI_NB_TAB_FIXED_WIDTH) != 0); 1251 break; 1252 case ID_NotebookArtGloss: 1253 event.Check(m_notebook_style == 0); 1254 break; 1255 case ID_NotebookArtSimple: 1256 event.Check(m_notebook_style == 1); 1257 break; 1258 1259 } 1260} 1261 1262void MyFrame::OnPaneClose(wxAuiManagerEvent& evt) 1263{ 1264 if (evt.pane->name == wxT("test10")) 1265 { 1266 int res = wxMessageBox(wxT("Are you sure you want to close/hide this pane?"), 1267 wxT("wxAUI"), 1268 wxYES_NO, 1269 this); 1270 if (res != wxYES) 1271 evt.Veto(); 1272 } 1273} 1274 1275void MyFrame::OnCreatePerspective(wxCommandEvent& WXUNUSED(event)) 1276{ 1277 wxTextEntryDialog dlg(this, wxT("Enter a name for the new perspective:"), 1278 wxT("wxAUI Test")); 1279 1280 dlg.SetValue(wxString::Format(wxT("Perspective %u"), unsigned(m_perspectives.GetCount() + 1))); 1281 if (dlg.ShowModal() != wxID_OK) 1282 return; 1283 1284 if (m_perspectives.GetCount() == 0) 1285 { 1286 m_perspectives_menu->AppendSeparator(); 1287 } 1288 1289 m_perspectives_menu->Append(ID_FirstPerspective + m_perspectives.GetCount(), dlg.GetValue()); 1290 m_perspectives.Add(m_mgr.SavePerspective()); 1291} 1292 1293void MyFrame::OnCopyPerspectiveCode(wxCommandEvent& WXUNUSED(evt)) 1294{ 1295 wxString s = m_mgr.SavePerspective(); 1296 1297#if wxUSE_CLIPBOARD 1298 if (wxTheClipboard->Open()) 1299 { 1300 wxTheClipboard->SetData(new wxTextDataObject(s)); 1301 wxTheClipboard->Close(); 1302 } 1303#endif 1304} 1305 1306void MyFrame::OnRestorePerspective(wxCommandEvent& evt) 1307{ 1308 m_mgr.LoadPerspective(m_perspectives.Item(evt.GetId() - ID_FirstPerspective)); 1309} 1310 1311void MyFrame::OnNotebookPageClose(wxAuiNotebookEvent& evt) 1312{ 1313 wxAuiNotebook* ctrl = (wxAuiNotebook*)evt.GetEventObject(); 1314 if (ctrl->GetPage(evt.GetSelection())->IsKindOf(CLASSINFO(wxHtmlWindow))) 1315 { 1316 int res = wxMessageBox(wxT("Are you sure you want to close/hide this notebook page?"), 1317 wxT("wxAUI"), 1318 wxYES_NO, 1319 this); 1320 if (res != wxYES) 1321 evt.Veto(); 1322 } 1323} 1324 1325void MyFrame::OnAllowNotebookDnD(wxAuiNotebookEvent& evt) 1326{ 1327 // for the purpose of this test application, explicitly 1328 // allow all noteboko drag and drop events 1329 evt.Allow(); 1330} 1331 1332wxPoint MyFrame::GetStartPosition() 1333{ 1334 static int x = 0; 1335 x += 20; 1336 wxPoint pt = ClientToScreen(wxPoint(0,0)); 1337 return wxPoint(pt.x + x, pt.y + x); 1338} 1339 1340void MyFrame::OnCreateTree(wxCommandEvent& WXUNUSED(event)) 1341{ 1342 m_mgr.AddPane(CreateTreeCtrl(), wxAuiPaneInfo(). 1343 Caption(wxT("Tree Control")). 1344 Float().FloatingPosition(GetStartPosition()). 1345 FloatingSize(wxSize(150,300))); 1346 m_mgr.Update(); 1347} 1348 1349void MyFrame::OnCreateGrid(wxCommandEvent& WXUNUSED(event)) 1350{ 1351 m_mgr.AddPane(CreateGrid(), wxAuiPaneInfo(). 1352 Caption(wxT("Grid")). 1353 Float().FloatingPosition(GetStartPosition()). 1354 FloatingSize(wxSize(300,200))); 1355 m_mgr.Update(); 1356} 1357 1358void MyFrame::OnCreateHTML(wxCommandEvent& WXUNUSED(event)) 1359{ 1360 m_mgr.AddPane(CreateHTMLCtrl(), wxAuiPaneInfo(). 1361 Caption(wxT("HTML Control")). 1362 Float().FloatingPosition(GetStartPosition()). 1363 FloatingSize(wxSize(300,200))); 1364 m_mgr.Update(); 1365} 1366 1367void MyFrame::OnCreateNotebook(wxCommandEvent& WXUNUSED(event)) 1368{ 1369 m_mgr.AddPane(CreateNotebook(), wxAuiPaneInfo(). 1370 Caption(wxT("Notebook")). 1371 Float().FloatingPosition(GetStartPosition()). 1372 //FloatingSize(300,200). 1373 CloseButton(true).MaximizeButton(true)); 1374 m_mgr.Update(); 1375} 1376 1377void MyFrame::OnCreateText(wxCommandEvent& WXUNUSED(event)) 1378{ 1379 m_mgr.AddPane(CreateTextCtrl(), wxAuiPaneInfo(). 1380 Caption(wxT("Text Control")). 1381 Float().FloatingPosition(GetStartPosition())); 1382 m_mgr.Update(); 1383} 1384 1385void MyFrame::OnCreateSizeReport(wxCommandEvent& WXUNUSED(event)) 1386{ 1387 m_mgr.AddPane(CreateSizeReportCtrl(), wxAuiPaneInfo(). 1388 Caption(wxT("Client Size Reporter")). 1389 Float().FloatingPosition(GetStartPosition()). 1390 CloseButton(true).MaximizeButton(true)); 1391 m_mgr.Update(); 1392} 1393 1394void MyFrame::OnChangeContentPane(wxCommandEvent& evt) 1395{ 1396 m_mgr.GetPane(wxT("grid_content")).Show(evt.GetId() == ID_GridContent); 1397 m_mgr.GetPane(wxT("text_content")).Show(evt.GetId() == ID_TextContent); 1398 m_mgr.GetPane(wxT("tree_content")).Show(evt.GetId() == ID_TreeContent); 1399 m_mgr.GetPane(wxT("sizereport_content")).Show(evt.GetId() == ID_SizeReportContent); 1400 m_mgr.GetPane(wxT("html_content")).Show(evt.GetId() == ID_HTMLContent); 1401 m_mgr.GetPane(wxT("notebook_content")).Show(evt.GetId() == ID_NotebookContent); 1402 m_mgr.Update(); 1403} 1404 1405void MyFrame::OnDropDownToolbarItem(wxAuiToolBarEvent& evt) 1406{ 1407 if (evt.IsDropDownClicked()) 1408 { 1409 wxAuiToolBar* tb = static_cast<wxAuiToolBar*>(evt.GetEventObject()); 1410 1411 tb->SetToolSticky(evt.GetId(), true); 1412 1413 // create the popup menu 1414 wxMenu menuPopup; 1415 1416 wxBitmap bmp = wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(16,16)); 1417 1418 wxMenuItem* m1 = new wxMenuItem(&menuPopup, 101, _("Drop Down Item 1")); 1419 m1->SetBitmap(bmp); 1420 menuPopup.Append(m1); 1421 1422 wxMenuItem* m2 = new wxMenuItem(&menuPopup, 101, _("Drop Down Item 2")); 1423 m2->SetBitmap(bmp); 1424 menuPopup.Append(m2); 1425 1426 wxMenuItem* m3 = new wxMenuItem(&menuPopup, 101, _("Drop Down Item 3")); 1427 m3->SetBitmap(bmp); 1428 menuPopup.Append(m3); 1429 1430 wxMenuItem* m4 = new wxMenuItem(&menuPopup, 101, _("Drop Down Item 4")); 1431 m4->SetBitmap(bmp); 1432 menuPopup.Append(m4); 1433 1434 // line up our menu with the button 1435 wxRect rect = tb->GetToolRect(evt.GetId()); 1436 wxPoint pt = tb->ClientToScreen(rect.GetBottomLeft()); 1437 pt = ScreenToClient(pt); 1438 1439 1440 PopupMenu(&menuPopup, pt); 1441 1442 1443 // make sure the button is "un-stuck" 1444 tb->SetToolSticky(evt.GetId(), false); 1445 } 1446} 1447 1448 1449void MyFrame::OnTabAlignment(wxCommandEvent &evt) 1450{ 1451 size_t i, count; 1452 wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes(); 1453 for (i = 0, count = all_panes.GetCount(); i < count; ++i) 1454 { 1455 wxAuiPaneInfo& pane = all_panes.Item(i); 1456 if (pane.window->IsKindOf(CLASSINFO(wxAuiNotebook))) 1457 { 1458 wxAuiNotebook* nb = (wxAuiNotebook*)pane.window; 1459 1460 if (evt.GetId() == ID_NotebookAlignTop) 1461 nb->SetWindowStyleFlag(nb->GetWindowStyleFlag()^wxAUI_NB_BOTTOM|wxAUI_NB_TOP); 1462 else if (evt.GetId() == ID_NotebookAlignBottom) 1463 nb->SetWindowStyleFlag(nb->GetWindowStyleFlag()^wxAUI_NB_TOP|wxAUI_NB_BOTTOM); 1464 nb->Refresh(); 1465 } 1466 } 1467} 1468 1469void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event)) 1470{ 1471 Close(true); 1472} 1473 1474void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) 1475{ 1476 wxMessageBox(_("wxAUI Demo\nAn advanced window management library for wxWidgets\n(c) Copyright 2005-2006, Kirix Corporation"), _("About wxAUI Demo"), wxOK, this); 1477} 1478 1479wxTextCtrl* MyFrame::CreateTextCtrl(const wxString& ctrl_text) 1480{ 1481 static int n = 0; 1482 1483 wxString text; 1484 if (ctrl_text.Length() > 0) 1485 text = ctrl_text; 1486 else 1487 text.Printf(wxT("This is text box %d"), ++n); 1488 1489 return new wxTextCtrl(this,wxID_ANY, text, 1490 wxPoint(0,0), wxSize(150,90), 1491 wxNO_BORDER | wxTE_MULTILINE); 1492} 1493 1494 1495wxGrid* MyFrame::CreateGrid() 1496{ 1497 wxGrid* grid = new wxGrid(this, wxID_ANY, 1498 wxPoint(0,0), 1499 wxSize(150,250), 1500 wxNO_BORDER | wxWANTS_CHARS); 1501 grid->CreateGrid(50, 20); 1502 return grid; 1503} 1504 1505wxTreeCtrl* MyFrame::CreateTreeCtrl() 1506{ 1507 wxTreeCtrl* tree = new wxTreeCtrl(this, wxID_ANY, 1508 wxPoint(0,0), wxSize(160,250), 1509 wxTR_DEFAULT_STYLE | wxNO_BORDER); 1510 1511 wxImageList* imglist = new wxImageList(16, 16, true, 2); 1512 imglist->Add(wxArtProvider::GetBitmap(wxART_FOLDER, wxART_OTHER, wxSize(16,16))); 1513 imglist->Add(wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16))); 1514 tree->AssignImageList(imglist); 1515 1516 wxTreeItemId root = tree->AddRoot(wxT("wxAUI Project"), 0); 1517 wxArrayTreeItemIds items; 1518 1519 1520 1521 items.Add(tree->AppendItem(root, wxT("Item 1"), 0)); 1522 items.Add(tree->AppendItem(root, wxT("Item 2"), 0)); 1523 items.Add(tree->AppendItem(root, wxT("Item 3"), 0)); 1524 items.Add(tree->AppendItem(root, wxT("Item 4"), 0)); 1525 items.Add(tree->AppendItem(root, wxT("Item 5"), 0)); 1526 1527 1528 int i, count; 1529 for (i = 0, count = items.Count(); i < count; ++i) 1530 { 1531 wxTreeItemId id = items.Item(i); 1532 tree->AppendItem(id, wxT("Subitem 1"), 1); 1533 tree->AppendItem(id, wxT("Subitem 2"), 1); 1534 tree->AppendItem(id, wxT("Subitem 3"), 1); 1535 tree->AppendItem(id, wxT("Subitem 4"), 1); 1536 tree->AppendItem(id, wxT("Subitem 5"), 1); 1537 } 1538 1539 1540 tree->Expand(root); 1541 1542 return tree; 1543} 1544 1545wxSizeReportCtrl* MyFrame::CreateSizeReportCtrl(int width, int height) 1546{ 1547 wxSizeReportCtrl* ctrl = new wxSizeReportCtrl(this, wxID_ANY, 1548 wxDefaultPosition, 1549 wxSize(width, height), &m_mgr); 1550 return ctrl; 1551} 1552 1553wxHtmlWindow* MyFrame::CreateHTMLCtrl(wxWindow* parent) 1554{ 1555 if (!parent) 1556 parent = this; 1557 1558 wxHtmlWindow* ctrl = new wxHtmlWindow(parent, wxID_ANY, 1559 wxDefaultPosition, 1560 wxSize(400,300)); 1561 ctrl->SetPage(GetIntroText()); 1562 return ctrl; 1563} 1564 1565wxAuiNotebook* MyFrame::CreateNotebook() 1566{ 1567 // create the notebook off-window to avoid flicker 1568 wxSize client_size = GetClientSize(); 1569 1570 wxAuiNotebook* ctrl = new wxAuiNotebook(this, wxID_ANY, 1571 wxPoint(client_size.x, client_size.y), 1572 wxSize(430,200), 1573 m_notebook_style); 1574 1575 wxBitmap page_bmp = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16)); 1576 1577 ctrl->AddPage(CreateHTMLCtrl(ctrl), wxT("Welcome to wxAUI") , false, page_bmp); 1578 1579 wxPanel *panel = new wxPanel( ctrl, wxID_ANY ); 1580 wxFlexGridSizer *flex = new wxFlexGridSizer( 2 ); 1581 flex->AddGrowableRow( 0 ); 1582 flex->AddGrowableRow( 3 ); 1583 flex->AddGrowableCol( 1 ); 1584 flex->Add( 5,5 ); flex->Add( 5,5 ); 1585 flex->Add( new wxStaticText( panel, -1, wxT("wxTextCtrl:") ), 0, wxALL|wxALIGN_CENTRE, 5 ); 1586 flex->Add( new wxTextCtrl( panel, -1, wxT(""), wxDefaultPosition, wxSize(100,-1)), 1587 1, wxALL|wxALIGN_CENTRE, 5 ); 1588 flex->Add( new wxStaticText( panel, -1, wxT("wxSpinCtrl:") ), 0, wxALL|wxALIGN_CENTRE, 5 ); 1589 flex->Add( new wxSpinCtrl( panel, -1, wxT("5"), wxDefaultPosition, wxSize(100,-1), 1590 wxSP_ARROW_KEYS, 5, 50, 5 ), 0, wxALL|wxALIGN_CENTRE, 5 ); 1591 flex->Add( 5,5 ); flex->Add( 5,5 ); 1592 panel->SetSizer( flex ); 1593 ctrl->AddPage( panel, wxT("wxPanel"), false, page_bmp ); 1594 1595 1596 ctrl->AddPage( new wxTextCtrl( ctrl, wxID_ANY, wxT("Some text"), 1597 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("wxTextCtrl 1"), false, page_bmp ); 1598 1599 ctrl->AddPage( new wxTextCtrl( ctrl, wxID_ANY, wxT("Some more text"), 1600 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("wxTextCtrl 2") ); 1601 1602 ctrl->AddPage( new wxTextCtrl( ctrl, wxID_ANY, wxT("Some more text"), 1603 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("wxTextCtrl 3") ); 1604 1605 ctrl->AddPage( new wxTextCtrl( ctrl, wxID_ANY, wxT("Some more text"), 1606 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("wxTextCtrl 4") ); 1607 1608 ctrl->AddPage( new wxTextCtrl( ctrl, wxID_ANY, wxT("Some more text"), 1609 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("wxTextCtrl 5") ); 1610 1611 ctrl->AddPage( new wxTextCtrl( ctrl, wxID_ANY, wxT("Some more text"), 1612 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("wxTextCtrl 6") ); 1613 1614 ctrl->AddPage( new wxTextCtrl( ctrl, wxID_ANY, wxT("Some more text"), 1615 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("wxTextCtrl 7 (longer title)") ); 1616 1617 ctrl->AddPage( new wxTextCtrl( ctrl, wxID_ANY, wxT("Some more text"), 1618 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("wxTextCtrl 8") ); 1619 1620 return ctrl; 1621} 1622 1623wxString MyFrame::GetIntroText() 1624{ 1625 const char* text = 1626 "<html><body>" 1627 "<h3>Welcome to wxAUI</h3>" 1628 "<br/><b>Overview</b><br/>" 1629 "<p>wxAUI is an Advanced User Interface library for the wxWidgets toolkit " 1630 "that allows developers to create high-quality, cross-platform user " 1631 "interfaces quickly and easily.</p>" 1632 "<p><b>Features</b></p>" 1633 "<p>With wxAUI, developers can create application frameworks with:</p>" 1634 "<ul>" 1635 "<li>Native, dockable floating frames</li>" 1636 "<li>Perspective saving and loading</li>" 1637 "<li>Native toolbars incorporating real-time, "spring-loaded" dragging</li>" 1638 "<li>Customizable floating/docking behavior</li>" 1639 "<li>Completely customizable look-and-feel</li>" 1640 "<li>Optional transparent window effects (while dragging or docking)</li>" 1641 "<li>Splittable notebook control</li>" 1642 "</ul>" 1643 "<p><b>What's new in 0.9.4?</b></p>" 1644 "<p>wxAUI 0.9.4, which is bundled with wxWidgets, adds the following features:" 1645 "<ul>" 1646 "<li>New wxAuiToolBar class, a toolbar control which integrates more " 1647 "cleanly with wxAuiFrameManager.</li>" 1648 "<li>Lots of bug fixes</li>" 1649 "</ul>" 1650 "<p><b>What's new in 0.9.3?</b></p>" 1651 "<p>wxAUI 0.9.3, which is now bundled with wxWidgets, adds the following features:" 1652 "<ul>" 1653 "<li>New wxAuiNotebook class, a dynamic splittable notebook control</li>" 1654 "<li>New wxAuiMDI* classes, a tab-based MDI and drop-in replacement for classic MDI</li>" 1655 "<li>Maximize/Restore buttons implemented</li>" 1656 "<li>Better hinting with wxGTK</li>" 1657 "<li>Class rename. 'wxAui' is now the standard class prefix for all wxAUI classes</li>" 1658 "<li>Lots of bug fixes</li>" 1659 "</ul>" 1660 "<p><b>What's new in 0.9.2?</b></p>" 1661 "<p>The following features/fixes have been added since the last version of wxAUI:</p>" 1662 "<ul>" 1663 "<li>Support for wxMac</li>" 1664 "<li>Updates for wxWidgets 2.6.3</li>" 1665 "<li>Fix to pass more unused events through</li>" 1666 "<li>Fix to allow floating windows to receive idle events</li>" 1667 "<li>Fix for minimizing/maximizing problem with transparent hint pane</li>" 1668 "<li>Fix to not paint empty hint rectangles</li>" 1669 "<li>Fix for 64-bit compilation</li>" 1670 "</ul>" 1671 "<p><b>What changed in 0.9.1?</b></p>" 1672 "<p>The following features/fixes were added in wxAUI 0.9.1:</p>" 1673 "<ul>" 1674 "<li>Support for MDI frames</li>" 1675 "<li>Gradient captions option</li>" 1676 "<li>Active/Inactive panes option</li>" 1677 "<li>Fix for screen artifacts/paint problems</li>" 1678 "<li>Fix for hiding/showing floated window problem</li>" 1679 "<li>Fix for floating pane sizing problem</li>" 1680 "<li>Fix for drop position problem when dragging around center pane margins</li>" 1681 "<li>LF-only text file formatting for source code</li>" 1682 "</ul>" 1683 "<p>See README.txt for more information.</p>" 1684 "</body></html>"; 1685 1686 return wxString::FromAscii(text); 1687} 1688