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:
|
public:
|
||||||
wxWizardSizer(wxWizard *owner);
|
wxWizardSizer(wxWizard *owner);
|
||||||
|
|
||||||
|
virtual wxSizerItem *Insert(size_t index, wxSizerItem *item);
|
||||||
|
|
||||||
virtual void RecalcSizes();
|
virtual void RecalcSizes();
|
||||||
virtual wxSize CalcMin();
|
virtual wxSize CalcMin();
|
||||||
|
|
||||||
@@ -62,6 +64,10 @@ public:
|
|||||||
// have default value
|
// have default value
|
||||||
int GetBorder() const;
|
int GetBorder() const;
|
||||||
|
|
||||||
|
// hide the pages which we temporarily "show" when they're added to this
|
||||||
|
// sizer (see Insert())
|
||||||
|
void HidePages();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxSize SiblingSize(wxSizerItem *child);
|
wxSize SiblingSize(wxSizerItem *child);
|
||||||
|
|
||||||
@@ -177,6 +183,31 @@ wxWizardSizer::wxWizardSizer(wxWizard *owner)
|
|||||||
m_childSizeValid = false;
|
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()
|
void wxWizardSizer::RecalcSizes()
|
||||||
{
|
{
|
||||||
// Effect of this function depends on m_owner->m_page and
|
// Effect of this function depends on m_owner->m_page and
|
||||||
@@ -511,6 +542,10 @@ void wxWizard::FinishLayout()
|
|||||||
if ( m_posWizard == wxDefaultPosition )
|
if ( m_posWizard == wxDefaultPosition )
|
||||||
CentreOnScreen();
|
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)
|
void wxWizard::FitToPage(const wxWizardPage *page)
|
||||||
|
Reference in New Issue
Block a user