|
|
1.1 ! root 1: /*-------------------------------------------------------------------------- ! 2: * ! 3: * You may freely copy, distribute, and reuse the code in this example. ! 4: * SHL Systemhouse disclaims any warranty of any kind, expressed or ! 5: * implied, as to its fitness for any particular use. ! 6: * ! 7: * ! 8: * AppController ! 9: * ! 10: * Inherits From: NSObject ! 11: * ! 12: * Conforms To: None ! 13: * ! 14: * Declared In: AppController.h ! 15: * ! 16: * ! 17: *------------------------------------------------------------------------*/ ! 18: #import <eointerface/eointerface.h> ! 19: ! 20: #import "AppController.h" ! 21: #import "ScrollViewExtensions.h" ! 22: ! 23: ! 24: typedef enum { ! 25: EOCONTROLLER, EODATABASE, EODATABASECONTEXT, EODATABASECHANNEL, ! 26: EOADAPTOR, EOADAPTORCONTEXT, EOADAPTORCHANNEL ! 27: } EOFDelegates; ! 28: ! 29: ! 30: ! 31: ! 32: @implementation AppController ! 33: ! 34: /*-------------------------------------------------------------------------- ! 35: * Tracing ! 36: *------------------------------------------------------------------------*/ ! 37: - (BOOL) isTracing ! 38: { ! 39: return trace; ! 40: } ! 41: ! 42: ! 43: - (BOOL) isVerbose ! 44: { ! 45: return verbose; ! 46: } ! 47: ! 48: ! 49: - (BOOL) wantsAlertPanels ! 50: { ! 51: return alert; ! 52: } ! 53: ! 54: ! 55: - setTracingOFF: sender ! 56: { ! 57: trace = ( ! [[sender selectedCell] state]); ! 58: return self; ! 59: } ! 60: ! 61: ! 62: - setIsVerbose: sender ! 63: { ! 64: verbose = [[sender selectedCell] state]; ! 65: return self; ! 66: } ! 67: ! 68: ! 69: - setWantsAlertPanels: sender ! 70: { ! 71: alert = [[sender selectedCell] state]; ! 72: return self; ! 73: } ! 74: ! 75: ! 76: - console:sender ! 77: { ! 78: id window = [console window]; ! 79: ! 80: [window isVisible] ? [window orderOut:nil] : [window orderFront:nil]; ! 81: return self; ! 82: } ! 83: ! 84: ! 85: /*-------------------------------------------------------------------------- ! 86: * Setting Delegates ! 87: *------------------------------------------------------------------------*/ ! 88: - _eofObjectForTag:(int)tag ! 89: { ! 90: id eofObject; ! 91: ! 92: switch (tag) ! 93: { ! 94: case EOCONTROLLER: ! 95: eofObject = eoController; ! 96: break; ! 97: ! 98: case EODATABASECHANNEL: ! 99: eofObject = [(EODatabaseDataSource *) [eoController dataSource] databaseChannel]; ! 100: break; ! 101: ! 102: case EOADAPTOR: ! 103: eofObject = [[[[(EODatabaseDataSource *)[eoController dataSource] databaseChannel] ! 104: adaptorChannel] adaptorContext] adaptor]; ! 105: break; ! 106: ! 107: case EOADAPTORCONTEXT: ! 108: eofObject = [[[(EODatabaseDataSource *)[eoController dataSource] databaseChannel] ! 109: adaptorChannel] adaptorContext]; ! 110: break; ! 111: ! 112: case EOADAPTORCHANNEL: ! 113: eofObject = [[(EODatabaseDataSource *)[eoController dataSource] databaseChannel] ! 114: adaptorChannel]; ! 115: break; ! 116: ! 117: case EODATABASE: ! 118: case EODATABASECONTEXT: ! 119: default: ! 120: eofObject = nil; ! 121: break; ! 122: } ! 123: ! 124: return eofObject; ! 125: } ! 126: ! 127: ! 128: - setDelegates: sender ! 129: { ! 130: int rows, cols, iterator; ! 131: ! 132: [sender getNumRows:&rows numCols:&cols]; ! 133: for (iterator = 0; iterator < rows; iterator++) ! 134: { ! 135: id cell = [sender cellAt:iterator :0]; ! 136: /* Just a type cast to avoid warning of mulitple declarations */ ! 137: [ (EODatabaseChannel *)[self _eofObjectForTag:[cell tag]] ! 138: setDelegate:[cell state] ? eofDelegate : nil]; ! 139: } ! 140: ! 141: return self; ! 142: } ! 143: ! 144: ! 145: /*-------------------------------------------------------------------------- ! 146: * Modifying EOController Characteristics ! 147: *------------------------------------------------------------------------*/ ! 148: - setEnableUndo: sender ! 149: { ! 150: [eoController setUndoEnabled: [[sender selectedCell] state]]; ! 151: return self; ! 152: } ! 153: ! 154: ! 155: - setAutomaticUndoMarks: sender ! 156: { ! 157: [eoController setMarksEveryOperation: [[sender selectedCell] state]]; ! 158: return self; ! 159: } ! 160: ! 161: ! 162: - setBufferEdits: sender ! 163: { ! 164: [eoController setSavesToObjectsAutomatically: ! 165: ( ! [[sender selectedCell] state])]; ! 166: return self; ! 167: } ! 168: ! 169: ! 170: - setBufferOperations: sender ! 171: { ! 172: [eoController setSavesToDataSourceAutomatically: ! 173: ( ! [[sender selectedCell] state])]; ! 174: return self; ! 175: } ! 176: ! 177: ! 178: - setMaximumUndoEntries: sender ! 179: { ! 180: [eoController setMaximumUndoMarks: [sender intValue]]; ! 181: return self; ! 182: } ! 183: ! 184: ! 185: /*-------------------------------------------------------------------------- ! 186: * Announcing Trace Info ! 187: *------------------------------------------------------------------------*/ ! 188: - (void) announce:sender selector:(SEL)selector ! 189: { ! 190: return [self announce:sender selector:selector with:nil]; ! 191: } ! 192: ! 193: ! 194: - (void) announce:sender selector:(SEL)selector with:array ! 195: { ! 196: NSMutableString *string; ! 197: ! 198: if (trace == NO) return; ! 199: ! 200: string = [NSMutableString stringWithFormat:@"BEGIN> {Sender = %s%s", ! 201: [[(NSObject *)[sender class] description] cString], verbose ? " " : "}"]; ! 202: ! 203: if (verbose) ! 204: { ! 205: id verboseString = ! 206: [NSMutableString ! 207: stringWithFormat:@"}\n\t{Sender Description = %s}", ! 208: [ [(NSObject *)sender description] cString]]; ! 209: [string appendString:verboseString]; ! 210: } ! 211: ! 212: [string appendFormat:@" \n\t{Delegate Method = %s} ", sel_getName(selector)]; ! 213: ! 214: if (verbose && array) ! 215: { ! 216: id object; ! 217: id verboseString = [NSMutableString stringWithCapacity:0]; ! 218: id enumerator = [array objectEnumerator]; ! 219: ! 220: while ((object = [enumerator nextObject]) != nil) ! 221: [verboseString ! 222: appendFormat:@"\n\t{Argument = %s} \n\t{Argument Description = %s} ", ! 223: [[(NSObject *)[object class] description] cString], ! 224: [[(NSObject *) object description] cString]]; ! 225: ! 226: [string appendString:verboseString]; ! 227: } ! 228: ! 229: ! 230: [string appendFormat:@"\n"]; ! 231: [console sprintf: "%s", [string cString]]; ! 232: } ! 233: ! 234: ! 235: /*-------------------------------------------------------------------------- ! 236: * Application Control ! 237: *------------------------------------------------------------------------*/ ! 238: - appDidInit: sender ! 239: { ! 240: trace = YES; ! 241: verbose = NO; ! 242: alert = YES; ! 243: ! 244: [(EOController *)eoController setDelegate:eofDelegate]; ! 245: [(EODatabaseChannel *)[self _eofObjectForTag:EODATABASECHANNEL] setDelegate:eofDelegate]; ! 246: [(EOAdaptorChannel *)[self _eofObjectForTag:EOADAPTORCHANNEL] setDelegate:eofDelegate]; ! 247: [(EOAdaptorContext *)[self _eofObjectForTag:EOADAPTORCONTEXT] setDelegate:eofDelegate]; ! 248: [(EOAdaptor *)[self _eofObjectForTag:EOADAPTOR] setDelegate:eofDelegate]; ! 249: [eoController setSelectsFirstObjectAfterFetch: YES]; ! 250: return self; ! 251: } ! 252: ! 253: ! 254: - windowWillClose:sender ! 255: { ! 256: if ((sender = [console window])) ! 257: [consoleButton setState:1]; ! 258: ! 259: return self; ! 260: } ! 261: ! 262: ! 263: - windowDidBecomeKey:sender ! 264: { ! 265: if ((sender = [console window])) ! 266: [consoleButton setState:0]; ! 267: ! 268: return self; ! 269: } ! 270: ! 271: ! 272: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.