From 992c81e203e21576f20b01a778dca85103155bee Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sat, 11 Jan 2003 11:57:25 +0000 Subject: [PATCH] using the new alerts under OSX - no string255 limits anymore git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18680 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/msgdlg.cpp | 284 +++++++++++++++++++++++++------------- src/mac/msgdlg.cpp | 284 +++++++++++++++++++++++++------------- 2 files changed, 372 insertions(+), 196 deletions(-) diff --git a/src/mac/carbon/msgdlg.cpp b/src/mac/carbon/msgdlg.cpp index 7b7109b668..b43975c904 100644 --- a/src/mac/carbon/msgdlg.cpp +++ b/src/mac/carbon/msgdlg.cpp @@ -66,104 +66,192 @@ int wxMessageDialog::ShowModal() int resultbutton = wxID_CANCEL ; short result ; - Str255 pascalTitle ; - Str255 pascalText ; - char cText[2048] ; - - Str255 yesPString ; - Str255 noPString ; - - wxMacStringToPascal( m_caption , pascalTitle ) ; - wxMacStringToPascal( _("Yes") , yesPString ) ; - wxMacStringToPascal( _("No") , noPString ) ; - - if (wxApp::s_macDefaultEncodingIsPC) - { - strcpy(cText , wxMacMakeMacStringFromPC( m_message) ) ; - } - else - { - strcpy( cText , m_message ) ; - } - - wxMacConvertNewlines( cText , cText ) ; - CopyCStringToPascal( cText , pascalText ) ; 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 ; - AlertStdAlertParamRec param; - - 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 +#if TARGET_CARBON + if ( UMAGetSystemVersion() >= 0x1000 ) { - return resultbutton ; + 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 +#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 ); } - param.position = 0; - - if (m_dialogStyle & wxICON_EXCLAMATION) - StandardAlert( kAlertNoteAlert, pascalTitle, pascalText, ¶m, &result ); - else if (m_dialogStyle & wxICON_HAND) - StandardAlert( kAlertStopAlert, pascalTitle, pascalText, ¶m, &result ); - else if (m_dialogStyle & wxICON_INFORMATION) - StandardAlert( kAlertNoteAlert, pascalTitle, pascalText, ¶m, &result ); - else if (m_dialogStyle & wxICON_QUESTION) - StandardAlert( kAlertCautionAlert, pascalTitle, pascalText, ¶m, &result ); - else - StandardAlert( kAlertPlainAlert, pascalTitle, pascalText, ¶m, &result ); - if (m_dialogStyle & wxOK) - { - if (m_dialogStyle & wxCANCEL) - { - //TODO add Cancelbutton - switch( result ) + { + if (m_dialogStyle & wxCANCEL) + { + //TODO add Cancelbutton + switch( result ) { case 1 : resultbutton = wxID_OK ; @@ -176,7 +264,7 @@ int wxMessageDialog::ShowModal() } else { - switch( result ) + switch( result ) { case 1 : resultbutton = wxID_OK ; @@ -188,10 +276,10 @@ int wxMessageDialog::ShowModal() } } } - else if (m_dialogStyle & wxYES_NO) - { - if (m_dialogStyle & wxCANCEL) - { + else if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + { switch( result ) { case 1 : @@ -204,9 +292,9 @@ int wxMessageDialog::ShowModal() resultbutton = wxID_NO ; break ; } - } - else - { + } + else + { switch( result ) { case 1 : diff --git a/src/mac/msgdlg.cpp b/src/mac/msgdlg.cpp index 7b7109b668..b43975c904 100644 --- a/src/mac/msgdlg.cpp +++ b/src/mac/msgdlg.cpp @@ -66,104 +66,192 @@ int wxMessageDialog::ShowModal() int resultbutton = wxID_CANCEL ; short result ; - Str255 pascalTitle ; - Str255 pascalText ; - char cText[2048] ; - - Str255 yesPString ; - Str255 noPString ; - - wxMacStringToPascal( m_caption , pascalTitle ) ; - wxMacStringToPascal( _("Yes") , yesPString ) ; - wxMacStringToPascal( _("No") , noPString ) ; - - if (wxApp::s_macDefaultEncodingIsPC) - { - strcpy(cText , wxMacMakeMacStringFromPC( m_message) ) ; - } - else - { - strcpy( cText , m_message ) ; - } - - wxMacConvertNewlines( cText , cText ) ; - CopyCStringToPascal( cText , pascalText ) ; 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 ; - AlertStdAlertParamRec param; - - 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 +#if TARGET_CARBON + if ( UMAGetSystemVersion() >= 0x1000 ) { - return resultbutton ; + 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 +#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 ); } - param.position = 0; - - if (m_dialogStyle & wxICON_EXCLAMATION) - StandardAlert( kAlertNoteAlert, pascalTitle, pascalText, ¶m, &result ); - else if (m_dialogStyle & wxICON_HAND) - StandardAlert( kAlertStopAlert, pascalTitle, pascalText, ¶m, &result ); - else if (m_dialogStyle & wxICON_INFORMATION) - StandardAlert( kAlertNoteAlert, pascalTitle, pascalText, ¶m, &result ); - else if (m_dialogStyle & wxICON_QUESTION) - StandardAlert( kAlertCautionAlert, pascalTitle, pascalText, ¶m, &result ); - else - StandardAlert( kAlertPlainAlert, pascalTitle, pascalText, ¶m, &result ); - if (m_dialogStyle & wxOK) - { - if (m_dialogStyle & wxCANCEL) - { - //TODO add Cancelbutton - switch( result ) + { + if (m_dialogStyle & wxCANCEL) + { + //TODO add Cancelbutton + switch( result ) { case 1 : resultbutton = wxID_OK ; @@ -176,7 +264,7 @@ int wxMessageDialog::ShowModal() } else { - switch( result ) + switch( result ) { case 1 : resultbutton = wxID_OK ; @@ -188,10 +276,10 @@ int wxMessageDialog::ShowModal() } } } - else if (m_dialogStyle & wxYES_NO) - { - if (m_dialogStyle & wxCANCEL) - { + else if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + { switch( result ) { case 1 : @@ -204,9 +292,9 @@ int wxMessageDialog::ShowModal() resultbutton = wxID_NO ; break ; } - } - else - { + } + else + { switch( result ) { case 1 :