- int resultbutton = wxID_CANCEL ;
-
- short result ;
-
- wxASSERT_MSG( ( m_dialogStyle & 0x3F ) != wxYES , "this style is not supported on mac" ) ;
-
- AlertType alertType = kAlertPlainAlert ;
- if (m_dialogStyle & wxICON_EXCLAMATION)
- alertType = kAlertNoteAlert ;
- else if (m_dialogStyle & wxICON_HAND)
- alertType = kAlertStopAlert ;
- else if (m_dialogStyle & wxICON_INFORMATION)
- alertType = kAlertNoteAlert ;
- else if (m_dialogStyle & wxICON_QUESTION)
- alertType = kAlertCautionAlert ;
-
-#if TARGET_CARBON
- if ( UMAGetSystemVersion() >= 0x1000 )
- {
- AlertStdCFStringAlertParamRec param ;
- CFStringRef cfNoString = NULL ;
- CFStringRef cfYesString = NULL ;
-
- CFStringRef cfTitle = NULL;
- CFStringRef cfText = NULL;
-
- cfTitle = wxMacCreateCFString( m_caption ) ;
- cfText = wxMacCreateCFString( m_message ) ;
- cfNoString = wxMacCreateCFString( _("No") ) ;
- cfYesString = wxMacCreateCFString( _("Yes") ) ;
-
- param.movable = true;
- param.flags = 0 ;
-
- bool skipDialog = false ;
-
- if (m_dialogStyle & wxYES_NO)
- {
- if (m_dialogStyle & wxCANCEL)
- {
- param.defaultText = cfYesString ;
- param.cancelText = (CFStringRef) kAlertDefaultCancelText;
- param.otherText = cfNoString ;
- param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
- param.cancelButton = kAlertStdAlertCancelButton;
- }
- else
- {
- param.defaultText = cfYesString ;
- param.cancelText = NULL;
- param.otherText = cfNoString ;
- param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
- param.cancelButton = 0;
- }
- }
- else if (m_dialogStyle & wxOK)
- {
- if (m_dialogStyle & wxCANCEL)
- {
- // thats a cancel missing
- param.defaultText = (CFStringRef) kAlertDefaultOKText ;
- param.cancelText = NULL;
- param.otherText = NULL;
- param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
- param.cancelButton = 0;
- }
- else
- {
- param.defaultText = (CFStringRef) kAlertDefaultOKText ;
- param.cancelText = NULL;
- param.otherText = NULL;
- param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
- param.cancelButton = 0;
- }
- }
- else
- {
- skipDialog = true ;
- }
-
- param.position = kWindowDefaultPosition;
- if ( !skipDialog )
- {
- DialogRef alertRef ;
- CreateStandardAlert( alertType , cfTitle , cfText , ¶m , &alertRef ) ;
- RunStandardAlert( alertRef , NULL , &result ) ;
- }
- if(cfTitle != NULL)
- CFRelease(cfTitle);
- if(cfText != NULL)
- CFRelease(cfText);
- if(cfNoString != NULL)
- CFRelease(cfNoString);
- if(cfYesString != NULL)
- CFRelease(cfYesString);
- if ( skipDialog )
- return wxID_CANCEL ;
- }
- else
+ int resultbutton = wxID_CANCEL;
+
+ const long style = GetMessageDialogStyle();
+
+ wxASSERT_MSG( (style & 0x3F) != wxYES, wxT("this style is not supported on Mac") );
+
+ AlertType alertType = kAlertPlainAlert;
+ if (style & wxICON_EXCLAMATION)
+ alertType = kAlertNoteAlert;
+ else if (style & wxICON_HAND)
+ alertType = kAlertStopAlert;
+ else if (style & wxICON_INFORMATION)
+ alertType = kAlertNoteAlert;
+ else if (style & wxICON_QUESTION)
+ alertType = kAlertCautionAlert;
+
+
+ // work out what to display
+ // if the extended text is empty then we use the caption as the title
+ // and the message as the text (for backwards compatibility)
+ // but if the extended message is not empty then we use the message as the title
+ // and the extended message as the text because that makes more sense
+
+ wxString msgtitle,msgtext;
+ if(m_extendedMessage.IsEmpty())
+ {
+ msgtitle = m_caption;
+ msgtext = m_message;
+ }
+ else
+ {
+ msgtitle = m_message;
+ msgtext = m_extendedMessage;
+ }
+
+
+#if TARGET_API_MAC_OSX
+ if ( !wxIsMainThread() )
+ {
+ CFStringRef defaultButtonTitle = NULL;
+ CFStringRef alternateButtonTitle = NULL;
+ CFStringRef otherButtonTitle = NULL;
+
+ wxMacCFStringHolder cfTitle( msgtitle, m_font.GetEncoding() );
+ wxMacCFStringHolder cfText( msgtext, m_font.GetEncoding() );
+
+ wxMacCFStringHolder cfNoString( m_no.c_str(), m_font.GetEncoding() );
+ wxMacCFStringHolder cfYesString( m_yes.c_str(), m_font.GetEncoding() );
+ wxMacCFStringHolder cfOKString( m_ok.c_str() , m_font.GetEncoding()) ;
+ wxMacCFStringHolder cfCancelString( m_cancel.c_str(), m_font.GetEncoding() );
+
+ int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ };
+
+ if (style & wxYES_NO)
+ {
+ if ( style & wxNO_DEFAULT )
+ {
+ defaultButtonTitle = cfNoString;
+ alternateButtonTitle = cfYesString;
+ buttonId[0] = wxID_NO;
+ buttonId[1] = wxID_YES;
+ }
+ else
+ {
+ defaultButtonTitle = cfYesString;
+ alternateButtonTitle = cfNoString;
+ buttonId[0] = wxID_YES;
+ buttonId[1] = wxID_NO;
+ }
+ if (style & wxCANCEL)
+ {
+ otherButtonTitle = cfCancelString;
+ buttonId[2] = wxID_CANCEL;
+ }
+ }
+ else
+ {
+ // the MSW implementation even shows an OK button if it is not specified, we'll do the same
+ buttonId[0] = wxID_OK;
+ // using null as default title does not work on earlier systems
+ defaultButtonTitle = cfOKString;
+ if (style & wxCANCEL)
+ {
+ alternateButtonTitle = cfCancelString;
+ buttonId[1] = wxID_CANCEL;
+ }
+ }
+
+ CFOptionFlags exitButton;
+ OSStatus err = CFUserNotificationDisplayAlert(
+ 0, alertType, NULL, NULL, NULL, cfTitle, cfText,
+ defaultButtonTitle, alternateButtonTitle, otherButtonTitle, &exitButton );
+ if (err == noErr)
+ resultbutton = buttonId[exitButton];
+ }
+ else