X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/57a21e6c4577244bb02f7cb93cace3e98e65e5c3..2cf3a6d7bef6f20bea35062dd3d4dbf0aec9efb5:/src/mac/carbon/msgdlg.cpp diff --git a/src/mac/carbon/msgdlg.cpp b/src/mac/carbon/msgdlg.cpp index 655d74bc43..fe6cf21729 100644 --- a/src/mac/carbon/msgdlg.cpp +++ b/src/mac/carbon/msgdlg.cpp @@ -11,15 +11,22 @@ #include "wx/wxprec.h" -#include "wx/app.h" #include "wx/msgdlg.h" -#include "wx/intl.h" + +#ifndef WX_PRECOMP + #include "wx/intl.h" + #include "wx/app.h" +#endif + #include "wx/mac/uma.h" + IMPLEMENT_CLASS(wxMessageDialog, wxDialog) -wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption, - long style, const wxPoint& pos) + +wxMessageDialog::wxMessageDialog( + wxWindow *parent, const wxString& message, const wxString& caption, + long style, const wxPoint& pos ) { m_caption = caption; m_message = message; @@ -29,288 +36,268 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, cons int wxMessageDialog::ShowModal() { - int resultbutton = wxID_CANCEL ; + int resultbutton = wxID_CANCEL; const long style = GetMessageDialogStyle(); - wxASSERT_MSG( ( style & 0x3F ) != wxYES , wxT("this style is not supported on mac") ) ; + wxASSERT_MSG( (style & 0x3F) != wxYES, wxT("this style is not supported on Mac") ); - AlertType alertType = kAlertPlainAlert ; + AlertType alertType = kAlertPlainAlert; if (style & wxICON_EXCLAMATION) - alertType = kAlertNoteAlert ; + alertType = kAlertNoteAlert; else if (style & wxICON_HAND) - alertType = kAlertStopAlert ; + alertType = kAlertStopAlert; else if (style & wxICON_INFORMATION) - alertType = kAlertNoteAlert ; + alertType = kAlertNoteAlert; else if (style & wxICON_QUESTION) - alertType = kAlertCautionAlert ; + alertType = kAlertCautionAlert; #if TARGET_API_MAC_OSX - CFStringRef defaultButtonTitle = NULL ; - CFStringRef alternateButtonTitle = NULL ; - CFStringRef otherButtonTitle = NULL ; - - wxMacCFStringHolder cfTitle(m_caption , m_font.GetEncoding()); - wxMacCFStringHolder cfText(m_message , m_font.GetEncoding()); - - wxMacCFStringHolder cfNoString(_("No") , m_font.GetEncoding()) ; - wxMacCFStringHolder cfYesString( _("Yes") , m_font.GetEncoding()) ; - wxMacCFStringHolder cfCancelString( _("Cancel") , m_font.GetEncoding()) ; - - int buttonId[4] = { 0 , 0 , 0 , wxID_CANCEL /* time-out */ } ; - + CFStringRef defaultButtonTitle = NULL; + CFStringRef alternateButtonTitle = NULL; + CFStringRef otherButtonTitle = NULL; + + wxMacCFStringHolder cfTitle( m_caption, m_font.GetEncoding() ); + wxMacCFStringHolder cfText( m_message, m_font.GetEncoding() ); + + wxMacCFStringHolder cfNoString( _("No"), m_font.GetEncoding() ); + wxMacCFStringHolder cfYesString( _("Yes"), m_font.GetEncoding() ); + wxMacCFStringHolder cfOKString( _("OK") , m_font.GetEncoding()) ; + wxMacCFStringHolder cfCancelString( _("Cancel"), 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 ; + 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 ; + defaultButtonTitle = cfYesString; + alternateButtonTitle = cfNoString; + buttonId[0] = wxID_YES; + buttonId[1] = wxID_NO; } if (style & wxCANCEL) { - otherButtonTitle = cfCancelString ; - buttonId[2] = wxID_CANCEL ; + 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 ; + // 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 ; + 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] ; + CFOptionFlags exitButton; + OSStatus err = CFUserNotificationDisplayAlert( + 0, alertType, NULL, NULL, NULL, cfTitle, cfText, + defaultButtonTitle, alternateButtonTitle, otherButtonTitle, &exitButton ); + if (err == noErr) + resultbutton = buttonId[exitButton]; #else - short result ; - + short result; + #if TARGET_CARBON if ( UMAGetSystemVersion() >= 0x1000 ) { - AlertStdCFStringAlertParamRec param ; - wxMacCFStringHolder cfNoString(_("No") , m_font.GetEncoding()) ; - wxMacCFStringHolder cfYesString( _("Yes") , m_font.GetEncoding()) ; + AlertStdCFStringAlertParamRec param; + wxMacCFStringHolder cfNoString( _("No"), m_font.GetEncoding() ); + wxMacCFStringHolder cfYesString( _("Yes"), m_font.GetEncoding() ); - wxMacCFStringHolder cfTitle(m_caption , m_font.GetEncoding()); - wxMacCFStringHolder cfText(m_message , m_font.GetEncoding()); + wxMacCFStringHolder cfTitle( m_caption, m_font.GetEncoding() ); + wxMacCFStringHolder cfText( m_message, m_font.GetEncoding() ); param.movable = true; - param.flags = 0 ; - param.version = kStdCFStringAlertVersionOne ; + param.flags = 0; + param.version = kStdCFStringAlertVersionOne; - bool skipDialog = false ; + bool skipDialog = false; if (style & wxYES_NO) { if (style & wxCANCEL) { - param.defaultText = cfYesString ; - param.cancelText = (CFStringRef) kAlertDefaultCancelText; - param.otherText = cfNoString ; - param.helpButton = false ; + param.defaultText = cfYesString; + param.cancelText = (CFStringRef) kAlertDefaultCancelText; + param.otherText = cfNoString; + param.helpButton = false; param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton; - param.cancelButton = kAlertStdAlertCancelButton; + param.cancelButton = kAlertStdAlertCancelButton; } else { - param.defaultText = cfYesString ; - param.cancelText = NULL; - param.otherText = cfNoString ; - param.helpButton = false ; + param.defaultText = cfYesString; + param.cancelText = NULL; + param.otherText = cfNoString; + param.helpButton = false; param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton; - param.cancelButton = 0; + param.cancelButton = 0; } } - // the msw implementation even shows an ok button if it is not specified, we'll do the same + // the MSW implementation even shows an OK button if it is not specified, we'll do the same else { if (style & wxCANCEL) { - // thats a cancel missing - param.defaultText = (CFStringRef) kAlertDefaultOKText ; - param.cancelText = (CFStringRef) kAlertDefaultCancelText ; - param.otherText = NULL; - param.helpButton = false ; + // that's a cancel missing + param.defaultText = (CFStringRef) kAlertDefaultOKText; + param.cancelText = (CFStringRef) kAlertDefaultCancelText; + param.otherText = NULL; + param.helpButton = false; param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; + param.cancelButton = 0; } else { - param.defaultText = (CFStringRef) kAlertDefaultOKText ; - param.cancelText = NULL; - param.otherText = NULL; - param.helpButton = false ; + param.defaultText = (CFStringRef) kAlertDefaultOKText; + param.cancelText = NULL; + param.otherText = NULL; + param.helpButton = false; param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; + param.cancelButton = 0; } } - /* +#if 0 else { - skipDialog = true ; + skipDialog = true; } - */ +#endif param.position = kWindowDefaultPosition; if ( !skipDialog ) { - DialogRef alertRef ; - CreateStandardAlert( alertType , cfTitle , cfText , ¶m , &alertRef ) ; - RunStandardAlert( alertRef , NULL , &result ) ; + DialogRef alertRef; + CreateStandardAlert( alertType, cfTitle, cfText, ¶m, &alertRef ); + RunStandardAlert( alertRef, NULL, &result ); + } + else + { + return wxID_CANCEL; } - if ( skipDialog ) - return wxID_CANCEL ; } else #endif { - AlertStdAlertParamRec param; + AlertStdAlertParamRec param; + Str255 yesPString, noPString; + Str255 pascalTitle, pascalText; - Str255 yesPString ; - Str255 noPString ; + wxMacStringToPascal( m_caption, pascalTitle ); + wxMacStringToPascal( _("Yes"), yesPString ); + wxMacStringToPascal( _("No"), noPString ); + wxMacStringToPascal( m_message, pascalText ); - Str255 pascalTitle ; - Str255 pascalText ; - wxMacStringToPascal( m_caption , pascalTitle ) ; - wxMacStringToPascal( _("Yes") , yesPString ) ; - wxMacStringToPascal( _("No") , noPString ) ; - wxMacStringToPascal( m_message , pascalText ) ; + param.movable = true; + param.filterProc = NULL; - param.movable = true; - param.filterProc = NULL ; if (style & wxYES_NO) { if (style & wxCANCEL) { - param.defaultText = yesPString ; - param.cancelText = (StringPtr) kAlertDefaultCancelText; - param.otherText = noPString ; - param.helpButton = false ; + param.defaultText = yesPString; + param.cancelText = (StringPtr) kAlertDefaultCancelText; + param.otherText = noPString; + param.helpButton = false; param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = kAlertStdAlertCancelButton; + param.cancelButton = kAlertStdAlertCancelButton; } else { - param.defaultText = yesPString ; - param.cancelText = NULL; - param.otherText = noPString ; - param.helpButton = false ; + param.defaultText = yesPString; + param.cancelText = NULL; + param.otherText = noPString; + param.helpButton = false; param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; + param.cancelButton = 0; } } else if (style & wxOK) { if (style & wxCANCEL) { - param.defaultText = (StringPtr) kAlertDefaultOKText ; - param.cancelText = (StringPtr) kAlertDefaultCancelText ; - param.otherText = NULL; - param.helpButton = false ; + param.defaultText = (StringPtr) kAlertDefaultOKText; + param.cancelText = (StringPtr) kAlertDefaultCancelText; + param.otherText = NULL; + param.helpButton = false; param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; + param.cancelButton = 0; } else { - param.defaultText = (StringPtr) kAlertDefaultOKText ; - param.cancelText = NULL; - param.otherText = NULL; - param.helpButton = false ; + param.defaultText = (StringPtr) kAlertDefaultOKText; + param.cancelText = NULL; + param.otherText = NULL; + param.helpButton = false; param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; + param.cancelButton = 0; } } else { - return resultbutton ; + return resultbutton; } - param.position = 0; - + param.position = 0; StandardAlert( alertType, pascalTitle, pascalText, ¶m, &result ); } if (style & wxOK) { - if (style & wxCANCEL) + switch ( result ) { - //TODO add Cancelbutton - switch( result ) - { - case 1 : - resultbutton = wxID_OK ; - break ; - case 2 : - break ; - case 3 : - break ; - } - } - else - { - switch( result ) - { - case 1 : - resultbutton = wxID_OK ; - break ; - case 2 : - break ; - case 3 : - break ; - } + case 1: + resultbutton = wxID_OK; + break; + + case 2: + // TODO: add Cancel button + // if (style & wxCANCEL) + // resultbutton = wxID_CANCEL; + break; + + case 3: + default: + break; } } else if (style & wxYES_NO) { - if (style & wxCANCEL) + switch ( result ) { - switch( result ) - { - case 1 : - resultbutton = wxID_YES ; - break ; - case 2 : - resultbutton = wxID_CANCEL ; - break ; - case 3 : - resultbutton = wxID_NO ; - break ; - } - } - else - { - switch( result ) - { - case 1 : - resultbutton = wxID_YES ; - break ; - case 2 : - break ; - case 3 : - resultbutton = wxID_NO ; - break ; - } + case 1: + resultbutton = wxID_YES; + break; + + case 2: + if (!(style & wxCANCEL)) + resultbutton = wxID_CANCEL; + break; + + case 3: + resultbutton = wxID_NO; + break; + + default: + break; } } #endif - - return resultbutton ; -} + return resultbutton; +}