X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/abceee76ea4d642ccfd3cf91cc139a3fe2b471b7..dd107c50be43e8d4dbdba20df162faf119a3781c:/src/generic/progdlgg.cpp?ds=sidebyside diff --git a/src/generic/progdlgg.cpp b/src/generic/progdlgg.cpp index 7a3cdb7a3f..e9c031ab2a 100644 --- a/src/generic/progdlgg.cpp +++ b/src/generic/progdlgg.cpp @@ -65,8 +65,11 @@ static void SetTimeLabel(unsigned long val, wxStaticText *label); // ---------------------------------------------------------------------------- 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) @@ -86,6 +89,8 @@ wxProgressDialog::wxProgressDialog(wxString const &title, int style) : wxDialog(parent, -1, title) { + m_windowStyle |= style; + bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0; m_state = hasAbortButton ? Continue : Uncancelable; m_maximum = maximum; @@ -101,14 +106,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, 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; @@ -127,7 +125,11 @@ wxProgressDialog::wxProgressDialog(wxString const &title, { m_gauge = new wxGauge(this, -1, maximum, wxDefaultPosition, wxDefaultSize, - wxGA_HORIZONTAL | wxRAISED_BORDER | (style & wxGA_SMOOTH)); + wxGA_HORIZONTAL | wxRAISED_BORDER); +// Sorry, but wxGA_SMOOTH happens to also mean wxDIALOG_MODAL and will +// cause the dialog to be modal. Have an extra style argument to wxProgressDialog, +// perhaps. +// wxGA_HORIZONTAL | wxRAISED_BORDER | (style & wxGA_SMOOTH)); c = new wxLayoutConstraints; c->left.SameAs(this, wxLeft, 2*LAYOUT_X_MARGIN); c->top.Below(m_msg, 2*LAYOUT_Y_MARGIN); @@ -212,14 +214,15 @@ wxProgressDialog::wxProgressDialog(wxString const &title, 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); @@ -377,20 +380,37 @@ void wxProgressDialog::OnClose(wxCloseEvent& event) } } +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); } }