#include "wx/sizer.h"
#include "wx/bookctrl.h"
#include "wx/artprov.h"
+#include "wx/imaglist.h"
#include "widgets.h"
class BookWidgetsPage : public WidgetsPage
{
public:
- BookWidgetsPage(WidgetsBookCtrl *book);
+ BookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist, const char *const icon[]);
virtual ~BookWidgetsPage();
virtual wxControl *GetWidget() const { return m_book; }
virtual void RecreateWidget() { RecreateBook(); }
+ // lazy creation of the content
+ virtual void CreateContent();
+
protected:
// event handlers
-#ifdef ABX
- void OnPageChanging(wxNotebookEvent& event);
- void OnPageChanged(wxNotebookEvent& event);
-#endif
-
void OnButtonReset(wxCommandEvent& event);
void OnButtonDeleteAll(wxCommandEvent& event);
void OnButtonSelectPage(wxCommandEvent& event);
void RecreateBook();
virtual wxBookCtrlBase *CreateBook(long flags) = 0;
+#if USE_ICONS_IN_BOOK
// create or destroy the image list
void CreateImageList();
+#endif // USE_ICONS_IN_BOOK
// create a new page
wxWindow *CreateNewPage();
wxBookCtrlBase *m_book;
wxSizer *m_sizerBook;
- // thei mage list for our book
+#if USE_ICONS_IN_BOOK
+ // the image list for our book
wxImageList *m_imageList;
+#endif // USE_ICONS_IN_BOOK
private:
DECLARE_EVENT_TABLE()
EVT_UPDATE_UI(BookPage_InsertPage, BookWidgetsPage::OnUpdateUIInsertButton)
EVT_UPDATE_UI(BookPage_RemovePage, BookWidgetsPage::OnUpdateUIRemoveButton)
-#ifdef ABX
- EVT_NOTEBOOK_PAGE_CHANGING(wxID_ANY, BookWidgetsPage::OnPageChanging)
- EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, NotebookWidgetsPage::OnPageChanged)
-#endif
-
EVT_CHECKBOX(wxID_ANY, BookWidgetsPage::OnCheckOrRadioBox)
EVT_RADIOBOX(wxID_ANY, BookWidgetsPage::OnCheckOrRadioBox)
END_EVENT_TABLE()
// implementation
// ============================================================================
-BookWidgetsPage::BookWidgetsPage(WidgetsBookCtrl *book)
- :WidgetsPage(book)
+BookWidgetsPage::BookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist, const char *const icon[])
+ :WidgetsPage(book, imaglist, icon)
{
// init everything
m_chkImages = NULL;
+#if USE_ICONS_IN_BOOK
m_imageList = NULL;
+#endif // USE_ICONS_IN_BOOK
m_book = NULL;
+ m_radioOrient = NULL;
m_sizerBook = (wxSizer *)NULL;
+}
+void BookWidgetsPage::CreateContent()
+{
wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
// left pane
sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10);
sizerTop->Add(m_sizerBook, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
+ RecreateBook();
+
// final initializations
Reset();
+#if USE_ICONS_IN_BOOK
CreateImageList();
+#endif // USE_ICONS_IN_BOOK
SetSizer(sizerTop);
-
- sizerTop->Fit(this);
}
BookWidgetsPage::~BookWidgetsPage()
{
+#if USE_ICONS_IN_BOOK
delete m_imageList;
+#endif // USE_ICONS_IN_BOOK
}
// ----------------------------------------------------------------------------
m_radioOrient->SetSelection(Orient_Top);
}
+#if USE_ICONS_IN_BOOK
void BookWidgetsPage::CreateImageList()
{
if ( m_chkImages->GetValue() )
// it would be logical if this removed the image list from book, under
// MSW it crashes instead - FIXME
}
+#endif // USE_ICONS_IN_BOOK
void BookWidgetsPage::RecreateBook()
{
+ // do not recreate anything in case page content was not prepared yet
+ if(!m_radioOrient)
+ return;
+
int flags = ms_defaultFlags;
+
switch ( m_radioOrient->GetSelection() )
{
default:
m_book = CreateBook(flags);
+#if USE_ICONS_IN_BOOK
CreateImageList();
+#endif // USE_ICONS_IN_BOOK
if ( oldBook )
{
int BookWidgetsPage::GetTextValue(wxTextCtrl *text) const
{
- long pos;
- if ( !text->GetValue().ToLong(&pos) )
+ long pos = -1;
+
+ if ( !text || !text->GetValue().ToLong(&pos) )
pos = -1;
return (int)pos;
int BookWidgetsPage::GetIconIndex() const
{
+#if USE_ICONS_IN_BOOK
if ( m_imageList )
{
int nImages = m_imageList->GetImageCount();
return m_book->GetPageCount() % nImages;
}
}
+#endif // USE_ICONS_IN_BOOK
return -1;
}
void BookWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
{
- event.Enable( !m_chkImages->GetValue() ||
- m_radioOrient->GetSelection() != wxBK_TOP );
+ if(m_chkImages && m_radioOrient)
+ event.Enable( !m_chkImages->GetValue() ||
+ m_radioOrient->GetSelection() != wxBK_TOP );
}
void BookWidgetsPage::OnUpdateUINumPagesText(wxUpdateUIEvent& event)
{
- event.SetText( wxString::Format(_T("%d"), m_book->GetPageCount()) );
+ if(m_book)
+ event.SetText( wxString::Format(_T("%u"), unsigned(m_book->GetPageCount())) );
}
void BookWidgetsPage::OnUpdateUICurSelectText(wxUpdateUIEvent& event)
{
- event.SetText( wxString::Format(_T("%d"), m_book->GetSelection()) );
+ if(m_book)
+ event.SetText( wxString::Format(_T("%d"), m_book->GetSelection()) );
}
void BookWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
RecreateBook();
}
-#ifdef ABX
-void BookWidgetsPage::OnPageChanging(wxBookEvent& event)
-{
- wxLogMessage(_T("Notebook page changing from %d to %d (currently %d)."),
- event.GetOldSelection(),
- event.GetSelection(),
- m_notebook->GetSelection());
-
- event.Skip();
-}
-
-void NotebookWidgetsPage::OnPageChanged(wxNotebookEvent& event)
-{
- wxLogMessage(_T("Notebook page changed from %d to %d (currently %d)."),
- event.GetOldSelection(),
- event.GetSelection(),
- m_notebook->GetSelection());
-
- event.Skip();
-}
-
-#endif
-
#if wxUSE_NOTEBOOK
#include "icons/notebook.xpm"
{
public:
NotebookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
- : BookWidgetsPage(book)
+ : BookWidgetsPage(book, imaglist, notebook_xpm)
{
- imaglist->Add(wxBitmap(notebook_xpm));
RecreateBook();
}
virtual ~NotebookWidgetsPage() {}
protected:
+ // event handlers
+ void OnPageChanging(wxNotebookEvent& event);
+ void OnPageChanged(wxNotebookEvent& event);
+
// (re)create book
virtual wxBookCtrlBase *CreateBook(long flags)
{
return new wxNotebook(this, BookPage_Book,
wxDefaultPosition, wxDefaultSize,
flags);
-
}
private:
// ----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(NotebookWidgetsPage, BookWidgetsPage)
+ EVT_NOTEBOOK_PAGE_CHANGING(wxID_ANY, NotebookWidgetsPage::OnPageChanging)
+ EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, NotebookWidgetsPage::OnPageChanged)
END_EVENT_TABLE()
+#if defined(__WXUNIVERSAL__)
+ #define FAMILY_CTRLS UNIVERSAL_CTRLS
+#elif defined(__WXMOTIF__)
+ #define FAMILY_CTRLS GENERIC_CTRLS
+#else
+ #define FAMILY_CTRLS NATIVE_CTRLS
+#endif
+
IMPLEMENT_WIDGETS_PAGE(NotebookWidgetsPage, _T("Notebook"),
- (int)wxPlatform(GENERIC_CTRLS).If(wxMSW,NATIVE_CTRLS)
- .ElseIf(wxGTK,NATIVE_CTRLS)
- | BOOK_CTRLS
+ FAMILY_CTRLS | BOOK_CTRLS
);
+void NotebookWidgetsPage::OnPageChanging(wxNotebookEvent& event)
+{
+ wxLogMessage(_T("Notebook page changing from %d to %d (currently %d)."),
+ event.GetOldSelection(),
+ event.GetSelection(),
+ m_book->GetSelection());
+
+ event.Skip();
+}
+
+void NotebookWidgetsPage::OnPageChanged(wxNotebookEvent& event)
+{
+ wxLogMessage(_T("Notebook page changed from %d to %d (currently %d)."),
+ event.GetOldSelection(),
+ event.GetSelection(),
+ m_book->GetSelection());
+
+ event.Skip();
+}
+
#endif // wxUSE_NOTEBOOK
#if wxUSE_LISTBOOK
{
public:
ListbookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
- : BookWidgetsPage(book)
+ : BookWidgetsPage(book, imaglist, listbook_xpm)
{
- imaglist->Add(wxBitmap(listbook_xpm));
RecreateBook();
}
virtual ~ListbookWidgetsPage() {}
protected:
+ // event handlers
+ void OnPageChanging(wxListbookEvent& event);
+ void OnPageChanged(wxListbookEvent& event);
+
// (re)create book
virtual wxBookCtrlBase *CreateBook(long flags)
{
return new wxListbook(this, BookPage_Book,
wxDefaultPosition, wxDefaultSize,
flags);
-
}
private:
// ----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(ListbookWidgetsPage, BookWidgetsPage)
+ EVT_LISTBOOK_PAGE_CHANGING(wxID_ANY, ListbookWidgetsPage::OnPageChanging)
+ EVT_LISTBOOK_PAGE_CHANGED(wxID_ANY, ListbookWidgetsPage::OnPageChanged)
END_EVENT_TABLE()
IMPLEMENT_WIDGETS_PAGE(ListbookWidgetsPage, _T("Listbook"),
GENERIC_CTRLS | BOOK_CTRLS
);
+void ListbookWidgetsPage::OnPageChanging(wxListbookEvent& event)
+{
+ wxLogMessage(_T("Listbook page changing from %d to %d (currently %d)."),
+ event.GetOldSelection(),
+ event.GetSelection(),
+ m_book->GetSelection());
+
+ event.Skip();
+}
+
+void ListbookWidgetsPage::OnPageChanged(wxListbookEvent& event)
+{
+ wxLogMessage(_T("Listbook page changed from %d to %d (currently %d)."),
+ event.GetOldSelection(),
+ event.GetSelection(),
+ m_book->GetSelection());
+
+ event.Skip();
+}
+
#endif // wxUSE_LISTBOOK
#if wxUSE_CHOICEBOOK
{
public:
ChoicebookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
- : BookWidgetsPage(book)
+ : BookWidgetsPage(book, imaglist, choicebk_xpm)
{
- imaglist->Add(wxBitmap(choicebk_xpm));
RecreateBook();
}
virtual ~ChoicebookWidgetsPage() {}
protected:
+ // event handlers
+ void OnPageChanging(wxChoicebookEvent& event);
+ void OnPageChanged(wxChoicebookEvent& event);
+
// (re)create book
virtual wxBookCtrlBase *CreateBook(long flags)
{
return new wxChoicebook(this, BookPage_Book,
wxDefaultPosition, wxDefaultSize,
flags);
-
}
private:
// ----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(ChoicebookWidgetsPage, BookWidgetsPage)
+ EVT_CHOICEBOOK_PAGE_CHANGING(wxID_ANY, ChoicebookWidgetsPage::OnPageChanging)
+ EVT_CHOICEBOOK_PAGE_CHANGED(wxID_ANY, ChoicebookWidgetsPage::OnPageChanged)
END_EVENT_TABLE()
IMPLEMENT_WIDGETS_PAGE(ChoicebookWidgetsPage, _T("Choicebook"),
GENERIC_CTRLS | BOOK_CTRLS
);
+void ChoicebookWidgetsPage::OnPageChanging(wxChoicebookEvent& event)
+{
+ wxLogMessage(_T("Choicebook page changing from %d to %d (currently %d)."),
+ event.GetOldSelection(),
+ event.GetSelection(),
+ m_book->GetSelection());
+
+ event.Skip();
+}
+
+void ChoicebookWidgetsPage::OnPageChanged(wxChoicebookEvent& event)
+{
+ wxLogMessage(_T("Choicebook page changed from %d to %d (currently %d)."),
+ event.GetOldSelection(),
+ event.GetSelection(),
+ m_book->GetSelection());
+
+ event.Skip();
+}
+
#endif // wxUSE_CHOICEBOOK
#endif // wxUSE_BOOKCTRL