|
|
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: * Database
9: *
10: * Category Of: EOFDelegate
11: *
12: * Conforms To: None
13: *
14: * Declared In: EOFDelegateDatabaseCategory.h
15: *
16: *
17: *------------------------------------------------------------------------*/
18: #import "EOFDelegateDatabaseCategory.h"
19:
20:
21:
22:
23: @implementation EOFDelegate (Database)
24:
25: /*--------------------------------------------------------------------------
26: * EODatabaseChannel Delegate Methods
27: *------------------------------------------------------------------------*/
28: - databaseChannel:channel willInsertObject:object
29: {
30: // Invoked from -insertObject: to tell the delegate that an object will
31: // be inserted. The delegate may return the object, a substitute, or nil
32: // to prevent insertion.
33:
34: id result = object;
35:
36: [[NXApp delegate] announce:channel
37: selector:_cmd
38: with:[NSArray arrayWithObject:object]];
39:
40: if ([[NXApp delegate] wantsAlertPanels] == YES)
41: {
42: switch (NXRunAlertPanel ("EODatabaseChannel",
43: "%s", "YES", "NO", NULL, sel_getName(_cmd)))
44: {
45: case NX_ALERTALTERNATE:
46: result = nil;
47: break;
48: case NX_ALERTDEFAULT:
49: default:
50: result = object;
51: break;
52: }
53: }
54:
55: return result;
56: }
57:
58:
59: - (void)databaseChannel:channel didInsertObject:object
60: {
61: // Invoked from -insertObject: to tell the delegate that
62: // an object was inserted.
63:
64: [[NXApp delegate] announce:channel
65: selector:_cmd
66: with:[NSArray arrayWithObject:object]];
67: }
68:
69:
70: - databaseChannel:channel willDeleteObject:object
71: {
72: // Invoked from -deleteObject: to tell the delegate that an object will
73: // be deleted. The delegate may return the object, a substitute, or nil
74: // to prevent deletion.
75:
76: id result = object;
77:
78: [[NXApp delegate] announce:channel
79: selector:_cmd
80: with:[NSArray arrayWithObject:object]];
81:
82: if ([[NXApp delegate] wantsAlertPanels] == YES)
83: {
84: switch (NXRunAlertPanel ("EODatabaseChannel",
85: "%s", "YES", "NO", NULL, sel_getName(_cmd)))
86: {
87: case NX_ALERTALTERNATE:
88: result = nil;
89: break;
90: case NX_ALERTDEFAULT:
91: default:
92: result = object;
93: break;
94: }
95: }
96:
97: return result;
98: }
99:
100:
101: - (void)databaseChannel:channel didDeleteObject:object
102: {
103: // Invoked from -deleteObject: to tell the delegate that
104: // an object was deleted.
105:
106: [[NXApp delegate] announce:channel
107: selector:_cmd
108: with:[NSArray arrayWithObject:object]];
109: }
110:
111:
112: - databaseChannel:channel willUpdateObject:object
113: {
114: // Invoked from -updateObject: to tell the delegate that an object will
115: // be updated. The delegate may return the object, a substitute, or nil
116: // to prevent updating.
117:
118: id result = object;
119:
120: [[NXApp delegate] announce:channel
121: selector:_cmd
122: with:[NSArray arrayWithObject:object]];
123:
124: if ([[NXApp delegate] wantsAlertPanels] == YES)
125: {
126: switch (NXRunAlertPanel ("EODatabaseChannel",
127: "%s", "YES", "NO", NULL, sel_getName(_cmd)))
128: {
129: case NX_ALERTALTERNATE:
130: result = nil;
131: break;
132: case NX_ALERTDEFAULT:
133: default:
134: result = object;
135: break;
136: }
137: }
138:
139: return result;
140: }
141:
142:
143: - (void)databaseChannel:channel didUpdateObject:object
144: {
145: // Invoked from -updateObject: to tell the delegate that
146: // an object was updated.
147:
148: [[NXApp delegate] announce:channel
149: selector:_cmd
150: with:[NSArray arrayWithObject:object]];
151: }
152:
153:
154: - (NSDictionary *)databaseChannel:channel
155: willRefetchObject:object
156: fromSnapshot:(NSDictionary *)snapshot
157: {
158: // Invoked whenever an object that was previously fetched is fetched again
159: // and the re-fetched data is different from that in the object. The
160: // object will be refetched with the dictionary returned by this method,
161: // which may be the snapshot provided or a substitute. The delegate may
162: // also return nil to prevent the object from being refetched.
163:
164: id result = object;
165:
166: [[NXApp delegate] announce:channel
167: selector:_cmd
168: with:[NSArray arrayWithObjects: object, snapshot, nil]];
169:
170: if ([[NXApp delegate] wantsAlertPanels] == YES)
171: {
172: switch (NXRunAlertPanel ("EODatabaseChannel",
173: "%s", "YES", "NO", NULL, sel_getName(_cmd)))
174: {
175: case NX_ALERTALTERNATE:
176: result = nil;
177: break;
178: case NX_ALERTDEFAULT:
179: default:
180: result = object;
181: break;
182: }
183: }
184:
185: return result;
186: }
187:
188:
189:
190: - (BOOL)databaseChannel:channel
191: willSelectObjectsDescribedByQualifier:(EOQualifier *)qualifier
192: fetchOrder:(NSArray *)fetchOrder
193: {
194: // Invoked from -selectObjectsDescribedByQualifier:... to tell the
195: // delegate that the channel will select objects as specified by
196: // qualifier. The delegate can modify the qualifier and fetch order. If
197: // the delegate returns YES the channel will go ahead and select the
198: // object; if the delegate returns NO the channel will abort the select
199: // and return NO.
200:
201: BOOL result = YES;
202:
203: [[NXApp delegate] announce:channel
204: selector:_cmd
205: with:[NSArray arrayWithObjects: qualifier, fetchOrder, nil]];
206:
207: if ([[NXApp delegate] wantsAlertPanels] == YES)
208: {
209: switch (NXRunAlertPanel ("EODatabaseChannel",
210: "%s", "YES", "NO", NULL, sel_getName(_cmd)))
211: {
212: case NX_ALERTALTERNATE:
213: result = NO;
214: break;
215: case NX_ALERTDEFAULT:
216: default:
217: result = YES;
218: break;
219: }
220: }
221:
222: return result;
223: }
224:
225:
226: - (void)databaseChannel:channel
227: didSelectObjectsDescribedByQualifier:(EOQualifier *)qualifier
228: fetchOrder:(NSArray *)fetchOrder
229: {
230: // Invoked from -selectObjectsDescribedByQualifier:... to tell the
231: // delegate that the channel selected objects as specified by qualifier.
232:
233: [[NXApp delegate] announce:channel
234: selector:_cmd
235: with:[NSArray arrayWithObjects: qualifier, fetchOrder, nil]];
236: }
237:
238:
239: - (void)databaseChannel:channel
240: willFetchObjectOfClass:(Class)class
241: withZone:(NSZone *)zone
242: {
243: // Invoked from -fetchWithZone: to tell the delegate that
244: // the channel willfetch the next selected object.
245:
246: [[NXApp delegate] announce:channel
247: selector:_cmd
248: with:[NSArray arrayWithObject:class]];
249: }
250:
251:
252: - (void)databaseChannel:channel didFetchObject:object
253: {
254: // Invoked from -fetchWithZone: to tell the delegate that
255: // the channel fetched the next selected object.
256:
257: [[NXApp delegate] announce:channel
258: selector:_cmd
259: with:[NSArray arrayWithObject:object]];
260: }
261:
262:
263: - (BOOL)databaseChannel:channel willLockObject:object
264: {
265: // Invoked from -lockObject: to tell the delegate that object will be
266: // locked using snapshot data to determine whether the database has been
267: // modified. The delegate may return YES to allow the channel to proceed,
268: // or NO to cause the operation to fail and -lockObject: to return NO.
269:
270: BOOL result = YES;
271:
272: [[NXApp delegate] announce:channel
273: selector:_cmd
274: with:[NSArray arrayWithObject:object]];
275:
276: if ([[NXApp delegate] wantsAlertPanels] == YES)
277: {
278: switch (NXRunAlertPanel ("EODatabaseChannel",
279: "%s", "YES", "NO", NULL, sel_getName(_cmd)))
280: {
281: case NX_ALERTALTERNATE:
282: result = NO;
283: break;
284: case NX_ALERTDEFAULT:
285: default:
286: result = YES;
287: break;
288: }
289: }
290:
291: return result;
292: }
293:
294:
295: - (void)databaseChannel:channel didLockObject:object
296: {
297: // Invoked from -lockObject: to tell the delegate that
298: // object was locked.
299:
300: [[NXApp delegate] announce:channel
301: selector:_cmd
302: with:[NSArray arrayWithObject:object]];
303: }
304:
305:
306: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.