fixed bug 424212 (unworking close button in the progress dialog)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10473 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
ed582841a2
commit
c4d305b7bd
@ -82,6 +82,9 @@ public:
|
||||
bool Iconized() const { return IsIconized(); };
|
||||
#endif
|
||||
|
||||
// wxMSW only: remove the "Close" button from the dialog
|
||||
bool EnableCloseButton(bool enable = TRUE);
|
||||
|
||||
// implementation only from now on
|
||||
// -------------------------------
|
||||
|
||||
|
@ -92,6 +92,18 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
|
||||
m_windowStyle |= style;
|
||||
|
||||
bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
|
||||
|
||||
#ifdef __WXMSW__
|
||||
// we have to remove the "Close" button from the title bar then as it is
|
||||
// confusing to have it - it doesn't work anyhow
|
||||
//
|
||||
// FIXME: should probably have a (extended?) window style for this
|
||||
if ( !hasAbortButton )
|
||||
{
|
||||
EnableCloseButton(FALSE);
|
||||
}
|
||||
#endif // wxMSW
|
||||
|
||||
m_state = hasAbortButton ? Continue : Uncancelable;
|
||||
m_maximum = maximum;
|
||||
|
||||
@ -123,13 +135,13 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
|
||||
|
||||
if ( maximum > 0 )
|
||||
{
|
||||
// note that we can't use wxGA_SMOOTH because it happens to also mean
|
||||
// wxDIALOG_MODAL and will cause the dialog to be modal. Have an extra
|
||||
// style argument to wxProgressDialog, perhaps.
|
||||
m_gauge = new wxGauge(this, -1, maximum,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
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));
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
wxGA_HORIZONTAL);
|
||||
|
||||
c = new wxLayoutConstraints;
|
||||
c->left.SameAs(this, wxLeft, 2*LAYOUT_X_MARGIN);
|
||||
c->top.Below(m_msg, 2*LAYOUT_Y_MARGIN);
|
||||
@ -309,6 +321,12 @@ wxProgressDialog::Update(int value, const wxString& newmsg)
|
||||
// tell the user what he should do...
|
||||
m_btnAbort->SetLabel(_("Close"));
|
||||
}
|
||||
#ifdef __WXMSW__
|
||||
else // enable the close button to give the user a way to close the dlg
|
||||
{
|
||||
EnableCloseButton(TRUE);
|
||||
}
|
||||
#endif // __WXMSW__
|
||||
|
||||
if ( !newmsg )
|
||||
{
|
||||
|
@ -192,6 +192,36 @@ bool wxDialog::Create(wxWindow *parent,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool wxDialog::EnableCloseButton(bool enable)
|
||||
{
|
||||
// get system (a.k.a. window) menu
|
||||
HMENU hmenu = ::GetSystemMenu(GetHwnd(), FALSE /* get it */);
|
||||
if ( !hmenu )
|
||||
{
|
||||
wxLogLastError(_T("GetSystemMenu"));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// enabling/disabling the close item from it also automatically
|
||||
// disables/enabling the close title bar button
|
||||
if ( !::EnableMenuItem(hmenu, SC_CLOSE,
|
||||
MF_BYCOMMAND | (enable ? MF_ENABLED : MF_GRAYED)) )
|
||||
{
|
||||
wxLogLastError(_T("DeleteMenu(SC_CLOSE)"));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// update appearance immediately
|
||||
if ( !::DrawMenuBar(GetHwnd()) )
|
||||
{
|
||||
wxLogLastError(_T("DrawMenuBar"));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void wxDialog::SetModal(bool flag)
|
||||
{
|
||||
if ( flag )
|
||||
|
Loading…
Reference in New Issue
Block a user