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:
		@@ -82,6 +82,9 @@ public:
 | 
				
			|||||||
    bool Iconized() const { return IsIconized(); };
 | 
					    bool Iconized() const { return IsIconized(); };
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // wxMSW only: remove the "Close" button from the dialog
 | 
				
			||||||
 | 
					    bool EnableCloseButton(bool enable = TRUE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // implementation only from now on
 | 
					    // implementation only from now on
 | 
				
			||||||
    // -------------------------------
 | 
					    // -------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,6 +92,18 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
 | 
				
			|||||||
    m_windowStyle |= style;
 | 
					    m_windowStyle |= style;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
 | 
					    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_state = hasAbortButton ? Continue : Uncancelable;
 | 
				
			||||||
    m_maximum = maximum;
 | 
					    m_maximum = maximum;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -123,13 +135,13 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if ( maximum > 0 )
 | 
					    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,
 | 
					        m_gauge = new wxGauge(this, -1, maximum,
 | 
				
			||||||
                wxDefaultPosition, wxDefaultSize,
 | 
					                              wxDefaultPosition, wxDefaultSize,
 | 
				
			||||||
                wxGA_HORIZONTAL | wxRAISED_BORDER);
 | 
					                              wxGA_HORIZONTAL);
 | 
				
			||||||
// 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 = new wxLayoutConstraints;
 | 
				
			||||||
        c->left.SameAs(this, wxLeft, 2*LAYOUT_X_MARGIN);
 | 
					        c->left.SameAs(this, wxLeft, 2*LAYOUT_X_MARGIN);
 | 
				
			||||||
        c->top.Below(m_msg, 2*LAYOUT_Y_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...
 | 
					            // tell the user what he should do...
 | 
				
			||||||
            m_btnAbort->SetLabel(_("Close"));
 | 
					            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 )
 | 
					        if ( !newmsg )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -192,6 +192,36 @@ bool wxDialog::Create(wxWindow *parent,
 | 
				
			|||||||
    return TRUE;
 | 
					    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)
 | 
					void wxDialog::SetModal(bool flag)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if ( flag )
 | 
					    if ( flag )
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user