// ----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(wxProgressDialog, wxDialog)
- EVT_BUTTON(wxID_CANCEL, wxProgressDialog::OnCancel)
- EVT_CLOSE(wxProgressDialog::OnClose)
+ EVT_BUTTON(wxID_CANCEL, wxProgressDialog::OnCancel)
+
+ EVT_SHOW(wxProgressDialog::OnShow)
+
+ EVT_CLOSE(wxProgressDialog::OnClose)
END_EVENT_TABLE()
IMPLEMENT_CLASS(wxProgressDialog, wxDialog)
wxClientDC dc(this);
dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
long widthText;
-#if defined(__VISAGECPP__)
-// have two versions of this in wxWindowDC tp avoid function hiding
-// since there are two of these in wxDCBase, and in turn in wxDC.
-// VA cannot resolve this so:
dc.GetTextExtent(message, &widthText, NULL, NULL, NULL, NULL);
-#else
- dc.GetTextExtent(message, &widthText, (long*)NULL);
-#endif
m_msg = new wxStaticText(this, -1, message);
c = new wxLayoutConstraints;
Centre(wxCENTER_FRAME | wxBOTH);
- if ( !(style & wxPD_APP_MODAL) )
+ if ( style & wxPD_APP_MODAL )
{
- if ( m_parentTop )
- m_parentTop->Enable(FALSE);
+ m_winDisabler = new wxWindowDisabler(this);
}
else
{
- wxEnableTopLevelWindows(FALSE);
+ if ( m_parentTop )
+ m_parentTop->Enable(FALSE);
+ m_winDisabler = NULL;
}
Show(TRUE);
}
}
+void wxProgressDialog::OnShow(wxShowEvent& event)
+{
+ // if the dialog is being hidden, it was closed, so reenable other windows
+ // now
+ if ( event.GetShow() )
+ {
+ ReenableOtherWindows();
+ }
+}
+
// ----------------------------------------------------------------------------
// destruction
// ----------------------------------------------------------------------------
wxProgressDialog::~wxProgressDialog()
{
- if ( !(GetWindowStyle() & wxPD_APP_MODAL) )
+ // normally this should have been already done, but just in case
+ ReenableOtherWindows();
+}
+
+void wxProgressDialog::ReenableOtherWindows()
+{
+ if ( GetWindowStyle() & wxPD_APP_MODAL )
{
- if ( m_parentTop )
- m_parentTop->Enable(TRUE);
+ delete m_winDisabler;
+ m_winDisabler = (wxWindowDisabler *)NULL;
}
else
{
- wxEnableTopLevelWindows(TRUE);
+ if ( m_parentTop )
+ m_parentTop->Enable(TRUE);
}
}