trick the sizer code into thinking that the wizard pages are shown so that it takes them into account for the layout, even if they're not really shown

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37534 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-02-12 13:48:49 +00:00
parent 88517d9008
commit 0a9ed8f14e

View File

@@ -52,6 +52,8 @@ class wxWizardSizer : public wxSizer
public:
wxWizardSizer(wxWizard *owner);
virtual wxSizerItem *Insert(size_t index, wxSizerItem *item);
virtual void RecalcSizes();
virtual wxSize CalcMin();
@@ -62,6 +64,10 @@ public:
// 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);
@@ -177,6 +183,31 @@ wxWizardSizer::wxWizardSizer(wxWizard *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
@@ -511,6 +542,10 @@ void wxWizard::FinishLayout()
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)