Graham, Yup, Nathan the double indirection of id *
1st, just the key snippet from FileController.m: @implementation FileController id mFileSheetDelegate; ===== Here's the complete interface and implementation files for just one SheetController, which has 2 buttons in its sheet window: // SaveSheetController.h #import <Cocoa/Cocoa.h> @interface SaveSheetController:NSWindowController { IBOutlet NSTextField *iboSaveDescription; } - (void) showSheetOnParentWindow:(NSWindow*)parentWindow withDescription:(NSString*)theDescription delegate:(id)theTarget contextInfo:(void*)contextInfo; - (void) sheetDidEnd:(NSWindow*)sheet returnCode:(int)returnCode contextInfo:(void*)contextInfo; - (IBAction) saveIt:(id)sender; - (IBAction) dontSaveIt:(id)sender; - (void) closeSheet:(id)sender withCode:(int)theCode; @end =========== // SaveSheetController.m #import "SaveSheetController.h" enum { kJustSave, /* 0, 1 */ kJustNotSave }; @implementation SaveSheetController extern id mFileSheetDelegate; - (void) showSheetOnParentWindow:(NSWindow*)parentWindow withDescription:(NSString*)theDescription delegate:(id)theTarget contextInfo:(void*)contextInfo { mFileSheetDelegate = theTarget; if (theDescription) { // do magic } [NSApp beginSheet:[self window] modalForWindow:parentWindow modalDelegate:theTarget didEndSelector:@selector (sheetDidEnd:returnCode:contextInfo:) contextInfo:contextInfo]; } // 2 buttons of saveSheet - (IBAction) saveIt:(id)sender { [self closeSheet:sender withCode:kJustSave]; } - (IBAction) dontSaveIt:(id)sender { [self closeSheet:sender withCode:kJustNotSave]; } - (void) closeSheet:(id)sender withCode:(int)theCode { NSWindow* theSheet; theSheet = [sender window]; [NSApp endSheet:theSheet returnCode:theCode]; // calls didEndSelector } - (void) sheetDidEnd:(NSWindow*)sheet returnCode:(int)returnCode contextInfo:(void*)contextInfo { [mFileSheetDelegate doSheetSelection:returnCode contextInfo:contextInfo]; [sheet orderOut:self]; } @end ======== Finally, a snippet or two from [doSheetSelection:contextInfo]: - (void) doSheetSelection:(int)returnCode contextInfo:(void*)contextInfo { /* If we had different sheets returning the same code, then we would select between the different sheet IDs. But, for our case, all returned IDs are unique. if ([(NSString*)contextInfo isEqualToString:sCalculateSheetID]) { } if ([(NSString*)contextInfo isEqualToString:sSaveSheetID]) { } if ([(NSString*)contextInfo isEqualToString:sErrorSheetID]) { } */ switch (returnCode) { case kJustSave: [self saveSpreadsheet]; gShouldCloseDoc = TRUE; break; case kJustNotSave: [self setStatus:sFileNotSavedMsg]; gShouldCloseDoc = TRUE; break; } ======== Okay ... all the snippets are done ... now, the questions: (1) warning: no doSheetSelection:contextInfo method found which, I think, is due to the fact that the external class of mFileSheetDelegate = FileController, yet when referenced in SaveSheetController, it's = id, a general pointer. But, I thought all anonymous pointers were resolved at runtime ... am I just going to force myself to ignore this Build Warning, knowing that it will all go away at runtime??? (2)I still get "unrecognized selector" .. but, didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) is within the sheet.m .. good grief! John _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]