#ifndef WX_PRECOMP
#include "wx/intl.h"
+ #include "wx/app.h"
#endif
-#include "wx/app.h"
+#include "wx/thread.h"
#include "wx/mac/uma.h"
IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
-wxMessageDialog::wxMessageDialog(
- wxWindow *parent, const wxString& message, const wxString& caption,
- long style, const wxPoint& pos )
+wxMessageDialog::wxMessageDialog(wxWindow *parent,
+ const wxString& message,
+ const wxString& caption,
+ long style,
+ const wxPoint& WXUNUSED(pos))
+ : wxMessageDialogBase(parent, message, caption, style)
{
- m_caption = caption;
- m_message = message;
- m_parent = parent;
- SetMessageDialogStyle(style);
+ m_yes = _("Yes");
+ m_no = _("No");
+ m_ok = _("OK");
+ m_cancel = _("Cancel");
+}
+
+bool wxMessageDialog::SetYesNoLabels(const wxString& yes,const wxString& no)
+{
+ m_yes = yes;
+ m_no = no;
+ return true;
+}
+
+bool wxMessageDialog::SetYesNoCancelLabels(const wxString& yes, const wxString& no, const wxString& cancel)
+{
+ m_yes = yes;
+ m_no = no;
+ m_cancel = cancel;
+ return true;
+}
+
+bool wxMessageDialog::SetOKLabel(const wxString& ok)
+{
+ m_ok = ok;
+ return true;
+}
+
+bool wxMessageDialog::SetOKCancelLabels(const wxString& ok, const wxString& cancel)
+{
+ m_ok = ok;
+ m_cancel = cancel;
+ return true;
}
int wxMessageDialog::ShowModal()
AlertType alertType = kAlertPlainAlert;
if (style & wxICON_EXCLAMATION)
- alertType = kAlertNoteAlert;
+ alertType = kAlertCautionAlert;
else if (style & wxICON_HAND)
alertType = kAlertStopAlert;
else if (style & wxICON_INFORMATION)
alertType = kAlertNoteAlert;
else if (style & wxICON_QUESTION)
- alertType = kAlertCautionAlert;
+ alertType = kAlertNoteAlert;
-#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() );
+ // work out what to display
+ // if the extended text is empty then we use the caption as the title
+ // and the message as the text (for backwards compatibility)
+ // but if the extended message is not empty then we use the message as the title
+ // and the extended message as the text because that makes more sense
- wxMacCFStringHolder cfNoString( wxT("No"), m_font.GetEncoding() );
- wxMacCFStringHolder cfYesString( wxT("Yes"), m_font.GetEncoding() );
- wxMacCFStringHolder cfOKString( _("OK") , m_font.GetEncoding()) ;
- wxMacCFStringHolder cfCancelString( wxT("Cancel"), m_font.GetEncoding() );
+ wxString msgtitle,msgtext;
+ if(m_extendedMessage.IsEmpty())
+ {
+ msgtitle = m_caption;
+ msgtext = m_message;
+ }
+ else
+ {
+ msgtitle = m_message;
+ msgtext = m_extendedMessage;
+ }
- int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ };
- if (style & wxYES_NO)
+ if ( !wxIsMainThread() )
{
- if ( style & wxNO_DEFAULT )
+ CFStringRef defaultButtonTitle = NULL;
+ CFStringRef alternateButtonTitle = NULL;
+ CFStringRef otherButtonTitle = NULL;
+
+ wxCFStringRef cfTitle( msgtitle, GetFont().GetEncoding() );
+ wxCFStringRef cfText( msgtext, GetFont().GetEncoding() );
+
+ wxCFStringRef cfNoString( m_no.c_str(), GetFont().GetEncoding() );
+ wxCFStringRef cfYesString( m_yes.c_str(), GetFont().GetEncoding() );
+ wxCFStringRef cfOKString( m_ok.c_str() , GetFont().GetEncoding()) ;
+ wxCFStringRef cfCancelString( m_cancel.c_str(), GetFont().GetEncoding() );
+
+ int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ };
+
+ if (style & wxYES_NO)
{
- defaultButtonTitle = cfNoString;
- alternateButtonTitle = cfYesString;
- buttonId[0] = wxID_NO;
- buttonId[1] = wxID_YES;
+ 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
{
- defaultButtonTitle = cfYesString;
- alternateButtonTitle = cfNoString;
- buttonId[0] = wxID_YES;
- buttonId[1] = wxID_NO;
- }
- if (style & wxCANCEL)
- {
- otherButtonTitle = cfCancelString;
- buttonId[2] = wxID_CANCEL;
+ // the MSW implementation even shows an OK button if it is not specified, we'll do the same
+ buttonId[0] = wxID_OK;
+ // using null as default title does not work on earlier systems
+ defaultButtonTitle = cfOKString;
+ 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
{
- // the MSW implementation even shows an OK button if it is not specified, we'll do the same
- buttonId[0] = wxID_OK;
- // using null as default title does not work on earlier systems
- defaultButtonTitle = cfOKString;
- if (style & wxCANCEL)
- {
- alternateButtonTitle = cfCancelString;
- buttonId[1] = wxID_CANCEL;
- }
- }
+ short result;
- 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( wxT("No"), m_font.GetEncoding() );
- wxMacCFStringHolder cfYesString( wxT("Yes"), m_font.GetEncoding() );
+ wxCFStringRef cfNoString( m_no.c_str(), GetFont().GetEncoding() );
+ wxCFStringRef cfYesString( m_yes.c_str(), GetFont().GetEncoding() );
+ wxCFStringRef cfOKString( m_ok.c_str(), GetFont().GetEncoding() );
+ wxCFStringRef cfCancelString( m_cancel.c_str(), GetFont().GetEncoding() );
- wxMacCFStringHolder cfTitle( m_caption, m_font.GetEncoding() );
- wxMacCFStringHolder cfText( m_message, m_font.GetEncoding() );
+ wxCFStringRef cfTitle( msgtitle, GetFont().GetEncoding() );
+ wxCFStringRef cfText( msgtext, GetFont().GetEncoding() );
param.movable = true;
param.flags = 0;
if (style & wxCANCEL)
{
param.defaultText = cfYesString;
- param.cancelText = (CFStringRef) kAlertDefaultCancelText;
+ param.cancelText = cfCancelString;
param.otherText = cfNoString;
param.helpButton = false;
param.defaultButton = style & wxNO_DEFAULT ? kAlertStdAlertOtherButton : kAlertStdAlertOKButton;
if (style & wxCANCEL)
{
// that's a cancel missing
- param.defaultText = (CFStringRef) kAlertDefaultOKText;
- param.cancelText = (CFStringRef) kAlertDefaultCancelText;
+ param.defaultText = cfOKString;
+ param.cancelText = cfCancelString;
param.otherText = NULL;
param.helpButton = false;
param.defaultButton = kAlertStdAlertOKButton;
}
else
{
- param.defaultText = (CFStringRef) kAlertDefaultOKText;
+ param.defaultText = cfOKString;
param.cancelText = NULL;
param.otherText = NULL;
param.helpButton = false;
param.cancelButton = 0;
}
}
-#if 0
- else
- {
- skipDialog = true;
- }
-#endif
param.position = kWindowDefaultPosition;
if ( !skipDialog )
{
return wxID_CANCEL;
}
- }
- else
-#endif
- {
- AlertStdAlertParamRec param;
- Str255 yesPString, noPString;
- Str255 pascalTitle, pascalText;
-
- wxMacStringToPascal( m_caption, pascalTitle );
- wxMacStringToPascal( wxT("Yes"), yesPString );
- wxMacStringToPascal( wxT("No"), noPString );
- wxMacStringToPascal( m_message, pascalText );
- param.movable = true;
- param.filterProc = NULL;
-
- if (style & wxYES_NO)
+ if (style & wxOK)
{
- if (style & wxCANCEL)
+ switch ( result )
{
- 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;
+ case 1:
+ resultbutton = wxID_OK;
+ break;
+
+ case 2:
+ // TODO: add Cancel button
+ // if (style & wxCANCEL)
+ // resultbutton = wxID_CANCEL;
+ break;
+
+ case 3:
+ default:
+ break;
}
}
- else if (style & wxOK)
+ else if (style & wxYES_NO)
{
- if (style & wxCANCEL)
+ switch ( result )
{
- 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 );
- }
-
- if (style & wxOK)
- {
- switch ( result )
- {
- case 1:
- resultbutton = wxID_OK;
- break;
-
- case 2:
- // TODO: add Cancel button
- // if (style & wxCANCEL)
- // resultbutton = wxID_CANCEL;
- break;
-
- case 3:
- default:
- break;
- }
- }
- else if (style & wxYES_NO)
- {
- switch ( result )
- {
- case 1:
- resultbutton = wxID_YES;
- break;
+ case 1:
+ resultbutton = wxID_YES;
+ break;
- case 2:
- if (!(style & wxCANCEL))
- resultbutton = wxID_CANCEL;
- break;
+ case 2:
+ if (!(style & wxCANCEL))
+ resultbutton = wxID_CANCEL;
+ break;
- case 3:
- resultbutton = wxID_NO;
- break;
+ case 3:
+ resultbutton = wxID_NO;
+ break;
- default:
- break;
+ default:
+ break;
+ }
}
}
-#endif
return resultbutton;
}