Add loading of NIB to NSViewController.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@31940 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2011-01-24 11:47:55 +00:00
parent 89715a53c1
commit 6eaff61772
4 changed files with 101 additions and 29 deletions

View file

@ -1,3 +1,9 @@
2011-01-24 Fred Kiefer <FredKiefer@gmx.de>
* Headers/AppKit/NSViewController.h,
* Source/NSViewController.m: Add loading of NIB.
* Headers/AppKit/NSObjectController.h: Use version constant names.
2011-01-24 Wolfgang Lux <wolfgang.lux@gmail.com>
* Source/NSWindow.m (-setFrameFromString:, -stringWithSavedFrame):

View file

@ -33,7 +33,7 @@
#import <AppKit/NSController.h>
#import <AppKit/NSMenuItem.h>
#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 <NSMenuItem>)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;

View file

@ -24,12 +24,14 @@ Boston, MA 02110-1301, USA.
#ifndef _GNUstep_H_NSViewController
#define _GNUstep_H_NSViewController
#import <GNUstepBase/GSVersionMacros.h>
#import <AppKit/NSNibDeclarations.h>
#import <AppKit/NSResponder.h>
@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 */

View file

@ -3,6 +3,9 @@
Copyright (C) 2010 Free Software Foundation, Inc.
Author: David Wetzel <dave@turbocat.de>
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 <Foundation/NSString.h>
#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