1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/cocoa/dirdlg.mm
3 // Purpose: wxMessageDialog for wxCocoa
4 // Author: Gareth Simpson
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 // ============================================================================
12 // ============================================================================
14 // ----------------------------------------------------------------------------
16 // ----------------------------------------------------------------------------
18 // For compilers that support precompilation, includes "wx.h".
19 #include "wx/wxprec.h"
24 #include "wx/msgdlg.h"
32 #include "wx/cocoa/autorelease.h"
33 #include "wx/cocoa/string.h"
35 #import <AppKit/NSAlert.h>
36 // ============================================================================
38 // ============================================================================
40 IMPLEMENT_CLASS(wxCocoaMessageDialog, wxDialog)
42 // ----------------------------------------------------------------------------
44 // ----------------------------------------------------------------------------
46 wxCocoaMessageDialog::wxCocoaMessageDialog(wxWindow *parent,
47 const wxString& message,
48 const wxString& caption,
50 const wxPoint& pos) : wxMessageDialogBase(parent,message,caption,style)
53 //m_caption = caption;
54 //m_message = message;
56 //wxTopLevelWindows.Append((wxWindowBase*)this);
57 wxTopLevelWindows.Append(this);
59 wxASSERT(CreateBase(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,style,wxDefaultValidator,wxDialogNameStr));
62 parent->AddChild(this);
65 m_cocoaNSWindow = nil;
71 m_cancel = _("Cancel");
75 wxCocoaMessageDialog::~wxCocoaMessageDialog()
79 int wxCocoaMessageDialog::ShowModal()
81 wxAutoNSAutoreleasePool thePool;
83 NSAlert *alert = [[[NSAlert alloc] init] autorelease];
85 const long style = GetMessageDialogStyle();
87 NSAlertStyle nsStyle = NSInformationalAlertStyle;
88 if (style & wxICON_EXCLAMATION)
89 nsStyle = NSWarningAlertStyle;
90 else if (style & wxICON_HAND)
91 nsStyle = NSCriticalAlertStyle;
92 else if (style & wxICON_INFORMATION)
93 nsStyle = NSInformationalAlertStyle;
94 else if (style & wxICON_QUESTION)
95 nsStyle = NSInformationalAlertStyle;
97 [alert setAlertStyle:nsStyle];
102 // work out what to display
103 // if the extended text is empty then we use the caption as the title
104 // and the message as the text (for backwards compatibility)
105 // but if the extended message is not empty then we use the message as the title
106 // and the extended message as the text because that makes more sense
107 if (m_extendedMessage.empty())
109 [alert setMessageText:wxNSStringWithWxString(m_caption)];
110 [alert setInformativeText:wxNSStringWithWxString(m_message)];
114 [alert setMessageText:wxNSStringWithWxString(m_message)];
115 [alert setInformativeText:wxNSStringWithWxString(m_extendedMessage)];
118 // The wxReturn value corresponding to each button
119 int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ };
120 if (style & wxYES_NO)
122 if ( style & wxNO_DEFAULT )
124 [alert addButtonWithTitle:wxNSStringWithWxString(m_no)];
125 [alert addButtonWithTitle:wxNSStringWithWxString(m_yes)];
126 buttonId[0] = wxID_NO;
127 buttonId[1] = wxID_YES;
131 [alert addButtonWithTitle:wxNSStringWithWxString(m_yes)];
132 [alert addButtonWithTitle:wxNSStringWithWxString(m_no)];
133 buttonId[0] = wxID_YES;
134 buttonId[1] = wxID_NO;
136 if (style & wxCANCEL)
138 [alert addButtonWithTitle:wxNSStringWithWxString(m_cancel)];
139 buttonId[2] = wxID_CANCEL;
144 // the MSW implementation even shows an OK button if it is not specified, we'll do the same
145 buttonId[0] = wxID_OK;
146 // using null as default title does not work on earlier systems
147 [alert addButtonWithTitle:wxNSStringWithWxString(m_ok)];
148 if (style & wxCANCEL)
150 [alert addButtonWithTitle:wxNSStringWithWxString(m_cancel)];
151 buttonId[1] = wxID_CANCEL;
155 int ret = [alert runModal];
158 return buttonId[ret-NSAlertFirstButtonReturn];
161 bool wxCocoaMessageDialog::SetYesNoLabels(const wxString& yes,const wxString& no)
164 m_yes.Replace(_("&"),_(""));
166 m_no.Replace(_("&"),_(""));
169 bool wxCocoaMessageDialog::SetYesNoCancelLabels(const wxString& yes, const wxString& no, const wxString& cancel)
172 m_yes.Replace(_("&"),_(""));
174 m_no.Replace(_("&"),_(""));
176 m_cancel.Replace(_("&"),_(""));
179 bool wxCocoaMessageDialog::SetOKLabel(const wxString& ok)
182 m_ok.Replace(_("&"),_(""));
185 bool wxCocoaMessageDialog::SetOKCancelLabels(const wxString& ok, const wxString& cancel)
188 m_ok.Replace(_("&"),_(""));
190 m_cancel.Replace(_("&"),_(""));
194 #endif // wxUSE_DIRDLG