]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/msgdlg.cpp
Use wxMBConvUTF8 when G_FILENAME_ENCODING is UTF-8, and set
[wxWidgets.git] / src / mac / carbon / msgdlg.cpp
index c7f38f17b7815555dd95fd49b19c2f2a66f26488..eab75aa85914df3b979f9ad4cb62ac6a92d20c9b 100644 (file)
@@ -1,18 +1,20 @@
 /////////////////////////////////////////////////////////////////////////////
-// 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__
+#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"
 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 ;
+    int resultbutton = wxID_CANCEL ;
+
+    short result ;
 
-       short result ;
+    const long style = GetMessageDialogStyle();
 
-       wxASSERT_MSG( ( m_dialogStyle & 0x3F ) != wxYES , "this style is not supported on mac" ) ;
+    wxASSERT_MSG( ( style & 0x3F ) != wxYES , wxT("this style is not supported on mac") ) ;
 
-       AlertType alertType = kAlertPlainAlert ;
-       if (m_dialogStyle & wxICON_EXCLAMATION)
-               alertType = kAlertNoteAlert ;
-       else if (m_dialogStyle & wxICON_HAND)
-               alertType = kAlertStopAlert ;
-       else if (m_dialogStyle & wxICON_INFORMATION)
-               alertType = kAlertNoteAlert ;
-       else if (m_dialogStyle & wxICON_QUESTION)
-               alertType = kAlertCautionAlert ;
+    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 )
-       {
-               AlertStdCFStringAlertParamRec param ;
-               CFStringRef cfNoString = NULL ;
-               CFStringRef cfYesString = NULL ;
+    if ( UMAGetSystemVersion() >= 0x1000 )
+    {
+        AlertStdCFStringAlertParamRec param ;
+        wxMacCFStringHolder cfNoString(_("No") , m_font.GetEncoding()) ;
+        wxMacCFStringHolder cfYesString( _("Yes") , m_font.GetEncoding()) ;
 
-               CFStringRef cfTitle = NULL;
-               CFStringRef cfText = NULL;
-               
-               cfTitle = wxMacCreateCFString( m_caption ) ;
-               cfText = wxMacCreateCFString( m_message ) ;
-               cfNoString = wxMacCreateCFString( _("No") ) ;
-               cfYesString = wxMacCreateCFString( _("Yes") ) ;
-               
-               param.movable = true;
-               param.flags = 0 ;
-               
-               bool skipDialog = false ;
-               
-               if (m_dialogStyle & wxYES_NO)
-               {
-                   if (m_dialogStyle & wxCANCEL)
-                   {
-                               param.defaultText       = cfYesString ;
-                               param.cancelText        = (CFStringRef) kAlertDefaultCancelText;
-                               param.otherText         = cfNoString ;
-                               param.helpButton        = false ;
-                               param.defaultButton = kAlertStdAlertOKButton;
-                               param.cancelButton      = kAlertStdAlertCancelButton;
-                   }
-                   else
-                   {
-                               param.defaultText       = cfYesString ;
-                               param.cancelText        = NULL;
-                               param.otherText         = cfNoString ;
-                               param.helpButton        = false ;
-                               param.defaultButton = kAlertStdAlertOKButton;
-                               param.cancelButton      = 0;
-                   }
-               }
-               else if (m_dialogStyle & wxOK)
-               {
-                   if (m_dialogStyle & wxCANCEL)
-                   {
-               // thats a cancel missing
-                               param.defaultText       = (CFStringRef) kAlertDefaultOKText ;
-                               param.cancelText        = NULL;
-                               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 , &param , &alertRef ) ;
-                       RunStandardAlert( alertRef , NULL , &result ) ;
-               }
-               if(cfTitle != NULL)
-               CFRelease(cfTitle);   
-               if(cfText != NULL)
-               CFRelease(cfText);   
-               if(cfNoString != NULL)
-               CFRelease(cfNoString);   
-               if(cfYesString != NULL)
-               CFRelease(cfYesString);   
-       if ( skipDialog )
-               return wxID_CANCEL ;
-  }
-  else
+        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 , &param , &alertRef ) ;
+            RunStandardAlert( alertRef , NULL , &result ) ;
+        }
+        if ( skipDialog )
+            return wxID_CANCEL ;
+    }
+    else
 #endif
-  {
-               AlertStdAlertParamRec   param;
-               char   cText[2048] ;
-               
-               if (wxApp::s_macDefaultEncodingIsPC)
-               {
-                       strcpy(cText , wxMacMakeMacStringFromPC( m_message) ) ;
-               }
-               else
-               {
-                       strcpy( cText , m_message ) ;
-               }
-               wxMacConvertNewlines( cText , cText ) ;
-       
-               Str255 yesPString ;
-               Str255 noPString ;
+    {
+        AlertStdAlertParamRec    param;
+
+        Str255 yesPString ;
+        Str255 noPString ;
+
+        Str255 pascalTitle ;
+        Str255 pascalText ;
+        wxMacStringToPascal( m_caption , pascalTitle ) ;
+        wxMacStringToPascal( _("Yes") , yesPString ) ;
+        wxMacStringToPascal(  _("No") , noPString ) ;
+        wxMacStringToPascal( m_message , pascalText ) ;
 
-               Str255 pascalTitle ;
-               Str255 pascalText ;
-               wxMacStringToPascal( m_caption , pascalTitle ) ;
-               wxMacStringToPascal( _("Yes") , yesPString ) ;
-               wxMacStringToPascal(  _("No") , noPString ) ;
-               CopyCStringToPascal( cText , pascalText ) ;
-               
-               param.movable           = true;
-       param.filterProc        = NULL ;
-               if (m_dialogStyle & wxYES_NO)
-               {
-                   if (m_dialogStyle & 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 (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;
-                   }
-                   else
-                   {
-                               param.defaultText       = (StringPtr) kAlertDefaultOKText ;
-                               param.cancelText        = NULL;
-                               param.otherText         = NULL;
-                               param.helpButton        = false ;
-                               param.defaultButton = kAlertStdAlertOKButton;
-                               param.cancelButton      = 0;
-                       }
-               }
-               else
-               {
-                       return resultbutton ;
-               }
+        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;
+        param.position         = 0;
 
-               StandardAlert( alertType, pascalTitle, pascalText, &param, &result );
-       }
+        StandardAlert( alertType, pascalTitle, pascalText, &param, &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)
-               {
-                       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 ;
-                       }
-               }
-       } 
+    if (style & wxOK)
+    {
+        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 if (style & wxYES_NO)
+    {
+        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 ;
+            }
+        }
+    }
 
-       return resultbutton ;
+    return resultbutton ;
 }