/////////////////////////////////////////////////////////////////////////////
-// Name: msgdlg.cpp
+// Name: src/mac/carbon/msgdlg.cpp
// Purpose: wxMessageDialog
-// Author: AUTHOR
+// Author: Stefan Csomor
// Modified by:
// Created: 04/01/98
-// RCS-ID: $$
-// Copyright: (c) AUTHOR
-// Licence: wxWindows licence
+// RCS-ID: $Id$
+// Copyright: (c) Stefan Csomor
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#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
-
-short language = 0 ;
-
-void wxMacConvertNewlines( const char *source , char * destination ) ;
-void wxMacConvertNewlines( const char *source , char * destination )
-{
- const char *s = source ;
- char *d = destination ;
-
- while( *s )
- {
- switch( *s )
- {
- case 0x0a :
- *d++ = 0x0d ;
- ++s ;
- break ;
- case 0x0d :
- *d++ = 0x0d ;
- ++s ;
- if ( *s == 0x0a )
- ++s ;
- break ;
- default :
- *d++ = *s++ ;
- break ;
- }
- }
- *d = 0 ;
-}
wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption,
- long style, const wxPoint& pos)
+ 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 ;
- Str255 pascalTitle ;
- Str255 pascalText ;
- char cText[256] ;
-
- Str255 yesPString ;
- Str255 noPString ;
-
- wxMacStringToPascal( m_caption , pascalTitle ) ;
- wxMacStringToPascal( _("Yes") , yesPString ) ;
- wxMacStringToPascal( _("No") , noPString ) ;
-
- if (wxApp::s_macDefaultEncodingIsPC)
- {
- strcpy(cText , wxMacMakeMacStringFromPC( m_message) ) ;
- }
- else
- {
- strcpy( cText , m_message ) ;
- }
-
- wxMacConvertNewlines( cText , cText ) ;
- CopyCStringToPascal( cText , pascalText ) ;
-
- wxASSERT_MSG( ( m_dialogStyle & 0x3F ) != wxYES , "this style is not supported on mac" ) ;
-
-
- AlertStdAlertParamRec param;
-
- param.movable = true;
- param.filterProc = NULL ;
-
- if (m_dialogStyle & wxYES_NO)
- {
- if (m_dialogStyle & wxCANCEL)
+ int resultbutton = wxID_CANCEL ;
+
+ short result ;
+
+ const long style = GetMessageDialogStyle();
+
+ wxASSERT_MSG( ( style & 0x3F ) != wxYES , wxT("this style is not supported on mac") ) ;
+
+ AlertType alertType = kAlertPlainAlert ;
+ if (style & wxICON_EXCLAMATION)
+ alertType = kAlertNoteAlert ;
+ else if (style & wxICON_HAND)
+ alertType = kAlertStopAlert ;
+ else if (style & wxICON_INFORMATION)
+ alertType = kAlertNoteAlert ;
+ else if (style & wxICON_QUESTION)
+ alertType = kAlertCautionAlert ;
+
+#if TARGET_CARBON
+ if ( UMAGetSystemVersion() >= 0x1000 )
{
- param.defaultText = yesPString ;
- param.cancelText = (StringPtr) kAlertDefaultCancelText;
- param.otherText = noPString ;
- param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
- param.cancelButton = kAlertStdAlertCancelButton;
+ 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 (style & wxYES_NO)
+ {
+ if (style & wxCANCEL)
+ {
+ param.defaultText = cfYesString ;
+ param.cancelText = (CFStringRef) kAlertDefaultCancelText;
+ param.otherText = cfNoString ;
+ param.helpButton = false ;
+ param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton;
+ param.cancelButton = kAlertStdAlertCancelButton;
+ }
+ else
+ {
+ param.defaultText = cfYesString ;
+ param.cancelText = NULL;
+ param.otherText = cfNoString ;
+ param.helpButton = false ;
+ 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
+ {
+ if (style & wxCANCEL)
+ {
+ // thats a cancel missing
+ param.defaultText = (CFStringRef) kAlertDefaultOKText ;
+ param.cancelText = (CFStringRef) kAlertDefaultCancelText ;
+ param.otherText = NULL;
+ param.helpButton = false ;
+ param.defaultButton = kAlertStdAlertOKButton;
+ param.cancelButton = 0;
+ }
+ else
+ {
+ param.defaultText = (CFStringRef) kAlertDefaultOKText ;
+ param.cancelText = NULL;
+ param.otherText = NULL;
+ param.helpButton = false ;
+ param.defaultButton = kAlertStdAlertOKButton;
+ param.cancelButton = 0;
+ }
+ }
+ /*
+ else
+ {
+ skipDialog = true ;
+ }
+ */
+
+ param.position = kWindowDefaultPosition;
+ if ( !skipDialog )
+ {
+ DialogRef alertRef ;
+ CreateStandardAlert( alertType , cfTitle , cfText , ¶m , &alertRef ) ;
+ RunStandardAlert( alertRef , NULL , &result ) ;
+ }
+ if ( skipDialog )
+ return wxID_CANCEL ;
}
else
+#endif
{
- param.defaultText = yesPString ;
- param.cancelText = NULL;
- param.otherText = noPString ;
- param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
- param.cancelButton = 0;
- }
- }
- else if (m_dialogStyle & wxOK)
- {
- if (m_dialogStyle & wxCANCEL)
- {
- // thats a cancel missing
- param.defaultText = (StringPtr) kAlertDefaultOKText ;
- param.cancelText = NULL;
- param.otherText = NULL;
- param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
- param.cancelButton = 0;
+ 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 (style & wxYES_NO)
+ {
+ if (style & wxCANCEL)
+ {
+ param.defaultText = yesPString ;
+ param.cancelText = (StringPtr) kAlertDefaultCancelText;
+ param.otherText = noPString ;
+ param.helpButton = false ;
+ param.defaultButton = kAlertStdAlertOKButton;
+ param.cancelButton = kAlertStdAlertCancelButton;
+ }
+ else
+ {
+ param.defaultText = yesPString ;
+ param.cancelText = NULL;
+ param.otherText = noPString ;
+ param.helpButton = false ;
+ param.defaultButton = kAlertStdAlertOKButton;
+ param.cancelButton = 0;
+ }
+ }
+ else if (style & wxOK)
+ {
+ if (style & wxCANCEL)
+ {
+ param.defaultText = (StringPtr) kAlertDefaultOKText ;
+ param.cancelText = (StringPtr) kAlertDefaultCancelText ;
+ param.otherText = NULL;
+ param.helpButton = false ;
+ param.defaultButton = kAlertStdAlertOKButton;
+ param.cancelButton = 0;
+ }
+ else
+ {
+ param.defaultText = (StringPtr) kAlertDefaultOKText ;
+ param.cancelText = NULL;
+ param.otherText = NULL;
+ param.helpButton = false ;
+ param.defaultButton = kAlertStdAlertOKButton;
+ param.cancelButton = 0;
+ }
+ }
+ else
+ {
+ return resultbutton ;
+ }
+
+ param.position = 0;
+
+ StandardAlert( alertType, pascalTitle, pascalText, ¶m, &result );
}
- else
+
+ if (style & wxOK)
{
- param.defaultText = (StringPtr) kAlertDefaultOKText ;
- param.cancelText = NULL;
- param.otherText = NULL;
- param.helpButton = false ;
- param.defaultButton = kAlertStdAlertOKButton;
- param.cancelButton = 0;
+ if (style & wxCANCEL)
+ {
+ //TODO add Cancelbutton
+ switch( result )
+ {
+ case 1 :
+ resultbutton = wxID_OK ;
+ break ;
+ case 2 :
+ break ;
+ case 3 :
+ break ;
+ }
+ }
+ else
+ {
+ switch( result )
+ {
+ case 1 :
+ resultbutton = wxID_OK ;
+ break ;
+ case 2 :
+ break ;
+ case 3 :
+ break ;
+ }
+ }
}
- }
- else
- {
- return resultbutton ;
- }
-
- param.position = 0;
-
- if (m_dialogStyle & wxICON_EXCLAMATION)
- StandardAlert( kAlertNoteAlert, pascalTitle, pascalText, ¶m, &result );
- else if (m_dialogStyle & wxICON_HAND)
- StandardAlert( kAlertStopAlert, pascalTitle, pascalText, ¶m, &result );
- else if (m_dialogStyle & wxICON_INFORMATION)
- StandardAlert( kAlertNoteAlert, pascalTitle, pascalText, ¶m, &result );
- else if (m_dialogStyle & wxICON_QUESTION)
- StandardAlert( kAlertCautionAlert, pascalTitle, pascalText, ¶m, &result );
- else
- StandardAlert( kAlertPlainAlert, pascalTitle, pascalText, ¶m, &result );
-
- if (m_dialogStyle & wxOK)
- {
- if (m_dialogStyle & wxCANCEL)
- {
- //TODO add Cancelbutton
- switch( result )
- {
- case 1 :
- resultbutton = wxID_OK ;
- break ;
- case 2 :
- break ;
- case 3 :
- break ;
- }
- }
- else
- {
- switch( result )
- {
- case 1 :
- resultbutton = wxID_OK ;
- break ;
- case 2 :
- break ;
- case 3 :
- break ;
- }
- }
- }
- else if (m_dialogStyle & wxYES_NO)
- {
- if (m_dialogStyle & wxCANCEL)
+ else if (style & wxYES_NO)
{
- switch( result )
- {
- case 1 :
- resultbutton = wxID_YES ;
- break ;
- case 2 :
- resultbutton = wxID_CANCEL ;
- break ;
- case 3 :
- resultbutton = wxID_NO ;
- break ;
- }
+ if (style & wxCANCEL)
+ {
+ switch( result )
+ {
+ case 1 :
+ resultbutton = wxID_YES ;
+ break ;
+ case 2 :
+ resultbutton = wxID_CANCEL ;
+ break ;
+ case 3 :
+ resultbutton = wxID_NO ;
+ break ;
+ }
+ }
+ else
+ {
+ switch( result )
+ {
+ case 1 :
+ resultbutton = wxID_YES ;
+ break ;
+ case 2 :
+ break ;
+ case 3 :
+ resultbutton = wxID_NO ;
+ break ;
+ }
+ }
}
- else
- {
- switch( result )
- {
- case 1 :
- resultbutton = wxID_YES ;
- break ;
- case 2 :
- break ;
- case 3 :
- resultbutton = wxID_NO ;
- break ;
- }
- }
- }
-
- return resultbutton ;
+
+ return resultbutton ;
}