]> git.saurik.com Git - wxWidgets.git/blame - src/mac/carbon/msgdlg.cpp
reintroducing direct access, clipping to client area in dc
[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
65571936 9// Licence: wxWindows licence
e9576ca5
SC
10/////////////////////////////////////////////////////////////////////////////
11
3d1a4878 12#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
e9576ca5
SC
13#pragma implementation "msgdlg.h"
14#endif
15
3d1a4878
SC
16#include "wx/wxprec.h"
17
03e11df5 18#include "wx/app.h"
e9576ca5 19#include "wx/msgdlg.h"
49e95e1d 20#include "wx/intl.h"
519cb848 21#include "wx/mac/uma.h"
e9576ca5 22
2f1ae414 23#if !USE_SHARED_LIBRARY
e9576ca5 24IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
2f1ae414 25#endif
e9576ca5
SC
26
27wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption,
e40298d5 28 long style, const wxPoint& pos)
e9576ca5
SC
29{
30 m_caption = caption;
31 m_message = message;
32 m_dialogStyle = style;
33 m_parent = parent;
34}
35
36int wxMessageDialog::ShowModal()
37{
e40298d5
JS
38 int resultbutton = wxID_CANCEL ;
39
40 short result ;
41
427ff662 42 wxASSERT_MSG( ( m_dialogStyle & 0x3F ) != wxYES , wxT("this style is not supported on mac") ) ;
e40298d5
JS
43
44 AlertType alertType = kAlertPlainAlert ;
45 if (m_dialogStyle & wxICON_EXCLAMATION)
46 alertType = kAlertNoteAlert ;
47 else if (m_dialogStyle & wxICON_HAND)
48 alertType = kAlertStopAlert ;
49 else if (m_dialogStyle & wxICON_INFORMATION)
50 alertType = kAlertNoteAlert ;
51 else if (m_dialogStyle & wxICON_QUESTION)
52 alertType = kAlertCautionAlert ;
53
992c81e2 54#if TARGET_CARBON
e40298d5
JS
55 if ( UMAGetSystemVersion() >= 0x1000 )
56 {
57 AlertStdCFStringAlertParamRec param ;
a9412f8f
SC
58 wxMacCFStringHolder cfNoString(_("No") , m_font.GetEncoding()) ;
59 wxMacCFStringHolder cfYesString( _("Yes") , m_font.GetEncoding()) ;
e40298d5 60
a9412f8f
SC
61 wxMacCFStringHolder cfTitle(m_caption , m_font.GetEncoding());
62 wxMacCFStringHolder cfText(m_message , m_font.GetEncoding());
427ff662 63
e40298d5
JS
64 param.movable = true;
65 param.flags = 0 ;
939a2e80 66 param.version = kStdCFStringAlertVersionOne ;
e40298d5
JS
67
68 bool skipDialog = false ;
69
70 if (m_dialogStyle & wxYES_NO)
71 {
72 if (m_dialogStyle & wxCANCEL)
73 {
74 param.defaultText = cfYesString ;
75 param.cancelText = (CFStringRef) kAlertDefaultCancelText;
76 param.otherText = cfNoString ;
77 param.helpButton = false ;
939a2e80 78 param.defaultButton = m_dialogStyle & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton;
e40298d5
JS
79 param.cancelButton = kAlertStdAlertCancelButton;
80 }
81 else
82 {
83 param.defaultText = cfYesString ;
84 param.cancelText = NULL;
85 param.otherText = cfNoString ;
86 param.helpButton = false ;
939a2e80 87 param.defaultButton = m_dialogStyle & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton;
e40298d5
JS
88 param.cancelButton = 0;
89 }
90 }
c4a49e11
SC
91 // the msw implementation even shows an ok button if it is not specified, we'll do the same
92 else
e40298d5
JS
93 {
94 if (m_dialogStyle & wxCANCEL)
95 {
96 // thats a cancel missing
97 param.defaultText = (CFStringRef) kAlertDefaultOKText ;
b7aec135 98 param.cancelText = (CFStringRef) kAlertDefaultCancelText ;
e40298d5
JS
99 param.otherText = NULL;
100 param.helpButton = false ;
101 param.defaultButton = kAlertStdAlertOKButton;
102 param.cancelButton = 0;
103 }
104 else
105 {
106 param.defaultText = (CFStringRef) kAlertDefaultOKText ;
107 param.cancelText = NULL;
108 param.otherText = NULL;
109 param.helpButton = false ;
110 param.defaultButton = kAlertStdAlertOKButton;
111 param.cancelButton = 0;
112 }
113 }
c4a49e11 114 /*
e40298d5
JS
115 else
116 {
117 skipDialog = true ;
118 }
c4a49e11 119 */
e40298d5
JS
120
121 param.position = kWindowDefaultPosition;
122 if ( !skipDialog )
123 {
124 DialogRef alertRef ;
125 CreateStandardAlert( alertType , cfTitle , cfText , &param , &alertRef ) ;
126 RunStandardAlert( alertRef , NULL , &result ) ;
127 }
427ff662 128 if ( skipDialog )
e40298d5
JS
129 return wxID_CANCEL ;
130 }
131 else
992c81e2 132#endif
e40298d5
JS
133 {
134 AlertStdAlertParamRec param;
e40298d5
JS
135
136 Str255 yesPString ;
137 Str255 noPString ;
138
139 Str255 pascalTitle ;
140 Str255 pascalText ;
141 wxMacStringToPascal( m_caption , pascalTitle ) ;
142 wxMacStringToPascal( _("Yes") , yesPString ) ;
143 wxMacStringToPascal( _("No") , noPString ) ;
427ff662 144 wxMacStringToPascal( m_message , pascalText ) ;
e40298d5
JS
145
146 param.movable = true;
147 param.filterProc = NULL ;
148 if (m_dialogStyle & wxYES_NO)
149 {
150 if (m_dialogStyle & wxCANCEL)
151 {
152 param.defaultText = yesPString ;
153 param.cancelText = (StringPtr) kAlertDefaultCancelText;
154 param.otherText = noPString ;
155 param.helpButton = false ;
156 param.defaultButton = kAlertStdAlertOKButton;
157 param.cancelButton = kAlertStdAlertCancelButton;
158 }
159 else
160 {
161 param.defaultText = yesPString ;
162 param.cancelText = NULL;
163 param.otherText = noPString ;
164 param.helpButton = false ;
165 param.defaultButton = kAlertStdAlertOKButton;
166 param.cancelButton = 0;
167 }
168 }
169 else if (m_dialogStyle & wxOK)
170 {
171 if (m_dialogStyle & wxCANCEL)
172 {
e40298d5 173 param.defaultText = (StringPtr) kAlertDefaultOKText ;
b7aec135 174 param.cancelText = (StringPtr) kAlertDefaultCancelText ;
e40298d5
JS
175 param.otherText = NULL;
176 param.helpButton = false ;
177 param.defaultButton = kAlertStdAlertOKButton;
178 param.cancelButton = 0;
179 }
180 else
181 {
182 param.defaultText = (StringPtr) kAlertDefaultOKText ;
183 param.cancelText = NULL;
184 param.otherText = NULL;
185 param.helpButton = false ;
186 param.defaultButton = kAlertStdAlertOKButton;
187 param.cancelButton = 0;
188 }
189 }
190 else
191 {
192 return resultbutton ;
193 }
194
195 param.position = 0;
196
197 StandardAlert( alertType, pascalTitle, pascalText, &param, &result );
198 }
199
200 if (m_dialogStyle & wxOK)
201 {
202 if (m_dialogStyle & wxCANCEL)
203 {
204 //TODO add Cancelbutton
205 switch( result )
206 {
207 case 1 :
208 resultbutton = wxID_OK ;
209 break ;
210 case 2 :
211 break ;
212 case 3 :
213 break ;
214 }
215 }
216 else
217 {
218 switch( result )
219 {
220 case 1 :
221 resultbutton = wxID_OK ;
222 break ;
223 case 2 :
224 break ;
225 case 3 :
226 break ;
227 }
228 }
229 }
230 else if (m_dialogStyle & wxYES_NO)
231 {
232 if (m_dialogStyle & wxCANCEL)
233 {
234 switch( result )
235 {
236 case 1 :
237 resultbutton = wxID_YES ;
238 break ;
239 case 2 :
240 resultbutton = wxID_CANCEL ;
241 break ;
242 case 3 :
243 resultbutton = wxID_NO ;
244 break ;
245 }
246 }
247 else
248 {
249 switch( result )
250 {
251 case 1 :
252 resultbutton = wxID_YES ;
253 break ;
254 case 2 :
255 break ;
256 case 3 :
257 resultbutton = wxID_NO ;
258 break ;
259 }
260 }
261 }
262
263 return resultbutton ;
e9576ca5
SC
264}
265