// ----------------------------------------------------------------------------
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)
int style)
: wxDialog(parent, -1, title)
{
+ m_windowStyle |= style;
+
bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
m_state = hasAbortButton ? Continue : Uncancelable;
m_maximum = maximum;
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;
{
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);
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);
}
}