X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9871aaf863828b7c4794d7cf365332e9f4c3e00..404b319a85dadd7decf7a5a5331020520031a41c:/src/cocoa/msgdlg.mm diff --git a/src/cocoa/msgdlg.mm b/src/cocoa/msgdlg.mm index cf026bbb4f..0d6072a226 100644 --- a/src/cocoa/msgdlg.mm +++ b/src/cocoa/msgdlg.mm @@ -3,6 +3,7 @@ // Purpose: wxMessageDialog for wxCocoa // Author: Gareth Simpson // Created: 2007-10-09 +// RCS-ID: $Id$ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -30,6 +31,7 @@ #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" +#include "wx/testing.h" #import // ============================================================================ @@ -43,17 +45,14 @@ IMPLEMENT_CLASS(wxCocoaMessageDialog, wxDialog) // ---------------------------------------------------------------------------- wxCocoaMessageDialog::wxCocoaMessageDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - long style, - const wxPoint& pos) : wxMessageDialogBase(parent,message,caption,style) + const wxString& message, + const wxString& caption, + long style, + const wxPoint& pos) + : wxMessageDialogWithCustomLabels(parent, message, caption, style) { - //m_caption = caption; - //m_message = message; - - //wxTopLevelWindows.Append((wxWindowBase*)this); - wxTopLevelWindows.Append(this); + wxTopLevelWindows.Append(this); wxASSERT(CreateBase(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,style,wxDefaultValidator,wxDialogNameStr)); @@ -63,131 +62,100 @@ wxCocoaMessageDialog::wxCocoaMessageDialog(wxWindow *parent, m_cocoaNSWindow = nil; m_cocoaNSView = nil; - - m_yes = _("Yes"); - m_no = _("No"); - m_ok = _("OK"); - m_cancel = _("Cancel"); - } -wxCocoaMessageDialog::~wxCocoaMessageDialog() +void wxCocoaMessageDialog::DoSetCustomLabel(wxString& var, const ButtonLabel& value) { + wxMessageDialogWithCustomLabels::DoSetCustomLabel(var, value); + + var.Replace("&", ""); } int wxCocoaMessageDialog::ShowModal() { - wxAutoNSAutoreleasePool thePool; + WX_TESTING_SHOW_MODAL_HOOK(); + + wxAutoNSAutoreleasePool thePool; + + NSAlert *alert = [[[NSAlert alloc] init] autorelease]; - NSAlert *alert = [[[NSAlert alloc] init] autorelease]; - const long style = GetMessageDialogStyle(); NSAlertStyle nsStyle = NSInformationalAlertStyle; - if (style & wxICON_EXCLAMATION) - nsStyle = NSWarningAlertStyle; - else if (style & wxICON_HAND) - nsStyle = NSCriticalAlertStyle; - else if (style & wxICON_INFORMATION) - nsStyle = NSInformationalAlertStyle; - else if (style & wxICON_QUESTION) - nsStyle = NSInformationalAlertStyle; - - [alert setAlertStyle:nsStyle]; - - - - + + switch ( GetEffectiveIcon() ) + { + case wxICON_ERROR: + nsStyle = NSCriticalAlertStyle; + break; + + case wxICON_WARNING: + nsStyle = NSWarningAlertStyle; + break; + } + + [alert setAlertStyle:nsStyle]; + + + + // 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 - if (m_extendedMessage.empty()) - { - [alert setMessageText:wxNSStringWithWxString(m_caption)]; - [alert setInformativeText:wxNSStringWithWxString(m_message)]; - } - else - { - [alert setMessageText:wxNSStringWithWxString(m_message)]; - [alert setInformativeText:wxNSStringWithWxString(m_extendedMessage)]; - } - - // The wxReturn value corresponding to each button - int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ }; - if (style & wxYES_NO) - { - if ( style & wxNO_DEFAULT ) - { - [alert addButtonWithTitle:wxNSStringWithWxString(m_no)]; - [alert addButtonWithTitle:wxNSStringWithWxString(m_yes)]; - buttonId[0] = wxID_NO; - buttonId[1] = wxID_YES; - } - else - { - [alert addButtonWithTitle:wxNSStringWithWxString(m_yes)]; - [alert addButtonWithTitle:wxNSStringWithWxString(m_no)]; - buttonId[0] = wxID_YES; - buttonId[1] = wxID_NO; - } - if (style & wxCANCEL) - { - [alert addButtonWithTitle:wxNSStringWithWxString(m_cancel)]; - buttonId[2] = wxID_CANCEL; - } - } - 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 - [alert addButtonWithTitle:wxNSStringWithWxString(m_ok)]; - if (style & wxCANCEL) - { - [alert addButtonWithTitle:wxNSStringWithWxString(m_cancel)]; - buttonId[1] = wxID_CANCEL; - } - } - - int ret = [alert runModal]; - - - return buttonId[ret-NSAlertFirstButtonReturn]; -} - -bool wxCocoaMessageDialog::SetYesNoLabels(const wxString& yes,const wxString& no) -{ - m_yes = yes; - m_yes.Replace(_("&"),_("")); - m_no = no; - m_no.Replace(_("&"),_("")); - return true; -} -bool wxCocoaMessageDialog::SetYesNoCancelLabels(const wxString& yes, const wxString& no, const wxString& cancel) -{ - m_yes = yes; - m_yes.Replace(_("&"),_("")); - m_no = no; - m_no.Replace(_("&"),_("")); - m_cancel = cancel; - m_cancel.Replace(_("&"),_("")); - return true; -} -bool wxCocoaMessageDialog::SetOKLabel(const wxString& ok) -{ - m_ok = ok; - m_ok.Replace(_("&"),_("")); - return true; -} -bool wxCocoaMessageDialog::SetOKCancelLabels(const wxString& ok, const wxString& cancel) -{ - m_ok = ok; - m_ok.Replace(_("&"),_("")); - m_cancel = cancel; - m_cancel.Replace(_("&"),_("")); - return true; + if (m_extendedMessage.empty()) + { + [alert setMessageText:wxNSStringWithWxString(m_caption)]; + [alert setInformativeText:wxNSStringWithWxString(m_message)]; + } + else + { + [alert setMessageText:wxNSStringWithWxString(m_message)]; + [alert setInformativeText:wxNSStringWithWxString(m_extendedMessage)]; + } + + // The wxReturn value corresponding to each button + int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ }; + if (style & wxYES_NO) + { + if ( style & wxNO_DEFAULT ) + { + [alert addButtonWithTitle:wxNSStringWithWxString(GetNoLabel())]; + [alert addButtonWithTitle:wxNSStringWithWxString(GetYesLabel())]; + buttonId[0] = wxID_NO; + buttonId[1] = wxID_YES; + } + else + { + [alert addButtonWithTitle:wxNSStringWithWxString(GetYesLabel())]; + [alert addButtonWithTitle:wxNSStringWithWxString(GetNoLabel())]; + buttonId[0] = wxID_YES; + buttonId[1] = wxID_NO; + } + if (style & wxCANCEL) + { + [alert addButtonWithTitle:wxNSStringWithWxString(GetCancelLabel())]; + buttonId[2] = wxID_CANCEL; + } + } + 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 + [alert addButtonWithTitle:wxNSStringWithWxString(GetOKLabel())]; + if (style & wxCANCEL) + { + [alert addButtonWithTitle:wxNSStringWithWxString(GetCancelLabel())]; + buttonId[1] = wxID_CANCEL; + } + } + + int ret = [alert runModal]; + + + return buttonId[ret-NSAlertFirstButtonReturn]; } #endif // wxUSE_DIRDLG