/////////////////////////////////////////////////////////////////////////////
-// Name: msgdlg.cpp
+// Name: src/mac/carbon/msgdlg.cpp
// Purpose: wxMessageDialog
// Author: Stefan Csomor
// Modified by:
// Created: 04/01/98
-// RCS-ID: $$
+// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation "msgdlg.h"
-#endif
+#include "wx/wxprec.h"
#include "wx/app.h"
#include "wx/msgdlg.h"
#include "wx/intl.h"
#include "wx/mac/uma.h"
-#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
-#endif
wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption,
long style, const wxPoint& pos)
{
m_caption = caption;
m_message = message;
- m_dialogStyle = style;
m_parent = parent;
+ SetMessageDialogStyle(style);
}
int wxMessageDialog::ShowModal()
{
int resultbutton = wxID_CANCEL ;
-
- short result ;
-
- wxASSERT_MSG( ( m_dialogStyle & 0x3F ) != wxYES , wxT("this style is not supported on mac") ) ;
-
+
+ const long style = GetMessageDialogStyle();
+
+ wxASSERT_MSG( ( style & 0x3F ) != wxYES , wxT("this style is not supported on mac") ) ;
+
AlertType alertType = kAlertPlainAlert ;
- if (m_dialogStyle & wxICON_EXCLAMATION)
+ if (style & wxICON_EXCLAMATION)
alertType = kAlertNoteAlert ;
- else if (m_dialogStyle & wxICON_HAND)
+ else if (style & wxICON_HAND)
alertType = kAlertStopAlert ;
- else if (m_dialogStyle & wxICON_INFORMATION)
+ else if (style & wxICON_INFORMATION)
alertType = kAlertNoteAlert ;
- else if (m_dialogStyle & wxICON_QUESTION)
+ else if (style & wxICON_QUESTION)
alertType = kAlertCautionAlert ;
+
+#if TARGET_API_MAC_OSX
+ CFStringRef defaultButtonTitle = NULL ;
+ CFStringRef alternateButtonTitle = NULL ;
+ CFStringRef otherButtonTitle = NULL ;
+
+ wxMacCFStringHolder cfTitle(m_caption , m_font.GetEncoding());
+ wxMacCFStringHolder cfText(m_message , m_font.GetEncoding());
+
+ wxMacCFStringHolder cfNoString(_("No") , m_font.GetEncoding()) ;
+ wxMacCFStringHolder cfYesString( _("Yes") , m_font.GetEncoding()) ;
+ wxMacCFStringHolder cfCancelString( _("Cancel") , m_font.GetEncoding()) ;
+
+ int buttonId[4] = { 0 , 0 , 0 , wxID_CANCEL /* time-out */ } ;
+
+ if (style & wxYES_NO)
+ {
+ if ( style & wxNO_DEFAULT )
+ {
+ defaultButtonTitle = cfNoString ;
+ alternateButtonTitle = cfYesString ;
+ buttonId[0] = wxID_NO ;
+ buttonId[1] = wxID_YES ;
+ }
+ else
+ {
+ defaultButtonTitle = cfYesString ;
+ alternateButtonTitle = cfNoString ;
+ buttonId[0] = wxID_YES ;
+ buttonId[1] = wxID_NO ;
+ }
+ if (style & wxCANCEL)
+ {
+ otherButtonTitle = cfCancelString ;
+ buttonId[2] = wxID_CANCEL ;
+ }
+ }
+ else
+ {
+ // the msw implementation even shows an ok button if it is not specified, we'll do the same
+ buttonId[0] = wxID_OK ;
+ if (style & wxCANCEL)
+ {
+ alternateButtonTitle = cfCancelString ;
+ buttonId[1] = wxID_CANCEL ;
+ }
+ }
+
+ CFOptionFlags exitButton ;
+ OSStatus err = CFUserNotificationDisplayAlert ( 0 , alertType , NULL , NULL , NULL , cfTitle , cfText ,
+ defaultButtonTitle , alternateButtonTitle , otherButtonTitle , &exitButton );
+ if ( err == noErr )
+ resultbutton = buttonId[exitButton] ;
+
+#else
+ short result ;
#if TARGET_CARBON
if ( UMAGetSystemVersion() >= 0x1000 )
AlertStdCFStringAlertParamRec param ;
wxMacCFStringHolder cfNoString(_("No") , m_font.GetEncoding()) ;
wxMacCFStringHolder cfYesString( _("Yes") , m_font.GetEncoding()) ;
-
+
wxMacCFStringHolder cfTitle(m_caption , m_font.GetEncoding());
wxMacCFStringHolder cfText(m_message , m_font.GetEncoding());
-
+
param.movable = true;
param.flags = 0 ;
-
+ param.version = kStdCFStringAlertVersionOne ;
+
bool skipDialog = false ;
-
- if (m_dialogStyle & wxYES_NO)
+
+ if (style & wxYES_NO)
{
- if (m_dialogStyle & wxCANCEL)
+ if (style & wxCANCEL)
{
param.defaultText = cfYesString ;
param.cancelText = (CFStringRef) kAlertDefaultCancelText;
param.otherText = cfNoString ;
param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
+ param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton;
param.cancelButton = kAlertStdAlertCancelButton;
}
else
param.cancelText = NULL;
param.otherText = cfNoString ;
param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
+ param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton;
param.cancelButton = 0;
}
}
// the msw implementation even shows an ok button if it is not specified, we'll do the same
- else
+ else
{
- if (m_dialogStyle & wxCANCEL)
+ if (style & wxCANCEL)
{
// thats a cancel missing
param.defaultText = (CFStringRef) kAlertDefaultOKText ;
skipDialog = true ;
}
*/
-
+
param.position = kWindowDefaultPosition;
if ( !skipDialog )
{
CreateStandardAlert( alertType , cfTitle , cfText , ¶m , &alertRef ) ;
RunStandardAlert( alertRef , NULL , &result ) ;
}
- if ( skipDialog )
+ if ( skipDialog )
return wxID_CANCEL ;
}
else
#endif
{
AlertStdAlertParamRec param;
-
+
Str255 yesPString ;
Str255 noPString ;
-
+
Str255 pascalTitle ;
Str255 pascalText ;
wxMacStringToPascal( m_caption , pascalTitle ) ;
wxMacStringToPascal( _("Yes") , yesPString ) ;
wxMacStringToPascal( _("No") , noPString ) ;
wxMacStringToPascal( m_message , pascalText ) ;
-
+
param.movable = true;
param.filterProc = NULL ;
- if (m_dialogStyle & wxYES_NO)
+ if (style & wxYES_NO)
{
- if (m_dialogStyle & wxCANCEL)
+ if (style & wxCANCEL)
{
param.defaultText = yesPString ;
param.cancelText = (StringPtr) kAlertDefaultCancelText;
param.cancelButton = 0;
}
}
- else if (m_dialogStyle & wxOK)
+ else if (style & wxOK)
{
- if (m_dialogStyle & wxCANCEL)
+ if (style & wxCANCEL)
{
param.defaultText = (StringPtr) kAlertDefaultOKText ;
param.cancelText = (StringPtr) kAlertDefaultCancelText ;
{
return resultbutton ;
}
-
+
param.position = 0;
-
+
StandardAlert( alertType, pascalTitle, pascalText, ¶m, &result );
}
-
- if (m_dialogStyle & wxOK)
+
+ if (style & wxOK)
{
- if (m_dialogStyle & wxCANCEL)
+ if (style & wxCANCEL)
{
//TODO add Cancelbutton
switch( result )
}
}
}
- else if (m_dialogStyle & wxYES_NO)
+ else if (style & wxYES_NO)
{
- if (m_dialogStyle & wxCANCEL)
+ if (style & wxCANCEL)
{
switch( result )
{
break ;
}
}
- }
+ }
+#endif
return resultbutton ;
}