\docparam{pos}{The position of the dialog, it will be centered on the screen
by default.}
-\membersection{wxWizard::RunWizard}\label{wxwizardrunwizard}
+\membersection{wxWizard::Fit}\label{wxwizardfit}
-\func{bool}{RunWizard}{\param{wxWizardPage* }{firstPage}}
+\func{void}{Fit}{\param{const wxWizardPage* }{firstPage}}
-Executes the wizard starting from the given page, returns {\tt TRUE} if it was
-successfully finished or {\tt FALSE} if user cancelled it. The {\it firstPage}
-can not be {\tt NULL}.
+Sets the page size to be big enough for all the pages accessible via the
+given {\it firstPage}, i.e. this page, its next page and so on.
+
+This method may be called more than once and it will only change the page size
+if the size required by the new page is bigger than the previously set one.
+This is useful if the decision about which pages to show is taken during the
+run-time as in this case, the wizard won't be able to get to all pages starting
+from a single one and you should call {\it Fit} separately for the others.
\membersection{wxWizard::GetCurrentPage}\label{wxwizardgetcurrentpage}
Returns the size available for the pages.
+\membersection{wxWizard::RunWizard}\label{wxwizardrunwizard}
+
+\func{bool}{RunWizard}{\param{wxWizardPage* }{firstPage}}
+
+Executes the wizard starting from the given page, returns {\tt TRUE} if it was
+successfully finished or {\tt FALSE} if user cancelled it. The {\it firstPage}
+can not be {\tt NULL}.
+
\membersection{wxWizard::SetPageSize}\label{wxwizardsetpagesize}
\func{void}{SetPageSize}{\param{const wxSize\& }{sizePage}}
virtual wxWizardPage *GetCurrentPage() const;
virtual void SetPageSize(const wxSize& size);
virtual wxSize GetPageSize() const;
+ virtual void Fit(const wxWizardPage *firstPage);
// implementation only from now on
// -------------------------------
// get the size available for the page: the wizards are not resizeable, so
// this size doesn't change
virtual wxSize GetPageSize() const = 0;
+
+ // set the best size for the wizard, i.e. make it big enough to contain all
+ // of the pages starting from the given one
+ //
+ // this function may be called several times and possible with different
+ // pages in which case it will only increase the page size if needed (this
+ // may be useful if not all pages are accessible from the first one by
+ // default)
+ virtual void Fit(const wxWizardPage *firstPage) = 0;
};
// include the real class declaration
m_sizePage = size;
}
+void wxWizard::Fit(const wxWizardPage *page)
+{
+ // otherwise it will have no effect now as it's too late...
+ wxASSERT_MSG( !WasCreated(), _T("should be called before RunWizard()!") );
+
+ wxSize sizeMax;
+ while ( page )
+ {
+ wxSize size = page->GetBestSize();
+
+ if ( size.x > sizeMax.x )
+ sizeMax.x = size.x;
+
+ if ( size.y > sizeMax.y )
+ sizeMax.y = size.y;
+
+ page = page->GetNext();
+ }
+
+ if ( sizeMax.x > m_sizePage.x )
+ m_sizePage.x = sizeMax.x;
+
+ if ( sizeMax.y > m_sizePage.y )
+ m_sizePage.y = sizeMax.y;
+}
+
bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward)
{
wxASSERT_MSG( page != m_page, wxT("this is useless") );