Mac OS X DialogDriver was lacking OKCancel, I also added YesNo Dialog to every platform.

This commit is contained in:
Aldo Fregoso
2012-05-20 22:19:27 -05:00
parent 341a474c9a
commit 0e2cc939d6
7 changed files with 90 additions and 3 deletions
+24
View File
@@ -234,6 +234,30 @@ Dialog::Result Dialog::AbortRetry( RString sMessage, RString sID )
return ret;
}
Dialog::Result Dialog::YesNo( RString sMessage, RString sID )
{
Dialog::Init();
if( LOG )
LOG->Trace( "Dialog: \"%s\" [%s]", sMessage.c_str(), sID.c_str() );
if( sID != "" && MessageIsIgnored(sID) )
return g_NullDriver.YesNo( sMessage, sID );
RageThread::SetIsShowingDialog( true );
// only show Dialog if windowed
Dialog::Result ret;
if( DialogsEnabled() )
ret = g_pImpl->YesNo( sMessage, sID ); // call derived version
else
ret = g_NullDriver.YesNo( sMessage, sID );
RageThread::SetIsShowingDialog( false );
return ret;
}
/*
* (c) 2003-2004 Glenn Maynard, Chris Danford
* All rights reserved.
+2 -1
View File
@@ -10,12 +10,13 @@ namespace Dialog
void SetWindowed( bool bWindowed );
enum Result { ok, cancel, abort, retry, ignore };
enum Result { ok, cancel, abort, retry, ignore, yes, no };
void Error( RString sError, RString sID = "" );
void OK( RString sMessage, RString sID = "" );
Result OKCancel( RString sMessage, RString sID = "" );
Result AbortRetryIgnore( RString sMessage, RString sID = "" );
Result AbortRetry( RString sMessage, RString sID = "" );
Result YesNo( RString sMessage, RString sID = "" );
/* for DialogDrivers */
void IgnoreMessage( RString sID );
+3 -2
View File
@@ -12,8 +12,9 @@ public:
virtual void Error( RString sMessage, RString sID ) { printf("Error: %s\n", sMessage.c_str()); }
virtual void OK( RString sMessage, RString sID ) {}
virtual Dialog::Result OKCancel( RString sMessage, RString sID ) { return Dialog::ok; }
virtual Dialog::Result AbortRetryIgnore( RString sMessage, RString sID ) { return Dialog::ignore; }
virtual Dialog::Result AbortRetry( RString sMessage, RString sID ) { return Dialog::abort; }
virtual Dialog::Result AbortRetryIgnore( RString sMessage, RString sID ) { return Dialog::ignore; }
virtual Dialog::Result AbortRetry( RString sMessage, RString sID ) { return Dialog::abort; }
virtual Dialog::Result YesNo( RString sMessage, RString sID ) { return Dialog::no; }
virtual RString Init() { return RString(); }
virtual ~DialogDriver() { }
+42
View File
@@ -54,6 +54,27 @@ void DialogDriver_MacOSX::Error( RString sError, RString sID )
ShowAlert( kCFUserNotificationStopAlertLevel, sError, CFSTR("OK") );
}
Dialog::Result DialogDriver_MacOSX::OKCancel( RString sMessage, RString sID )
{
CFBundleRef bundle = CFBundleGetMainBundle();
CFStringRef sOK = LSTRING( bundle, "OK" );
CFStringRef sCancel = LSTRING( bundle, "Cancel" );
CFOptionFlags result = ShowAlert( kCFUserNotificationNoteAlertLevel, sMessage, sOK, sCancel );
CFRelease( sOK );
CFRelease( sCancel );
switch( result )
{
case kCFUserNotificationDefaultResponse:
case kCFUserNotificationCancelResponse:
return Dialog::cancel;
case kCFUserNotificationAlternateResponse:
return Dialog::ok;
default:
FAIL_M( ssprintf("Invalid response: %d.", int(result)) );
}
}
Dialog::Result DialogDriver_MacOSX::AbortRetryIgnore( RString sMessage, RString sID )
{
CFBundleRef bundle = CFBundleGetMainBundle();
@@ -101,6 +122,27 @@ Dialog::Result DialogDriver_MacOSX::AbortRetry( RString sMessage, RString sID )
}
}
Dialog::Result DialogDriver_MacOSX::YesNo( RString sMessage, RString sID )
{
CFBundleRef bundle = CFBundleGetMainBundle();
CFStringRef sYes = LSTRING( bundle, "Yes" );
CFStringRef sNo = LSTRING( bundle, "No" );
CFOptionFlags result = ShowAlert( kCFUserNotificationNoteAlertLevel, sMessage, sYes, sNo );
CFRelease( sYes );
CFRelease( sNo );
switch( result )
{
case kCFUserNotificationDefaultResponse:
case kCFUserNotificationCancelResponse:
return Dialog::no;
case kCFUserNotificationAlternateResponse:
return Dialog::yes;
default:
FAIL_M( ssprintf("Invalid response: %d.", int(result)) );
}
}
/*
* (c) 2003-2006 Steve Checkoway
* All rights reserved.
+2
View File
@@ -8,8 +8,10 @@ class DialogDriver_MacOSX: public DialogDriver
public:
void Error( RString sError, RString sID );
void OK( RString sMessage, RString sID );
Dialog::Result OKCancel( RString sMessage, RString sID );
Dialog::Result AbortRetryIgnore( RString sMessage, RString sID );
Dialog::Result AbortRetry( RString sMessage, RString sID );
Dialog::Result YesNo( RString sMessage, RString sID );
};
#define USE_DIALOG_DRIVER_COCOA
+16
View File
@@ -263,6 +263,22 @@ Dialog::Result DialogDriver_Win32::AbortRetry( RString sMessage, RString sID )
}
}
Dialog::Result DialogDriver_Win32::YesNo( RString sMessage, RString sID )
{
int iRet = 0;
#if !defined(SMPACKAGE)
iRet = ::MessageBox(::GetHwnd(), ConvertUTF8ToACP(sMessage).c_str(), ConvertUTF8ToACP(::GetWindowTitle()).c_str(), MB_YESNO);
#else
iRet = ::AfxMessageBox( ConvertUTF8ToACP(sMessage).c_str(), MB_RETRYCANCEL, 0 );
#endif
switch( iRet )
{
case IDYES: return Dialog::yes;
default: ASSERT(0);
case IDNO: return Dialog::no;
}
}
/*
* (c) 2003-2004 Glenn Maynard, Chris Danford
* All rights reserved.
+1
View File
@@ -11,6 +11,7 @@ public:
Dialog::Result OKCancel( RString sMessage, RString sID );
Dialog::Result AbortRetryIgnore( RString sMessage, RString sID );
Dialog::Result AbortRetry( RString sMessage, RString sID );
Dialog::Result YesNo( RString sMessage, RString sID );
};
#endif