mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-06-02 09:10:59 +00:00
* Source/NSBundleAdditions.m,
* Source/NSNibConnector.m: Move NSNibConnector and subclasses in separate file. Add isEqual: method from Gorm. Switch to new libobjc runtime ivar access for NSNibOutletConnector. * Source/GNUmakefile: Add new file NSNibConnector.m * Source/GSXibLoader.m: Similar change to IBOutletConnection. Replace GSMime base64 decode method with standard one. * Source/GSImageMagickImageRep.m, * Source/GSTheme.m: Remove unused #import. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@38919 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
49a39c958f
commit
144ebe2179
7 changed files with 267 additions and 205 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2015-08-23 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
|
* Source/NSBundleAdditions.m,
|
||||||
|
* Source/NSNibConnector.m: Move NSNibConnector and subclasses in
|
||||||
|
separate file. Add isEqual: method from Gorm. Switch to new
|
||||||
|
libobjc runtime ivar access for NSNibOutletConnector.
|
||||||
|
* Source/GNUmakefile: Add new file NSNibConnector.m
|
||||||
|
* Source/GSXibLoader.m: Similar change to IBOutletConnection.
|
||||||
|
Replace GSMime base64 decode method with standard one.
|
||||||
|
* Source/GSImageMagickImageRep.m,
|
||||||
|
* Source/GSTheme.m: Remove unused #import.
|
||||||
|
|
||||||
2015-08-23 Fred Kiefer <FredKiefer@gmx.de>
|
2015-08-23 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
* Source/NSInputManager.m: Add binding processing code for escape
|
* Source/NSInputManager.m: Add binding processing code for escape
|
||||||
|
|
|
@ -121,6 +121,7 @@ NSMenuItemCell.m \
|
||||||
NSMovie.m \
|
NSMovie.m \
|
||||||
NSMovieView.m \
|
NSMovieView.m \
|
||||||
NSNib.m \
|
NSNib.m \
|
||||||
|
NSNibConnector.m \
|
||||||
NSNibBindingConnector.m \
|
NSNibBindingConnector.m \
|
||||||
NSNibAXAttributeConnector.m \
|
NSNibAXAttributeConnector.m \
|
||||||
NSNibAXRelationshipConnector.m \
|
NSNibAXRelationshipConnector.m \
|
||||||
|
|
|
@ -31,10 +31,10 @@
|
||||||
#import <Foundation/NSArray.h>
|
#import <Foundation/NSArray.h>
|
||||||
#import <Foundation/NSAffineTransform.h>
|
#import <Foundation/NSAffineTransform.h>
|
||||||
#import <Foundation/NSCoder.h>
|
#import <Foundation/NSCoder.h>
|
||||||
|
#import <Foundation/NSDebug.h>
|
||||||
#import <Foundation/NSData.h>
|
#import <Foundation/NSData.h>
|
||||||
#import <Foundation/NSTask.h>
|
#import <Foundation/NSTask.h>
|
||||||
#import <Foundation/NSProcessInfo.h>
|
#import <Foundation/NSProcessInfo.h>
|
||||||
#import <GNUstepBase/NSDebug+GNUstepBase.h>
|
|
||||||
#import "AppKit/NSBitmapImageRep.h"
|
#import "AppKit/NSBitmapImageRep.h"
|
||||||
#import "AppKit/NSGraphics.h"
|
#import "AppKit/NSGraphics.h"
|
||||||
#import "AppKit/NSPasteboard.h"
|
#import "AppKit/NSPasteboard.h"
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
#import <Foundation/NSPathUtilities.h>
|
#import <Foundation/NSPathUtilities.h>
|
||||||
#import <Foundation/NSSet.h>
|
#import <Foundation/NSSet.h>
|
||||||
#import <Foundation/NSUserDefaults.h>
|
#import <Foundation/NSUserDefaults.h>
|
||||||
#import "GNUstepBase/GSObjCRuntime.h"
|
|
||||||
#import "GNUstepGUI/GSTheme.h"
|
#import "GNUstepGUI/GSTheme.h"
|
||||||
#import "AppKit/NSApplication.h"
|
#import "AppKit/NSApplication.h"
|
||||||
#import "AppKit/NSButtonCell.h"
|
#import "AppKit/NSButtonCell.h"
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#import <Foundation/NSXMLParser.h>
|
#import <Foundation/NSXMLParser.h>
|
||||||
#import <Foundation/NSXMLDocument.h>
|
#import <Foundation/NSXMLDocument.h>
|
||||||
#import <Foundation/NSXMLElement.h>
|
#import <Foundation/NSXMLElement.h>
|
||||||
#import <GNUstepBase/GSMime.h>
|
|
||||||
|
|
||||||
#import "AppKit/NSApplication.h"
|
#import "AppKit/NSApplication.h"
|
||||||
#import "AppKit/NSNib.h"
|
#import "AppKit/NSNib.h"
|
||||||
|
@ -330,20 +329,18 @@
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const char *nam = [label cString];
|
/*
|
||||||
const char *type;
|
* We cannot use the KVC mechanism here, as this would always retain _dst
|
||||||
unsigned int size;
|
* and it could also affect _setXXX methods and _XXX ivars that aren't
|
||||||
int offset;
|
* affected by the Cocoa code.
|
||||||
|
|
||||||
/*
|
|
||||||
* Use the GNUstep additional function to set the instance
|
|
||||||
* variable directly.
|
|
||||||
* FIXME - need some way to do this for libFoundation and
|
|
||||||
* Foundation based systems.
|
|
||||||
*/
|
*/
|
||||||
if (GSObjCFindVariable(source, nam, &type, &size, &offset))
|
const char *name = [label cString];
|
||||||
{
|
Class class = object_getClass(source);
|
||||||
GSObjCSetVariable(source, offset, size, (void*)&destination);
|
Ivar ivar = class_getInstanceVariable(class, name);
|
||||||
|
|
||||||
|
if (ivar != 0)
|
||||||
|
{
|
||||||
|
object_setIvar(source, ivar, destination);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1583,10 +1580,11 @@ didStartElement: (NSString*)elementName
|
||||||
|
|
||||||
if ([type isEqualToString: @"base64-UTF8"])
|
if ([type isEqualToString: @"base64-UTF8"])
|
||||||
{
|
{
|
||||||
NSData *d = [new dataUsingEncoding: NSASCIIStringEncoding];
|
NSData *d = [[NSData alloc] initWithBase64EncodedString: new
|
||||||
d = [GSMimeDocument decodeBase64: d];
|
options: 0];
|
||||||
new = AUTORELEASE([[NSString alloc] initWithData: d
|
new = AUTORELEASE([[NSString alloc] initWithData: d
|
||||||
encoding: NSUTF8StringEncoding]);
|
encoding: NSUTF8StringEncoding]);
|
||||||
|
RELEASE(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
// empty strings are not nil!
|
// empty strings are not nil!
|
||||||
|
@ -1697,9 +1695,8 @@ didStartElement: (NSString*)elementName
|
||||||
}
|
}
|
||||||
else if ([@"bytes" isEqualToString: elementName])
|
else if ([@"bytes" isEqualToString: elementName])
|
||||||
{
|
{
|
||||||
id new = [[element value] dataUsingEncoding: NSASCIIStringEncoding
|
id new = AUTORELEASE([[NSData alloc] initWithBase64EncodedString: [element value]
|
||||||
allowLossyConversion: NO];
|
options: 0]);
|
||||||
new = [GSMimeDocument decodeBase64: new];
|
|
||||||
|
|
||||||
if (objID != nil)
|
if (objID != nil)
|
||||||
[decoded setObject: new forKey: objID];
|
[decoded setObject: new forKey: objID];
|
||||||
|
|
|
@ -33,200 +33,16 @@
|
||||||
#import "config.h"
|
#import "config.h"
|
||||||
#import <Foundation/NSArray.h>
|
#import <Foundation/NSArray.h>
|
||||||
#import <Foundation/NSBundle.h>
|
#import <Foundation/NSBundle.h>
|
||||||
#import <Foundation/NSCoder.h>
|
|
||||||
#import <Foundation/NSDebug.h>
|
#import <Foundation/NSDebug.h>
|
||||||
#import <Foundation/NSDictionary.h>
|
#import <Foundation/NSDictionary.h>
|
||||||
#import <Foundation/NSEnumerator.h>
|
#import <Foundation/NSEnumerator.h>
|
||||||
#import <Foundation/NSException.h>
|
|
||||||
#import <Foundation/NSString.h>
|
#import <Foundation/NSString.h>
|
||||||
#import <Foundation/NSURL.h>
|
#import <Foundation/NSURL.h>
|
||||||
#import <Foundation/NSUserDefaults.h>
|
#import <Foundation/NSUserDefaults.h>
|
||||||
#import <Foundation/NSKeyValueCoding.h>
|
|
||||||
#import "AppKit/NSControl.h"
|
|
||||||
#import "AppKit/NSNib.h"
|
#import "AppKit/NSNib.h"
|
||||||
#import "AppKit/NSNibConnector.h"
|
|
||||||
#import "AppKit/NSNibLoading.h"
|
#import "AppKit/NSNibLoading.h"
|
||||||
#import "GNUstepGUI/GSModelLoaderFactory.h"
|
#import "GNUstepGUI/GSModelLoaderFactory.h"
|
||||||
|
|
||||||
@implementation NSNibConnector
|
|
||||||
|
|
||||||
- (void) dealloc
|
|
||||||
{
|
|
||||||
RELEASE(_src);
|
|
||||||
RELEASE(_dst);
|
|
||||||
RELEASE(_tag);
|
|
||||||
[super dealloc];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id) destination
|
|
||||||
{
|
|
||||||
return _dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) encodeWithCoder: (NSCoder*)aCoder
|
|
||||||
{
|
|
||||||
if ([aCoder allowsKeyedCoding])
|
|
||||||
{
|
|
||||||
if (_src != nil)
|
|
||||||
{
|
|
||||||
[aCoder encodeObject: _src forKey: @"NSSource"];
|
|
||||||
}
|
|
||||||
if (_dst != nil)
|
|
||||||
{
|
|
||||||
[aCoder encodeObject: _dst forKey: @"NSDestination"];
|
|
||||||
}
|
|
||||||
if (_tag != nil)
|
|
||||||
{
|
|
||||||
[aCoder encodeObject: _tag forKey: @"NSLabel"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[aCoder encodeObject: _src];
|
|
||||||
[aCoder encodeObject: _dst];
|
|
||||||
[aCoder encodeObject: _tag];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) establishConnection
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id) initWithCoder: (NSCoder*)aDecoder
|
|
||||||
{
|
|
||||||
if ([aDecoder allowsKeyedCoding])
|
|
||||||
{
|
|
||||||
if ([aDecoder containsValueForKey: @"NSDestination"])
|
|
||||||
{
|
|
||||||
ASSIGN(_dst, [aDecoder decodeObjectForKey: @"NSDestination"]);
|
|
||||||
}
|
|
||||||
if ([aDecoder containsValueForKey: @"NSSource"])
|
|
||||||
{
|
|
||||||
ASSIGN(_src, [aDecoder decodeObjectForKey: @"NSSource"]);
|
|
||||||
}
|
|
||||||
if ([aDecoder containsValueForKey: @"NSLabel"])
|
|
||||||
{
|
|
||||||
ASSIGN(_tag, [aDecoder decodeObjectForKey: @"NSLabel"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_src];
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_dst];
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_tag];
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString*) label
|
|
||||||
{
|
|
||||||
return _tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) replaceObject: (id)anObject withObject: (id)anotherObject
|
|
||||||
{
|
|
||||||
if (_src == anObject)
|
|
||||||
{
|
|
||||||
ASSIGN(_src, anotherObject);
|
|
||||||
}
|
|
||||||
if (_dst == anObject)
|
|
||||||
{
|
|
||||||
ASSIGN(_dst, anotherObject);
|
|
||||||
}
|
|
||||||
if (_tag == anObject)
|
|
||||||
{
|
|
||||||
ASSIGN(_tag, anotherObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id) source
|
|
||||||
{
|
|
||||||
return _src;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) setDestination: (id)anObject
|
|
||||||
{
|
|
||||||
ASSIGN(_dst, anObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) setLabel: (NSString*)label
|
|
||||||
{
|
|
||||||
ASSIGN(_tag, label);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) setSource: (id)anObject
|
|
||||||
{
|
|
||||||
ASSIGN(_src, anObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)description
|
|
||||||
{
|
|
||||||
NSString *desc = [NSString stringWithFormat: @"<%@ src=%@ dst=%@ label=%@>",
|
|
||||||
[super description],
|
|
||||||
[self source],
|
|
||||||
[self destination],
|
|
||||||
[self label]];
|
|
||||||
return desc;
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation NSNibControlConnector
|
|
||||||
- (void) establishConnection
|
|
||||||
{
|
|
||||||
SEL sel = NSSelectorFromString(_tag);
|
|
||||||
|
|
||||||
[_src setTarget: _dst];
|
|
||||||
[_src setAction: sel];
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation NSNibOutletConnector
|
|
||||||
- (void) establishConnection
|
|
||||||
{
|
|
||||||
NS_DURING
|
|
||||||
{
|
|
||||||
if (_src != nil)
|
|
||||||
{
|
|
||||||
NSString *selName;
|
|
||||||
SEL sel;
|
|
||||||
|
|
||||||
selName = [NSString stringWithFormat: @"set%@%@:",
|
|
||||||
[[_tag substringToIndex: 1] uppercaseString],
|
|
||||||
[_tag substringFromIndex: 1]];
|
|
||||||
sel = NSSelectorFromString(selName);
|
|
||||||
|
|
||||||
if (sel && [_src respondsToSelector: sel])
|
|
||||||
{
|
|
||||||
[_src performSelector: sel withObject: _dst];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const char *nam = [_tag cString];
|
|
||||||
const char *type;
|
|
||||||
unsigned int size;
|
|
||||||
int offset;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Use the GNUstep additional function to set the instance
|
|
||||||
* variable directly.
|
|
||||||
* FIXME - need some way to do this for libFoundation and
|
|
||||||
* Foundation based systems.
|
|
||||||
*/
|
|
||||||
if (GSObjCFindVariable(_src, nam, &type, &size, &offset))
|
|
||||||
{
|
|
||||||
GSObjCSetVariable(_src, offset, size, (void*)&_dst);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
NS_HANDLER
|
|
||||||
{
|
|
||||||
NSLog(@"Error while establishing connection %@: %@",self,[localException reason]);
|
|
||||||
}
|
|
||||||
NS_ENDHANDLER;
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation NSBundle (NSBundleAdditions)
|
@implementation NSBundle (NSBundleAdditions)
|
||||||
+ (BOOL) loadNibFile: (NSString*)fileName
|
+ (BOOL) loadNibFile: (NSString*)fileName
|
||||||
externalNameTable: (NSDictionary*)context
|
externalNameTable: (NSDictionary*)context
|
||||||
|
|
237
Source/NSNibConnector.m
Normal file
237
Source/NSNibConnector.m
Normal file
|
@ -0,0 +1,237 @@
|
||||||
|
/*
|
||||||
|
<title>NSNibConnector</title>
|
||||||
|
|
||||||
|
<abstract>Implementation of NSNibConnector and subclasses</abstract>
|
||||||
|
|
||||||
|
Copyright (C) 1999, 2015 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Author: Richard Frith-Macdonald <richard@branstorm.co.uk>
|
||||||
|
Date: 1999
|
||||||
|
Author: Fred Kiefer <fredkiefer@gmx.de>
|
||||||
|
Date: August 2015
|
||||||
|
|
||||||
|
This file is part of the GNUstep GUI Library.
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; see the file COPYING.LIB.
|
||||||
|
If not, see <http://www.gnu.org/licenses/> or write to the
|
||||||
|
Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "config.h"
|
||||||
|
#import <Foundation/NSCoder.h>
|
||||||
|
#import <Foundation/NSException.h>
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
#import "AppKit/NSControl.h"
|
||||||
|
#import "AppKit/NSNibConnector.h"
|
||||||
|
|
||||||
|
@implementation NSNibConnector
|
||||||
|
|
||||||
|
- (void) dealloc
|
||||||
|
{
|
||||||
|
RELEASE(_src);
|
||||||
|
RELEASE(_dst);
|
||||||
|
RELEASE(_tag);
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) destination
|
||||||
|
{
|
||||||
|
return _dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) encodeWithCoder: (NSCoder*)aCoder
|
||||||
|
{
|
||||||
|
if ([aCoder allowsKeyedCoding])
|
||||||
|
{
|
||||||
|
if (_src != nil)
|
||||||
|
{
|
||||||
|
[aCoder encodeObject: _src forKey: @"NSSource"];
|
||||||
|
}
|
||||||
|
if (_dst != nil)
|
||||||
|
{
|
||||||
|
[aCoder encodeObject: _dst forKey: @"NSDestination"];
|
||||||
|
}
|
||||||
|
if (_tag != nil)
|
||||||
|
{
|
||||||
|
[aCoder encodeObject: _tag forKey: @"NSLabel"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[aCoder encodeObject: _src];
|
||||||
|
[aCoder encodeObject: _dst];
|
||||||
|
[aCoder encodeObject: _tag];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) establishConnection
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||||
|
{
|
||||||
|
if ([aDecoder allowsKeyedCoding])
|
||||||
|
{
|
||||||
|
if ([aDecoder containsValueForKey: @"NSDestination"])
|
||||||
|
{
|
||||||
|
ASSIGN(_dst, [aDecoder decodeObjectForKey: @"NSDestination"]);
|
||||||
|
}
|
||||||
|
if ([aDecoder containsValueForKey: @"NSSource"])
|
||||||
|
{
|
||||||
|
ASSIGN(_src, [aDecoder decodeObjectForKey: @"NSSource"]);
|
||||||
|
}
|
||||||
|
if ([aDecoder containsValueForKey: @"NSLabel"])
|
||||||
|
{
|
||||||
|
ASSIGN(_tag, [aDecoder decodeObjectForKey: @"NSLabel"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_src];
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_dst];
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_tag];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) isEqual: (id)object
|
||||||
|
{
|
||||||
|
BOOL result = NO;
|
||||||
|
|
||||||
|
if([object isKindOfClass: [NSNibConnector class]] == NO)
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(self == object)
|
||||||
|
{
|
||||||
|
result = YES;
|
||||||
|
}
|
||||||
|
else if([[self source] isEqual: [object source]] &&
|
||||||
|
[[self destination] isEqual: [object destination]] &&
|
||||||
|
[[self label] isEqual: [object label]] &&
|
||||||
|
([self class] == [object class]))
|
||||||
|
{
|
||||||
|
result = YES;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) label
|
||||||
|
{
|
||||||
|
return _tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) replaceObject: (id)anObject withObject: (id)anotherObject
|
||||||
|
{
|
||||||
|
if (_src == anObject)
|
||||||
|
{
|
||||||
|
ASSIGN(_src, anotherObject);
|
||||||
|
}
|
||||||
|
if (_dst == anObject)
|
||||||
|
{
|
||||||
|
ASSIGN(_dst, anotherObject);
|
||||||
|
}
|
||||||
|
if (_tag == anObject)
|
||||||
|
{
|
||||||
|
ASSIGN(_tag, anotherObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) source
|
||||||
|
{
|
||||||
|
return _src;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setDestination: (id)anObject
|
||||||
|
{
|
||||||
|
ASSIGN(_dst, anObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setLabel: (NSString*)label
|
||||||
|
{
|
||||||
|
ASSIGN(_tag, label);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setSource: (id)anObject
|
||||||
|
{
|
||||||
|
ASSIGN(_src, anObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)description
|
||||||
|
{
|
||||||
|
NSString *desc = [NSString stringWithFormat: @"<%@ src=%@ dst=%@ label=%@>",
|
||||||
|
[super description],
|
||||||
|
[self source],
|
||||||
|
[self destination],
|
||||||
|
[self label]];
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation NSNibControlConnector
|
||||||
|
- (void) establishConnection
|
||||||
|
{
|
||||||
|
SEL sel = NSSelectorFromString(_tag);
|
||||||
|
|
||||||
|
[_src setTarget: _dst];
|
||||||
|
[_src setAction: sel];
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation NSNibOutletConnector
|
||||||
|
- (void) establishConnection
|
||||||
|
{
|
||||||
|
NS_DURING
|
||||||
|
{
|
||||||
|
if (_src != nil)
|
||||||
|
{
|
||||||
|
NSString *selName;
|
||||||
|
SEL sel;
|
||||||
|
|
||||||
|
selName = [NSString stringWithFormat: @"set%@%@:",
|
||||||
|
[[_tag substringToIndex: 1] uppercaseString],
|
||||||
|
[_tag substringFromIndex: 1]];
|
||||||
|
sel = NSSelectorFromString(selName);
|
||||||
|
|
||||||
|
if (sel && [_src respondsToSelector: sel])
|
||||||
|
{
|
||||||
|
[_src performSelector: sel withObject: _dst];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We cannot use the KVC mechanism here, as this would always retain _dst
|
||||||
|
* and it could also affect _setXXX methods and _XXX ivars that aren't
|
||||||
|
* affected by the Cocoa code.
|
||||||
|
*/
|
||||||
|
const char *name = [_tag cString];
|
||||||
|
Class class = object_getClass(_src);
|
||||||
|
Ivar ivar = class_getInstanceVariable(class, name);
|
||||||
|
|
||||||
|
if (ivar != 0)
|
||||||
|
{
|
||||||
|
object_setIvar(_src, ivar, _dst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NS_HANDLER
|
||||||
|
{
|
||||||
|
NSLog(@"Error while establishing connection %@: %@", self, [localException reason]);
|
||||||
|
}
|
||||||
|
NS_ENDHANDLER;
|
||||||
|
}
|
||||||
|
@end
|
Loading…
Add table
Add a link
Reference in a new issue