Make default values correspond to the defaults in DialogDriver.h. When the user clicks Ignore, make sure it really does get ignored. Implement AbortRety.

This commit is contained in:
Steve Checkoway
2005-12-24 02:08:01 +00:00
parent 9a2229999c
commit 3f14485b5d
2 changed files with 33 additions and 23 deletions
@@ -1,60 +1,69 @@
#include "global.h"
#include "RageUtil.h"
#include "DialogDriver_Cocoa.h"
#include "RageThreads.h"
#include "ProductInfo.h"
#include <Carbon/Carbon.h>
static CFOptionFlags ShowAlert( CFOptionFlags flags, CFStringRef message,
CFStringRef OK, CFStringRef cancel = NULL )
static CFOptionFlags ShowAlert( CFOptionFlags flags, const CString& sMessage, CFStringRef OK,
CFStringRef alt = NULL, CFStringRef other = NULL)
{
CFOptionFlags result;
CFStringRef text = CFStringCreateWithCString( NULL, sMessage, kCFStringEncodingUTF8 );
CFUserNotificationDisplayAlert( 0.0, flags, NULL, NULL, NULL, CFSTR(PRODUCT_NAME),
message, OK, cancel, NULL, &result );
text, OK, alt, other, &result );
CFRelease( text );
return result;
}
void DialogDriver_Cocoa::OK( CString sMessage, CString sID )
{
CFStringRef message = CFStringCreateWithCString( NULL, sMessage, kCFStringEncodingASCII );
CFOptionFlags result = ShowAlert( kCFUserNotificationNoteAlertLevel, message,
CFOptionFlags result = ShowAlert( kCFUserNotificationNoteAlertLevel, sMessage,
CFSTR("OK"), CFSTR("Don't show again") );
CFRelease( message );
if( result == kCFUserNotificationAlternateResponse )
Dialog::IgnoreMessage( sID );
}
void DialogDriver_Cocoa::Error( CString sError, CString sID )
{
CFStringRef error = CFStringCreateWithCString( NULL, sError, kCFStringEncodingASCII );
ShowAlert( kCFUserNotificationStopAlertLevel, error, CFSTR("OK") );
CFRelease( error );
ShowAlert( kCFUserNotificationStopAlertLevel, sError, CFSTR("OK") );
}
Dialog::Result DialogDriver_Cocoa::AbortRetryIgnore( CString sMessage, CString sID )
{
CFStringRef error = CFStringCreateWithCString( NULL, sMessage, kCFStringEncodingASCII );
CFOptionFlags result = ShowAlert( kCFUserNotificationNoteAlertLevel, error, CFSTR("Retry"), CFSTR("Ignore") );
Dialog::Result ret;
CFOptionFlags result = ShowAlert( kCFUserNotificationNoteAlertLevel, sMessage, CFSTR("Ignore"),
CFSTR("Retry"), CFSTR("Abort") );
CFRelease( error );
switch( result )
{
case kCFUserNotificationDefaultResponse:
ret = Dialog::retry;
break;
Dialog::IgnoreMessage( sID );
return Dialog::ignore;
case kCFUserNotificationAlternateResponse:
case kCFUserNotificationCancelResponse:
ret = Dialog::ignore;
break;
return Dialog::retry;
case kCFUserNotificationOtherResponse:
return Dialog::abort;
default:
ASSERT(0);
ret = Dialog::ignore;
FAIL_M( ssprintf("Invalid response: %d.", int(result)) );
}
}
Dialog::Result DialogDriver_Cocoa::AbortRetry( CString sMessage, CString sID )
{
CFOptionFlags result = ShowAlert( kCFUserNotificationNoteAlertLevel, sMessage,
CFSTR("Abort"), CFSTR("Retry") );
switch( result )
{
case kCFUserNotificationDefaultResponse:
return Dialog::abort;
case kCFUserNotificationAlternateResponse:
return Dialog::retry;
default:
FAIL_M( ssprintf("Invalid response: %d.", int(result)) );
}
return ret;
}
/*
@@ -9,6 +9,7 @@ public:
void Error( CString sError, CString sID );
void OK( CString sMessage, CString sID );
Dialog::Result AbortRetryIgnore( CString sMessage, CString sID );
Dialog::Result AbortRetry( CString sMessage, CString sID );
};
#define USE_DIALOG_DRIVER_COCOA