#include "requesters.h" #import namespace{ typedef int (*AlertPanel)( NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton ); NSWindow *keyWin; NSOpenGLContext *glContext; void beginPanel(){ glContext=[NSOpenGLContext currentContext]; keyWin=[NSApp keyWindow]; } void endPanel(){ if( glContext ) [glContext makeCurrentContext]; if( keyWin ) [keyWin makeKeyWindow]; } NSString *ConvString( bbString str ){ return [NSString stringWithCharacters:(const unichar*)str.data() length:str.length()]; } bbString ConvString( NSString *str ){ int n=[str length]; unichar *buf=new unichar[ n ]; [str getCharacters:buf range:NSMakeRange( 0,n )]; bbString t=bbString( buf,n ); delete[] buf; return t; } } void bbRequesters::Notify( bbString title,bbString text,bbBool serious ){ AlertPanel panel=(AlertPanel) ( serious ? (void*)NSRunCriticalAlertPanel : (void*)NSRunAlertPanel ); beginPanel(); panel( ConvString( title ),ConvString( text ),@"OK",0,0 ); endPanel(); } bbBool bbRequesters::Confirm( bbString title,bbString text,bbBool serious ){ AlertPanel panel=(AlertPanel) ( serious ? (void*)NSRunCriticalAlertPanel : (void*)NSRunAlertPanel ); beginPanel(); int n=panel( ConvString( title ),ConvString( text ),@"OK",@"Cancel",0 ); endPanel(); switch( n ){ case NSAlertDefaultReturn:return 1; } return 0; } int bbRequesters::Proceed( bbString title,bbString text,bbBool serious ){ AlertPanel panel=(AlertPanel) ( serious ? (void*)NSRunCriticalAlertPanel : (void*)NSRunAlertPanel ); beginPanel(); int n=panel( ConvString( title ),ConvString( text ),@"Yes",@"No",@"Cancel" ); endPanel(); switch( n ){ case NSAlertDefaultReturn:return 1; case NSAlertAlternateReturn:return 0; } return -1; } bbString bbRequesters::RequestFile( bbString title,bbString filter,bbBool save,bbString path ){ bbString file,dir; int i=path.findLast( "\\" ); if( i!=-1 ){ dir=path.slice( 0,i ); file=path.slice( 1+1 ); }else{ file=path; } NSMutableArray *nsfilter=0; bool allowOthers=true; if( filter.length() ){ allowOthers=false; nsfilter=[NSMutableArray arrayWithCapacity:10]; int i0=0; while( i0