]> git.saurik.com Git - wxWidgets.git/blame - src/mac/classic/msgdlg.cpp
adding raster op hook to graphics context (10.4 only, partial XOR/INVERT support)
[wxWidgets.git] / src / mac / classic / msgdlg.cpp
CommitLineData
2646f485 1/////////////////////////////////////////////////////////////////////////////
e5b50758 2// Name: src/mac/classic/msgdlg.cpp
2646f485
SC
3// Purpose: wxMessageDialog
4// Author: Stefan Csomor
5// Modified by:
6// Created: 04/01/98
e5b50758 7// RCS-ID: $Id$
2646f485 8// Copyright: (c) Stefan Csomor
e5b50758 9// Licence: wxWindows licence
2646f485
SC
10/////////////////////////////////////////////////////////////////////////////
11
88a7a4e1
WS
12// for compilers that support precompilation, includes "wx.h".
13#include "wx/wxprec.h"
14
2646f485 15#include "wx/msgdlg.h"
88a7a4e1
WS
16
17#ifndef WX_PRECOMP
18 #include "wx/intl.h"
670f9935 19 #include "wx/app.h"
88a7a4e1
WS
20#endif
21
2646f485
SC
22#include "wx/mac/uma.h"
23
2646f485 24IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
2646f485
SC
25
26wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption,
27 long style, const wxPoint& pos)
28{
29 m_caption = caption;
30 m_message = message;
2646f485 31 m_parent = parent;
e5b50758 32 SetMessageDialogStyle(style);
2646f485
SC
33}
34
35int wxMessageDialog::ShowModal()
36{
37 int resultbutton = wxID_CANCEL ;
e5b50758 38
2646f485 39 short result ;
e5b50758
WS
40
41 const long style = GetMessageDialogStyle();
42
43 wxASSERT_MSG( ( style & 0x3F ) != wxYES , wxT("this style is not supported on mac") ) ;
44
2646f485 45 AlertType alertType = kAlertPlainAlert ;
e5b50758 46 if (style & wxICON_EXCLAMATION)
2646f485 47 alertType = kAlertNoteAlert ;
e5b50758 48 else if (style & wxICON_HAND)
2646f485 49 alertType = kAlertStopAlert ;
e5b50758 50 else if (style & wxICON_INFORMATION)
2646f485 51 alertType = kAlertNoteAlert ;
e5b50758 52 else if (style & wxICON_QUESTION)
2646f485 53 alertType = kAlertCautionAlert ;
e5b50758 54
2646f485
SC
55#if TARGET_CARBON
56 if ( UMAGetSystemVersion() >= 0x1000 )
57 {
58 AlertStdCFStringAlertParamRec param ;
59 wxMacCFStringHolder cfNoString(_("No") , m_font.GetEncoding()) ;
60 wxMacCFStringHolder cfYesString( _("Yes") , m_font.GetEncoding()) ;
e5b50758 61
2646f485
SC
62 wxMacCFStringHolder cfTitle(m_caption , m_font.GetEncoding());
63 wxMacCFStringHolder cfText(m_message , m_font.GetEncoding());
e5b50758 64
2646f485
SC
65 param.movable = true;
66 param.flags = 0 ;
e5b50758 67
2646f485 68 bool skipDialog = false ;
e5b50758
WS
69
70 if (style & wxYES_NO)
2646f485 71 {
e5b50758 72 if (style & wxCANCEL)
2646f485
SC
73 {
74 param.defaultText = cfYesString ;
75 param.cancelText = (CFStringRef) kAlertDefaultCancelText;
76 param.otherText = cfNoString ;
77 param.helpButton = false ;
78 param.defaultButton = kAlertStdAlertOKButton;
79 param.cancelButton = kAlertStdAlertCancelButton;
80 }
81 else
82 {
83 param.defaultText = cfYesString ;
84 param.cancelText = NULL;
85 param.otherText = cfNoString ;
86 param.helpButton = false ;
87 param.defaultButton = kAlertStdAlertOKButton;
88 param.cancelButton = 0;
89 }
90 }
91 // the msw implementation even shows an ok button if it is not specified, we'll do the same
e5b50758 92 else
2646f485 93 {
e5b50758 94 if (style & wxCANCEL)
2646f485
SC
95 {
96 // thats a cancel missing
97 param.defaultText = (CFStringRef) kAlertDefaultOKText ;
98 param.cancelText = (CFStringRef) kAlertDefaultCancelText ;
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 }
114 /*
115 else
116 {
117 skipDialog = true ;
118 }
119 */
e5b50758 120
2646f485
SC
121 param.position = kWindowDefaultPosition;
122 if ( !skipDialog )
123 {
124 DialogRef alertRef ;
125 CreateStandardAlert( alertType , cfTitle , cfText , &param , &alertRef ) ;
126 RunStandardAlert( alertRef , NULL , &result ) ;
127 }
e5b50758 128 if ( skipDialog )
2646f485
SC
129 return wxID_CANCEL ;
130 }
131 else
132#endif
133 {
134 AlertStdAlertParamRec param;
e5b50758 135
2646f485
SC
136 Str255 yesPString ;
137 Str255 noPString ;
e5b50758 138
2646f485
SC
139 Str255 pascalTitle ;
140 Str255 pascalText ;
141 wxMacStringToPascal( m_caption , pascalTitle ) ;
142 wxMacStringToPascal( _("Yes") , yesPString ) ;
143 wxMacStringToPascal( _("No") , noPString ) ;
144 wxMacStringToPascal( m_message , pascalText ) ;
e5b50758 145
2646f485
SC
146 param.movable = true;
147 param.filterProc = NULL ;
e5b50758 148 if (style & wxYES_NO)
2646f485 149 {
e5b50758 150 if (style & wxCANCEL)
2646f485
SC
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 }
e5b50758 169 else if (style & wxOK)
2646f485 170 {
e5b50758 171 if (style & wxCANCEL)
2646f485
SC
172 {
173 param.defaultText = (StringPtr) kAlertDefaultOKText ;
174 param.cancelText = (StringPtr) kAlertDefaultCancelText ;
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 }
e5b50758 194
2646f485 195 param.position = 0;
e5b50758 196
2646f485
SC
197 StandardAlert( alertType, pascalTitle, pascalText, &param, &result );
198 }
e5b50758
WS
199
200 if (style & wxOK)
2646f485 201 {
e5b50758 202 if (style & wxCANCEL)
2646f485
SC
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 }
e5b50758 230 else if (style & wxYES_NO)
2646f485 231 {
e5b50758 232 if (style & wxCANCEL)
2646f485
SC
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 }
e5b50758
WS
261 }
262
2646f485
SC
263 return resultbutton ;
264}