X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ede7b01760e920b31520b15c919445db882a8012..caab08ee9b59f92e2c54219c822e732a97dbf11d:/src/osx/cocoa/msgdlg.mm diff --git a/src/osx/cocoa/msgdlg.mm b/src/osx/cocoa/msgdlg.mm index 042a302c08..445a097caa 100644 --- a/src/osx/cocoa/msgdlg.mm +++ b/src/osx/cocoa/msgdlg.mm @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: msgdlg.cpp 54129 2008-06-11 19:30:52Z SC $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -49,6 +49,13 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxPoint& WXUNUSED(pos)) : wxMessageDialogBase(parent, message, caption, style) { + m_sheetDelegate = [[ModalDialogDelegate alloc] init]; + [(ModalDialogDelegate*)m_sheetDelegate setImplementation: this]; +} + +wxMessageDialog::~wxMessageDialog() +{ + [m_sheetDelegate release]; } int wxMessageDialog::ShowModal() @@ -131,6 +138,8 @@ int wxMessageDialog::ShowModal() } } + wxASSERT_MSG( !(style & wxHELP), "wxHELP not supported in non-GUI thread" ); + CFOptionFlags exitButton; OSStatus err = CFUserNotificationDisplayAlert( 0, alertType, NULL, NULL, NULL, cfTitle, cfText, @@ -167,15 +176,13 @@ void wxMessageDialog::ShowWindowModal() if (parentWindow) { NSWindow* nativeParent = parentWindow->GetWXWindow(); - ModalDialogDelegate* sheetDelegate = [[ModalDialogDelegate alloc] init]; - [sheetDelegate setImplementation: this]; - [alert beginSheetModalForWindow: nativeParent modalDelegate: sheetDelegate + [alert beginSheetModalForWindow: nativeParent modalDelegate: m_sheetDelegate didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:) contextInfo: nil]; } } -void wxMessageDialog::ModalFinishedCallback(void* panel, int resultCode) +void wxMessageDialog::ModalFinishedCallback(void* WXUNUSED(panel), int resultCode) { int resultbutton = wxID_CANCEL; if ( resultCode < NSAlertFirstButtonReturn ) @@ -260,13 +267,35 @@ void* wxMessageDialog::ConstructNSAlert() // the MSW implementation even shows an OK button if it is not specified, we'll do the same else { - [alert addButtonWithTitle:cfOKString.AsNSString()]; - m_buttonId[ m_buttonCount++ ] = wxID_OK; - if (style & wxCANCEL) + if ( style & wxCANCEL_DEFAULT ) { [alert addButtonWithTitle:cfCancelString.AsNSString()]; m_buttonId[ m_buttonCount++ ] = wxID_CANCEL; + + [alert addButtonWithTitle:cfOKString.AsNSString()]; + m_buttonId[ m_buttonCount++ ] = wxID_OK; } + else + { + [alert addButtonWithTitle:cfOKString.AsNSString()]; + m_buttonId[ m_buttonCount++ ] = wxID_OK; + if (style & wxCANCEL) + { + [alert addButtonWithTitle:cfCancelString.AsNSString()]; + m_buttonId[ m_buttonCount++ ] = wxID_CANCEL; + } + } + + } + + if ( style & wxHELP ) + { + wxCFStringRef cfHelpString( GetHelpLabel(), GetFont().GetEncoding() ); + [alert addButtonWithTitle:cfHelpString.AsNSString()]; + m_buttonId[ m_buttonCount++ ] = wxID_HELP; } + + wxASSERT_MSG( m_buttonCount <= WXSIZEOF(m_buttonId), "Too many buttons" ); + return alert; }