This is AppController.m in view mode; [Download] [Up]
/*-------------------------------------------------------------------------- * * You may freely copy, distribute, and reuse the code in this example. * SHL Systemhouse disclaims any warranty of any kind, expressed or * implied, as to its fitness for any particular use. * * * AppController * * Inherits From: NSObject * * Conforms To: None * * Declared In: AppController.h * * *------------------------------------------------------------------------*/ #import "AppController.h" #import "ScrollViewExtensions.h" #import <eointerface/EOController.h> typedef enum { EOCONTROLLER, EODATABASE, EODATABASECONTEXT, EODATABASECHANNEL, EOADAPTOR, EOADAPTORCONTEXT, EOADAPTORCHANNEL } EOFDelegates; @implementation AppController /*-------------------------------------------------------------------------- * Tracing *------------------------------------------------------------------------*/ - (BOOL) isTracing { return trace; } - (BOOL) isVerbose { return verbose; } - (BOOL) wantsAlertPanels { return alert; } - setTracingOFF: sender { trace = ( ! [[sender selectedCell] state]); return self; } - setIsVerbose: sender { verbose = [[sender selectedCell] state]; return self; } - setWantsAlertPanels: sender { alert = [[sender selectedCell] state]; return self; } - console:sender { id window = [console window]; [window isVisible] ? [window orderOut:nil] : [window orderFront:nil]; return self; } /*-------------------------------------------------------------------------- * Setting Delegates *------------------------------------------------------------------------*/ - _eofObjectForTag:(int)tag { id eofObject; switch (tag) { case EOCONTROLLER: eofObject = eoController; break; case EODATABASECHANNEL: eofObject = [[eoController dataSource] databaseChannel]; break; case EOADAPTOR: eofObject = [[[[[eoController dataSource] databaseChannel] adaptorChannel] adaptorContext] adaptor]; break; case EOADAPTORCONTEXT: eofObject = [[[[eoController dataSource] databaseChannel] adaptorChannel] adaptorContext]; break; case EOADAPTORCHANNEL: eofObject = [[[eoController dataSource] databaseChannel] adaptorChannel]; break; case EODATABASE: case EODATABASECONTEXT: default: eofObject = nil; break; } return eofObject; } - setDelegates: sender { int rows, cols, iterator; [sender getNumRows:&rows numCols:&cols]; for (iterator = 0; iterator < rows; iterator++) { id cell = [sender cellAt:iterator :0]; [[self _eofObjectForTag:[cell tag]] setDelegate:[cell state] ? eofDelegate : nil]; } return self; } /*-------------------------------------------------------------------------- * Modifying EOController Characteristics *------------------------------------------------------------------------*/ - setEnableUndo: sender { [eoController setUndoEnabled: [[sender selectedCell] state]]; return self; } - setAutomaticUndoMarks: sender { [eoController setMarksEveryOperation: [[sender selectedCell] state]]; return self; } - setBufferEdits: sender { [eoController setSavesToObjectsAutomatically: ( ! [[sender selectedCell] state])]; return self; } - setBufferOperations: sender { [eoController setSavesToDataSourceAutomatically: ( ! [[sender selectedCell] state])]; return self; } - setMaximumUndoEntries: sender { [eoController setMaximumUndoMarks: [sender intValue]]; return self; } /*-------------------------------------------------------------------------- * Announcing Trace Info *------------------------------------------------------------------------*/ - (void) announce:sender selector:(SEL)selector { return [self announce:sender selector:selector with:nil]; } - (void) announce:sender selector:(SEL)selector with:array { NSMutableString *string; if (trace == NO) return; string = [NSMutableString stringWithFormat:@"BEGIN> {Sender = %s%s", [[[sender class] description] cString], verbose ? " " : "}"]; if (verbose) { id verboseString = [NSMutableString stringWithFormat:@"}\n\t{Sender Description = %s}", [[sender description] cString]]; [string appendString:verboseString]; } [string appendFormat:@" \n\t{Delegate Method = %s} ", sel_getName(selector)]; if (verbose && array) { id object; id verboseString = [NSMutableString stringWithCapacity:0]; id enumerator = [array objectEnumerator]; while (object = [enumerator nextObject]) [verboseString appendFormat:@"\n\t{Argument = %s} \n\t{Argument Description = %s} ", [[[object class] description] cString], [[object description] cString]]; [string appendString:verboseString]; } [string appendFormat:@"\n"]; [console sprintf: "%s", [string cString]]; } /*-------------------------------------------------------------------------- * Application Control *------------------------------------------------------------------------*/ - appDidInit: sender { trace = YES; verbose = NO; alert = YES; [eoController setDelegate:eofDelegate]; [[self _eofObjectForTag:EODATABASECHANNEL] setDelegate:eofDelegate]; [[self _eofObjectForTag:EOADAPTORCHANNEL] setDelegate:eofDelegate]; [[self _eofObjectForTag:EOADAPTORCONTEXT] setDelegate:eofDelegate]; [[self _eofObjectForTag:EOADAPTOR] setDelegate:eofDelegate]; [eoController setSelectsFirstObjectAfterFetch: YES]; return self; } - windowWillClose:sender { if (sender = [console window]) [consoleButton setState:1]; return self; } - windowDidBecomeKey:sender { if (sender = [console window]) [consoleButton setState:0]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.