X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/524c47aa3adf2af11a3069fd5da035a604f08f66..4d572a2cace8d11a10ecea598ff342c36ec007cf:/src/osx/cocoa/msgdlg.mm?ds=sidebyside diff --git a/src/osx/cocoa/msgdlg.mm b/src/osx/cocoa/msgdlg.mm index bf82c5c956..504e019070 100644 --- a/src/osx/cocoa/msgdlg.mm +++ b/src/osx/cocoa/msgdlg.mm @@ -30,40 +30,8 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& caption, long style, const wxPoint& WXUNUSED(pos)) - : wxMessageDialogBase(parent, message, caption, style) + : wxMessageDialogWithCustomLabels(parent, message, caption, 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() @@ -74,15 +42,15 @@ int wxMessageDialog::ShowModal() wxASSERT_MSG( (style & 0x3F) != wxYES, wxT("this style is not supported on Mac") ); - AlertType alertType = kAlertPlainAlert; + NSAlertStyle alertType = NSWarningAlertStyle; if (style & wxICON_EXCLAMATION) - alertType = kAlertCautionAlert; + alertType = NSCriticalAlertStyle; else if (style & wxICON_HAND) - alertType = kAlertStopAlert; + alertType = NSWarningAlertStyle; else if (style & wxICON_INFORMATION) - alertType = kAlertNoteAlert; + alertType = NSInformationalAlertStyle; else if (style & wxICON_QUESTION) - alertType = kAlertNoteAlert; + alertType = NSInformationalAlertStyle; // work out what to display @@ -113,10 +81,10 @@ int wxMessageDialog::ShowModal() 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() ); + wxCFStringRef cfNoString( GetNoLabel(), GetFont().GetEncoding() ); + wxCFStringRef cfYesString( GetYesLabel(), GetFont().GetEncoding() ); + wxCFStringRef cfOKString( GetOKLabel(), GetFont().GetEncoding()) ; + wxCFStringRef cfCancelString( GetCancelLabel(), GetFont().GetEncoding() ); int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ }; @@ -164,119 +132,93 @@ int wxMessageDialog::ShowModal() } else { - short result; + NSAlert* alert = [[NSAlert alloc] init]; - AlertStdCFStringAlertParamRec param; - 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() ); + wxCFStringRef cfNoString( GetNoLabel(), GetFont().GetEncoding() ); + wxCFStringRef cfYesString( GetYesLabel(), GetFont().GetEncoding() ); + wxCFStringRef cfOKString( GetOKLabel(), GetFont().GetEncoding() ); + wxCFStringRef cfCancelString( GetCancelLabel(), GetFont().GetEncoding() ); wxCFStringRef cfTitle( msgtitle, GetFont().GetEncoding() ); wxCFStringRef cfText( msgtext, GetFont().GetEncoding() ); - param.movable = true; - param.flags = 0; - param.version = kStdCFStringAlertVersionOne; + [alert setMessageText:cfTitle.AsNSString()]; + [alert setInformativeText:cfText.AsNSString()]; - bool skipDialog = false; + int buttonId[3] = { 0, 0, 0 }; + int buttonCount = 0; if (style & wxYES_NO) { - if (style & wxCANCEL) + if ( style & wxNO_DEFAULT ) { - param.defaultText = cfYesString; - param.cancelText = cfCancelString; - param.otherText = cfNoString; - param.helpButton = false; - param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton; - param.cancelButton = kAlertStdAlertCancelButton; + [alert addButtonWithTitle:cfNoString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_NO; + [alert addButtonWithTitle:cfYesString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_YES; } else { - param.defaultText = cfYesString; - param.cancelText = NULL; - param.otherText = cfNoString; - param.helpButton = false; - param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton; - param.cancelButton = 0; + [alert addButtonWithTitle:cfYesString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_YES; + [alert addButtonWithTitle:cfNoString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_NO; + } + + if (style & wxCANCEL) + { + [alert addButtonWithTitle:cfCancelString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_CANCEL; } } // the MSW implementation even shows an OK button if it is not specified, we'll do the same else { + [alert addButtonWithTitle:cfOKString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_OK; if (style & wxCANCEL) { - // that's a cancel missing - param.defaultText = cfOKString; - param.cancelText = cfCancelString; - param.otherText = NULL; - param.helpButton = false; - param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; - } - else - { - param.defaultText = cfOKString; - param.cancelText = NULL; - param.otherText = NULL; - param.helpButton = false; - param.defaultButton = kAlertStdAlertOKButton; - param.cancelButton = 0; + [alert addButtonWithTitle:cfCancelString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_CANCEL; } } - param.position = kWindowDefaultPosition; - if ( !skipDialog ) - { - DialogRef alertRef; - CreateStandardAlert( alertType, cfTitle, cfText, ¶m, &alertRef ); - RunStandardAlert( alertRef, NULL, &result ); - } - else + + wxNonOwnedWindow* parentWindow = NULL; + int button = -1; + + if (GetParent()) { - return wxID_CANCEL; + parentWindow = dynamic_cast(wxGetTopLevelParent(GetParent())); } - if (style & wxOK) + /* + if (parentWindow) { - 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; - } + NSWindow* nativeParent = parentWindow->GetWXWindow(); + ModalDialogDelegate* sheetDelegate = [[ModalDialogDelegate alloc] init]; + [alert beginSheetModalForWindow: nativeParent modalDelegate: sheetDelegate + didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:) + contextInfo: nil]; + [sheetDelegate waitForSheetToFinish]; + button = [sheetDelegate code]; + [sheetDelegate release]; } - else if (style & wxYES_NO) + else +*/ { - switch ( result ) - { - case 1: - resultbutton = wxID_YES; - break; - - case 2: - if (!(style & wxCANCEL)) - resultbutton = wxID_CANCEL; - break; - - case 3: - resultbutton = wxID_NO; - break; + button = [alert runModal]; + } + [alert release]; - default: - break; - } + if ( button < NSAlertFirstButtonReturn ) + resultbutton = wxID_CANCEL; + else + { + if ( button - NSAlertFirstButtonReturn < buttonCount ) + resultbutton = buttonId[ button - NSAlertFirstButtonReturn ]; + else + resultbutton = wxID_CANCEL; } }