|
|
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.