(svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)

This commit is contained in:
truelight 2006-01-06 21:27:44 +00:00
parent b542f784f9
commit 10a2787fd5
2 changed files with 65 additions and 2 deletions

View File

@ -8,11 +8,33 @@
* To insure that the crosscompiler still works, let him try any changes before they are committed
*/
#ifdef WITH_SDL
void ShowMacDialog ( const char *title, const char *message, const char *buttonLabel )
{
NSRunAlertPanel([NSString stringWithCString: title], [NSString stringWithCString: message], [NSString stringWithCString: buttonLabel], nil, nil);
}
#elif defined WITH_COCOA
void CocoaDialog ( const char *title, const char *message, const char *buttonLabel );
void ShowMacDialog ( const char *title, const char *message, const char *buttonLabel )
{
CocoaDialog(title, message, buttonLabel);
}
#else
void ShowMacDialog ( const char *title, const char *message, const char *buttonLabel )
{
fprintf(stderr, "%s: %s\n", title, message);
}
#endif
void ShowMacAssertDialog ( const char *function, const char *file, const int line, const char *expression )
{
const char *buffer =

View File

@ -175,7 +175,8 @@ static struct CocoaVideoData {
uint32 palette32[256];
} _cocoa_video_data;
static bool _cocoa_video_started = false;
static bool _cocoa_video_dialog = false;
@ -1872,7 +1873,7 @@ void QZ_HideMouse (void) {
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
/* Hand off to main application code */
/* Hand off to main application code */
QZ_GameLoop();
/* We're done, thank you for playing */
@ -2007,10 +2008,15 @@ static void CocoaVideoStop(void)
{
DEBUG(driver, 1)("cocoa_v: CocoaVideoStop");
if(!_cocoa_video_started)
return;
if(_cocoa_video_data.isset)
QZ_UnsetVideoMode();
[_ottd_main release];
_cocoa_video_started = false;
}
static const char *CocoaVideoStart(const char * const *parm)
@ -2019,8 +2025,18 @@ static const char *CocoaVideoStart(const char * const *parm)
DEBUG(driver, 1)("cocoa_v: CocoaVideoStart");
if(_cocoa_video_started)
return "Already started";
_cocoa_video_started = true;
memset(&_cocoa_video_data, 0, sizeof(_cocoa_video_data));
setupApplication();
/* Don't create a window or enter fullscreen if we're just going to show a dialog. */
if(_cocoa_video_dialog)
return NULL;
QZ_VideoInit();
ret = QZ_SetVideoMode(_cur_resolution[0], _cur_resolution[1], _fullscreen);
@ -2086,6 +2102,31 @@ const HalVideoDriver _cocoa_video_driver = {
};
/* This is needed since sometimes assert is called before the videodriver is initialized */
void CocoaDialog ( const char *title, const char *message, const char *buttonLabel )
{
bool wasstarted;
_cocoa_video_dialog = true;
wasstarted = _cocoa_video_started;
if(!_cocoa_video_started && CocoaVideoStart(NULL) != NULL) {
fprintf(stderr, "%s: %s\n", title, message);
return;
}
NSRunAlertPanel([NSString stringWithCString: title], [NSString stringWithCString: message], [NSString stringWithCString: buttonLabel], nil, nil);
if(!wasstarted)
CocoaVideoStop();
_cocoa_video_dialog = false;
}
/* This is needed since OS X applications are started with the working dir set to / when double-clicked */
void cocoaSetWorkingDirectory(void)
{