X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9576ca53db96b462ed4c0b4bdf47d64c40203e4..599a97e9ab9d9c1fca761d501ef101595e0ae486:/src/mac/msgdlg.cpp diff --git a/src/mac/msgdlg.cpp b/src/mac/msgdlg.cpp index 775ac8f064..f19da7bb4f 100644 --- a/src/mac/msgdlg.cpp +++ b/src/mac/msgdlg.cpp @@ -14,10 +14,44 @@ #endif #include "wx/msgdlg.h" +#include "wx/mac/uma.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_CLASS(wxMessageDialog, wxDialog) -#endif + +#define kMacOKAlertResourceID 128 +#define kMacYesNoAlertResourceID 129 +#define kMacYesNoCancelAlertResourceID 130 +#define kMacNoYesAlertResourceID 131 +#define kMacNoYesCancelAlertResourceID 132 + +short language = 0 ; + +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) @@ -30,7 +64,226 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, cons int wxMessageDialog::ShowModal() { - // TODO - return wxID_CANCEL; + int resultbutton = wxID_CANCEL ; + + short result ; + Str255 pascalTitle ; + Str255 pascalText ; + + strcpy( (char*) pascalTitle , m_caption ) ; + c2pstr( (char*) pascalTitle ) ; + strcpy( (char*) pascalText , m_message ) ; + wxMacConvertNewlines( (char*)pascalText ,(char*) pascalText) ; + c2pstr( (char*) pascalText ) ; + + if ( !UMAHasAppearance() ) + { + int resourceID ; + + if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + resourceID = kMacYesNoCancelAlertResourceID; + else + resourceID = kMacYesNoAlertResourceID + language * 10 ; + } + else if (m_dialogStyle & wxOK) + { + if (m_dialogStyle & wxCANCEL) + resourceID = kMacOKAlertResourceID; // wrong + else + resourceID = kMacOKAlertResourceID; + } + else + { + return resultbutton ; + } + /* + if (hWnd) + msStyle |= MB_APPLMODAL; + else + msStyle |= MB_TASKMODAL; + */ + + ParamText( pascalTitle , pascalText , NULL , NULL ) ; + + if (m_dialogStyle & wxICON_EXCLAMATION) + result = Alert( resourceID , NULL ) ; + else if (m_dialogStyle & wxICON_HAND) + result = StopAlert( resourceID , NULL ) ; + else if (m_dialogStyle & wxICON_INFORMATION) + result = NoteAlert( resourceID , NULL ) ; + else if (m_dialogStyle & wxICON_QUESTION) + result = CautionAlert( resourceID , NULL ) ; + else + result = Alert( resourceID , NULL ) ; + + resultbutton = result ; + + if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + { + switch( result ) + { + case 1 : + resultbutton = wxID_YES ; + break ; + case 2 : + resultbutton = wxID_NO ; + break ; + case 3 : + resultbutton = wxID_CANCEL ; + break ; + } + } + else + { + switch( result ) + { + case 1 : + resultbutton = wxID_YES ; + break ; + case 2 : + resultbutton = wxID_NO ; + break ; + case 3 : + break ; + } + } + } + } + else + { + AlertStdAlertParamRec param; + + param.movable = true; + param.filterProc = NULL ; + + if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + { + param.defaultText = "\pYes" ; + param.cancelText = (StringPtr) kAlertDefaultCancelText; + param.otherText = "\pNo"; + param.helpButton = false ; + param.defaultButton = kAlertStdAlertOKButton; + param.cancelButton = kAlertStdAlertCancelButton; + } + else + { + param.defaultText = "\pYes" ; + param.cancelText = NULL; + param.otherText = "\pNo"; + 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; + + 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 ) + { + 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 ; }