X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c8e597f84a5e6b34d948de407f556efb4c540931..0bbe61b8c18a1795189f0cf73cc61c14a0fb846d:/src/mac/carbon/msgdlg.cpp?ds=inline diff --git a/src/mac/carbon/msgdlg.cpp b/src/mac/carbon/msgdlg.cpp index da992eae39..830efb6f27 100644 --- a/src/mac/carbon/msgdlg.cpp +++ b/src/mac/carbon/msgdlg.cpp @@ -15,23 +15,55 @@ #ifndef WX_PRECOMP #include "wx/intl.h" + #include "wx/app.h" #endif -#include "wx/app.h" +#include "wx/thread.h" #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& WXUNUSED(pos)) + : wxMessageDialogBase(parent, message, caption, style) { - m_caption = caption; - m_message = message; - m_parent = parent; - SetMessageDialogStyle(style); + m_yes = _("Yes"); + m_no = _("No"); + m_ok = _("OK"); + m_cancel = _("Cancel"); +} + +bool wxMessageDialog::SetYesNoLabels(const wxString& yes,const wxString& no) +{ + m_yes = yes; + m_no = no; + return true; +} + +bool wxMessageDialog::SetYesNoCancelLabels(const wxString& yes, const wxString& no, const wxString& cancel) +{ + m_yes = yes; + m_no = no; + m_cancel = cancel; + return true; +} + +bool wxMessageDialog::SetOKLabel(const wxString& ok) +{ + m_ok = ok; + return true; +} + +bool wxMessageDialog::SetOKCancelLabels(const wxString& ok, const wxString& cancel) +{ + m_ok = ok; + m_cancel = cancel; + return true; } int wxMessageDialog::ShowModal() @@ -44,83 +76,104 @@ int wxMessageDialog::ShowModal() AlertType alertType = kAlertPlainAlert; if (style & wxICON_EXCLAMATION) - alertType = kAlertNoteAlert; + alertType = kAlertCautionAlert; else if (style & wxICON_HAND) alertType = kAlertStopAlert; else if (style & wxICON_INFORMATION) alertType = kAlertNoteAlert; else if (style & wxICON_QUESTION) - alertType = kAlertCautionAlert; + alertType = kAlertNoteAlert; -#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() ); + // 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 - wxMacCFStringHolder cfNoString( wxT("No"), m_font.GetEncoding() ); - wxMacCFStringHolder cfYesString( wxT("Yes"), m_font.GetEncoding() ); - wxMacCFStringHolder cfOKString( _("OK") , m_font.GetEncoding()) ; - wxMacCFStringHolder cfCancelString( wxT("Cancel"), m_font.GetEncoding() ); + wxString msgtitle,msgtext; + if(m_extendedMessage.IsEmpty()) + { + msgtitle = m_caption; + msgtext = m_message; + } + else + { + msgtitle = m_message; + msgtext = m_extendedMessage; + } - int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ }; - if (style & wxYES_NO) + if ( !wxIsMainThread() ) { - if ( style & wxNO_DEFAULT ) + CFStringRef defaultButtonTitle = NULL; + CFStringRef alternateButtonTitle = NULL; + CFStringRef otherButtonTitle = NULL; + + wxCFStringRef cfTitle( msgtitle, GetFont().GetEncoding() ); + wxCFStringRef cfText( msgtext, GetFont().GetEncoding() ); + + wxCFStringRef cfNoString( m_no.c_str(), GetFont().GetEncoding() ); + wxCFStringRef cfYesString( m_yes.c_str(), GetFont().GetEncoding() ); + wxCFStringRef cfOKString( m_ok.c_str() , GetFont().GetEncoding()) ; + wxCFStringRef cfCancelString( m_cancel.c_str(), GetFont().GetEncoding() ); + + int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ }; + + if (style & wxYES_NO) { - defaultButtonTitle = cfNoString; - alternateButtonTitle = cfYesString; - buttonId[0] = wxID_NO; - buttonId[1] = wxID_YES; + 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 { - defaultButtonTitle = cfYesString; - alternateButtonTitle = cfNoString; - buttonId[0] = wxID_YES; - buttonId[1] = wxID_NO; - } - if (style & wxCANCEL) - { - otherButtonTitle = cfCancelString; - buttonId[2] = wxID_CANCEL; + // 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 { - // 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; - } - } + short result; - 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; - -#if TARGET_CARBON - if ( UMAGetSystemVersion() >= 0x1000 ) - { AlertStdCFStringAlertParamRec param; - wxMacCFStringHolder cfNoString( wxT("No"), m_font.GetEncoding() ); - wxMacCFStringHolder cfYesString( wxT("Yes"), m_font.GetEncoding() ); + wxCFStringRef cfNoString( m_no.c_str(), GetFont().GetEncoding() ); + wxCFStringRef cfYesString( m_yes.c_str(), GetFont().GetEncoding() ); + wxCFStringRef cfOKString( m_ok.c_str(), GetFont().GetEncoding() ); + wxCFStringRef cfCancelString( m_cancel.c_str(), GetFont().GetEncoding() ); - wxMacCFStringHolder cfTitle( m_caption, m_font.GetEncoding() ); - wxMacCFStringHolder cfText( m_message, m_font.GetEncoding() ); + wxCFStringRef cfTitle( msgtitle, GetFont().GetEncoding() ); + wxCFStringRef cfText( msgtext, GetFont().GetEncoding() ); param.movable = true; param.flags = 0; @@ -133,7 +186,7 @@ int wxMessageDialog::ShowModal() if (style & wxCANCEL) { param.defaultText = cfYesString; - param.cancelText = (CFStringRef) kAlertDefaultCancelText; + param.cancelText = cfCancelString; param.otherText = cfNoString; param.helpButton = false; param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton; @@ -155,8 +208,8 @@ int wxMessageDialog::ShowModal() if (style & wxCANCEL) { // that's a cancel missing - param.defaultText = (CFStringRef) kAlertDefaultOKText; - param.cancelText = (CFStringRef) kAlertDefaultCancelText; + param.defaultText = cfOKString; + param.cancelText = cfCancelString; param.otherText = NULL; param.helpButton = false; param.defaultButton = kAlertStdAlertOKButton; @@ -164,7 +217,7 @@ int wxMessageDialog::ShowModal() } else { - param.defaultText = (CFStringRef) kAlertDefaultOKText; + param.defaultText = cfOKString; param.cancelText = NULL; param.otherText = NULL; param.helpButton = false; @@ -172,12 +225,6 @@ int wxMessageDialog::ShowModal() param.cancelButton = 0; } } -#if 0 - else - { - skipDialog = true; - } -#endif param.position = kWindowDefaultPosition; if ( !skipDialog ) @@ -190,114 +237,48 @@ int wxMessageDialog::ShowModal() { return wxID_CANCEL; } - } - else -#endif - { - AlertStdAlertParamRec param; - Str255 yesPString, noPString; - Str255 pascalTitle, pascalText; - - wxMacStringToPascal( m_caption, pascalTitle ); - wxMacStringToPascal( wxT("Yes"), yesPString ); - wxMacStringToPascal( wxT("No"), noPString ); - wxMacStringToPascal( m_message, pascalText ); - param.movable = true; - param.filterProc = NULL; - - if (style & wxYES_NO) + if (style & wxOK) { - if (style & wxCANCEL) + switch ( result ) { - param.defaultText = yesPString; - param.cancelText = (StringPtr) kAlertDefaultCancelText; - param.otherText = noPString; - param.helpButton = false; - param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = kAlertStdAlertCancelButton; - } - else - { - param.defaultText = yesPString; - param.cancelText = NULL; - param.otherText = noPString; - param.helpButton = false; - param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; + 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 & wxOK) + else if (style & wxYES_NO) { - if (style & wxCANCEL) + switch ( result ) { - param.defaultText = (StringPtr) kAlertDefaultOKText; - param.cancelText = (StringPtr) kAlertDefaultCancelText; - param.otherText = NULL; - param.helpButton = false; - param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; - } - else - { - param.defaultText = (StringPtr) kAlertDefaultOKText; - param.cancelText = NULL; - param.otherText = NULL; - param.helpButton = false; - param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; - } - } - else - { - return resultbutton; - } - - param.position = 0; - StandardAlert( alertType, pascalTitle, pascalText, ¶m, &result ); - } - - if (style & wxOK) - { - switch ( result ) - { - 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) - { - switch ( result ) - { - case 1: - resultbutton = wxID_YES; - break; + case 1: + resultbutton = wxID_YES; + break; - case 2: - if (!(style & wxCANCEL)) - resultbutton = wxID_CANCEL; - break; + case 2: + if (!(style & wxCANCEL)) + resultbutton = wxID_CANCEL; + break; - case 3: - resultbutton = wxID_NO; - break; + case 3: + resultbutton = wxID_NO; + break; - default: - break; + default: + break; + } } } -#endif return resultbutton; }