From: Vadim Zeitlin Date: Sun, 12 Feb 2006 13:48:49 +0000 (+0000) Subject: trick the sizer code into thinking that the wizard pages are shown so that it takes... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/0a9ed8f14e5c7aebfb370bdb1fe1ee23bfd740b6 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 --- diff --git a/src/generic/wizard.cpp b/src/generic/wizard.cpp index 567680beeb..7054c96707 100644 --- a/src/generic/wizard.cpp +++ b/src/generic/wizard.cpp @@ -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)