]> git.saurik.com Git - wxWidgets.git/blame - src/mac/carbon/msgdlg.cpp
1. added native wxMessageDialog implementation for GTK+2
[wxWidgets.git] / src / mac / carbon / msgdlg.cpp
CommitLineData
e9576ca5
SC
1/////////////////////////////////////////////////////////////////////////////
2// Name: msgdlg.cpp
3// Purpose: wxMessageDialog
a31a5f85 4// Author: Stefan Csomor
e9576ca5
SC
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $$
a31a5f85 8// Copyright: (c) Stefan Csomor
e9576ca5
SC
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "msgdlg.h"
14#endif
15
03e11df5 16#include "wx/app.h"
e9576ca5 17#include "wx/msgdlg.h"
49e95e1d 18#include "wx/intl.h"
519cb848 19#include "wx/mac/uma.h"
e9576ca5 20
2f1ae414 21#if !USE_SHARED_LIBRARY
e9576ca5 22IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
2f1ae414 23#endif
e9576ca5 24
519cb848
SC
25short language = 0 ;
26
3d2791f1 27void wxMacConvertNewlines( const char *source , char * destination ) ;
519cb848
SC
28void wxMacConvertNewlines( const char *source , char * destination )
29{
30 const char *s = source ;
31 char *d = destination ;
32
33 while( *s )
34 {
35 switch( *s )
36 {
37 case 0x0a :
38 *d++ = 0x0d ;
39 ++s ;
40 break ;
41 case 0x0d :
42 *d++ = 0x0d ;
43 ++s ;
44 if ( *s == 0x0a )
45 ++s ;
46 break ;
47 default :
48 *d++ = *s++ ;
49 break ;
50 }
51 }
52 *d = 0 ;
53}
54
e9576ca5
SC
55wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption,
56 long style, const wxPoint& pos)
57{
58 m_caption = caption;
59 m_message = message;
60 m_dialogStyle = style;
61 m_parent = parent;
62}
63
64int wxMessageDialog::ShowModal()
65{
519cb848
SC
66 int resultbutton = wxID_CANCEL ;
67
68 short result ;
519cb848 69
8208e181
SC
70 wxASSERT_MSG( ( m_dialogStyle & 0x3F ) != wxYES , "this style is not supported on mac" ) ;
71
992c81e2
SC
72 AlertType alertType = kAlertPlainAlert ;
73 if (m_dialogStyle & wxICON_EXCLAMATION)
74 alertType = kAlertNoteAlert ;
75 else if (m_dialogStyle & wxICON_HAND)
76 alertType = kAlertStopAlert ;
77 else if (m_dialogStyle & wxICON_INFORMATION)
78 alertType = kAlertNoteAlert ;
79 else if (m_dialogStyle & wxICON_QUESTION)
80 alertType = kAlertCautionAlert ;
519cb848 81
992c81e2
SC
82#if TARGET_CARBON
83 if ( UMAGetSystemVersion() >= 0x1000 )
84 {
85 AlertStdCFStringAlertParamRec param ;
86 CFStringRef cfNoString = NULL ;
87 CFStringRef cfYesString = NULL ;
519cb848 88
992c81e2
SC
89 CFStringRef cfTitle = NULL;
90 CFStringRef cfText = NULL;
91
92 cfTitle = wxMacCreateCFString( m_caption ) ;
93 cfText = wxMacCreateCFString( m_message ) ;
9145b0c6
SC
94 cfNoString = wxMacCreateCFString( _("No") ) ;
95 cfYesString = wxMacCreateCFString( _("Yes") ) ;
992c81e2
SC
96
97 param.movable = true;
98 param.flags = 0 ;
99
100 bool skipDialog = false ;
101
102 if (m_dialogStyle & wxYES_NO)
103 {
104 if (m_dialogStyle & wxCANCEL)
105 {
106 param.defaultText = cfYesString ;
107 param.cancelText = (CFStringRef) kAlertDefaultCancelText;
108 param.otherText = cfNoString ;
109 param.helpButton = false ;
110 param.defaultButton = kAlertStdAlertOKButton;
111 param.cancelButton = kAlertStdAlertCancelButton;
112 }
113 else
114 {
115 param.defaultText = cfYesString ;
116 param.cancelText = NULL;
117 param.otherText = cfNoString ;
118 param.helpButton = false ;
119 param.defaultButton = kAlertStdAlertOKButton;
120 param.cancelButton = 0;
121 }
122 }
123 else if (m_dialogStyle & wxOK)
124 {
125 if (m_dialogStyle & wxCANCEL)
126 {
127 // thats a cancel missing
128 param.defaultText = (CFStringRef) kAlertDefaultOKText ;
129 param.cancelText = NULL;
130 param.otherText = NULL;
131 param.helpButton = false ;
132 param.defaultButton = kAlertStdAlertOKButton;
133 param.cancelButton = 0;
134 }
135 else
136 {
137 param.defaultText = (CFStringRef) kAlertDefaultOKText ;
138 param.cancelText = NULL;
139 param.otherText = NULL;
140 param.helpButton = false ;
141 param.defaultButton = kAlertStdAlertOKButton;
142 param.cancelButton = 0;
143 }
144 }
145 else
146 {
147 skipDialog = true ;
148 }
149
150 param.position = kWindowDefaultPosition;
151 if ( !skipDialog )
152 {
153 DialogRef alertRef ;
154 CreateStandardAlert( alertType , cfTitle , cfText , &param , &alertRef ) ;
155 RunStandardAlert( alertRef , NULL , &result ) ;
156 }
157 if(cfTitle != NULL)
158 CFRelease(cfTitle);
159 if(cfText != NULL)
160 CFRelease(cfText);
161 if(cfNoString != NULL)
162 CFRelease(cfNoString);
163 if(cfYesString != NULL)
164 CFRelease(cfYesString);
165 if ( skipDialog )
166 return wxID_CANCEL ;
d09487dd 167 }
992c81e2
SC
168 else
169#endif
d09487dd 170 {
992c81e2
SC
171 AlertStdAlertParamRec param;
172 char cText[2048] ;
173
174 if (wxApp::s_macDefaultEncodingIsPC)
175 {
176 strcpy(cText , wxMacMakeMacStringFromPC( m_message) ) ;
177 }
178 else
179 {
180 strcpy( cText , m_message ) ;
181 }
182 wxMacConvertNewlines( cText , cText ) ;
183
184 Str255 yesPString ;
185 Str255 noPString ;
519cb848 186
992c81e2
SC
187 Str255 pascalTitle ;
188 Str255 pascalText ;
189 wxMacStringToPascal( m_caption , pascalTitle ) ;
190 wxMacStringToPascal( _("Yes") , yesPString ) ;
191 wxMacStringToPascal( _("No") , noPString ) ;
192 CopyCStringToPascal( cText , pascalText ) ;
193
194 param.movable = true;
195 param.filterProc = NULL ;
196 if (m_dialogStyle & wxYES_NO)
197 {
198 if (m_dialogStyle & wxCANCEL)
199 {
200 param.defaultText = yesPString ;
201 param.cancelText = (StringPtr) kAlertDefaultCancelText;
202 param.otherText = noPString ;
203 param.helpButton = false ;
204 param.defaultButton = kAlertStdAlertOKButton;
205 param.cancelButton = kAlertStdAlertCancelButton;
206 }
207 else
208 {
209 param.defaultText = yesPString ;
210 param.cancelText = NULL;
211 param.otherText = noPString ;
212 param.helpButton = false ;
213 param.defaultButton = kAlertStdAlertOKButton;
214 param.cancelButton = 0;
215 }
216 }
217 else if (m_dialogStyle & wxOK)
218 {
219 if (m_dialogStyle & wxCANCEL)
220 {
221 // thats a cancel missing
222 param.defaultText = (StringPtr) kAlertDefaultOKText ;
223 param.cancelText = NULL;
224 param.otherText = NULL;
225 param.helpButton = false ;
226 param.defaultButton = kAlertStdAlertOKButton;
227 param.cancelButton = 0;
228 }
229 else
230 {
231 param.defaultText = (StringPtr) kAlertDefaultOKText ;
232 param.cancelText = NULL;
233 param.otherText = NULL;
234 param.helpButton = false ;
235 param.defaultButton = kAlertStdAlertOKButton;
236 param.cancelButton = 0;
237 }
238 }
239 else
240 {
241 return resultbutton ;
242 }
519cb848 243
992c81e2
SC
244 param.position = 0;
245
246 StandardAlert( alertType, pascalTitle, pascalText, &param, &result );
247 }
d09487dd
SC
248
249 if (m_dialogStyle & wxOK)
992c81e2
SC
250 {
251 if (m_dialogStyle & wxCANCEL)
252 {
253 //TODO add Cancelbutton
254 switch( result )
519cb848 255 {
d09487dd
SC
256 case 1 :
257 resultbutton = wxID_OK ;
258 break ;
259 case 2 :
260 break ;
261 case 3 :
262 break ;
519cb848
SC
263 }
264 }
d09487dd
SC
265 else
266 {
992c81e2 267 switch( result )
d09487dd
SC
268 {
269 case 1 :
270 resultbutton = wxID_OK ;
271 break ;
272 case 2 :
273 break ;
274 case 3 :
275 break ;
519cb848 276 }
d09487dd 277 }
519cb848 278 }
992c81e2
SC
279 else if (m_dialogStyle & wxYES_NO)
280 {
281 if (m_dialogStyle & wxCANCEL)
282 {
d09487dd
SC
283 switch( result )
284 {
285 case 1 :
286 resultbutton = wxID_YES ;
287 break ;
288 case 2 :
289 resultbutton = wxID_CANCEL ;
290 break ;
291 case 3 :
292 resultbutton = wxID_NO ;
293 break ;
294 }
992c81e2
SC
295 }
296 else
297 {
d09487dd
SC
298 switch( result )
299 {
300 case 1 :
301 resultbutton = wxID_YES ;
302 break ;
303 case 2 :
304 break ;
305 case 3 :
306 resultbutton = wxID_NO ;
307 break ;
308 }
309 }
310 }
311
519cb848 312 return resultbutton ;
e9576ca5
SC
313}
314