git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11516 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
311 lines
6.5 KiB
C++
311 lines
6.5 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: msgdlg.cpp
|
|
// Purpose: wxMessageDialog
|
|
// Author: AUTHOR
|
|
// Modified by:
|
|
// Created: 04/01/98
|
|
// RCS-ID: $$
|
|
// Copyright: (c) AUTHOR
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef __GNUG__
|
|
#pragma implementation "msgdlg.h"
|
|
#endif
|
|
|
|
#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
|
|
|
|
#define kMacOKAlertResourceID 128
|
|
#define kMacYesNoAlertResourceID 129
|
|
#define kMacYesNoCancelAlertResourceID 130
|
|
#define kMacNoYesAlertResourceID 131
|
|
#define kMacNoYesCancelAlertResourceID 132
|
|
|
|
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)
|
|
{
|
|
m_caption = caption;
|
|
m_message = message;
|
|
m_dialogStyle = style;
|
|
m_parent = parent;
|
|
}
|
|
|
|
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" ) ;
|
|
|
|
if ( !UMAHasAppearance() )
|
|
{
|
|
int resourceID ;
|
|
|
|
if (m_dialogStyle & wxYES_NO)
|
|
{
|
|
if (m_dialogStyle & wxCANCEL)
|
|
resourceID = kMacYesNoCancelAlertResourceID;
|
|
else
|
|
resourceID = kMacYesNoAlertResourceID + language * 10 ;
|
|
}
|
|
else if (m_dialogStyle & wxOK)
|
|
{
|
|
if (m_dialogStyle & wxCANCEL)
|
|
resourceID = kMacOKAlertResourceID; // wrong
|
|
else
|
|
resourceID = kMacOKAlertResourceID;
|
|
}
|
|
else
|
|
{
|
|
return resultbutton ;
|
|
}
|
|
/*
|
|
if (hWnd)
|
|
msStyle |= MB_APPLMODAL;
|
|
else
|
|
msStyle |= MB_TASKMODAL;
|
|
*/
|
|
|
|
ParamText( pascalTitle , pascalText , NULL , NULL ) ;
|
|
|
|
if (m_dialogStyle & wxICON_EXCLAMATION)
|
|
result = Alert( resourceID , NULL ) ;
|
|
else if (m_dialogStyle & wxICON_HAND)
|
|
result = StopAlert( resourceID , NULL ) ;
|
|
else if (m_dialogStyle & wxICON_INFORMATION)
|
|
result = NoteAlert( resourceID , NULL ) ;
|
|
else if (m_dialogStyle & wxICON_QUESTION)
|
|
result = CautionAlert( resourceID , NULL ) ;
|
|
else
|
|
result = Alert( resourceID , NULL ) ;
|
|
|
|
resultbutton = result ;
|
|
|
|
if (m_dialogStyle & wxYES_NO)
|
|
{
|
|
if (m_dialogStyle & wxCANCEL)
|
|
{
|
|
switch( result )
|
|
{
|
|
case 1 :
|
|
resultbutton = wxID_YES ;
|
|
break ;
|
|
case 2 :
|
|
resultbutton = wxID_NO ;
|
|
break ;
|
|
case 3 :
|
|
resultbutton = wxID_CANCEL ;
|
|
break ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch( result )
|
|
{
|
|
case 1 :
|
|
resultbutton = wxID_YES ;
|
|
break ;
|
|
case 2 :
|
|
resultbutton = wxID_NO ;
|
|
break ;
|
|
case 3 :
|
|
break ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AlertStdAlertParamRec param;
|
|
|
|
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.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)
|
|
{
|
|
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 ;
|
|
}
|
|
|