This is EOFDelegateDatabaseCategory.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. * * * Database * * Category Of: EOFDelegate * * Conforms To: None * * Declared In: EOFDelegateDatabaseCategory.h * * *------------------------------------------------------------------------*/ #import "EOFDelegateDatabaseCategory.h" @implementation EOFDelegate (Database) /*-------------------------------------------------------------------------- * EODatabaseChannel Delegate Methods *------------------------------------------------------------------------*/ - databaseChannel:channel willInsertObject:object { // Invoked from -insertObject: to tell the delegate that an object will // be inserted. The delegate may return the object, a substitute, or nil // to prevent insertion. id result = object; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EODatabaseChannel", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = nil; break; case NX_ALERTDEFAULT: default: result = object; break; } } return result; } - (void)databaseChannel:channel didInsertObject:object { // Invoked from -insertObject: to tell the delegate that // an object was inserted. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; } - databaseChannel:channel willDeleteObject:object { // Invoked from -deleteObject: to tell the delegate that an object will // be deleted. The delegate may return the object, a substitute, or nil // to prevent deletion. id result = object; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EODatabaseChannel", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = nil; break; case NX_ALERTDEFAULT: default: result = object; break; } } return result; } - (void)databaseChannel:channel didDeleteObject:object { // Invoked from -deleteObject: to tell the delegate that // an object was deleted. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; } - databaseChannel:channel willUpdateObject:object { // Invoked from -updateObject: to tell the delegate that an object will // be updated. The delegate may return the object, a substitute, or nil // to prevent updating. id result = object; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EODatabaseChannel", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = nil; break; case NX_ALERTDEFAULT: default: result = object; break; } } return result; } - (void)databaseChannel:channel didUpdateObject:object { // Invoked from -updateObject: to tell the delegate that // an object was updated. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; } - (NSDictionary *)databaseChannel:channel willRefetchObject:object fromSnapshot:(NSDictionary *)snapshot { // Invoked whenever an object that was previously fetched is fetched again // and the re-fetched data is different from that in the object. The // object will be refetched with the dictionary returned by this method, // which may be the snapshot provided or a substitute. The delegate may // also return nil to prevent the object from being refetched. id result = object; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects: object, snapshot, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EODatabaseChannel", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = nil; break; case NX_ALERTDEFAULT: default: result = object; break; } } return result; } - (void)databaseChannel:channel failedToRefetchObject:object withValues:(NSDictionary *)snapshot { // Invoked whenever an object that was previously fetched is fetched // again, to tell the delegate that object can't be reliably refetched // because it's been updated in a transaction that hasn't been committed. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects: object, snapshot, nil]]; } - (BOOL)databaseChannel:channel willSelectObjectsDescribedByQualifier:(EOQualifier *)qualifier fetchOrder:(NSMutableArray *)fetchOrder { // Invoked from -selectObjectsDescribedByQualifier:... to tell the // delegate that the channel will select objects as specified by // qualifier. The delegate can modify the qualifier and fetch order. If // the delegate returns YES the channel will go ahead and select the // object; if the delegate returns NO the channel will abort the select // and return NO. BOOL result = YES; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects: qualifier, fetchOrder, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EODatabaseChannel", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (void)databaseChannel:channel didSelectObjectsDescribedByQualifier:(EOQualifier *)qualifier fetchOrder:(NSArray *)fetchOrder { // Invoked from -selectObjectsDescribedByQualifier:... to tell the // delegate that the channel selected objects as specified by qualifier. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects: qualifier, fetchOrder, nil]]; } - (void)databaseChannel:channel willFetchObjectOfClass:(Class)class withZone:(NSZone *)zone { // Invoked from -fetchWithZone: to tell the delegate that // the channel willfetch the next selected object. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:class]]; } - (void)databaseChannel:channel didFetchObject:object { // Invoked from -fetchWithZone: to tell the delegate that // the channel fetched the next selected object. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; } - (BOOL)databaseChannel:channel willLockObject:object { // Invoked from -lockObject: to tell the delegate that object will be // locked using snapshot data to determine whether the database has been // modified. The delegate may return YES to allow the channel to proceed, // or NO to cause the operation to fail and -lockObject: to return NO. BOOL result = YES; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EODatabaseChannel", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (void)databaseChannel:channel didLockObject:object { // Invoked from -lockObject: to tell the delegate that // object was locked. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:object]]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.