#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
void OnButtonReset(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()
// 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))
{
public:
NotebookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
- : BookWidgetsPage(book)
+ : BookWidgetsPage(book, imaglist, notebook_xpm)
{
- imaglist->Add(wxBitmap(notebook_xpm));
RecreateBook();
}
virtual ~NotebookWidgetsPage() {}
return new wxNotebook(this, BookPage_Book,
wxDefaultPosition, wxDefaultSize,
flags);
-
}
private:
{
public:
ListbookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
- : BookWidgetsPage(book)
+ : BookWidgetsPage(book, imaglist, listbook_xpm)
{
- imaglist->Add(wxBitmap(listbook_xpm));
RecreateBook();
}
virtual ~ListbookWidgetsPage() {}
return new wxListbook(this, BookPage_Book,
wxDefaultPosition, wxDefaultSize,
flags);
-
}
private:
{
public:
ChoicebookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
- : BookWidgetsPage(book)
+ : BookWidgetsPage(book, imaglist, choicebk_xpm)
{
- imaglist->Add(wxBitmap(choicebk_xpm));
RecreateBook();
}
virtual ~ChoicebookWidgetsPage() {}
return new wxChoicebook(this, BookPage_Book,
wxDefaultPosition, wxDefaultSize,
flags);
-
}
private: