diff --git a/ChangeLog b/ChangeLog index 1764b386c..e0c8922b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-01-24 Fred Kiefer + + * Headers/AppKit/NSViewController.h, + * Source/NSViewController.m: Add loading of NIB. + * Headers/AppKit/NSObjectController.h: Use version constant names. + 2011-01-24 Wolfgang Lux * Source/NSWindow.m (-setFrameFromString:, -stringWithSavedFrame): diff --git a/Headers/AppKit/NSObjectController.h b/Headers/AppKit/NSObjectController.h index 62c37964b..895227ab2 100644 --- a/Headers/AppKit/NSObjectController.h +++ b/Headers/AppKit/NSObjectController.h @@ -33,7 +33,7 @@ #import #import -#if OS_API_VERSION(100300,GS_API_LATEST) +#if OS_API_VERSION(MAC_OS_X_VERSION_10_3,GS_API_LATEST) @class NSArray; @class NSMutableArray; @@ -87,7 +87,7 @@ - (BOOL) validateMenuItem: (id )item; -#if OS_API_VERSION(100400,GS_API_LATEST) +#if OS_API_VERSION(MAC_OS_X_VERSION_10_4,GS_API_LATEST) - (NSString*) entityNameKey; - (void) setEntityName: (NSString*)entityName; - (NSPredicate*) fetchPredicate; diff --git a/Headers/AppKit/NSViewController.h b/Headers/AppKit/NSViewController.h index b2ba01056..5d98ac64b 100644 --- a/Headers/AppKit/NSViewController.h +++ b/Headers/AppKit/NSViewController.h @@ -24,12 +24,14 @@ Boston, MA 02110-1301, USA. #ifndef _GNUstep_H_NSViewController #define _GNUstep_H_NSViewController +#import #import #import -@class NSArray, NSBundle, NSPointerArray, NSView; +#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST) +@class NSArray, NSBundle, NSPointerArray, NSView; @interface NSViewController : NSResponder { @@ -43,34 +45,30 @@ Boston, MA 02110-1301, USA. NSPointerArray *_editors; id _autounbinder; NSString *_designNibBundleIdentifier; - id _reserved[2]; + struct ___vcFlags + { + unsigned int nib_is_loaded:1; + unsigned int RESERVED:31; + } _vcFlags; + id _reserved; } - - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil; - (void)setRepresentedObject:(id)representedObject; - - (id)representedObject; - (void)setTitle:(NSString *)title; - (NSString *)title; +- (void)setView:(NSView *)aView; - (NSView *)view; +- (void)loadView; - (NSString *)nibName; - (NSBundle *)nibBundle; - -- (void)setView:(NSView *)aView; - -- (void)commitEditingWithDelegate:(id)delegate - didCommitSelector:(SEL)didCommitSelector - contextInfo:(void *)contextInfo; - -- (BOOL)commitEditing; -- (void)discardEditing; - @end +#endif // OS_API_VERSION #endif /* _GNUstep_H_NSViewController */ diff --git a/Source/NSViewController.m b/Source/NSViewController.m index e7d96cb63..b22d6cc18 100644 --- a/Source/NSViewController.m +++ b/Source/NSViewController.m @@ -3,6 +3,9 @@ Copyright (C) 2010 Free Software Foundation, Inc. + Author: David Wetzel + Date: 2010 + This file is part of the GNUstep GUI Library. This library is free software; you can redistribute it and/or @@ -22,11 +25,27 @@ Boston, MA 02110-1301, USA. */ +#import +#import "AppKit/NSKeyValueBinding.h" +#import "AppKit/NSNib.h" #import "AppKit/NSViewController.h" @implementation NSViewController +- (id)initWithNibName:(NSString *)nibNameOrNil + bundle:(NSBundle *)nibBundleOrNil +{ + self = [super init]; + if (self == nil) + return nil; + + ASSIGN(_nibName, nibNameOrNil); + ASSIGN(_nibBundle, nibBundleOrNil); + + return self; +} + - (void) dealloc { DESTROY(_nibName); @@ -41,17 +60,6 @@ [super dealloc]; } -- (id)initWithNibName:(NSString *)nibNameOrNil - bundle:(NSBundle *)nibBundleOrNil -{ - [super init]; - - ASSIGN(_nibName, nibNameOrNil); - ASSIGN(_nibBundle, nibBundleOrNil); - - return self; -} - - (void)setRepresentedObject:(id)representedObject { ASSIGN(_representedObject, representedObject); @@ -74,6 +82,10 @@ - (NSView *)view { + if (view == nil && !_vcFlags.nib_is_loaded) + { + [self loadView]; + } return view; } @@ -82,6 +94,34 @@ view = aView; } +- (void)loadView +{ + NSNib *nib; + + if (_vcFlags.nib_is_loaded) + { + return; + } + + nib = [[NSNib alloc] initWithNibNamed: [self nibName] + bundle: [self nibBundle]]; + if ((nib != nil) && [nib instantiateNibWithOwner: self + topLevelObjects: &_topLevelObjects]) + { + _vcFlags.nib_is_loaded = YES; + // FIXME: Need to resolve possible retain cycles here + } + else + { + if (_nibName != nil) + { + NSLog(@"%@: could not load nib named %@.nib", + [self class], _nibName); + } + } + RELEASE(nib); +} + - (NSString *)nibName { return _nibName; @@ -92,16 +132,44 @@ return _nibBundle; } +@end +@implementation NSViewController (NSEditorRegistration) +- (void) objectDidBeginEditing: (id)editor +{ + // Add editor to _editors +} + +- (void) objectDidEndEditing: (id)editor +{ + // Remove editor from _editors +} + +@end + +@implementation NSViewController (NSEditor) - (void)commitEditingWithDelegate:(id)delegate didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo { - [self notImplemented: _cmd]; + // Loop over all elements of _editors + id editor = nil; + BOOL res = [self commitEditing]; + + if (delegate && [delegate respondsToSelector: didCommitSelector]) + { + void (*didCommit)(id, SEL, id, BOOL, void*); + + didCommit = (void (*)(id, SEL, id, BOOL, void*))[delegate methodForSelector: + didCommitSelector]; + didCommit(delegate, didCommitSelector, editor, res, contextInfo); + } + } - (BOOL)commitEditing { + // Loop over all elements of _editors [self notImplemented: _cmd]; return NO; @@ -109,8 +177,8 @@ - (void)discardEditing { + // Loop over all elements of _editors [self notImplemented: _cmd]; } - @end