public:
wxWizardSizer(wxWizard *owner);
- void RecalcSizes();
- wxSize CalcMin();
+ virtual wxSizerItem *Insert(size_t index, wxSizerItem *item);
+ virtual void RecalcSizes();
+ virtual wxSize CalcMin();
+
+ // get the max size of all wizard pages
wxSize GetMaxChildSize();
- int Border() const;
+
+ // return the border which can be either set using wxWizard::SetBorder() or
+ // 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);
// ----------------------------------------------------------------------------
wxWizardSizer::wxWizardSizer(wxWizard *owner)
- : m_owner(owner)
+ : m_owner(owner)
{
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
// it should be called whenever it changes (wxWizard::ShowPage)
if ( m_owner->m_page )
{
- m_owner->m_page->SetSize(m_position.x,m_position.y, m_size.x,m_size.y);
+ m_owner->m_page->SetSize(m_position.x, m_position.y, m_size.x, m_size.y);
}
}
return maxOfMin;
}
-int wxWizardSizer::Border() const
+int wxWizardSizer::GetBorder() const
{
if ( m_owner->m_calledSetBorder )
return m_owner->m_border;
m_sizerPage,
1, // Horizontal stretching
wxEXPAND | wxALL, // Vertically stretchable
- m_sizerPage->Border()
+ m_sizerPage->GetBorder()
);
if (!isPda)
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;