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:
@@ -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)
|
||||
|
Reference in New Issue
Block a user