Annotation of Examples/EnterpriseObjects/SHLExamples/Delegation/EOFDelegateControllerCategory.m, revision 1.1.1.1

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:  *     Controller
                      9:  *
                     10:  *     Category Of:    EOFDelegate
                     11:  *
                     12:  *     Conforms To:    None
                     13:  *
                     14:  *     Declared In:    EOFDelegateControllerCategory.h
                     15:  *
                     16:  *
                     17:  *------------------------------------------------------------------------*/
                     18: #import "EOFDelegateControllerCategory.h"
                     19: 
                     20: 
                     21: 
                     22: 
                     23: @implementation EOFDelegate (Controller)
                     24: 
                     25: /*--------------------------------------------------------------------------
                     26:  *     EOController Delegate Methods
                     27:  *
                     28:  *  Note that the insert, delete, and update operations are buffered until an
                     29:  *  -saveToDataSource message is sent to the controller.  The delegate receives
                     30:  *  delegate messages for these operations as the insert, delete, and update
                     31:  *  operations are sent to the controller.  The delegate receives different
                     32:  *  delegate messages when the buffered operations are actually sent on to the
                     33:  *  data source.
                     34:  *
                     35:  *  typedef enum {
                     36:  *    EONoDataSourceFailure = 0,
                     37:  *    EOContinueDataSourceFailureResponse,
                     38:  *    EORollbackDataSourceFailureResponse
                     39:  *  } EODataSourceFailureResponse;
                     40:  *
                     41:  *  These return values allow a controller's delegate to determine what
                     42:  *  action should be taken on a failure.  EONoDataSourceFailure means there
                     43:  *  was no failure; EOContinuteDataSourceFailureResponse means that the
                     44:  *  failure should be ignored and the operation should continue;
                     45:  *  EORollbackDataSourceFailureResponse means that the controller should
                     46:  *  roll back the data source.  EORollbackDataSourceFailureResponse is only
                     47:  *  useful if the data source conforms to the EORollbackDataSource
                     48:  *  protocol.
                     49:  *
                     50:  *------------------------------------------------------------------------*/
                     51: - (void)controllerDidChangeSelection:(EOController *)controller
                     52: {
                     53:     // Sent when the selection changes.
                     54:        
                     55:        [[NXApp delegate] announce:controller selector:_cmd];
                     56: }
                     57: 
                     58:     
                     59: - (BOOL)controllerWillFetch:(EOController *)controller
                     60: {
                     61:     // Informs the delegate that the controller is about to fetch.  If the
                     62:     // delegate returns no the fetch fails; if the delegate returns YES
                     63:     // the fetch proceeds.
                     64:        
                     65:        BOOL    result = YES;
                     66:        
                     67:        [[NXApp delegate] announce:controller selector:_cmd];
                     68:        
                     69:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                     70:                {
                     71:                switch (NXRunAlertPanel ("EOController", 
                     72:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                     73:                        {
                     74:                        case NX_ALERTALTERNATE:
                     75:                                result = NO;
                     76:                                break;
                     77:                        case NX_ALERTDEFAULT:
                     78:                        default:
                     79:                                result = YES;
                     80:                                break;
                     81:                        }
                     82:                }
                     83:        
                     84:        return result;
                     85: }
                     86: 
                     87: 
                     88: - (void)controller:(EOController *)controller didFetchObjects: (NSArray *)objects
                     89: {
                     90:     // Informs the delegate that the controller has fetched object.
                     91:        
                     92:        [[NXApp delegate] announce:controller 
                     93:                selector:_cmd 
                     94:                with:[NSArray arrayWithObject:objects]];
                     95: }
                     96: 
                     97: 
                     98: - (BOOL)controller:(EOController *)controller 
                     99:        willInsertObject:object 
                    100:        atIndex: (unsigned)newIndex
                    101: {
                    102:     // If the delegate returns NO object is released and not inserted.
                    103:        
                    104:        BOOL    result = YES;
                    105:        
                    106:        [[NXApp delegate] announce:controller 
                    107:                selector:_cmd 
                    108:                with:[NSArray arrayWithObject:object]];
                    109:        
                    110:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    111:                {
                    112:                switch (NXRunAlertPanel ("EOController", 
                    113:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    114:                        {
                    115:                        case NX_ALERTALTERNATE:
                    116:                                result = NO;
                    117:                                break;
                    118:                        case NX_ALERTDEFAULT:
                    119:                        default:
                    120:                                result = YES;
                    121:                                break;
                    122:                        }
                    123:                }
                    124:        
                    125:        return result;
                    126: }
                    127: 
                    128: 
                    129: - (void)controller:(EOController *)controller didInsertObject:object
                    130: {
                    131:     // Informs the delegate that the controller has inserted object.
                    132:        
                    133:        [[NXApp delegate] announce:controller 
                    134:                selector:_cmd 
                    135:                with:[NSArray arrayWithObject:object]];
                    136: }
                    137: 
                    138: 
                    139: - (BOOL)controller:(EOController *)controller willDeleteObject:object
                    140: {
                    141:     // If the delegate returns NO object is not deleted.
                    142:        
                    143:        BOOL    result = YES;
                    144:        
                    145:        [[NXApp delegate] announce:controller 
                    146:                selector:_cmd 
                    147:                with:[NSArray arrayWithObject:object]];
                    148:        
                    149:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    150:                {
                    151:                switch (NXRunAlertPanel ("EOController", 
                    152:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    153:                        {
                    154:                        case NX_ALERTALTERNATE:
                    155:                                result = NO;
                    156:                                break;
                    157:                        case NX_ALERTDEFAULT:
                    158:                        default:
                    159:                                result = YES;
                    160:                                break;
                    161:                        }
                    162:                }
                    163:        
                    164:        return result;
                    165: }
                    166: 
                    167: 
                    168: - (void)controller:(EOController *)controller didDeleteObject:object
                    169: {
                    170:     // Informs the delegate that the controller has deleted object.
                    171:        
                    172:        [[NXApp delegate] announce:controller 
                    173:                selector:_cmd 
                    174:                with:[NSArray arrayWithObject:object]];
                    175: }
                    176: 
                    177: 
                    178: - (NSDictionary *)controller:(EOController *)controller 
                    179:        willSaveEdits: (NSDictionary *)edits 
                    180:        toObject:object
                    181: {      
                    182:     // Invoked by -saveObjects for each object before
                    183:     // -takeValuesFromDictionary: is sent to the object.  If the delegate
                    184:     // responds nil -takeValuesFromDictionary: is not sent and the controller
                    185:     // aborts -saveToObjects.  The edits will be ignored and the associations
                    186:     // will not be notified of any change.  If the delegate returns a
                    187:     // dictionary that dictionary will be sent to the object.  This method is
                    188:     // useful for doing validation prior to data actually being sent to the
                    189:     // object and will also prevent the UI from refreshing.
                    190:        
                    191:        id      result = edits;
                    192:        
                    193:        [[NXApp delegate] announce:controller 
                    194:                selector:_cmd 
                    195:                with:[NSArray arrayWithObjects: edits, object, nil]];
                    196:        
                    197:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    198:                {
                    199:                switch (NXRunAlertPanel ("EOController", 
                    200:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    201:                        {
                    202:                        case NX_ALERTALTERNATE:
                    203:                                result = nil;
                    204:                                break;
                    205:                        case NX_ALERTDEFAULT:
                    206:                        default:
                    207:                                result = edits;
                    208:                                break;
                    209:                        }
                    210:                }
                    211:        
                    212:        return result;
                    213: }
                    214: 
                    215: 
                    216: - (void)controller:(EOController *)controller didSaveToObject:object
                    217: {
                    218:     // Informs the delegate that the controller has saved object.
                    219:        
                    220:        [[NXApp delegate] announce:controller 
                    221:                selector:_cmd 
                    222:                with:[NSArray arrayWithObject:object]];
                    223: }
                    224: 
                    225: 
                    226: /*--------------------------------------------------------------------------
                    227:  *     NOTE
                    228:  *     
                    229:  *     The following two methods have been commented out to allow natural
                    230:  *     processing of associated events.  See comments below for these methods.
                    231:  *
                    232:  
                    233: - (BOOL)controllerWillDiscardEdits:(EOController *)controller
                    234: {
                    235:     // Sent during the -fetch method before the fetch begins if there are any
                    236:     // operations that haven't been saved to the objects.  Also sent when a
                    237:     // selection is about to change, causing a detail controller to flush its
                    238:     // caches.  The operation is aborted if this method returns NO.  The
                    239:     // delegate should send -saveToObjects if it wants to preserve the
                    240:     // changes.  If the delegate doesn't implement this method the controller
                    241:     // opens an alert panel warning the user that edits may be lost.
                    242:        
                    243:        BOOL    result = YES;
                    244:        
                    245:        [[NXApp delegate] announce:controller selector:_cmd];
                    246:        
                    247:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    248:                {
                    249:                switch (NXRunAlertPanel ("EOController", 
                    250:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    251:                        {
                    252:                        case NX_ALERTALTERNATE:
                    253:                                result = NO;
                    254:                                break;
                    255:                        case NX_ALERTDEFAULT:
                    256:                        default:
                    257:                                result = YES;
                    258:                                break;
                    259:                        }
                    260:                }
                    261:        
                    262:        return result;
                    263: }
                    264: 
                    265: 
                    266: - (BOOL)controllerWillDiscardOperations:(EOController *)controller
                    267: {
                    268:     // Sent during the -fetch method before the fetch begins if there are any
                    269:     // operations that haven't been saved to the data source.  Also sent
                    270:     // when a selection is about to change, causing a detail controller to
                    271:     // flush its caches.  The fetch is aborted if this method returns NO.
                    272:     // The delegate should invoke -saveToDataSource if it wants to preserve the
                    273:     // changes.  If the delegate doesn't implement this method the controller
                    274:     // opens an alert panel warning the user that updates may be lost.
                    275:        
                    276:        BOOL    result = YES;
                    277:        
                    278:        [[NXApp delegate] announce:controller selector:_cmd];
                    279:        
                    280:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    281:                {
                    282:                switch (NXRunAlertPanel ("EOController", 
                    283:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    284:                        {
                    285:                        case NX_ALERTALTERNATE:
                    286:                                result = NO;
                    287:                                break;
                    288:                        case NX_ALERTDEFAULT:
                    289:                        default:
                    290:                                result = YES;
                    291:                                break;
                    292:                        }
                    293:                }
                    294:        
                    295:        return result;
                    296: }
                    297:  *------------------------------------------------------------------------*/
                    298: 
                    299: 
                    300: 
                    301: - (BOOL)controllerWillSaveToDataSource:(EOController *)controller
                    302: {
                    303:     // These delegate messages are sent as the data source is notified of
                    304:     // changes to data-bearing objects.  If the savesToDataSourceAutomatically
                    305:     // flag is turned off and -saveToDataSource is invoked then the delegate
                    306:     // is notified of each buffered operation.
                    307:        
                    308:        BOOL    result = YES;
                    309:        
                    310:        [[NXApp delegate] announce:controller selector:_cmd];
                    311:        
                    312:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    313:                {
                    314:                switch (NXRunAlertPanel ("EOController", 
                    315:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    316:                        {
                    317:                        case NX_ALERTALTERNATE:
                    318:                                result = NO;
                    319:                                break;
                    320:                        case NX_ALERTDEFAULT:
                    321:                        default:
                    322:                                result = YES;
                    323:                                break;
                    324:                        }
                    325:                }
                    326:        
                    327:        return result;
                    328: }
                    329: 
                    330: 
                    331: - (void)controllerDidSaveToDataSource:(EOController *)controller
                    332: {
                    333:     // These delegate messages are sent as the data source is notified of
                    334:     // changes to data-bearing objects.  If the savesToDataSourceAutomatically
                    335:     // flag is turned off and -saveToDataSource is invoked then the delegate
                    336:     // is notified of each buffered operation.
                    337: 
                    338:        [[NXApp delegate] announce:controller selector:_cmd];
                    339: }
                    340: 
                    341: 
                    342: - (EODataSourceOperationDelegateResponse)controller:(EOController *)controller
                    343:     willInsertObject:object
                    344:     inDataSource:dataSource
                    345: {
                    346:        int     result = EOPerformDataSourceOperation;
                    347:        
                    348:        [[NXApp delegate] announce:controller 
                    349:                selector:_cmd 
                    350:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    351:        
                    352:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    353:                {
                    354:                switch (NXRunAlertPanel ("EOController", 
                    355:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    356:                        {
                    357:                        case NX_ALERTALTERNATE:
                    358:                                result = EODiscardDataSourceOperation;
                    359:                                break;
                    360:                        case NX_ALERTDEFAULT:
                    361:                        default:
                    362:                                result = EOPerformDataSourceOperation;
                    363:                                break;
                    364:                        }
                    365:                }
                    366:        
                    367:        return result;
                    368: }
                    369: 
                    370: 
                    371: - (EODataSourceFailureResponse)controller:(EOController *)controller
                    372:     failedToInsertObject:object
                    373:     inDataSource:dataSource
                    374: {
                    375:        int     result = EONoDataSourceFailure;
                    376:        
                    377:        [[NXApp delegate] announce:controller 
                    378:                selector:_cmd 
                    379:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    380:        
                    381:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    382:                {
                    383:                switch (NXRunAlertPanel ("EOController", 
                    384:                        "%s", "No Failure", "Continue", "Rollback", sel_getName(_cmd)))
                    385:                        {
                    386:                        case NX_ALERTOTHER:
                    387:                                result = EORollbackDataSourceFailureResponse;
                    388:                                break;
                    389:                        case NX_ALERTALTERNATE:
                    390:                                result = EOContinueDataSourceFailureResponse;
                    391:                                break;
                    392:                        case NX_ALERTDEFAULT:
                    393:                        default:
                    394:                                result = EONoDataSourceFailure;
                    395:                                break;
                    396:                        }
                    397:                }
                    398:        
                    399:        return result;
                    400: }
                    401: 
                    402: 
                    403: - (void)controller:(EOController *)controller
                    404:     didInsertObject:object
                    405:     inDataSource:dataSource
                    406: {
                    407:        [[NXApp delegate] announce:controller 
                    408:                selector:_cmd 
                    409:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    410: }
                    411: 
                    412: 
                    413: - (EODataSourceOperationDelegateResponse)controller:(EOController *)controller
                    414:     willDeleteObject:object
                    415:     inDataSource:dataSource
                    416: {
                    417:        int     result = EOPerformDataSourceOperation;
                    418:        
                    419:        [[NXApp delegate] announce:controller 
                    420:                selector:_cmd 
                    421:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    422:        
                    423:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    424:                {
                    425:                switch (NXRunAlertPanel ("EOController", 
                    426:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    427:                        {
                    428:                        case NX_ALERTALTERNATE:
                    429:                                result = EODiscardDataSourceOperation;
                    430:                                break;
                    431:                        case NX_ALERTDEFAULT:
                    432:                        default:
                    433:                                result = EOPerformDataSourceOperation;
                    434:                                break;
                    435:                        }
                    436:                }
                    437:        
                    438:        return result;
                    439: }
                    440: 
                    441: 
                    442: - (EODataSourceFailureResponse)controller:(EOController *)controller
                    443:     failedToDeleteObject:object
                    444:     inDataSource:dataSource
                    445: {
                    446:        int     result = EONoDataSourceFailure;
                    447:        
                    448:        [[NXApp delegate] announce:controller 
                    449:                selector:_cmd 
                    450:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    451:        
                    452:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    453:                {
                    454:                switch (NXRunAlertPanel ("EOController", 
                    455:                        "%s", "No Failure", "Continue", "Rollback", sel_getName(_cmd)))
                    456:                        {
                    457:                        case NX_ALERTOTHER:
                    458:                                result = EORollbackDataSourceFailureResponse;
                    459:                                break;
                    460:                        case NX_ALERTALTERNATE:
                    461:                                result = EOContinueDataSourceFailureResponse;
                    462:                                break;
                    463:                        case NX_ALERTDEFAULT:
                    464:                        default:
                    465:                                result = EONoDataSourceFailure;
                    466:                                break;
                    467:                        }
                    468:                }
                    469:        
                    470:        return result;
                    471: }
                    472: 
                    473: 
                    474: - (void)controller:(EOController *)controller
                    475:     didDeleteObject:object
                    476:     inDataSource:dataSource
                    477: {
                    478:        [[NXApp delegate] announce:controller 
                    479:                selector:_cmd 
                    480:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    481: }
                    482: 
                    483: 
                    484: - (EODataSourceOperationDelegateResponse)controller:(EOController *)controller
                    485:     willUpdateObject:object
                    486:     inDataSource:dataSource
                    487: {
                    488:        int     result = EOPerformDataSourceOperation;
                    489:        
                    490:        [[NXApp delegate] announce:controller 
                    491:                selector:_cmd 
                    492:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    493:        
                    494:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    495:                {
                    496:                switch (NXRunAlertPanel ("EOController", 
                    497:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    498:                        {
                    499:                        case NX_ALERTALTERNATE:
                    500:                                result = EODiscardDataSourceOperation;
                    501:                                break;
                    502:                        case NX_ALERTDEFAULT:
                    503:                        default:
                    504:                                result = EOPerformDataSourceOperation;
                    505:                                break;
                    506:                        }
                    507:                }
                    508:        
                    509:        return result;
                    510: }
                    511: 
                    512: 
                    513: - (EODataSourceFailureResponse)controller:(EOController *)controller
                    514:     failedToUpdateObject:object
                    515:     inDataSource:dataSource;
                    516: {
                    517:        int     result = EONoDataSourceFailure;
                    518:        
                    519:        [[NXApp delegate] announce:controller 
                    520:                selector:_cmd 
                    521:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    522:        
                    523:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    524:                {
                    525:                switch (NXRunAlertPanel ("EOController", 
                    526:                        "%s", "No Failure", "Continue", "Rollback", sel_getName(_cmd)))
                    527:                        {
                    528:                        case NX_ALERTOTHER:
                    529:                                result = EORollbackDataSourceFailureResponse;
                    530:                                break;
                    531:                        case NX_ALERTALTERNATE:
                    532:                                result = EOContinueDataSourceFailureResponse;
                    533:                                break;
                    534:                        case NX_ALERTDEFAULT:
                    535:                        default:
                    536:                                result = EONoDataSourceFailure;
                    537:                                break;
                    538:                        }
                    539:                }
                    540:        
                    541:        return result;
                    542: }
                    543: 
                    544: 
                    545: - (void)controller:(EOController *)controller
                    546:     didUpdateObject:object
                    547:     inDataSource:dataSource
                    548: {
                    549:        [[NXApp delegate] announce:controller 
                    550:                selector:_cmd 
                    551:                with:[NSArray arrayWithObjects: object, dataSource, nil]];
                    552: }
                    553: 
                    554: 
                    555: - (void)controller:(EOController *)controller 
                    556:        willRollbackDataSource:(id <EODataSources>)dataSource
                    557: {
                    558:        [[NXApp delegate] announce:controller 
                    559:                selector:_cmd 
                    560:                with:[NSArray arrayWithObject: dataSource]];
                    561: }
                    562: 
                    563: 
                    564: - (void)controller:(EOController *)controller 
                    565:        didRollbackDataSource:(id <EODataSources>)dataSource
                    566: {
                    567:        [[NXApp delegate] announce:controller 
                    568:                selector:_cmd 
                    569:                with:[NSArray arrayWithObject: dataSource]];
                    570: }
                    571: 
                    572: 
                    573: - (BOOL)controllerWillUndo:(EOController *)controller
                    574: {
                    575:        BOOL    result = YES;
                    576:        
                    577:        [[NXApp delegate] announce:controller selector:_cmd];
                    578:        
                    579:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    580:                {
                    581:                switch (NXRunAlertPanel ("EOController", 
                    582:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    583:                        {
                    584:                        case NX_ALERTALTERNATE:
                    585:                                result = NO;
                    586:                                break;
                    587:                        case NX_ALERTDEFAULT:
                    588:                        default:
                    589:                                result = YES;
                    590:                                break;
                    591:                        }
                    592:                }
                    593:        
                    594:        return result;
                    595: }
                    596: 
                    597: 
                    598: - (void)controllerDidUndo:(EOController *)controller
                    599: {
                    600:        [[NXApp delegate] announce:controller selector:_cmd];
                    601:        
                    602: }
                    603: 
                    604: 
                    605: - (void)controller:(EOController *)controller 
                    606:        didChangeDataSource: (id <EODataSources>)dataSource
                    607: {
                    608:        [[NXApp delegate] announce:controller 
                    609:                selector:_cmd 
                    610:                with:[NSArray arrayWithObject: dataSource]];
                    611: }
                    612: 
                    613: 
                    614: - (void)controller:(EOController *)controller 
                    615:        association: (EOAssociation *)association 
                    616:        didEditObject: anObject 
                    617:        key: (NSString *)key 
                    618:        value: aValue
                    619: {
                    620:        [[NXApp delegate] announce:controller 
                    621:                selector:_cmd 
                    622:                with:[NSArray arrayWithObjects: 
                    623:                        association, anObject, key, aValue, nil]];
                    624: }
                    625: 
                    626: 
                    627: - (BOOL)controller:(EOController *)controller willUndoObject:anObject
                    628: {
                    629:        BOOL    result = YES;
                    630:        
                    631:        [[NXApp delegate] announce:controller 
                    632:                selector:_cmd 
                    633:                with:[NSArray arrayWithObject: anObject]];
                    634:        
                    635:        if ([[NXApp delegate] wantsAlertPanels] == YES)
                    636:                {
                    637:                switch (NXRunAlertPanel ("EOController", 
                    638:                        "%s", "YES", "NO", NULL, sel_getName(_cmd)))
                    639:                        {
                    640:                        case NX_ALERTALTERNATE:
                    641:                                result = NO;
                    642:                                break;
                    643:                        case NX_ALERTDEFAULT:
                    644:                        default:
                    645:                                result = YES;
                    646:                                break;
                    647:                        }
                    648:                }
                    649:        
                    650:        return result;
                    651: }
                    652: 
                    653: 
                    654: - (void)controller:(EOController *)controller didUndoObject:anObject
                    655: {
                    656:        [[NXApp delegate] announce:controller 
                    657:                selector:_cmd 
                    658:                with:[NSArray arrayWithObject: anObject]];
                    659: }
                    660: 
                    661: // This delegate method can be implemented to respond when the controller is 
                    662: // unable to create an object for a data source. If the delegate does not 
                    663: // implement this method, the controller will put up a panel to alert the user
                    664: // of the error. Otherwise, the delegate is responsible for notifying the user. 
                    665: - (void) controller:(EOController *)controller
                    666:     createObjectFailedForDataSource:dataSource
                    667: {
                    668:        [[NXApp delegate] announce:controller 
                    669:                selector:_cmd 
                    670:                with:[NSArray arrayWithObject: dataSource]];
                    671: }
                    672: 
                    673: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.