public:
wxWizardSizer(wxWizard *owner);
+ virtual wxSizerItem *Insert(size_t index, wxSizerItem *item);
+
virtual void RecalcSizes();
virtual wxSize CalcMin();
// have default value
int GetBorder() const;
+ // hide the pages which we temporarily "show" when they're added to this
+ // sizer (see Insert())
+ void HidePages();
+
private:
wxSize SiblingSize(wxSizerItem *child);
m_childSizeValid = false;
}
+wxSizerItem *wxWizardSizer::Insert(size_t index, wxSizerItem *item)
+{
+ if ( item->IsWindow() )
+ {
+ // we must pretend that the window is shown as otherwise it wouldn't be
+ // taken into account for the layout -- but avoid really showing it, so
+ // just set the internal flag instead of calling wxWindow::Show()
+ item->GetWindow()->wxWindowBase::Show();
+ }
+
+ return wxSizer::Insert(index, item);
+}
+
+void wxWizardSizer::HidePages()
+{
+ for ( wxSizerItemList::compatibility_iterator node = GetChildren().GetFirst();
+ node;
+ node = node->GetNext() )
+ {
+ wxSizerItem * const item = node->GetData();
+ if ( item->IsWindow() )
+ item->GetWindow()->wxWindowBase::Show(false);
+ }
+}
+
void wxWizardSizer::RecalcSizes()
{
// Effect of this function depends on m_owner->m_page and
if ( m_posWizard == wxDefaultPosition )
CentreOnScreen();
}
+
+ // now that our layout is computed correctly, hide the pages artificially
+ // shown in wxWizardSizer::Insert() back again
+ m_sizerPage->HidePages();
}
void wxWizard::FitToPage(const wxWizardPage *page)
(event.GetEventObject() == m_btnPrev),
wxT("unknown button") );
+ wxCHECK_RET( m_page, _T("should have a valid current page") );
+
// ask the current page first: notice that we do it before calling
// GetNext/Prev() because the data transfered from the controls of the page
// may change the value returned by these methods
- if ( m_page && (!m_page->Validate() || !m_page->TransferDataFromWindow()) )
+ if ( !m_page->Validate() || !m_page->TransferDataFromWindow() )
{
// the page data is incorrect, don't do anything
return;