X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/992c81e203e21576f20b01a778dca85103155bee..0bba37f51ded370ee79e26916c4c94ce5dc1f44e:/src/mac/carbon/msgdlg.cpp diff --git a/src/mac/carbon/msgdlg.cpp b/src/mac/carbon/msgdlg.cpp index b43975c904..6f1cfbfdc6 100644 --- a/src/mac/carbon/msgdlg.cpp +++ b/src/mac/carbon/msgdlg.cpp @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// // Name: msgdlg.cpp // Purpose: wxMessageDialog -// Author: AUTHOR +// Author: Stefan Csomor // Modified by: // Created: 04/01/98 // RCS-ID: $$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -22,38 +22,8 @@ IMPLEMENT_CLASS(wxMessageDialog, wxDialog) #endif -short language = 0 ; - -void wxMacConvertNewlines( const char *source , char * destination ) ; -void wxMacConvertNewlines( const char *source , char * destination ) -{ - const char *s = source ; - char *d = destination ; - - while( *s ) - { - switch( *s ) - { - case 0x0a : - *d++ = 0x0d ; - ++s ; - break ; - case 0x0d : - *d++ = 0x0d ; - ++s ; - if ( *s == 0x0a ) - ++s ; - break ; - default : - *d++ = *s++ ; - break ; - } - } - *d = 0 ; -} - wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption, - long style, const wxPoint& pos) + long style, const wxPoint& pos) { m_caption = caption; m_message = message; @@ -63,252 +33,231 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, cons int wxMessageDialog::ShowModal() { - 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 ; - + int resultbutton = wxID_CANCEL ; + + short result ; + + wxASSERT_MSG( ( m_dialogStyle & 0x3F ) != wxYES , wxT("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( _("Yes") ) ; - cfYesString = wxMacCreateCFString( _("No") ) ; - - 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 + if ( UMAGetSystemVersion() >= 0x1000 ) + { + 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()); + + param.movable = true; + param.flags = 0 ; + param.version = kStdCFStringAlertVersionOne ; + + 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 = m_dialogStyle & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton; + param.cancelButton = kAlertStdAlertCancelButton; + } + else + { + param.defaultText = cfYesString ; + param.cancelText = NULL; + param.otherText = cfNoString ; + param.helpButton = false ; + param.defaultButton = m_dialogStyle & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton; + param.cancelButton = 0; + } + } + // the msw implementation even shows an ok button if it is not specified, we'll do the same + else + { + if (m_dialogStyle & wxCANCEL) + { + // thats a cancel missing + param.defaultText = (CFStringRef) kAlertDefaultOKText ; + param.cancelText = (CFStringRef) kAlertDefaultCancelText ; + 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 ( skipDialog ) + return wxID_CANCEL ; + } + else #endif - { - AlertStdAlertParamRec param; - char cText[2048] ; - - if (wxApp::s_macDefaultEncodingIsPC) - { - strcpy(cText , wxMacMakeMacStringFromPC( m_message) ) ; - } - else - { - strcpy( cText , m_message ) ; - } - wxMacConvertNewlines( cText , cText ) ; - - Str255 yesPString ; - Str255 noPString ; - - Str255 pascalTitle ; - Str255 pascalText ; - wxMacStringToPascal( m_caption , pascalTitle ) ; - wxMacStringToPascal( _("Yes") , yesPString ) ; - wxMacStringToPascal( _("No") , noPString ) ; - CopyCStringToPascal( cText , pascalText ) ; - - param.movable = true; - param.filterProc = NULL ; - if (m_dialogStyle & wxYES_NO) - { - if (m_dialogStyle & wxCANCEL) - { - 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; - } - } - else if (m_dialogStyle & wxOK) - { - if (m_dialogStyle & wxCANCEL) - { - // thats a cancel missing - param.defaultText = (StringPtr) kAlertDefaultOKText ; - param.cancelText = NULL; - 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 (m_dialogStyle & wxOK) - { - if (m_dialogStyle & wxCANCEL) - { - //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 ; - } - } - } - else if (m_dialogStyle & wxYES_NO) - { - if (m_dialogStyle & wxCANCEL) - { - 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 ; - } - } - } - - return resultbutton ; + { + AlertStdAlertParamRec param; + + Str255 yesPString ; + Str255 noPString ; + + Str255 pascalTitle ; + Str255 pascalText ; + wxMacStringToPascal( m_caption , pascalTitle ) ; + wxMacStringToPascal( _("Yes") , yesPString ) ; + wxMacStringToPascal( _("No") , noPString ) ; + wxMacStringToPascal( m_message , pascalText ) ; + + param.movable = true; + param.filterProc = NULL ; + if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + { + 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; + } + } + else if (m_dialogStyle & wxOK) + { + if (m_dialogStyle & wxCANCEL) + { + 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 (m_dialogStyle & wxOK) + { + if (m_dialogStyle & wxCANCEL) + { + //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 ; + } + } + } + else if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + { + 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 ; + } + } + } + + return resultbutton ; }