1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxMessageDialog 
   4 // Author:      Stefan Csomor 
   8 // Copyright:   (c) Stefan Csomor 
   9 // Licence:       wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  13 #pragma implementation "msgdlg.h" 
  16 #include "wx/wxprec.h" 
  19 #include "wx/msgdlg.h" 
  21 #include "wx/mac/uma.h" 
  23 #if !USE_SHARED_LIBRARY 
  24 IMPLEMENT_CLASS(wxMessageDialog
, wxDialog
) 
  27 wxMessageDialog::wxMessageDialog(wxWindow 
*parent
, const wxString
& message
, const wxString
& caption
, 
  28                                  long style
, const wxPoint
& pos
) 
  32     m_dialogStyle 
= style
; 
  36 int wxMessageDialog::ShowModal() 
  38     int resultbutton 
= wxID_CANCEL 
; 
  42     wxASSERT_MSG( ( m_dialogStyle 
& 0x3F ) != wxYES 
, wxT("this style is not supported on mac") ) ; 
  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 
; 
  55     if ( UMAGetSystemVersion() >= 0x1000 ) 
  57         AlertStdCFStringAlertParamRec param 
; 
  58         wxMacCFStringHolder 
cfNoString(_("No") , m_font
.GetEncoding()) ; 
  59         wxMacCFStringHolder 
cfYesString( _("Yes") , m_font
.GetEncoding()) ; 
  61         wxMacCFStringHolder 
cfTitle(m_caption 
, m_font
.GetEncoding()); 
  62         wxMacCFStringHolder 
cfText(m_message 
, m_font
.GetEncoding()); 
  66         param
.version 
= kStdCFStringAlertVersionOne 
; 
  68         bool skipDialog 
= false ; 
  70         if (m_dialogStyle 
& wxYES_NO
) 
  72             if (m_dialogStyle 
& wxCANCEL
) 
  74                 param
.defaultText     
= cfYesString 
; 
  75                 param
.cancelText     
= (CFStringRef
) kAlertDefaultCancelText
; 
  76                 param
.otherText     
= cfNoString 
; 
  77                 param
.helpButton     
= false ; 
  78                 param
.defaultButton 
= m_dialogStyle 
& wxNO_DEFAULT 
? kAlertStdAlertOtherButton 
: kAlertStdAlertOKButton
; 
  79                 param
.cancelButton     
= kAlertStdAlertCancelButton
; 
  83                 param
.defaultText     
= cfYesString 
; 
  84                 param
.cancelText     
= NULL
; 
  85                 param
.otherText     
= cfNoString 
; 
  86                 param
.helpButton     
= false ; 
  87                 param
.defaultButton 
= m_dialogStyle 
& wxNO_DEFAULT 
? kAlertStdAlertOtherButton 
: kAlertStdAlertOKButton
; 
  88                 param
.cancelButton     
= 0; 
  91         // the msw implementation even shows an ok button if it is not specified, we'll do the same 
  94             if (m_dialogStyle 
& wxCANCEL
) 
  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; 
 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; 
 121         param
.position 
= kWindowDefaultPosition
; 
 125             CreateStandardAlert( alertType 
, cfTitle 
, cfText 
, ¶m 
, &alertRef 
) ; 
 126             RunStandardAlert( alertRef 
, NULL 
, &result 
) ; 
 134         AlertStdAlertParamRec    param
; 
 141         wxMacStringToPascal( m_caption 
, pascalTitle 
) ; 
 142         wxMacStringToPascal( _("Yes") , yesPString 
) ; 
 143         wxMacStringToPascal(  _("No") , noPString 
) ; 
 144         wxMacStringToPascal( m_message 
, pascalText 
) ; 
 146         param
.movable         
= true; 
 147         param
.filterProc     
= NULL 
; 
 148         if (m_dialogStyle 
& wxYES_NO
) 
 150             if (m_dialogStyle 
& wxCANCEL
) 
 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
; 
 161                 param
.defaultText     
= yesPString 
; 
 162                 param
.cancelText     
= NULL
; 
 163                 param
.otherText     
= noPString 
; 
 164                 param
.helpButton     
= false ; 
 165                 param
.defaultButton 
= kAlertStdAlertOKButton
; 
 166                 param
.cancelButton     
= 0; 
 169         else if (m_dialogStyle 
& wxOK
) 
 171             if (m_dialogStyle 
& wxCANCEL
) 
 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; 
 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; 
 192             return resultbutton 
; 
 197         StandardAlert( alertType
, pascalTitle
, pascalText
, ¶m
, &result 
); 
 200     if (m_dialogStyle 
& wxOK
) 
 202         if (m_dialogStyle 
& wxCANCEL
)                 
 204             //TODO add Cancelbutton 
 208                 resultbutton 
= wxID_OK 
; 
 221                 resultbutton 
= wxID_OK 
; 
 230     else if (m_dialogStyle 
& wxYES_NO
) 
 232         if (m_dialogStyle 
& wxCANCEL
) 
 237                 resultbutton 
= wxID_YES 
; 
 240                 resultbutton 
= wxID_CANCEL 
; 
 243                 resultbutton 
= wxID_NO 
; 
 252                 resultbutton 
= wxID_YES 
; 
 257                 resultbutton 
= wxID_NO 
; 
 263     return resultbutton 
;