using the CF Message box only for non main thread alerts
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44202 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -53,68 +53,69 @@ int wxMessageDialog::ShowModal()
|
|||||||
alertType = kAlertCautionAlert;
|
alertType = kAlertCautionAlert;
|
||||||
|
|
||||||
#if TARGET_API_MAC_OSX
|
#if TARGET_API_MAC_OSX
|
||||||
CFStringRef defaultButtonTitle = NULL;
|
if ( !wxIsMainThread() )
|
||||||
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 cfOKString( _("OK") , 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 )
|
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 cfOKString( _("OK") , m_font.GetEncoding()) ;
|
||||||
|
wxMacCFStringHolder cfCancelString( _("Cancel"), m_font.GetEncoding() );
|
||||||
|
|
||||||
|
int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ };
|
||||||
|
|
||||||
|
if (style & wxYES_NO)
|
||||||
{
|
{
|
||||||
defaultButtonTitle = cfNoString;
|
if ( style & wxNO_DEFAULT )
|
||||||
alternateButtonTitle = cfYesString;
|
{
|
||||||
buttonId[0] = wxID_NO;
|
defaultButtonTitle = cfNoString;
|
||||||
buttonId[1] = wxID_YES;
|
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
|
else
|
||||||
{
|
{
|
||||||
defaultButtonTitle = cfYesString;
|
// the MSW implementation even shows an OK button if it is not specified, we'll do the same
|
||||||
alternateButtonTitle = cfNoString;
|
buttonId[0] = wxID_OK;
|
||||||
buttonId[0] = wxID_YES;
|
// using null as default title does not work on earlier systems
|
||||||
buttonId[1] = wxID_NO;
|
defaultButtonTitle = cfOKString;
|
||||||
}
|
if (style & wxCANCEL)
|
||||||
if (style & wxCANCEL)
|
{
|
||||||
{
|
alternateButtonTitle = cfCancelString;
|
||||||
otherButtonTitle = cfCancelString;
|
buttonId[1] = wxID_CANCEL;
|
||||||
buttonId[2] = 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
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
// the MSW implementation even shows an OK button if it is not specified, we'll do the same
|
short result;
|
||||||
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
|
|
||||||
short result;
|
|
||||||
|
|
||||||
#if TARGET_CARBON
|
|
||||||
if ( UMAGetSystemVersion() >= 0x1000 )
|
|
||||||
{
|
|
||||||
AlertStdCFStringAlertParamRec param;
|
AlertStdCFStringAlertParamRec param;
|
||||||
wxMacCFStringHolder cfNoString( _("No"), m_font.GetEncoding() );
|
wxMacCFStringHolder cfNoString( _("No"), m_font.GetEncoding() );
|
||||||
wxMacCFStringHolder cfYesString( _("Yes"), m_font.GetEncoding() );
|
wxMacCFStringHolder cfYesString( _("Yes"), m_font.GetEncoding() );
|
||||||
@@ -172,12 +173,6 @@ int wxMessageDialog::ShowModal()
|
|||||||
param.cancelButton = 0;
|
param.cancelButton = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
else
|
|
||||||
{
|
|
||||||
skipDialog = true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
param.position = kWindowDefaultPosition;
|
param.position = kWindowDefaultPosition;
|
||||||
if ( !skipDialog )
|
if ( !skipDialog )
|
||||||
@@ -190,114 +185,48 @@ int wxMessageDialog::ShowModal()
|
|||||||
{
|
{
|
||||||
return wxID_CANCEL;
|
return wxID_CANCEL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
AlertStdAlertParamRec param;
|
|
||||||
Str255 yesPString, noPString;
|
|
||||||
Str255 pascalTitle, pascalText;
|
|
||||||
|
|
||||||
wxMacStringToPascal( m_caption, pascalTitle );
|
if (style & wxOK)
|
||||||
wxMacStringToPascal( _("Yes"), yesPString );
|
|
||||||
wxMacStringToPascal( _("No"), noPString );
|
|
||||||
wxMacStringToPascal( m_message, pascalText );
|
|
||||||
|
|
||||||
param.movable = true;
|
|
||||||
param.filterProc = NULL;
|
|
||||||
|
|
||||||
if (style & wxYES_NO)
|
|
||||||
{
|
{
|
||||||
if (style & wxCANCEL)
|
switch ( result )
|
||||||
{
|
{
|
||||||
param.defaultText = yesPString;
|
case 1:
|
||||||
param.cancelText = (StringPtr) kAlertDefaultCancelText;
|
resultbutton = wxID_OK;
|
||||||
param.otherText = noPString;
|
break;
|
||||||
param.helpButton = false;
|
|
||||||
param.defaultButton = kAlertStdAlertOKButton;
|
case 2:
|
||||||
param.cancelButton = kAlertStdAlertCancelButton;
|
// TODO: add Cancel button
|
||||||
}
|
// if (style & wxCANCEL)
|
||||||
else
|
// resultbutton = wxID_CANCEL;
|
||||||
{
|
break;
|
||||||
param.defaultText = yesPString;
|
|
||||||
param.cancelText = NULL;
|
case 3:
|
||||||
param.otherText = noPString;
|
default:
|
||||||
param.helpButton = false;
|
break;
|
||||||
param.defaultButton = kAlertStdAlertOKButton;
|
|
||||||
param.cancelButton = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (style & wxOK)
|
else if (style & wxYES_NO)
|
||||||
{
|
{
|
||||||
if (style & wxCANCEL)
|
switch ( result )
|
||||||
{
|
{
|
||||||
param.defaultText = (StringPtr) kAlertDefaultOKText;
|
case 1:
|
||||||
param.cancelText = (StringPtr) kAlertDefaultCancelText;
|
resultbutton = wxID_YES;
|
||||||
param.otherText = NULL;
|
break;
|
||||||
param.helpButton = false;
|
|
||||||
param.defaultButton = kAlertStdAlertOKButton;
|
case 2:
|
||||||
param.cancelButton = 0;
|
if (!(style & wxCANCEL))
|
||||||
}
|
resultbutton = wxID_CANCEL;
|
||||||
else
|
break;
|
||||||
{
|
|
||||||
param.defaultText = (StringPtr) kAlertDefaultOKText;
|
case 3:
|
||||||
param.cancelText = NULL;
|
resultbutton = wxID_NO;
|
||||||
param.otherText = NULL;
|
break;
|
||||||
param.helpButton = false;
|
|
||||||
param.defaultButton = kAlertStdAlertOKButton;
|
default:
|
||||||
param.cancelButton = 0;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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 2:
|
|
||||||
if (!(style & wxCANCEL))
|
|
||||||
resultbutton = wxID_CANCEL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
resultbutton = wxID_NO;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return resultbutton;
|
return resultbutton;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user