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]

Reply via email to