]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/wizard.cpp
fixed (rare but fatal) bug in wxWindowDisabler
[wxWidgets.git] / src / generic / wizard.cpp
index b50ea09e07f9a2b4297668ee41acd9a15cca652f..fdd9dc7a8ccbca1d4a4336f3fc0d10edd6d54b0c 100644 (file)
@@ -66,7 +66,8 @@ IMPLEMENT_DYNAMIC_CLASS(wxWizardEvent, wxNotifyEvent)
 // wxWizardPage
 // ----------------------------------------------------------------------------
 
 // wxWizardPage
 // ----------------------------------------------------------------------------
 
-wxWizardPage::wxWizardPage(wxWizard *parent) : wxPanel(parent)
+wxWizardPage::wxWizardPage(wxWizard *parent, const wxBitmap& bitmap)
+            : wxPanel(parent), m_bitmap(bitmap)
 {
     // initially the page is hidden, it's shown only when it becomes current
     Hide();
 {
     // initially the page is hidden, it's shown only when it becomes current
     Hide();
@@ -95,6 +96,7 @@ wxWizard::wxWizard(wxWindow *parent,
                    const wxBitmap& bitmap,
                    const wxPoint& pos,
                    const wxSize& size)
                    const wxBitmap& bitmap,
                    const wxPoint& pos,
                    const wxSize& size)
+        : m_bitmap(bitmap)
 {
     // constants defining the dialog layout
     // ------------------------------------
 {
     // constants defining the dialog layout
     // ------------------------------------
@@ -139,13 +141,15 @@ wxWizard::wxWizard(wxWindow *parent,
     m_y = Y_MARGIN;
     if ( bitmap.Ok() )
     {
     m_y = Y_MARGIN;
     if ( bitmap.Ok() )
     {
-        (void)new wxStaticBitmap(this, -1, bitmap, wxPoint(m_x, m_y));
+        m_statbmp = new wxStaticBitmap(this, -1, bitmap, wxPoint(m_x, m_y));
 
         m_x += bitmap.GetWidth() + BITMAP_X_MARGIN;
         m_height = bitmap.GetHeight();
     }
     else
     {
 
         m_x += bitmap.GetWidth() + BITMAP_X_MARGIN;
         m_height = bitmap.GetHeight();
     }
     else
     {
+        m_statbmp = (wxStaticBitmap *)NULL;
+
         m_height = DEFAULT_PAGE_HEIGHT;
     }
 
         m_height = DEFAULT_PAGE_HEIGHT;
     }
 
@@ -181,7 +185,7 @@ wxWizard::wxWizard(wxWindow *parent,
 
     if ( pos == wxDefaultPosition )
     {
 
     if ( pos == wxDefaultPosition )
     {
-        Centre();
+        CentreOnScreen();
     }
 }
 
     }
 }
 
@@ -193,6 +197,9 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward)
     // button or not (initially the label is "Next")
     bool btnLabelWasNext = TRUE;
 
     // button or not (initially the label is "Next")
     bool btnLabelWasNext = TRUE;
 
+    // and this tells us whether we already had the default bitmap before
+    bool bmpWasDefault = TRUE;
+
     if ( m_page )
     {
         // ask the current page first
     if ( m_page )
     {
         // ask the current page first
@@ -214,6 +221,7 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward)
         m_page->Hide();
 
         btnLabelWasNext = m_page->GetNext() != (wxWizardPage *)NULL;
         m_page->Hide();
 
         btnLabelWasNext = m_page->GetNext() != (wxWizardPage *)NULL;
+        bmpWasDefault = !m_page->GetBitmap().Ok();
     }
 
     // set the new one
     }
 
     // set the new one
@@ -237,13 +245,29 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward)
     m_page->SetSize(m_x, m_y, m_width, m_height);
     m_page->Show();
 
     m_page->SetSize(m_x, m_y, m_width, m_height);
     m_page->Show();
 
+    // change the bitmap if necessary (and if we have it at all)
+    bool bmpIsDefault = !m_page->GetBitmap().Ok();
+    if ( m_statbmp && (bmpIsDefault != bmpWasDefault) )
+    {
+        wxBitmap bmp;
+        if ( bmpIsDefault )
+            bmp = m_bitmap;
+        else
+            bmp = m_page->GetBitmap();
+        m_statbmp->SetBitmap(bmp);
+    }
+
     // and update the buttons state
     m_btnPrev->Enable(m_page->GetPrev() != (wxWizardPage *)NULL);
 
     // and update the buttons state
     m_btnPrev->Enable(m_page->GetPrev() != (wxWizardPage *)NULL);
 
-    if ( btnLabelWasNext != (m_page->GetNext() != (wxWizardPage *)NULL) )
+    bool hasNext = m_page->GetNext() != (wxWizardPage *)NULL;
+    if ( btnLabelWasNext != hasNext )
     {
         // need to update
     {
         // need to update
-        m_btnNext->SetLabel(btnLabelWasNext ? _("&Finish") : _("&Next >"));
+        if (btnLabelWasNext)
+            m_btnNext->SetLabel(_("&Finish"));
+        else
+            m_btnNext->SetLabel(_("&Next >"));
     }
     // nothing to do: the label was already correct
 
     }
     // nothing to do: the label was already correct
 
@@ -265,6 +289,11 @@ wxWizardPage *wxWizard::GetCurrentPage() const
     return m_page;
 }
 
     return m_page;
 }
 
+wxSize wxWizard::GetPageSize() const
+{
+    return wxSize(m_width, m_height);
+}
+
 void wxWizard::OnCancel(wxCommandEvent& WXUNUSED(event))
 {
     // this function probably can never be called when we don't have an active
 void wxWizard::OnCancel(wxCommandEvent& WXUNUSED(event))
 {
     // this function probably can never be called when we don't have an active