This is EOFDelegateControllerCategory.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. * * * Controller * * Category Of: EOFDelegate * * Conforms To: None * * Declared In: EOFDelegateControllerCategory.h * * *------------------------------------------------------------------------*/ #import "EOFDelegateControllerCategory.h" @implementation EOFDelegate (Controller) /*-------------------------------------------------------------------------- * EOController Delegate Methods * * Note that the insert, delete, and update operations are buffered until an * -saveToDataSource message is sent to the controller. The delegate receives * delegate messages for these operations as the insert, delete, and update * operations are sent to the controller. The delegate receives different * delegate messages when the buffered operations are actually sent on to the * data source. * * typedef enum { * EONoDataSourceFailure = 0, * EOContinueDataSourceFailureResponse, * EORollbackDataSourceFailureResponse * } EODataSourceFailureResponse; * * These return values allow a controller's delegate to determine what * action should be taken on a failure. EONoDataSourceFailure means there * was no failure; EOContinuteDataSourceFailureResponse means that the * failure should be ignored and the operation should continue; * EORollbackDataSourceFailureResponse means that the controller should * roll back the data source. EORollbackDataSourceFailureResponse is only * useful if the data source conforms to the EORollbackDataSource * protocol. * *------------------------------------------------------------------------*/ - (void)controllerDidChangeSelection:(EOController *)controller { // Sent when the selection changes. [[NXApp delegate] announce:controller selector:_cmd]; } - (BOOL)controllerWillFetch:(EOController *)controller { // Informs the delegate that the controller is about to fetch. If the // delegate returns no the fetch fails; if the delegate returns YES // the fetch proceeds. BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (void)controller:(EOController *)controller didFetchObject:object { // Informs the delegate that the controller has fetched object. [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject:object]]; } - (BOOL)controller:(EOController *)controller willInsertObject:object { // If the delegate returns NO object is released and not inserted. BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject:object]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (void)controller:(EOController *)controller didInsertObject:object { // Informs the delegate that the controller has inserted object. [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject:object]]; } - (BOOL)controller:(EOController *)controller willDeleteObject:object { // If the delegate returns NO object is not deleted. BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject:object]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (void)controller:(EOController *)controller didDeleteObject:object { // Informs the delegate that the controller has deleted object. [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject:object]]; } - (NSDictionary *)controller:(EOController *)controller willSave: (NSDictionary *)edits object:object { // Invoked by -saveObjects for each object before // -takeValuesFromDictionary: is sent to the object. If the delegate // responds nil -takeValuesFromDictionary: is not sent and the controller // aborts -saveToObjects. The edits will be ignored and the associations // will not be notified of any change. If the delegate returns a // dictionary that dictionary will be sent to the object. This method is // useful for doing validation prior to data actually being sent to the // object and will also prevent the UI from refreshing. id result = edits; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: edits, object, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = nil; break; case NX_ALERTDEFAULT: default: result = edits; break; } } return result; } - (void)controller:(EOController *)controller didSaveToObject:object { // Informs the delegate that the controller has saved object. [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject:object]]; } /*-------------------------------------------------------------------------- * NOTE * * The following two methods have been commented out to allow natural * processing of associated events. See comments below for these methods. * - (BOOL)controllerWillDiscardEdits:(EOController *)controller { // Sent during the -fetch method before the fetch begins if there are any // operations that haven't been saved to the objects. Also sent when a // selection is about to change, causing a detail controller to flush its // caches. The operation is aborted if this method returns NO. The // delegate should send -saveToObjects if it wants to preserve the // changes. If the delegate doesn't implement this method the controller // opens an alert panel warning the user that edits may be lost. BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (BOOL)controllerWillDiscardUpates:(EOController *)controller { // Sent during the -fetch method before the fetch begins if there are any // operations that haven't been saved to the data source. Also sent // when a selection is about to change, causing a detail controller to // flush its caches. The fetch is aborted if this method returns NO. // The delegate should invoke -saveToDataSource if it wants to preserve the // changes. If the delegate doesn't implement this method the controller // opens an alert panel warning the user that updates may be lost. BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } *------------------------------------------------------------------------*/ - (BOOL)controllerWillSaveToDataSource:(EOController *)controller { // These delegate messages are sent as the data source is notified of // changes to data-bearing objects. If the savesToDataSourceAutomatically // flag is turned off and -saveToDataSource is invoked then the delegate // is notified of each buffered operation. BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (void)controllerDidSaveToDataSource:(EOController *)controller { // These delegate messages are sent as the data source is notified of // changes to data-bearing objects. If the savesToDataSourceAutomatically // flag is turned off and -saveToDataSource is invoked then the delegate // is notified of each buffered operation. [[NXApp delegate] announce:controller selector:_cmd]; } - (BOOL)controller:(EOController *)controller willInsertObject:object inDataSource:dataSource { BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (EODataSourceFailureResponse)controller:(EOController *)controller failedToInsertObject:object inDataSource:dataSource { int result = EONoDataSourceFailure; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "No Failure", "Continue", "Rollback", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EORollbackDataSourceFailureResponse; break; case NX_ALERTALTERNATE: result = EOContinueDataSourceFailureResponse; break; case NX_ALERTDEFAULT: default: result = EONoDataSourceFailure; break; } } return result; } - (void)controller:(EOController *)controller didInsertObject:object inDataSource:dataSource { [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; } - (BOOL)controller:(EOController *)controller willDeleteObject:object inDataSource:dataSource { BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (EODataSourceFailureResponse)controller:(EOController *)controller failedToDeleteObject:object inDataSource:dataSource { int result = EONoDataSourceFailure; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "No Failure", "Continue", "Rollback", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EORollbackDataSourceFailureResponse; break; case NX_ALERTALTERNATE: result = EOContinueDataSourceFailureResponse; break; case NX_ALERTDEFAULT: default: result = EONoDataSourceFailure; break; } } return result; } - (void)controller:(EOController *)controller didDeleteObject:object inDataSource:dataSource { [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; } - (BOOL)controller:(EOController *)controller willUpdateObject:object inDataSource:dataSource { BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (EODataSourceFailureResponse)controller:(EOController *)controller failedToUpdateObject:object inDataSource:dataSource; { int result = EONoDataSourceFailure; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "No Failure", "Continue", "Rollback", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EORollbackDataSourceFailureResponse; break; case NX_ALERTALTERNATE: result = EOContinueDataSourceFailureResponse; break; case NX_ALERTDEFAULT: default: result = EONoDataSourceFailure; break; } } return result; } - (void)controller:(EOController *)controller didUpdateObject:object inDataSource:dataSource { [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: object, dataSource, nil]]; } - (void)controller:(EOController *)controller willRollbackDataSource:(id <EODataSources>)dataSource { [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject: dataSource]]; } - (void)controller:(EOController *)controller didRollbackDataSource:(id <EODataSources>)dataSource { [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject: dataSource]]; } - (BOOL)controllerWillUndo:(EOController *)controller { BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (BOOL)controllerDidUndo:(EOController *)controller { BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (void)controller:(EOController *)controller didChangeDataSource: (id <EODataSources>)dataSource { [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject: dataSource]]; } - (void)controller:(EOController *)controller association: (EOAssociation *)association didEdit: anObject key: (NSString *)key value: aValue { [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObjects: association, anObject, key, aValue, nil]]; } - (BOOL)controller:(EOController *)controller willUndoObject:anObject { BOOL result = YES; [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject: anObject]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOController", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } - (void)controller:(EOController *)controller didUndoObject:anObject { [[NXApp delegate] announce:controller selector:_cmd with:[NSArray arrayWithObject: anObject]]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.