X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3aa8e4ea6db0478d3bc862f59f100408bdc8732f..4209475ced5240eb3ce516767e7c9a0a74d12bc7:/src/generic/wizard.cpp?ds=sidebyside diff --git a/src/generic/wizard.cpp b/src/generic/wizard.cpp index b7446b440d..1ad3a17c6f 100644 --- a/src/generic/wizard.cpp +++ b/src/generic/wizard.cpp @@ -41,7 +41,9 @@ #include "wx/statline.h" +#include "wx/scrolwin.h" #include "wx/wizard.h" +#include "wx/dcmemory.h" // ---------------------------------------------------------------------------- // wxWizardSizer @@ -79,11 +81,11 @@ private: // event tables and such // ---------------------------------------------------------------------------- -DEFINE_EVENT_TYPE(wxEVT_WIZARD_PAGE_CHANGED) -DEFINE_EVENT_TYPE(wxEVT_WIZARD_PAGE_CHANGING) -DEFINE_EVENT_TYPE(wxEVT_WIZARD_CANCEL) -DEFINE_EVENT_TYPE(wxEVT_WIZARD_FINISHED) -DEFINE_EVENT_TYPE(wxEVT_WIZARD_HELP) +wxDEFINE_EVENT( wxEVT_WIZARD_PAGE_CHANGED, wxWizardEvent ); +wxDEFINE_EVENT( wxEVT_WIZARD_PAGE_CHANGING, wxWizardEvent ); +wxDEFINE_EVENT( wxEVT_WIZARD_CANCEL, wxWizardEvent ); +wxDEFINE_EVENT( wxEVT_WIZARD_FINISHED, wxWizardEvent ); +wxDEFINE_EVENT( wxEVT_WIZARD_HELP, wxWizardEvent ); BEGIN_EVENT_TABLE(wxWizard, wxDialog) EVT_BUTTON(wxID_CANCEL, wxWizard::OnCancel) @@ -212,11 +214,6 @@ wxSize wxWizardSizer::CalcMin() wxSize wxWizardSizer::GetMaxChildSize() { -#if !defined(__WXDEBUG__) - if ( m_childSize.IsFullySpecified() ) - return m_childSize; -#endif - wxSize maxOfMin; for ( wxSizerItemList::compatibility_iterator childNode = m_children.GetFirst(); @@ -228,21 +225,6 @@ wxSize wxWizardSizer::GetMaxChildSize() maxOfMin.IncTo(SiblingSize(child)); } - // No longer applicable since we may change sizes when size adaptation is done -#if 0 -#ifdef __WXDEBUG__ - if ( m_childSize.IsFullySpecified() && m_childSize != maxOfMin ) - { - wxFAIL_MSG( _T("Size changed in wxWizard::GetPageAreaSizer()") - _T("after RunWizard().\n") - _T("Did you forget to call GetSizer()->Fit(this) ") - _T("for some page?")) ; - - return m_childSize; - } -#endif // __WXDEBUG__ -#endif - if ( m_owner->m_started ) { m_childSize = maxOfMin; @@ -287,7 +269,7 @@ wxSize wxWizardSizer::SiblingSize(wxSizerItem *child) void wxWizard::Init() { m_posWizard = wxDefaultPosition; - m_page = (wxWizardPage *)NULL; + m_page = NULL; m_btnPrev = m_btnNext = NULL; m_statbmp = NULL; m_sizerBmpAndPage = NULL; @@ -556,10 +538,6 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward) } - // we'll use this to decide whether we have to change the label of this - // button or not (initially the label is "Next") - bool btnLabelWasNext = true; - // remember the old bitmap (if any) to compare with the new one later wxBitmap bmpPrev; @@ -578,8 +556,6 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward) m_page->Hide(); - btnLabelWasNext = HasNextPage(m_page); - bmpPrev = m_page->GetBitmap(); if ( !m_usingSizer ) @@ -649,15 +625,10 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward) // and update the buttons state m_btnPrev->Enable(HasPrevPage(m_page)); - bool hasNext = HasNextPage(m_page); - if ( btnLabelWasNext != hasNext ) - { - if ( hasNext ) - m_btnNext->SetLabel(_("&Next >")); - else - m_btnNext->SetLabel(_("&Finish")); - } - // nothing to do: the label was already correct + const bool hasNext = HasNextPage(m_page); + const wxString label = hasNext ? _("&Next >") : _("&Finish"); + if ( label != m_btnNext->GetLabel() ) + m_btnNext->SetLabel(label); m_btnNext->SetDefault(); @@ -680,13 +651,13 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward) DoWizardLayout(); } - if (GetBitmapPlacement()) + if (GetBitmapPlacement() && m_statbmp) { ResizeBitmap(bmp); - + if ( !bmp.IsSameAs(bmpPrev) ) m_statbmp->SetBitmap(bmp); - + if (m_usingSizer) m_sizerPage->RecalcSizes(); } @@ -922,16 +893,16 @@ bool wxWizard::DoLayoutAdaptation() // Create a scrolled window and reparent wxScrolledWindow* scrolledWindow = new wxScrolledWindow(page, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxVSCROLL|wxHSCROLL|wxBORDER_NONE); wxSizer* oldSizer = page->GetSizer(); - + wxSizer* newSizer = new wxBoxSizer(wxVERTICAL); newSizer->Add(scrolledWindow,1, wxEXPAND, 0); - + page->SetSizer(newSizer, false /* don't delete the old sizer */); - + scrolledWindow->SetSizer(oldSizer); - + wxStandardDialogLayoutAdapter::DoReparentControls(page, scrolledWindow); - + pages.Append(page); windows.Append(scrolledWindow); } @@ -943,6 +914,9 @@ bool wxWizard::DoLayoutAdaptation() wxStandardDialogLayoutAdapter::DoFitWithScrolling(this, windows); + // Size event doesn't get sent soon enough on wxGTK + DoLayout(); + SetLayoutAdaptationDone(true); return true; @@ -956,10 +930,12 @@ bool wxWizard::ResizeBitmap(wxBitmap& bmp) if (bmp.Ok()) { wxSize pageSize = m_sizerPage->GetSize(); + if (pageSize == wxSize(0,0)) + pageSize = GetPageSize(); int bitmapWidth = wxMax(bmp.GetWidth(), GetMinimumBitmapWidth()); int bitmapHeight = pageSize.y; - if (bmp.GetHeight() != bitmapHeight) + if (!m_statbmp->GetBitmap().Ok() || m_statbmp->GetBitmap().GetHeight() != bitmapHeight) { wxBitmap bitmap(bitmapWidth, bitmapHeight); { @@ -979,16 +955,16 @@ bool wxWizard::ResizeBitmap(wxBitmap& bmp) if (GetBitmapPlacement() & wxWIZARD_HALIGN_LEFT) x = 0; else if (GetBitmapPlacement() & wxWIZARD_HALIGN_RIGHT) - x = bitmapWidth - GetBitmap().GetWidth(); + x = bitmapWidth - bmp.GetWidth(); else - x = (bitmapWidth - GetBitmap().GetWidth())/2; + x = (bitmapWidth - bmp.GetWidth())/2; if (GetBitmapPlacement() & wxWIZARD_VALIGN_TOP) y = 0; else if (GetBitmapPlacement() & wxWIZARD_VALIGN_BOTTOM) - y = bitmapHeight - GetBitmap().GetHeight(); + y = bitmapHeight - bmp.GetHeight(); else - y = (bitmapHeight - GetBitmap().GetHeight())/2; + y = (bitmapHeight - bmp.GetHeight())/2; dc.DrawBitmap(bmp, x, y, true); dc.SelectObject(wxNullBitmap);