]> git.saurik.com Git - wxWidgets.git/blame - samples/widgets/notebook.cpp
Add a public wxModalDialogHook class for intercepting modal dialogs.
[wxWidgets.git] / samples / widgets / notebook.cpp
CommitLineData
32b8ec41 1/////////////////////////////////////////////////////////////////////////////
be5a51fb 2// Program: wxWidgets Widgets Sample
32b8ec41 3// Name: notebook.cpp
f2fdc4d5
WS
4// Purpose: Part of the widgets sample showing book controls
5// Author: Vadim Zeitlin, Wlodzimierz ABX Skiba
32b8ec41
VZ
6// Created: 06.04.01
7// Id: $Id$
f2fdc4d5 8// Copyright: (c) 2001 Vadim Zeitlin, 2006 Wlodzimierz Skiba
526954c5 9// Licence: wxWindows licence
32b8ec41
VZ
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20// for compilers that support precompilation, includes "wx/wx.h".
21#include "wx/wxprec.h"
22
23#ifdef __BORLANDC__
24 #pragma hdrstop
25#endif
26
f2fdc4d5 27#if wxUSE_BOOKCTRL
61c083e7 28
32b8ec41
VZ
29// for all others, include the necessary headers
30#ifndef WX_PRECOMP
31 #include "wx/app.h"
32 #include "wx/log.h"
33
34 #include "wx/button.h"
35 #include "wx/checkbox.h"
36 #include "wx/combobox.h"
37 #include "wx/radiobox.h"
38 #include "wx/statbox.h"
39 #include "wx/textctrl.h"
40
41 #include "wx/dynarray.h"
42#endif
43
44#include "wx/sizer.h"
f2fdc4d5 45#include "wx/bookctrl.h"
389d906b 46#include "wx/artprov.h"
261357eb 47#include "wx/imaglist.h"
32b8ec41
VZ
48
49#include "widgets.h"
32b8ec41
VZ
50
51// ----------------------------------------------------------------------------
52// constants
53// ----------------------------------------------------------------------------
54
55// control ids
56enum
57{
f2fdc4d5
WS
58 BookPage_Reset = wxID_HIGHEST,
59 BookPage_SelectPage,
60 BookPage_AddPage,
61 BookPage_InsertPage,
62 BookPage_RemovePage,
63 BookPage_DeleteAll,
64 BookPage_InsertText,
65 BookPage_RemoveText,
66 BookPage_SelectText,
67 BookPage_NumPagesText,
68 BookPage_CurSelectText,
69 BookPage_Book
32b8ec41
VZ
70};
71
f2fdc4d5 72// book orientations
32b8ec41
VZ
73enum Orient
74{
75 Orient_Top,
76 Orient_Bottom,
77 Orient_Left,
78 Orient_Right,
79 Orient_Max
80};
81
32b8ec41 82// ----------------------------------------------------------------------------
f2fdc4d5 83// BookWidgetsPage
32b8ec41
VZ
84// ----------------------------------------------------------------------------
85
f2fdc4d5 86class BookWidgetsPage : public WidgetsPage
32b8ec41
VZ
87{
88public:
747d7d7c 89 BookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist, const char *const icon[]);
f2fdc4d5 90 virtual ~BookWidgetsPage();
32b8ec41 91
f2fdc4d5
WS
92 virtual wxControl *GetWidget() const { return m_book; }
93 virtual void RecreateWidget() { RecreateBook(); }
195df7a7 94
453535a7
WS
95 // lazy creation of the content
96 virtual void CreateContent();
97
32b8ec41
VZ
98protected:
99 // event handlers
32b8ec41
VZ
100 void OnButtonReset(wxCommandEvent& event);
101 void OnButtonDeleteAll(wxCommandEvent& event);
102 void OnButtonSelectPage(wxCommandEvent& event);
103 void OnButtonAddPage(wxCommandEvent& event);
104 void OnButtonInsertPage(wxCommandEvent& event);
105 void OnButtonRemovePage(wxCommandEvent& event);
106
107 void OnCheckOrRadioBox(wxCommandEvent& event);
108
109 void OnUpdateUINumPagesText(wxUpdateUIEvent& event);
110 void OnUpdateUICurSelectText(wxUpdateUIEvent& event);
111
112 void OnUpdateUISelectButton(wxUpdateUIEvent& event);
113 void OnUpdateUIInsertButton(wxUpdateUIEvent& event);
114 void OnUpdateUIRemoveButton(wxUpdateUIEvent& event);
115
116 void OnUpdateUIResetButton(wxUpdateUIEvent& event);
117
f2fdc4d5 118 // reset book parameters
32b8ec41
VZ
119 void Reset();
120
f2fdc4d5
WS
121 // (re)create book
122 void RecreateBook();
123 virtual wxBookCtrlBase *CreateBook(long flags) = 0;
32b8ec41 124
954427ba 125#if USE_ICONS_IN_BOOK
32b8ec41
VZ
126 // create or destroy the image list
127 void CreateImageList();
954427ba 128#endif // USE_ICONS_IN_BOOK
32b8ec41
VZ
129
130 // create a new page
131 wxWindow *CreateNewPage();
132
133 // get the image index for the new page
134 int GetIconIndex() const;
135
136 // get the numeric value of text ctrl
137 int GetTextValue(wxTextCtrl *text) const;
138
657c8818
JS
139 // is the value in range?
140 bool IsValidValue(int val) const
f2fdc4d5 141 { return (val >= 0) && (val < (int) m_book->GetPageCount()); }
657c8818 142
32b8ec41
VZ
143 // the controls
144 // ------------
145
146 // the check/radio boxes for styles
147 wxCheckBox *m_chkImages;
148 wxRadioBox *m_radioOrient;
149
150 // the text controls containing input for various commands
151 wxTextCtrl *m_textInsert,
152 *m_textRemove,
153 *m_textSelect;
154
f2fdc4d5
WS
155 // the book itself and the sizer it is in
156 wxBookCtrlBase *m_book;
157 wxSizer *m_sizerBook;
32b8ec41 158
954427ba
WS
159#if USE_ICONS_IN_BOOK
160 // the image list for our book
32b8ec41 161 wxImageList *m_imageList;
954427ba 162#endif // USE_ICONS_IN_BOOK
32b8ec41
VZ
163
164private:
5e173f35 165 DECLARE_EVENT_TABLE()
32b8ec41
VZ
166};
167
168// ----------------------------------------------------------------------------
169// event tables
170// ----------------------------------------------------------------------------
171
f2fdc4d5
WS
172BEGIN_EVENT_TABLE(BookWidgetsPage, WidgetsPage)
173 EVT_BUTTON(BookPage_Reset, BookWidgetsPage::OnButtonReset)
174 EVT_BUTTON(BookPage_SelectPage, BookWidgetsPage::OnButtonSelectPage)
175 EVT_BUTTON(BookPage_AddPage, BookWidgetsPage::OnButtonAddPage)
176 EVT_BUTTON(BookPage_InsertPage, BookWidgetsPage::OnButtonInsertPage)
177 EVT_BUTTON(BookPage_RemovePage, BookWidgetsPage::OnButtonRemovePage)
178 EVT_BUTTON(BookPage_DeleteAll, BookWidgetsPage::OnButtonDeleteAll)
32b8ec41 179
f2fdc4d5
WS
180 EVT_UPDATE_UI(BookPage_NumPagesText, BookWidgetsPage::OnUpdateUINumPagesText)
181 EVT_UPDATE_UI(BookPage_CurSelectText, BookWidgetsPage::OnUpdateUICurSelectText)
32b8ec41 182
f2fdc4d5
WS
183 EVT_UPDATE_UI(BookPage_SelectPage, BookWidgetsPage::OnUpdateUISelectButton)
184 EVT_UPDATE_UI(BookPage_InsertPage, BookWidgetsPage::OnUpdateUIInsertButton)
185 EVT_UPDATE_UI(BookPage_RemovePage, BookWidgetsPage::OnUpdateUIRemoveButton)
32b8ec41 186
f2fdc4d5
WS
187 EVT_CHECKBOX(wxID_ANY, BookWidgetsPage::OnCheckOrRadioBox)
188 EVT_RADIOBOX(wxID_ANY, BookWidgetsPage::OnCheckOrRadioBox)
32b8ec41
VZ
189END_EVENT_TABLE()
190
191// ============================================================================
192// implementation
193// ============================================================================
194
747d7d7c 195BookWidgetsPage::BookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist, const char *const icon[])
261357eb 196 :WidgetsPage(book, imaglist, icon)
32b8ec41 197{
32b8ec41
VZ
198 // init everything
199 m_chkImages = NULL;
954427ba 200#if USE_ICONS_IN_BOOK
32b8ec41 201 m_imageList = NULL;
954427ba 202#endif // USE_ICONS_IN_BOOK
32b8ec41 203
f2fdc4d5 204 m_book = NULL;
453535a7 205 m_radioOrient = NULL;
f2fdc4d5 206 m_sizerBook = (wxSizer *)NULL;
453535a7 207}
32b8ec41 208
453535a7
WS
209void BookWidgetsPage::CreateContent()
210{
32b8ec41
VZ
211 wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
212
213 // left pane
9a83f860 214 wxStaticBox *box = new wxStaticBox(this, wxID_ANY, wxT("&Set style"));
32b8ec41
VZ
215
216 // must be in sync with Orient enum
045bd076 217 wxArrayString orientations;
9a83f860
VZ
218 orientations.Add(wxT("&top"));
219 orientations.Add(wxT("&bottom"));
220 orientations.Add(wxT("&left"));
221 orientations.Add(wxT("&right"));
045bd076
WS
222
223 wxASSERT_MSG( orientations.GetCount() == Orient_Max,
9a83f860 224 wxT("forgot to update something") );
32b8ec41 225
9a83f860
VZ
226 m_chkImages = new wxCheckBox(this, wxID_ANY, wxT("Show &images"));
227 m_radioOrient = new wxRadioBox(this, wxID_ANY, wxT("&Tab orientation"),
32b8ec41 228 wxDefaultPosition, wxDefaultSize,
045bd076 229 orientations, 1, wxRA_SPECIFY_COLS);
32b8ec41
VZ
230
231 wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
232
233 sizerLeft->Add(m_chkImages, 0, wxALL, 5);
234 sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
235 sizerLeft->Add(m_radioOrient, 0, wxALL, 5);
236
9a83f860 237 wxButton *btn = new wxButton(this, BookPage_Reset, wxT("&Reset"));
32b8ec41
VZ
238 sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
239
240 // middle pane
9a83f860 241 wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, wxT("&Contents"));
32b8ec41
VZ
242 wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
243
244 wxTextCtrl *text;
9a83f860 245 wxSizer *sizerRow = CreateSizerWithTextAndLabel(wxT("Number of pages: "),
f2fdc4d5 246 BookPage_NumPagesText,
32b8ec41 247 &text);
206d3a16 248 text->SetEditable(false);
32b8ec41
VZ
249 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
250
9a83f860 251 sizerRow = CreateSizerWithTextAndLabel(wxT("Current selection: "),
f2fdc4d5 252 BookPage_CurSelectText,
32b8ec41 253 &text);
206d3a16 254 text->SetEditable(false);
32b8ec41
VZ
255 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
256
f2fdc4d5 257 sizerRow = CreateSizerWithTextAndButton(BookPage_SelectPage,
9a83f860 258 wxT("&Select page"),
f2fdc4d5 259 BookPage_SelectText,
32b8ec41
VZ
260 &m_textSelect);
261 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
262
9a83f860 263 btn = new wxButton(this, BookPage_AddPage, wxT("&Add page"));
32b8ec41
VZ
264 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
265
f2fdc4d5 266 sizerRow = CreateSizerWithTextAndButton(BookPage_InsertPage,
9a83f860 267 wxT("&Insert page at"),
f2fdc4d5 268 BookPage_InsertText,
32b8ec41
VZ
269 &m_textInsert);
270 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
271
f2fdc4d5 272 sizerRow = CreateSizerWithTextAndButton(BookPage_RemovePage,
9a83f860 273 wxT("&Remove page"),
f2fdc4d5 274 BookPage_RemoveText,
32b8ec41
VZ
275 &m_textRemove);
276 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
277
9a83f860 278 btn = new wxButton(this, BookPage_DeleteAll, wxT("&Delete All"));
32b8ec41
VZ
279 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
280
281 // right pane
f2fdc4d5 282 m_sizerBook = new wxBoxSizer(wxHORIZONTAL);
32b8ec41 283
f2fdc4d5 284 // the 3 panes compose the window
32b8ec41
VZ
285 sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
286 sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10);
f2fdc4d5 287 sizerTop->Add(m_sizerBook, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
32b8ec41 288
315a592c
WS
289 RecreateBook();
290
32b8ec41
VZ
291 // final initializations
292 Reset();
954427ba 293#if USE_ICONS_IN_BOOK
32b8ec41 294 CreateImageList();
954427ba 295#endif // USE_ICONS_IN_BOOK
32b8ec41 296
32b8ec41 297 SetSizer(sizerTop);
32b8ec41
VZ
298}
299
f2fdc4d5 300BookWidgetsPage::~BookWidgetsPage()
32b8ec41 301{
954427ba 302#if USE_ICONS_IN_BOOK
32b8ec41 303 delete m_imageList;
954427ba 304#endif // USE_ICONS_IN_BOOK
32b8ec41
VZ
305}
306
307// ----------------------------------------------------------------------------
308// operations
309// ----------------------------------------------------------------------------
310
f2fdc4d5 311void BookWidgetsPage::Reset()
32b8ec41 312{
206d3a16 313 m_chkImages->SetValue(true);
32b8ec41
VZ
314 m_radioOrient->SetSelection(Orient_Top);
315}
316
954427ba 317#if USE_ICONS_IN_BOOK
f2fdc4d5 318void BookWidgetsPage::CreateImageList()
32b8ec41
VZ
319{
320 if ( m_chkImages->GetValue() )
321 {
322 if ( !m_imageList )
323 {
324 // create a dummy image list with a few icons
325 m_imageList = new wxImageList(32, 32);
389d906b
VS
326 wxSize size(32, 32);
327 m_imageList->Add(wxArtProvider::GetIcon(wxART_INFORMATION, wxART_OTHER, size));
328 m_imageList->Add(wxArtProvider::GetIcon(wxART_QUESTION, wxART_OTHER, size));
329 m_imageList->Add(wxArtProvider::GetIcon(wxART_WARNING, wxART_OTHER, size));
330 m_imageList->Add(wxArtProvider::GetIcon(wxART_ERROR, wxART_OTHER, size));
32b8ec41
VZ
331 }
332
f2fdc4d5
WS
333 if ( m_book )
334 m_book->SetImageList(m_imageList);
32b8ec41
VZ
335 }
336 else // no images
337 {
5276b0a5 338 wxDELETE(m_imageList);
32b8ec41
VZ
339 }
340
341 // because of the bug in wxMSW we can't use SetImageList(NULL) - although
f2fdc4d5
WS
342 // it would be logical if this removed the image list from book, under
343 // MSW it crashes instead - FIXME
32b8ec41 344}
954427ba 345#endif // USE_ICONS_IN_BOOK
32b8ec41 346
f2fdc4d5 347void BookWidgetsPage::RecreateBook()
32b8ec41 348{
453535a7
WS
349 // do not recreate anything in case page content was not prepared yet
350 if(!m_radioOrient)
351 return;
352
1301e228 353 int flags = ms_defaultFlags;
453535a7 354
32b8ec41
VZ
355 switch ( m_radioOrient->GetSelection() )
356 {
357 default:
9a83f860 358 wxFAIL_MSG( wxT("unknown orientation") );
32b8ec41
VZ
359 // fall through
360
361 case Orient_Top:
1301e228 362 flags |= wxBK_TOP;
32b8ec41
VZ
363 break;
364
365 case Orient_Bottom:
1301e228 366 flags |= wxBK_BOTTOM;
32b8ec41
VZ
367 break;
368
369 case Orient_Left:
1301e228 370 flags |= wxBK_LEFT;
32b8ec41
VZ
371 break;
372
373 case Orient_Right:
1301e228 374 flags |= wxBK_RIGHT;
32b8ec41
VZ
375 break;
376 }
377
f2fdc4d5 378 wxBookCtrlBase *oldBook = m_book;
32b8ec41 379
f2fdc4d5 380 m_book = CreateBook(flags);
32b8ec41 381
954427ba 382#if USE_ICONS_IN_BOOK
32b8ec41 383 CreateImageList();
954427ba 384#endif // USE_ICONS_IN_BOOK
32b8ec41 385
f2fdc4d5 386 if ( oldBook )
32b8ec41 387 {
f2fdc4d5 388 const int sel = oldBook->GetSelection();
32b8ec41 389
f2fdc4d5 390 const int count = oldBook->GetPageCount();
2b5f62a0
VZ
391
392 // recreate the pages
32b8ec41
VZ
393 for ( int n = 0; n < count; n++ )
394 {
f2fdc4d5
WS
395 m_book->AddPage(CreateNewPage(),
396 oldBook->GetPageText(n),
397 false,
398 m_chkImages->GetValue() ?
399 GetIconIndex() : -1);
32b8ec41
VZ
400 }
401
f2fdc4d5
WS
402 m_sizerBook->Detach( oldBook );
403 delete oldBook;
32b8ec41
VZ
404
405 // restore selection
406 if ( sel != -1 )
407 {
f2fdc4d5 408 m_book->SetSelection(sel);
32b8ec41
VZ
409 }
410 }
411
f2fdc4d5
WS
412 m_sizerBook->Add(m_book, 1, wxGROW | wxALL, 5);
413 m_sizerBook->SetMinSize(150, 0);
414 m_sizerBook->Layout();
32b8ec41
VZ
415}
416
417// ----------------------------------------------------------------------------
418// helpers
419// ----------------------------------------------------------------------------
420
f2fdc4d5 421int BookWidgetsPage::GetTextValue(wxTextCtrl *text) const
32b8ec41 422{
453535a7
WS
423 long pos = -1;
424
425 if ( !text || !text->GetValue().ToLong(&pos) )
32b8ec41
VZ
426 pos = -1;
427
428 return (int)pos;
429}
430
f2fdc4d5 431int BookWidgetsPage::GetIconIndex() const
32b8ec41 432{
954427ba 433#if USE_ICONS_IN_BOOK
32b8ec41
VZ
434 if ( m_imageList )
435 {
436 int nImages = m_imageList->GetImageCount();
437 if ( nImages > 0 )
438 {
f2fdc4d5 439 return m_book->GetPageCount() % nImages;
32b8ec41
VZ
440 }
441 }
954427ba 442#endif // USE_ICONS_IN_BOOK
32b8ec41
VZ
443
444 return -1;
445}
446
f2fdc4d5 447wxWindow *BookWidgetsPage::CreateNewPage()
32b8ec41 448{
9a83f860 449 return new wxTextCtrl(m_book, wxID_ANY, wxT("I'm a book page"));
32b8ec41
VZ
450}
451
452// ----------------------------------------------------------------------------
453// event handlers
454// ----------------------------------------------------------------------------
455
f2fdc4d5 456void BookWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
32b8ec41
VZ
457{
458 Reset();
459
f2fdc4d5 460 RecreateBook();
32b8ec41
VZ
461}
462
f2fdc4d5 463void BookWidgetsPage::OnButtonDeleteAll(wxCommandEvent& WXUNUSED(event))
32b8ec41 464{
f2fdc4d5 465 m_book->DeleteAllPages();
32b8ec41
VZ
466}
467
f2fdc4d5 468void BookWidgetsPage::OnButtonSelectPage(wxCommandEvent& WXUNUSED(event))
32b8ec41
VZ
469{
470 int pos = GetTextValue(m_textSelect);
9a83f860 471 wxCHECK_RET( IsValidValue(pos), wxT("button should be disabled") );
32b8ec41 472
f2fdc4d5 473 m_book->SetSelection(pos);
32b8ec41
VZ
474}
475
f2fdc4d5 476void BookWidgetsPage::OnButtonAddPage(wxCommandEvent& WXUNUSED(event))
32b8ec41 477{
9a83f860 478 m_book->AddPage(CreateNewPage(), wxT("Added page"), false,
f2fdc4d5 479 GetIconIndex());
32b8ec41
VZ
480}
481
f2fdc4d5 482void BookWidgetsPage::OnButtonInsertPage(wxCommandEvent& WXUNUSED(event))
32b8ec41
VZ
483{
484 int pos = GetTextValue(m_textInsert);
9a83f860 485 wxCHECK_RET( IsValidValue(pos), wxT("button should be disabled") );
32b8ec41 486
9a83f860 487 m_book->InsertPage(pos, CreateNewPage(), wxT("Inserted page"), false,
f2fdc4d5 488 GetIconIndex());
32b8ec41
VZ
489}
490
f2fdc4d5 491void BookWidgetsPage::OnButtonRemovePage(wxCommandEvent& WXUNUSED(event))
32b8ec41
VZ
492{
493 int pos = GetTextValue(m_textRemove);
9a83f860 494 wxCHECK_RET( IsValidValue(pos), wxT("button should be disabled") );
32b8ec41 495
f2fdc4d5 496 m_book->DeletePage(pos);
32b8ec41
VZ
497}
498
f2fdc4d5 499void BookWidgetsPage::OnUpdateUISelectButton(wxUpdateUIEvent& event)
32b8ec41 500{
657c8818 501 event.Enable( IsValidValue(GetTextValue(m_textSelect)) );
32b8ec41
VZ
502}
503
f2fdc4d5 504void BookWidgetsPage::OnUpdateUIInsertButton(wxUpdateUIEvent& event)
32b8ec41 505{
657c8818 506 event.Enable( IsValidValue(GetTextValue(m_textInsert)) );
32b8ec41
VZ
507}
508
f2fdc4d5 509void BookWidgetsPage::OnUpdateUIRemoveButton(wxUpdateUIEvent& event)
32b8ec41 510{
657c8818 511 event.Enable( IsValidValue(GetTextValue(m_textRemove)) );
32b8ec41
VZ
512}
513
f2fdc4d5 514void BookWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
32b8ec41 515{
453535a7
WS
516 if(m_chkImages && m_radioOrient)
517 event.Enable( !m_chkImages->GetValue() ||
518 m_radioOrient->GetSelection() != wxBK_TOP );
32b8ec41
VZ
519}
520
f2fdc4d5 521void BookWidgetsPage::OnUpdateUINumPagesText(wxUpdateUIEvent& event)
32b8ec41 522{
453535a7 523 if(m_book)
9a83f860 524 event.SetText( wxString::Format(wxT("%u"), unsigned(m_book->GetPageCount())) );
32b8ec41
VZ
525}
526
f2fdc4d5 527void BookWidgetsPage::OnUpdateUICurSelectText(wxUpdateUIEvent& event)
32b8ec41 528{
453535a7 529 if(m_book)
9a83f860 530 event.SetText( wxString::Format(wxT("%d"), m_book->GetSelection()) );
32b8ec41
VZ
531}
532
f2fdc4d5 533void BookWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
32b8ec41 534{
f2fdc4d5 535 RecreateBook();
32b8ec41
VZ
536}
537
f2fdc4d5
WS
538#if wxUSE_NOTEBOOK
539
540#include "icons/notebook.xpm"
541#include "wx/notebook.h"
542
543// ----------------------------------------------------------------------------
544// NotebookWidgetsPage
545// ----------------------------------------------------------------------------
546
547class NotebookWidgetsPage : public BookWidgetsPage
548{
549public:
550 NotebookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
261357eb 551 : BookWidgetsPage(book, imaglist, notebook_xpm)
f2fdc4d5 552 {
f2fdc4d5
WS
553 RecreateBook();
554 }
555 virtual ~NotebookWidgetsPage() {}
556
557protected:
558
f0fa4312
WS
559 // event handlers
560 void OnPageChanging(wxNotebookEvent& event);
561 void OnPageChanged(wxNotebookEvent& event);
562
f2fdc4d5
WS
563 // (re)create book
564 virtual wxBookCtrlBase *CreateBook(long flags)
565 {
566 return new wxNotebook(this, BookPage_Book,
567 wxDefaultPosition, wxDefaultSize,
568 flags);
f2fdc4d5
WS
569 }
570
571private:
572 DECLARE_EVENT_TABLE()
573 DECLARE_WIDGETS_PAGE(NotebookWidgetsPage)
574};
575
576// ----------------------------------------------------------------------------
577// event table
578// ----------------------------------------------------------------------------
579
580BEGIN_EVENT_TABLE(NotebookWidgetsPage, BookWidgetsPage)
f0fa4312
WS
581 EVT_NOTEBOOK_PAGE_CHANGING(wxID_ANY, NotebookWidgetsPage::OnPageChanging)
582 EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, NotebookWidgetsPage::OnPageChanged)
f2fdc4d5
WS
583END_EVENT_TABLE()
584
f0fa4312
WS
585#if defined(__WXUNIVERSAL__)
586 #define FAMILY_CTRLS UNIVERSAL_CTRLS
587#elif defined(__WXMOTIF__)
588 #define FAMILY_CTRLS GENERIC_CTRLS
589#else
590 #define FAMILY_CTRLS NATIVE_CTRLS
591#endif
592
9a83f860 593IMPLEMENT_WIDGETS_PAGE(NotebookWidgetsPage, wxT("Notebook"),
f0fa4312 594 FAMILY_CTRLS | BOOK_CTRLS
f2fdc4d5
WS
595 );
596
f0fa4312
WS
597void NotebookWidgetsPage::OnPageChanging(wxNotebookEvent& event)
598{
9a83f860 599 wxLogMessage(wxT("Notebook page changing from %d to %d (currently %d)."),
f0fa4312
WS
600 event.GetOldSelection(),
601 event.GetSelection(),
602 m_book->GetSelection());
603
604 event.Skip();
605}
606
607void NotebookWidgetsPage::OnPageChanged(wxNotebookEvent& event)
608{
9a83f860 609 wxLogMessage(wxT("Notebook page changed from %d to %d (currently %d)."),
f0fa4312
WS
610 event.GetOldSelection(),
611 event.GetSelection(),
612 m_book->GetSelection());
613
614 event.Skip();
615}
616
61c083e7 617#endif // wxUSE_NOTEBOOK
f2fdc4d5
WS
618
619#if wxUSE_LISTBOOK
620
621#include "icons/listbook.xpm"
622#include "wx/listbook.h"
623
624// ----------------------------------------------------------------------------
625// ListbookWidgetsPage
626// ----------------------------------------------------------------------------
627
628class ListbookWidgetsPage : public BookWidgetsPage
629{
630public:
631 ListbookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
261357eb 632 : BookWidgetsPage(book, imaglist, listbook_xpm)
f2fdc4d5 633 {
f2fdc4d5
WS
634 RecreateBook();
635 }
636 virtual ~ListbookWidgetsPage() {}
637
638protected:
639
f0fa4312
WS
640 // event handlers
641 void OnPageChanging(wxListbookEvent& event);
642 void OnPageChanged(wxListbookEvent& event);
643
f2fdc4d5
WS
644 // (re)create book
645 virtual wxBookCtrlBase *CreateBook(long flags)
646 {
647 return new wxListbook(this, BookPage_Book,
648 wxDefaultPosition, wxDefaultSize,
649 flags);
f2fdc4d5
WS
650 }
651
652private:
653 DECLARE_EVENT_TABLE()
654 DECLARE_WIDGETS_PAGE(ListbookWidgetsPage)
655};
656
657// ----------------------------------------------------------------------------
658// event table
659// ----------------------------------------------------------------------------
660
661BEGIN_EVENT_TABLE(ListbookWidgetsPage, BookWidgetsPage)
f0fa4312
WS
662 EVT_LISTBOOK_PAGE_CHANGING(wxID_ANY, ListbookWidgetsPage::OnPageChanging)
663 EVT_LISTBOOK_PAGE_CHANGED(wxID_ANY, ListbookWidgetsPage::OnPageChanged)
f2fdc4d5
WS
664END_EVENT_TABLE()
665
9a83f860 666IMPLEMENT_WIDGETS_PAGE(ListbookWidgetsPage, wxT("Listbook"),
f2fdc4d5
WS
667 GENERIC_CTRLS | BOOK_CTRLS
668 );
669
f0fa4312
WS
670void ListbookWidgetsPage::OnPageChanging(wxListbookEvent& event)
671{
9a83f860 672 wxLogMessage(wxT("Listbook page changing from %d to %d (currently %d)."),
f0fa4312
WS
673 event.GetOldSelection(),
674 event.GetSelection(),
675 m_book->GetSelection());
676
677 event.Skip();
678}
679
680void ListbookWidgetsPage::OnPageChanged(wxListbookEvent& event)
681{
9a83f860 682 wxLogMessage(wxT("Listbook page changed from %d to %d (currently %d)."),
f0fa4312
WS
683 event.GetOldSelection(),
684 event.GetSelection(),
685 m_book->GetSelection());
686
687 event.Skip();
688}
689
f2fdc4d5
WS
690#endif // wxUSE_LISTBOOK
691
692#if wxUSE_CHOICEBOOK
693
694#include "icons/choicebk.xpm"
695#include "wx/choicebk.h"
696
697// ----------------------------------------------------------------------------
698// ChoicebookWidgetsPage
699// ----------------------------------------------------------------------------
700
701class ChoicebookWidgetsPage : public BookWidgetsPage
702{
703public:
704 ChoicebookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
261357eb 705 : BookWidgetsPage(book, imaglist, choicebk_xpm)
f2fdc4d5 706 {
f2fdc4d5
WS
707 RecreateBook();
708 }
709 virtual ~ChoicebookWidgetsPage() {}
710
711protected:
712
f0fa4312
WS
713 // event handlers
714 void OnPageChanging(wxChoicebookEvent& event);
715 void OnPageChanged(wxChoicebookEvent& event);
716
f2fdc4d5
WS
717 // (re)create book
718 virtual wxBookCtrlBase *CreateBook(long flags)
719 {
720 return new wxChoicebook(this, BookPage_Book,
721 wxDefaultPosition, wxDefaultSize,
722 flags);
f2fdc4d5
WS
723 }
724
725private:
726 DECLARE_EVENT_TABLE()
727 DECLARE_WIDGETS_PAGE(ChoicebookWidgetsPage)
728};
729
730// ----------------------------------------------------------------------------
731// event table
732// ----------------------------------------------------------------------------
733
734BEGIN_EVENT_TABLE(ChoicebookWidgetsPage, BookWidgetsPage)
f0fa4312
WS
735 EVT_CHOICEBOOK_PAGE_CHANGING(wxID_ANY, ChoicebookWidgetsPage::OnPageChanging)
736 EVT_CHOICEBOOK_PAGE_CHANGED(wxID_ANY, ChoicebookWidgetsPage::OnPageChanged)
f2fdc4d5
WS
737END_EVENT_TABLE()
738
9a83f860 739IMPLEMENT_WIDGETS_PAGE(ChoicebookWidgetsPage, wxT("Choicebook"),
f2fdc4d5
WS
740 GENERIC_CTRLS | BOOK_CTRLS
741 );
742
f0fa4312
WS
743void ChoicebookWidgetsPage::OnPageChanging(wxChoicebookEvent& event)
744{
9a83f860 745 wxLogMessage(wxT("Choicebook page changing from %d to %d (currently %d)."),
f0fa4312
WS
746 event.GetOldSelection(),
747 event.GetSelection(),
748 m_book->GetSelection());
749
750 event.Skip();
751}
752
753void ChoicebookWidgetsPage::OnPageChanged(wxChoicebookEvent& event)
754{
9a83f860 755 wxLogMessage(wxT("Choicebook page changed from %d to %d (currently %d)."),
f0fa4312
WS
756 event.GetOldSelection(),
757 event.GetSelection(),
758 m_book->GetSelection());
759
760 event.Skip();
761}
762
f2fdc4d5
WS
763#endif // wxUSE_CHOICEBOOK
764
765#endif // wxUSE_BOOKCTRL