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