Significant improvements to cib support and nib2cib.

Reviewed by rossco.
This commit is contained in:
Francisco Ryan Tolmasky I
2008-09-17 23:56:55 -07:00
parent 334776df12
commit d6b4ebaa30
26 changed files with 1085 additions and 181 deletions
+2 -2
View File
@@ -34,12 +34,12 @@
<dict>
<key>Name</key>
<string>Debug</string>
<key>Flags</key>
<string>-DDEBUG</string>
<key>Settings</key>
<dict>
<key>PREPROCESS</key>
<true/>
<key>FLAGS</key>
<string>-DDEBUG</string>
</dict>
</dict>
<dict>
+2 -2
View File
@@ -253,8 +253,8 @@ var CPControlBlackColor = [CPColor blackColor];
- (void)mouseUp:(CPEvent)anEvent
{
if (_sendActionOn & CPLeftMouseUpMask && CPRectContainsPoint([self bounds], [self convertPoint:[anEvent locationInWindow] fromView:nil]))
[self sendAction:_action to:_target];
if (_sendActionOn & CPLeftMouseUpMask && CPRectContainsPoint([self bounds], [self convertPoint:[anEvent locationInWindow] fromView:nil])){alert([_target description] + " : " + _action);
[self sendAction:_action to:_target];}
[super mouseUp:anEvent];
}
+5 -3
View File
@@ -1684,13 +1684,14 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
_DOMElement = DOMElementPrototype.cloneNode(false);
#endif
// Also decode these "early".
_frame = [aCoder decodeRectForKey:CPViewFrameKey];
_bounds = [aCoder decodeRectForKey:CPViewBoundsKey];
self = [super initWithCoder:aCoder];
if (self)
{
_frame = [aCoder decodeRectForKey:CPViewFrameKey];
_bounds = [aCoder decodeRectForKey:CPViewBoundsKey];
_window = [aCoder decodeObjectForKey:CPViewWindowKey];
_subviews = [aCoder decodeObjectForKey:CPViewSubviewsKey];
_superview = [aCoder decodeObjectForKey:CPViewSuperviewKey];
@@ -1716,6 +1717,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
for (; index < count; ++index)
{
CPDOMDisplayServerAppendChild(_DOMElement, _subviews[index]._DOMElement);
//_subviews[index]._superview = self;
}
#endif
_displayHash = [self hash];
+10 -3
View File
@@ -269,7 +269,9 @@ var CPWindowSaveImage = nil,
CPURL _representedURL;
// Bridge Support
#if PLATFORM(DOM)
DOMElement _DOMElement;
#endif
CPDOMWindowBridge _bridge;
unsigned _autoresizingMask;
@@ -364,7 +366,8 @@ CPTexturedBackgroundWindowMask
[self setContentView:[[CPView alloc] initWithFrame:CGRectMakeZero()]];
_firstResponder = self;
#if PLATFORM(DOM)
_DOMElement = document.createElement("div");
_DOMElement.style.position = "absolute";
@@ -375,7 +378,8 @@ CPTexturedBackgroundWindowMask
CPDOMDisplayServerSetStyleSize(_DOMElement, 1, 1);
CPDOMDisplayServerAppendChild(_DOMElement, _windowView._DOMElement);
#endif
[self setBridge:aBridge];
[self setNextResponder:CPApp];
@@ -854,12 +858,15 @@ CPTexturedBackgroundWindowMask
[_shadowView setBackgroundColor:_CPWindowShadowColor];
[_shadowView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
#if PLATFORM(DOM)
CPDOMDisplayServerInsertBefore(_DOMElement, _shadowView._DOMElement, _windowView._DOMElement);
#endif
}
else
{
#if PLATFORM(DOM)
CPDOMDisplayServerRemoveChild(_DOMElement, _shadowView._DOMElement);
#endif
_shadowView = nil;
}
}
+4 -13
View File
@@ -25,8 +25,9 @@ import <Foundation/CPURLConnection.j>
import <Foundation/CPURLRequest.j>
import "CPCustomView.j"
import "_CPCibCustomObject.j"
import "_CPCibObjectData.j"
import "_CPCibWindowTemplate.j"
CPCibOwner = @"CPCibOwner",
CPCibTopLevelObjects = @"CPCibTopLevelObjects";
@@ -56,20 +57,10 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
if (!objectData || ![objectData isKindOfClass:[_CPCibObjectData class]])
return NO;
[objectData establishConnectionsWithExternalNameTable:anExternalNameTable];
var owner = [anExternalNameTable objectForKey:CPCibOwner],
topLevelObjects = [anExternalNameTable objectForKey:CPCibTopLevelObjects];
var objects = unarchiver._objects,
count = [objects count];
// The order in which objects receive the awakeFromCib message is not guaranteed.
while (count--)
{
var object = objects[count];
if ([object isMemberOfClass:[CPView class]])
return object;
}
/*
// [objectData establishConnectionsWithOwner:owner topLevelObjects:topLevelObjects];
// [objectData cibInstantiateWithOwner:owner topLevelObjects:topLevelObjects];
+11 -10
View File
@@ -1,5 +1,5 @@
/*
* CPCustomView.j
* _CPCibCustomView.j
* AppKit
*
* Created by Francisco Tolmasky.
@@ -36,33 +36,35 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
/* @ignore */
@implementation CPCustomView : CPView
@implementation _CPCibCustomView : CPView
{
CPString _className;
}
@end
var CPCustomViewClassNameKey = @"CPCustomViewClassNameKey";
var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey";
@implementation CPCustomView (CPCoding)
@implementation _CPCibCustomView (CPCoding)
- (id)initWithCoder:(CPCoder)aCoder
{
_className = [aCoder decodeObjectForKey:CPCustomViewClassNameKey];
_className = [aCoder decodeObjectForKey:_CPCibCustomViewClassNameKey];
var theClass = CPClassFromString(_className);
// If we don't have this class, just use CPView.
// FIXME: Should we instead throw an exception?
if (!theClass)
{
CPLog("Unknown class \"" + _className + "\" in cib file, using CPView instead.");
theClass = [CPView class];
}
var frame = [aCoder decodeRectForKey:CPViewFrameKey];
// If this is just a "CPView", don't bother with any funny business, just go ahead and create it with initWithCoder:
if (theClass == [CPView class])
self = [[CPView alloc] initWithFrame:frame];
self = [[CPView alloc] initWithFrame:frame];
if (self)
{
@@ -75,9 +77,8 @@ var CPCustomViewClassNameKey = @"CPCustomViewClassNameKey";
for (; index < count; ++index)
{
// This is a bogus superview "CPCustomView".
// This is a bogus superview "_CPCibCustomView".
subviews[index]._superview = nil;
[self addSubview:subviews[index]];
}
+112
View File
@@ -0,0 +1,112 @@
import <Foundation/CPObject.j>
import <Foundation/CPKeyValueCoding.j>
var _CPCibConnectorSourceKey = @"_CPCibConnectorSourceKey",
_CPCibConnectorDestinationKey = @"_CPCibConnectorDestinationKey",
_CPCibConnectorLabelKey = @"_CPCibConnectorLabelKey";
@implementation _CPCibConnector : CPObject
{
id _source;
id _destination;
CPString _label;
}
- (void)replaceObject:(id)anObject withObject:(id)anotherObject
{
if (_source == anObject)
_source = anotherObject;
else if (_destination == anObject)
_destination = anotherObject;
}
@end
@implementation _CPCibConnector (CPCoding)
- (id)initWithCoder:(CPCoder)aCoder
{
self = [super init];
if (self)
{
_source = [aCoder decodeObjectForKey:_CPCibConnectorSourceKey];
_destination = [aCoder decodeObjectForKey:_CPCibConnectorDestinationKey];
_label = [aCoder decodeObjectForKey:_CPCibConnectorLabelKey];
#if DEBUG
CPLog("Connection from " + [_source description] + " to " + [_destination description] + " and label " + _label + " decoded.");
#endif
}
return self;
}
- (void)encodeWithCoder:(CPCoder)aCoder
{
[aCoder encodeObject:_source forKey:_CPCibConnectorSourceKey];
[aCoder encodeObject:_destination forKey:_CPCibConnectorDestinationKey];
[aCoder encodeObject:_label forKey:_CPCibConnectorLabelKey];
}
@end
@implementation _CPCibControlConnector : _CPCibConnector
{
}
- (void)establishConnection
{
#if DEBUG
CPLog('[' + [_source description] + " setTarget: " + [_destination description] + ']');
CPLog('[' + [_source description] + " setAction: " + _label + ']');
#endif
var selectorName = _label;
if (![selectorName hasSuffix:@":"])
selectorName += ':';
var selector = CPSelectorFromString(selectorName);
if (!selector)
[CPException
raise:CPInvalidArgumentException
reason:@"-[" + [self className] + ' ' + _cmd + @"] selector " + selectorName + @" does not exist."];
if ([_source respondsToSelector:@selector(setAction:)])
objj_msgSend(_source, @selector(setAction:), selector);
else
[CPException
raise:CPInvalidArgumentException
reason:@"-[" + [self className] + ' ' + _cmd + @"] " + [_source description] + " does not respond to setAction:"];
if ([_source respondsToSelector:@selector(setTarget:)])
objj_msgSend(_source, @selector(setTarget:), _destination);
else
[CPException
raise:CPInvalidArgumentException
reason:@"-[" + [self className] + ' ' + _cmd + @"] " + [_source description] + " does not respond to setTarget:"];
}
@end
@implementation _CPCibOutletConnector : _CPCibConnector
{
}
- (void)establishConnection
{
#if DEBUG
CPLog([_source description] + " setValue: " + [_destination description] + " forKey: " + _label);
#endif
[_source setValue:_destination forKey:_label];
}
@end
+41
View File
@@ -0,0 +1,41 @@
import <Foundation/CPObject.j>
var _CPCibCustomObjectClassName = @"_CPCibCustomObjectClassName";
@implementation _CPCibCustomObject : CPObject
{
CPString _className;
}
@end
@implementation _CPCibCustomObject (CPCoding)
- (id)initWithCoder:(CPCoder)aCoder
{
self = [super init];
if (self)
_className = [aCoder decodeObjectForKey:_CPCibCustomObjectClassName];
return self;
}
- (void)encodeWithCoder:(CPCoder)aCoder
{
[aCoder encodeObject:_className forKey:_CPCibCustomObjectClassName];
}
- (id)awakeAfterUsingCoder:(CPCoder)aCoder
{
var theClass = CPClassFromString(_className);
if (!theClass)
CPLog("Unknown class \"" + _className + "\" in cib file");
return [[theClass alloc] init];
}
@end
+38 -21
View File
@@ -24,36 +24,39 @@ import <Foundation/CPArray.j>
import <Foundation/CPObject.j>
import <Foundation/CPString.j>
import "CPCib.j"
import "_CPCibConnector.j"
@implementation _CPCibObjectData : CPObject
{
CPArray _namesKeys;
CPArray _namesValues;
CPArray _namesKeys;
CPArray _namesValues;
CPArray _accessibilityConnectors;
CPArray _accessibilityOidsKeys;
CPArray _accessibilityOidsValues;
CPArray _accessibilityConnectors;
CPArray _accessibilityOidsKeys;
CPArray _accessibilityOidsValues;
CPArray _classesKeys;
CPArray _classesValues;
CPArray _classesKeys;
CPArray _classesValues;
CPArray _connections;
CPArray _connections;
id _fontManager;
id _fontManager;
CPString _framework;
CPString _framework;
int _nextOid;
int _nextOid;
CPArray _objectsKeys;
CPArray _objectsValues;
CPArray _objectsKeys;
CPArray _objectsValues;
CPArray _oidKeys;
CPArray _oidValues;
CPArray _oidKeys;
CPArray _oidValues;
CPCustomObject _rootObject;
_CPCibCustomObject _fileOwner;
CPSet _visibleWindows;
CPSet _visibleWindows;
}
/*
- (CPArray)topLevelObjects
@@ -103,7 +106,7 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey
_CPCibObjectDataOidKeysKey = @"_CPCibObjectDataOidKeysKey",
_CPCibObjectDataOidValuesKey = @"_CPCibObjectDataOidValuesKey",
_CPCibObjectDataRootObjectKey = @"_CPCibObjectDataRootObjectKey",
_CPCibObjectDataFileOwnerKey = @"_CPCibObjectDataFileOwnerKey",
_CPCibObjectDataVisibleWindowsKey = @"_CPCibObjectDataVisibleWindowsKey";
@implementation _CPCibObjectData (CPCoding)
@@ -125,7 +128,6 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey
_classesValues = [aCoder decodeObjectForKey:_CPCibObjectDataClassesValuesKey];
_connections = [aCoder decodeObjectForKey:_CPCibObjectDataConnectionsKey];
//id _fontManager;
_framework = [aCoder decodeObjectForKey:_CPCibObjectDataFrameworkKey];
@@ -138,7 +140,7 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey
_oidKeys = [aCoder decodeObjectForKey:_CPCibObjectDataOidKeysKey];
_oidValues = [aCoder decodeObjectForKey:_CPCibObjectDataOidValuesKey];
_rootObject = [aCoder decodeObjectForKey:_CPCibObjectDataRootObjectKey];
_fileOwner = [aCoder decodeObjectForKey:_CPCibObjectDataFileOwnerKey];
// CPSet _visibleWindows;
}
@@ -172,10 +174,25 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey
[aCoder encodeObject:_oidKeys forKey:_CPCibObjectDataOidKeysKey];
[aCoder encodeObject:_oidValues forKey:_CPCibObjectDataOidValuesKey];
[aCoder encodeObject:_rootObject forKey:_CPCibObjectDataRootObjectKey];
[aCoder encodeObject:_fileOwner forKey:_CPCibObjectDataFileOwnerKey];
// CPCustomObject _fileOwner;
// CPSet _visibleWindows;
}
- (void)establishConnectionsWithExternalNameTable:(CPDictionary)anExternalNameTable
{
var index = 0,
count = _connections.length,
cibOwner = [anExternalNameTable objectForKey:CPCibOwner];
for (; index < count; ++index)
{
var connection = _connections[index];
[connection replaceObject:_fileOwner withObject:cibOwner];
[connection establishConnection];
}
}
@end
+97
View File
@@ -0,0 +1,97 @@
import <Foundation/CPObject.j>
var _CPCibWindowTemplateMinSizeKey = @"_CPCibWindowTemplateMinSizeKey",
_CPCibWindowTemplateMaxSizeKey = @"_CPCibWindowTemplateMaxSizeKey",
_CPCibWindowTemplateViewClassKey = @"_CPCibWindowTemplateWindowClassKey",
_CPCibWindowTemplateWindowRectKey = @"_CPCibWindowTemplateWindowRectKey",
_CPCibWindowTemplateWindowStyleMaskKey = @"_CPCibWindowTempatStyleMaskKey",
_CPCibWindowTemplateWindowTitleKey = @"_CPCibWindowTemplateWindowTitleKey",
_CPCibWindowTemplateWindowViewKey = @"_CPCibWindowTemplateWindowViewKey";
@implementation _CPCibWindowTemplate : CPObject
{
CGSize _minSize;
CGSize _maxSize;
//CGSize _screenRect;
CPString _viewClass;
//unsigned _wtFlags;
CPString _windowClass;
CGRect _windowRect;
unsigned _windowStyleMask;
CPString _windowTitle;
CPView _windowView;
}
- (id)initWithCoder:(CPCoder)aCoder
{
self = [super init];
if (self)
{
_minSize = [aCoder decodeSizeForKey:_CPCibWindowTemplateMinSizeKey];
_maxSize = [aCoder decodeSizeForKey:_CPCibWindowTemplateMaxSizeKey];
_viewClass = [aCoder decodeObjectForKey:_CPCibWindowTemplateViewClassKey];
_windowClass = [aCoder decodeObjectForKey:_CPCibWindowTemplateViewClassKey];
_windowRect = [aCoder decodeRectForKey:_CPCibWindowTemplateWindowRectKey];
_windowStyleMask = [aCoder decodeIntForKey:_CPCibWindowTemplateWindowStyleMaskKey];
_windowTitle = [aCoder decodeObjectForKey:_CPCibWindowTemplateWindowTitleKey];
_windowView = [aCoder decodeObjectForKey:_CPCibWindowTemplateWindowViewKey];
}
return self;
}
- (void)encodeWithCoder:(CPCoder)aCoder
{
[aCoder encodeSize:_minSize forKey:_CPCibWindowTemplateMinSizeKey];
[aCoder encodeSize:_maxSize forKey:_CPCibWindowTemplateMaxSizeKey];
[aCoder encodeObject:_viewClass forKey:_CPCibWindowTemplateViewClassKey];
[aCoder encodeObject:_windowClass forKey:_CPCibWindowTemplateViewClassKey];
[aCoder encodeRect:_windowRect forKey:_CPCibWindowTemplateWindowRectKey];
[aCoder encodeInt:_windowStyleMask forKey:_CPCibWindowTemplateWindowStyleMaskKey];
[aCoder encodeObject:_windowTitle forKey:_CPCibWindowTemplateWindowTitleKey];
[aCoder encodeObject:_windowView forKey:_CPCibWindowTemplateWindowViewKey];
}
- (id)awakeAfterUsingCoder:(CPCoder)aCoder
{
var windowClass = CPClassFromString(_windowClass);
/* if (!windowClass)
[NSException raise:NSInvalidArgumentException format:@"Unable to locate NSWindow class %@, using NSWindow",_windowClass];
class=[NSWindow class];*/
var theWindow = [[windowClass alloc] initWithContentRect:_windowRect styleMask:CPHUDBackgroundWindowMask | CPClosableWindowMask];//styleMask:_windowStyleMask];
// alert(CPStringFromRect(_windowRect));
// alert(CPStringFromSize(_minSize));
// alert(CPStringFromSize(_maxSize));
//[theWindow setMinSize:_minSize];
//[theWindow setMaxSize:_maxSize];
[theWindow setLevel:CPFloatingWindowLevel];
//[result setHidesOnDeactivate:(_wtFlags&0x80000000)?YES:NO];
[theWindow setTitle:_windowTitle];
// FIXME: we can't autoresize yet...
[_windowView setAutoresizesSubviews:NO];
[theWindow setContentView:_windowView];
[_windowView setAutoresizesSubviews:YES];
return theWindow;
}
@end
+160 -38
View File
@@ -22,7 +22,15 @@
import "CPObject.j"
@implementation CPObject(CPKeyValueCoding)
var CPObjectAccessorsForClass = nil,
CPObjectModifiersForClass = nil;
CPUndefinedKeyException = @"CPUndefinedKeyException";
CPTargetObjectUserInfoKey = @"CPTargetObjectUserInfoKey";
CPUnknownUserInfoKey = @"CPUnknownUserInfoKey";
@implementation CPObject (CPKeyValueCoding)
+ (BOOL)accessInstanceVariablesDirectly
{
@@ -32,14 +40,42 @@ import "CPObject.j"
/* @ignore */
+ (SEL)_accessorForKey:(CPString)aKey
{
var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substr(1),
selector = CPSelectorFromString("get" + capitalizedKey);
if (!CPObjectAccessorsForClass)
CPObjectAccessorsForClass = [CPDictionary dictionary];
if ([self instancesRespondToSelector:selector] ||
var hash = [isa hash],
selector = nil,
accessors = [CPObjectAccessorsForClass objectForKey:hash];
if (accessors)
{
selector = [accessors objectForKey:aKey];
if (selector)
return selector == [CPNull null] ? nil : selector;
}
else
{
accessors = [CPDictionary dictionary];
[CPObjectAccessorsForClass setObject:accessors forKey:hash];
}
var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substr(1);
if ([self instancesRespondToSelector:selector = CPSelectorFromString("get" + capitalizedKey)] ||
[self instancesRespondToSelector:selector = CPSelectorFromString(aKey)] ||
[self instancesRespondToSelector:selector = CPSelectorFromString("_"+aKey)] ||
[self instancesRespondToSelector:selector = CPSelectorFromString("is" + capitalizedKey)])
[self instancesRespondToSelector:selector = CPSelectorFromString("is" + capitalizedKey)] ||
[self instancesRespondToSelector:selector = CPSelectorFromString("_get" + capitalizedKey)] ||
[self instancesRespondToSelector:selector = CPSelectorFromString("_" + aKey)] ||
[self instancesRespondToSelector:selector = CPSelectorFromString("_is" + capitalizedKey)])
{
[accessors setObject:selector forKey:aKey];
return selector;
}
[accessors setObject:[CPNull null] forKey:aKey];
return nil;
}
@@ -47,22 +83,68 @@ import "CPObject.j"
/* @ignore */
+ (SEL)_modifierForKey:(CPString)aKey
{
var selector = CPSelectorFromString("set" + aKey.charAt(0).toUpperCase() + aKey.substr(1) + ':');
if (!CPObjectModifiersForClass)
CPObjectModifiersForClass = [CPDictionary dictionary];
var hash = [isa hash],
selector = nil,
modifiers = [CPObjectModifiersForClass objectForKey:hash];
if (modifiers)
{
selector = [modifiers objectForKey:aKey];
if (selector)
return selector == [CPNull null] ? nil : selector;
}
else
{
modifiers = [CPDictionary dictionary];
[CPObjectModifiersForClass setObject:modifiers forKey:hash];
}
if (selector)
return selector == [CPNull null] ? nil : selector;
if ([self instancesRespondToSelector:selector])
var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substr(1) + ':';
if ([self instancesRespondToSelector:selector = CPSelectorFromString("set" + capitalizedKey)] ||
[self instancesRespondToSelector:selector = CPSelectorFromString("_set" + capitalizedKey)])
{
[modifiers setObject:selector forKey:aKey];
return selector;
}
[modifiers setObject:[CPNull null] forKey:aKey];
return nil;
}
/* @ignore */
- (CPString)_ivarForKey:(CPString)aKey
{
var ivar,
isKey = "is" + aKey.charAt(0).toUpperCase() + aKey.substr(1);
var ivar = '_' + aKey;
if (typeof self[ivar] != "undefined")
return ivar;
if (self[ivar = "_" + aKey] != undefined || self[ivar = "_" + isKey] != undefined ||
self[ivar = aKey] != undefined || self[ivar = isKey] != undefined) ;
var isKey = "is" + aKey.charAt(0).toUpperCase() + aKey.substr(1);
ivar = '_' + isKey;
if (typeof self[ivar] != "undefined")
return ivar;
ivar = aKey;
if (typeof self[ivar] != "undefined")
return ivar;
ivar = isKey;
if (typeof self[ivar] != "undefined")
return ivar;
return nil;
@@ -70,35 +152,62 @@ import "CPObject.j"
- (id)valueForKey:(CPString)aKey
{
var ivar,
theClass = [self class],
selector = [theClass _accessorForKey:aKey]
var selector = [isa _accessorForKey:aKey];
if (selector)
return [self performSelector:selector];
else if([theClass accessInstanceVariablesDirectly] && (ivar = [self _ivarForKey:aKey]))
return self[ivar];
else
return [self valueForUndefinedKey:aKey];
return objj_msgSend(self, selector);
if([isa accessInstanceVariablesDirectly])
{
var ivar = [self _ivarForKey:aKey];
if (ivar)
return self[ivar];
}
return [self valueForUndefinedKey:aKey];
}
- (id)valueForKeyPath:(CPString)aKeyPath
{
var i = 0,
keys = aKeyPath.split("."),
var keys = aKeyPath.split("."),
index = 0,
count = keys.length,
value = self;
for(; i<count; ++i)
value = [value valueForKey:keys[i]];
for(; index < count; ++index)
value = [value valueForKey:keys[index]];
return value;
}
- (CPDictionary)dictionaryWithValuesForKeys:(CPArray)keys
{
var index = 0,
count = keys.length,
dictionary = [CPDictionary dictionary];
for (; index < count; ++index)
{
var key = keys[index],
value = [self valueForKey:key];
if (value === nil)
[dictionary setObject:[CPNull null] forKey:key];
else
[dictionary setObject:value forKey:key];
}
return dictionary;
}
- (id)valueForUndefinedKey:(CPString)aKey
{
alert("IMPLEMENT EXCEPTIONS, also, valueForKey died.");
// CPException.raise(CPUndefinedKeyException, "[<"+this.classObject().name()+" "+this+"> valueForKey()]: this class is not key value coding-compliant for the key "+aKey+".]");
[[CPException exceptionWithName:CPUndefinedKeyException
reason:[self description] + " is not key value coding-compliant for the key " + aKey
userInfo:[CPDictionary dictionaryWithObjects:[self, aKey] forKeys:[CPTargetObjectUserInfoKey, CPUnknownUserInfoKey]]] raise];
}
- (void)setValue:(id)aValue forKeyPath:(CPString)aKeyPath
@@ -118,22 +227,35 @@ import "CPObject.j"
- (void)setValue:(id)aValue forKey:(CPString)aKey
{
var ivar,
theClass = [self class],
selector = [theClass _modifierForKey:aKey];
var selector = [isa _modifierForKey:aKey];
if (selector)
[self performSelector:selector withObject:aValue];
else if([theClass accessInstanceVariablesDirectly] && (ivar = [self _ivarForKey:aKey]))
self[ivar] = aValue;
else
[self setValue:aValue forUndefinedKey:aKey];
return objj_msgSend(self, selector, aValue);
if([isa accessInstanceVariablesDirectly])
{
var ivar = [self _ivarForKey:aKey];
if (ivar)
{
[self willChangeValueForKey:aKey];
self[ivar] = aValue;
[self didChangeValueForKey:aKey];
}
return;
}
[self setValue:aValue forUndefinedKey:aKey];
}
- (void)setValue:(id)aValue forUndefinedKey:(CPString)aKey
{
alert("IMPLEMENT EXCEPTIONS, also, setValueForKey died.");
// CPException.raise(CPUndefinedKeyException, "[<"+this.className()+" "+this+"> setValueForKey()]: this class is not key value coding-compliant for the key "+aKey+".]");
[[CPException exceptionWithName:CPUndefinedKeyException
reason:[self description] + " is not key value coding-compliant for the key " + aKey
userInfo:[CPDictionary dictionaryWithObjects:[self, aKey] forKeys:[CPTargetObjectUserInfoKey, CPUnknownUserInfoKey]]] raise];
}
@end
@end
+39
View File
@@ -0,0 +1,39 @@
/*
* CPKeyValueCoding.j
* Foundation
*
* Created by Francisco Tolmasky.
* Copyright 2008, 280 North, Inc.
*
* 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.1 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; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
import "CPObject.j"
@implementation CPObject (KeyValueObserving)
- (void)willChangeValueForKey:(CPString)aKey
{
}
- (void)didChangeValueForKey:(CPString)aKey
{
}
@end
+1
View File
@@ -33,6 +33,7 @@ import "CPJSONPConnection.j"
import "CPKeyedArchiver.j"
import "CPKeyedUnarchiver.j"
import "CPKeyValueCoding.j"
import "CPKeyValueObserving.j"
import "CPLog.j"
import "CPNotification.j"
import "CPNotificationCenter.j"
+12 -8
View File
@@ -5,21 +5,25 @@ import <AppKit/CPCib.j>
@implementation AppController : CPObject
{
CPWindow _window;
CPWindow _secondWindow;
CPView _view;
}
- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
var cib = [[CPCib alloc] initWithContentsOfURL:@"MainMenu.cib"],
x = [cib instantiateCibWithExternalNameTable:nil];
[x setBackgroundColor:[CPColor blueColor]];
var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask],
theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask],
contentView = [theWindow contentView];
[contentView addSubview:x];
[cib instantiateCibWithExternalNameTable:[CPDictionary dictionaryWithObject:self forKey:CPCibOwner]];
[_view setBackgroundColor:[CPColor blueColor]];
[contentView addSubview:_view];
[theWindow orderFront:self];
[_secondWindow orderFront:self];
}
@end
+29
View File
@@ -2,6 +2,35 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBClasses</key>
<array>
<dict>
<key>CLASS</key>
<string>NSObject</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>OUTLETS</key>
<dict>
<key>window</key>
<string>id</string>
</dict>
</dict>
<dict>
<key>CLASS</key>
<string>AppController</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>OUTLETS</key>
<dict>
<key>secondWindow</key>
<string>id</string>
<key>view</key>
<string>id</string>
<key>window</key>
<string>id</string>
</dict>
</dict>
</array>
<key>IBVersion</key>
<string>1</string>
</dict>
+2 -4
View File
@@ -7,11 +7,9 @@
<key>IBOldestOS</key>
<integer>5</integer>
<key>IBOpenObjects</key>
<array>
<integer>1</integer>
</array>
<array/>
<key>IBSystem Version</key>
<string>9E17</string>
<string>9F33</string>
<key>targetFramework</key>
<string>IBCocoaFramework</string>
</dict>
Binary file not shown.
+322 -64
View File
@@ -2,22 +2,23 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.01">
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">9E17</string>
<string key="IBDocument.SystemVersion">9F33</string>
<string key="IBDocument.InterfaceBuilderVersion">629</string>
<string key="IBDocument.AppKitVersion">949.33</string>
<string key="IBDocument.AppKitVersion">949.34</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="13"/>
<integer value="1"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string id="432113897">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string id="32298658">com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSCustomObject" id="1001">
<string key="NSClassName">NSObject</string>
<string key="NSClassName" id="1051880339">NSObject</string>
</object>
<object class="NSCustomObject" id="1003">
<string key="NSClassName">FirstResponder</string>
@@ -41,7 +42,7 @@
<int key="NSCellFlags">-2080244224</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Round Rect Button</string>
<object class="NSFont" key="NSSupport">
<object class="NSFont" key="NSSupport" id="1028390566">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">1.200000e+01</double>
<int key="NSfFlags">16</int>
@@ -88,10 +89,119 @@
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSWindowTemplate" id="728415824">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{196, 240}, {480, 270}}</string>
<int key="NSWTFlags">603979776</int>
<string key="NSWindowTitle" id="988560763">Window</string>
<string key="NSWindowClass" id="620584816">NSWindow</string>
<nil key="NSViewClass"/>
<object class="NSView" key="NSWindowView" id="882339348">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSButton" id="111855648">
<reference key="NSNextResponder" ref="882339348"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{145, 113}, {154, 19}}</string>
<reference key="NSSuperview" ref="882339348"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="823598869">
<int key="NSCellFlags">-2080244224</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">yikes!</string>
<reference key="NSSupport" ref="1028390566"/>
<reference key="NSControlView" ref="111855648"/>
<int key="NSButtonFlags">-2038152961</int>
<int key="NSButtonFlags2">164</int>
<reference key="NSAlternateContents" ref="729400536"/>
<reference key="NSKeyEquivalent" ref="729400536"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
<object class="NSButton" id="380597285">
<reference key="NSNextResponder" ref="882339348"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{0, 251}, {154, 19}}</string>
<reference key="NSSuperview" ref="882339348"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="401652134">
<int key="NSCellFlags">-2080244224</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Round Rect Button</string>
<reference key="NSSupport" ref="1028390566"/>
<reference key="NSControlView" ref="380597285"/>
<int key="NSButtonFlags">-2038152961</int>
<int key="NSButtonFlags2">164</int>
<reference key="NSAlternateContents" ref="729400536"/>
<reference key="NSKeyEquivalent" ref="729400536"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
</object>
<string key="NSFrameSize">{480, 270}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
</object>
<object class="NSWindowTemplate" id="901839919">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{196, 240}, {480, 270}}</string>
<int key="NSWTFlags">603979776</int>
<reference key="NSWindowTitle" ref="988560763"/>
<reference key="NSWindowClass" ref="620584816"/>
<nil key="NSViewClass"/>
<object class="NSView" key="NSWindowView" id="872041560">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{480, 270}</string>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label" id="508157406">view</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="1005"/>
</object>
<int key="connectionID">20</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label" id="752515934">window</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="728415824"/>
</object>
<int key="connectionID">21</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">orderFront:</string>
<reference key="source" ref="728415824"/>
<reference key="destination" ref="376826387"/>
</object>
<int key="connectionID">22</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">orderOut:</string>
<reference key="source" ref="728415824"/>
<reference key="destination" ref="111855648"/>
</object>
<int key="connectionID">24</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -160,6 +270,67 @@
<reference key="object" ref="955868276"/>
<reference key="parent" ref="1050330329"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">12</int>
<reference key="object" ref="728415824"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="882339348"/>
</object>
<reference key="parent" ref="1002"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">13</int>
<reference key="object" ref="882339348"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="111855648"/>
<reference ref="380597285"/>
</object>
<reference key="parent" ref="728415824"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">14</int>
<reference key="object" ref="901839919"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="872041560"/>
</object>
<reference key="parent" ref="1002"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">15</int>
<reference key="object" ref="872041560"/>
<reference key="parent" ref="901839919"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">16</int>
<reference key="object" ref="111855648"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="823598869"/>
</object>
<reference key="parent" ref="882339348"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">17</int>
<reference key="object" ref="823598869"/>
<reference key="parent" ref="111855648"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">25</int>
<reference key="object" ref="380597285"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="401652134"/>
</object>
<reference key="parent" ref="882339348"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">26</int>
<reference key="object" ref="401652134"/>
<reference key="parent" ref="380597285"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@@ -174,20 +345,44 @@
<string>1.editorWindowContentRectSynchronizationRect</string>
<string>10.IBPluginDependency</string>
<string>11.IBPluginDependency</string>
<string>12.IBPluginDependency</string>
<string>12.IBWindowTemplateEditedContentRect</string>
<string>12.NSWindowTemplate.visibleAtLaunch</string>
<string>12.editorWindowContentRectSynchronizationRect</string>
<string>13.IBPluginDependency</string>
<string>14.IBPluginDependency</string>
<string>14.NSWindowTemplate.visibleAtLaunch</string>
<string>15.IBPluginDependency</string>
<string>16.IBPluginDependency</string>
<string>17.IBPluginDependency</string>
<string>25.IBPluginDependency</string>
<string>26.IBPluginDependency</string>
<string>8.IBPluginDependency</string>
<string>9.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="432113897"/>
<reference ref="432113897"/>
<reference ref="432113897"/>
<reference ref="432113897"/>
<reference ref="32298658"/>
<reference ref="32298658"/>
<reference ref="32298658"/>
<reference ref="32298658"/>
<string>{628, 654}</string>
<string>{{319, 416}, {480, 272}}</string>
<string id="682767821">com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="682767821"/>
<string id="32298658">com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="32298658"/>
<reference ref="32298658"/>
<string id="821364897">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{196, 240}, {480, 270}}</string>
<integer value="1" id="5"/>
<string>{{196, 240}, {480, 270}}</string>
<reference ref="821364897"/>
<string id="749189018">com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="5"/>
<reference ref="749189018"/>
<string id="883876083">com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="883876083"/>
<string id="878848921">com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="878848921"/>
<reference ref="32298658"/>
<reference ref="32298658"/>
</object>
</object>
@@ -211,11 +406,41 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">11</int>
<int key="maxID">26</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<reference key="className" ref="1051880339"/>
<nil key="superclassName"/>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="508157406"/>
<reference ref="752515934"/>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string id="769725644">id</string>
<reference ref="769725644"/>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
@@ -223,57 +448,90 @@
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<object class="NSMutableData" key="IBDocument.RunnableNib">
<bytes key="NS.bytes">YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA
AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxA/AAsADAAxADUANgA7ADwA
QABEAEcASwBUAGwAbQB1AHYAeQCJAIoAjgCYAAsAmQCfALMAtgC3AL8AwgDHAMgAywALAJ0AzADPANIA
0wDVAN4A6ADyAPMA9AD1APYA9wD4APkA/AD/AQkBEwEUARUBFgCrARcBGAEZARwBHwEiVSRudWxs3xAS
AA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAq
ACsALAAtAC4ALwAwVk5TUm9vdFYkY2xhc3NdTlNPYmplY3RzS2V5c18QD05TQ2xhc3Nlc1ZhbHVlc18Q
GU5TQWNjZXNzaWJpbGl0eU9pZHNWYWx1ZXNdTlNDb25uZWN0aW9uc1tOU05hbWVzS2V5c1tOU0ZyYW1l
d29ya11OU0NsYXNzZXNLZXlzWk5TT2lkc0tleXNdTlNOYW1lc1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0
eUNvbm5lY3RvcnNdTlNGb250TWFuYWdlcl8QEE5TVmlzaWJsZVdpbmRvd3NfEA9OU09iamVjdHNWYWx1
ZXNfEBdOU0FjY2Vzc2liaWxpdHlPaWRzS2V5c1lOU05leHRPaWRcTlNPaWRzVmFsdWVzgAKAPoAKgDGA
PYAIgCeABYAwgDKAKIA7gACABoAmgDwQDYAz0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA1hOU09iamVj
dNIANwA4ADkAOlgkY2xhc3Nlc1okY2xhc3NuYW1logA6ADVeTlNDdXN0b21PYmplY3RfEBBJQkNvY29h
RnJhbWV3b3Jr0gAOAD0APgA/Wk5TLm9iamVjdHOAB6DSADcAOABBAEKjAEIAQwA1XE5TTXV0YWJsZVNl
dFVOU1NldNIADgA9AEUARoAJoNIANwA4AEgASaMASQBKADVeTlNNdXRhYmxlQXJyYXlXTlNBcnJhedIA
DgA9AEwATYAlpgBOAE8AUABRAFIAU4ALgBCAF4ATgBqAI9wAVQAOAFYAVwBYAFkAWgBbAFwAXQBeAF8A
YABhAGIAYwBkAGIAZgBnAE8AaQBqAGtbTlNDZWxsRmxhZ3NfEBNOU0FsdGVybmF0ZUNvbnRlbnRzXxAS
TlNQZXJpb2RpY0ludGVydmFsXk5TQnV0dG9uRmxhZ3MyXxAPTlNLZXlFcXVpdmFsZW50Wk5TQ29udGVu
dHNZTlNTdXBwb3J0XU5TQ29udHJvbFZpZXdfEA9OU1BlcmlvZGljRGVsYXlcTlNDZWxsRmxhZ3MyXU5T
QnV0dG9uRmxhZ3MT/////4QB/gCAEoAREEsQpIARgAyADYAQEQGQEggAAAAT/////4aEQP9fEBFSb3Vu
ZCBSZWN0IEJ1dHRvbtQADgBuAG8AcABxAHIAcwB0Vk5TU2l6ZVZOU05hbWVYTlNmRmxhZ3OADyNAKAAA
AAAAAIAOEBBcTHVjaWRhR3JhbmRl0gA3ADgAdwB4ogB4ADVWTlNGb2502AB6AA4AewB8AH0AfgB/AIAA
UQCCAIMATgCFAIYAhwBRXxAPTlNOZXh0UmVzcG9uZGVyV05TRnJhbWVWTlNDZWxsWE5TdkZsYWdzWU5T
RW5hYmxlZFhOU1dpbmRvd1tOU1N1cGVydmlld4ATgBaAFIALEQEMCYAVgBNQ0gA3ADgAiwCMpACMAI0A
fAA1XE5TQnV0dG9uQ2VsbFxOU0FjdGlvbkNlbGzYAHoADgCPAH0AkAB/ADIAgACHAJIAkwCFAJQAhwCW
AJdaTlNTdWJ2aWV3c1tOU0ZyYW1lU2l6ZYAVgCKAHIAfgBWAIYAgXxAXe3sxNTcsIDExMH0sIHsxNTQs
IDE5fX3SADcAOACaAJulAJsAnACdAJ4ANVhOU0J1dHRvbllOU0NvbnRyb2xWTlNWaWV3W05TUmVzcG9u
ZGVy3gCgAFUADgChAKIAWgBbAFwAowCkAF4ApQCmAKcAqABgAKkAqgCrAGIArQBSAK8AsACqALEAsACx
V05TVmFsdWVfEBNOU051bWJlck9mVGlja01hcmtzXxASTlNUaWNrTWFya1Bvc2l0aW9uWk5TTWF4VmFs
dWVaTlNNaW5WYWx1ZVpOU1ZlcnRpY2FsXU5TQWx0SW5jVmFsdWVfEBpOU0FsbG93c1RpY2tNYXJrVmFs
dWVzT25seSNASQAAAAAAAIAbEAAQAYARgBiAGiNAWQAAAAAAACMAAAAAAAAAAAgI1AAOAG4AbwBwAHEA
cgC1AHSAD4AZWUhlbHZldGljYdgAegAOAHsAfAB9AH4AfwCAAFEAuQC6AFAAhQCGAIcAUYATgB6AHYAX
CYAVgBPSADcAOADAAMGkAMEAjQB8ADVcTlNTbGlkZXJDZWxs0gAOAD0ARQDEgAmiAE8AUoAQgBpfEBZ7
ezM1OSwgMTA4fSwgezk2LCAyMX190gA3ADgAyQDKpQDKAJwAnQCeADVYTlNTbGlkZXJaezQ4MCwgMjcy
fdIANwA4AM0AzqQAzgCdAJ4ANVxOU0N1c3RvbVZpZXfSAA4AMgAzANGABIAkXU5TQXBwbGljYXRpb27S
ADcAOADUAEqiAEoANdIADgA9AEwA14AlpgBPAFEAUgAfAFEAH4AQgBOAGoACgBOAAtIADgA9AEwA4IAl
pwBQAB8ATgBPAFEAUgBTgBeAAoALgBCAE4AagCPSAA4APQBMAOqAJacA6wDsAO0A7gDvAPAA8YApgCqA
K4AsgC2ALoAvW1NsaWRlciBDZWxsXEZpbGUncyBPd25lcl8QH0J1dHRvbiBDZWxsIChSb3VuZCBSZWN0
IEJ1dHRvbilfECVSb3VuZCBSZWN0IEJ1dHRvbiAoUm91bmQgUmVjdCBCdXR0b24pW0N1c3RvbSBWaWV3
XxARSG9yaXpvbnRhbCBTbGlkZXJbQXBwbGljYXRpb27SAA4APQBMAPuAJaDSAA4APQBMAP6AJaDSAA4A
PQBMAQGAJacAUAAfAE4ATwBRAFIAU4AXgAKAC4AQgBOAGoAj0gAOAD0ATAELgCWnAQwBDQEOAQ8BEAER
ARKANIA1gDaAN4A4gDmAOhALEAwQCRAIEAoT//////////3SAA4APQBFARuACaDSAA4APQBMAR6AJaDS
AA4APQBMASGAJaDSADcAOAEjASSiASQANV5OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBU
AGYA5wDtATgBPwFGAVQBZgGCAZABnAGoAbYBwQHPAesB+QIMAh4COAJCAk8CUQJTAlUCVwJZAlsCXQJf
AmECYwJlAmcCaQJrAm0CbwJxAnMCfAKIAooCjAKVAp4CpwKyArcCxgLZAuIC7QLvAvAC+QMAAw0DEwMc
Ax4DHwMoAy8DPgNGA08DUQNeA2ADYgNkA2YDaANqA5sDpwO9A9ID4QPzA/4ECAQWBCgENQRDBEwETgRQ
BFIEVARWBFgEWgRcBF8EZARtBIEEkgSZBKAEqQSrBLQEtgS4BMUEzgTTBNoE+wUNBRUFHAUlBS8FOAVE
BUYFSAVKBUwFTwVQBVIFVAVVBV4FZwV0BYEFogWtBbkFuwW9Bb8FwQXDBcUFxwXhBeoF9QX+BggGDwYb
BlQGXAZyBocGkgadBqgGtgbTBtwG3gbgBuIG5AbmBugG8Qb6BvsG/AcNBw8HEQcbBzwHPgdAB0IHRAdF
B0cHSQdSB1sHaAdxB3MHeAd6B3wHlQeeB6kHsge9B8YHzwfcB+UH5wfpB/cIAAgFCA4IEAgdCB8IIQgj
CCUIJwgpCDIINAhDCEUIRwhJCEsITQhPCFEIWghcCGsIbQhvCHEIcwh1CHcIeQiFCJIItAjcCOgI/AkI
CREJEwkUCR0JHwkgCSkJKwk6CTwJPglACUIJRAlGCUgJUQlTCWIJZAlmCWgJaglsCW4JcAlyCXQJdgl4
CXoJgwmMCY4JjwmYCZoJmwmkCaYJpwmwCbUAAAAAAAACAgAAAAAAAAElAAAAAAAAAAAAAAAAAAAJxA</bytes>
AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxB2AAsADAAxADUANgA7ADwA
QgBWAFcAWABZAGEAYgBmAGcAagBWAHIACwB7AIAAjACNAKUApgCuAK8AsgCzALcAuwDDAMQAywDMAGEA
CwBmANAA1ADbAOMA5ADoAO0ACwD1APoBAgEDAMsBCgESARMBJwEqASsBLgExAAsAZAEyATUBNgE7ATwB
PwFEAUUBVgFZAVoBXAFtAX8BkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGjAaYBvAHSAdMB
1AEfAdUB1gHXAdgB2QHaAdsB3ACtAd0B3gBUAd8B4AHhAeIB5QHoAetVJG51bGzfEBIADQAOAA8AEAAR
ABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAv
ADBWTlNSb290ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3Np
YmlsaXR5T2lkc1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xh
c3Nlc0tleXNaTlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9y
c11OU0ZvbnRNYW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNj
ZXNzaWJpbGl0eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoB1gEWAXIB0gCiASoAFgFuA
XYBLgHKAAIAGgEmAcxAcgF7SAA4AMgAzADRbTlNDbGFzc05hbWWABIADWE5TT2JqZWN00gA3ADgAOQA6
WCRjbGFzc2VzWiRjbGFzc25hbWWiADoANV5OU0N1c3RvbU9iamVjdF8QEElCQ29jb2FGcmFtZXdvcmvS
AA4APQA+AD9aTlMub2JqZWN0c4AnogBAAEGAB4AQ2gBDAA4ARABFAEYARwBIAEkASgBLAEwATQBOAE8A
UABRAFIAUwBUACtcTlNXaW5kb3dWaWV3XE5TU2NyZWVuUmVjdF1OU1dpbmRvd1RpdGxlWU5TV1RGbGFn
c11OU1dpbmRvd0NsYXNzXE5TV2luZG93UmVjdF8QD05TV2luZG93QmFja2luZ18QEU5TV2luZG93U3R5
bGVNYXNrW05TVmlld0NsYXNzgAuAD4AOgAkSJAAAAIAKgAgQAhAPgABfEBh7ezE5NiwgMjQwfSwgezQ4
MCwgMjcwfX1WV2luZG93WE5TV2luZG931ABaAA4AWwBcACsAXgBfAGBfEA9OU05leHRSZXNwb25kZXJY
TlN2RmxhZ3NbTlNGcmFtZVNpemWAAIANEQEAgAxaezQ4MCwgMjcwfdIANwA4AGMAZKMAZABlADVWTlNW
aWV3W05TUmVzcG9uZGVyXxAWe3swLCAwfSwgezE2ODAsIDEwMjh9fdIANwA4AGgAaaIAaQA1XxAQTlNX
aW5kb3dUZW1wbGF0ZdoAQwAOAEQARQBGAEcASABJAEoASwBrAE0AbQBPAFAAUQBwAFMAVAArgBKAD4Am
gAmACoARgADXAFoADgBzAFsAXABYAHQAdQBeAHcAXwB4AHUAelpOU1N1YnZpZXdzW05TU3VwZXJ2aWV3
gBOADYAUgCSAE4Al0gAOAD0AfAB9gCOiAH4Af4AVgB/YAFoADgCBAIIAWwCDAFgAdABrAIUAhgCHAIgA
iQB1AGtXTlNGcmFtZVZOU0NlbGxZTlNFbmFibGVkgBKAHoAWgBcRAQwJgBOAEl8QF3t7MTQ1LCAxMTN9
LCB7MTU0LCAxOX193ACOAA4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwCcAJ0AmwCfAKAAfgCiAKMA
pFtOU0NlbGxGbGFnc18QE05TQWx0ZXJuYXRlQ29udGVudHNfEBJOU1BlcmlvZGljSW50ZXJ2YWxeTlNC
dXR0b25GbGFnczJfEA9OU0tleUVxdWl2YWxlbnRaTlNDb250ZW50c1lOU1N1cHBvcnRdTlNDb250cm9s
Vmlld18QD05TUGVyaW9kaWNEZWxheVxOU0NlbGxGbGFnczJdTlNCdXR0b25GbGFncxP/////hAH+AIAd
gBwQSxCkgByAGIAZgBURAZASCAAAABP/////hoRA/1Z5aWtlcyHUAA4ApwCoAKkAqgCrAKwArVZOU1Np
emVWTlNOYW1lWE5TZkZsYWdzgBsjQCgAAAAAAACAGhAQXEx1Y2lkYUdyYW5kZdIANwA4ALAAsaIAsQA1
Vk5TRm9udFDSADcAOAC0ALWkALUAtgCCADVcTlNCdXR0b25DZWxsXE5TQWN0aW9uQ2VsbNIANwA4ALgA
uaUAuQC6AGQAZQA1WE5TQnV0dG9uWU5TQ29udHJvbNgAWgAOAIEAggBbAIMAWAB0AGsAhQC+AL8AiACJ
AHUAa4ASgB6AIIAhCYATgBJfEBV7ezAsIDI1MX0sIHsxNTQsIDE5fX3cAI4ADgCPAJAAkQCSAJMAlACV
AJYAlwCYAJkAmgCbAJwAnQCbAMgAoAB/AKIAowCkgB2AHIAcgCKAGYAfXxARUm91bmQgUmVjdCBCdXR0
b27SADcAOADNAM6jAM4AzwA1Xk5TTXV0YWJsZUFycmF5V05TQXJyYXnSADcAOADRANKjANIA0wA1XE5T
TXV0YWJsZVNldFVOU1NldNIADgA9AHwA1oAjpADXANgA2QDagCmALIBAgEPUAA4A3ADdAN4A3wBBAB8A
4l1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyAK4AQgAKAKlZ3aW5kb3fSADcAOADlAOajAOYA
5wA1XxAUTlNOaWJPdXRsZXRDb25uZWN0b3JeTlNOaWJDb25uZWN0b3LUAA4A3ADdAN4A3wDqAB8A7IAr
gC2AAoA/2ABaAA4AcwBbAFwAWAAyAHQA7gDvAPAAiADxAO4A8wD0gC6APoAvgDuALoA9gDzSAA4APQB8
APeAI6IA+AD5gDCANNgAWgAOAIEAggBbAIMAWAB0AOoAhQD9AP4AiACJAO4A6oAtgB6AMYAyCYAugC1f
EBd7ezE1NywgMTEwfSwgezE1NCwgMTl9fdwAjgAOAI8AkACRAJIAkwCUAJUAlgCXAJgAmQCaAJsAnACd
AJsBBwCgAPgAogCjAKSAHYAcgByAM4AZgDDYAFoADgCBAIIAWwCDAFgAdADqAQwBDQEOAIgAiQDuAOqA
LYA6gDWANgmALoAtXxAWe3szNTksIDEwOH0sIHs5NiwgMjF9fd4BFACOAA4BFQEWAJMAlACVARcBGACX
ARkBGgEbARwAmQEdAR4BHwCbASEA+QEjASQBHgElASQBJVdOU1ZhbHVlXxATTlNOdW1iZXJPZlRpY2tN
YXJrc18QEk5TVGlja01hcmtQb3NpdGlvblpOU01heFZhbHVlWk5TTWluVmFsdWVaTlNWZXJ0aWNhbF1O
U0FsdEluY1ZhbHVlXxAaTlNBbGxvd3NUaWNrTWFya1ZhbHVlc09ubHkjQEkAAAAAAACAORAAEAGAHIA3
gDQjQFkAAAAAAAAjAAAAAAAAAAAICNQADgCnAKgAqQCqAKsBKQCtgBuAOFlIZWx2ZXRpY2HSADcAOAEs
AS2kAS0AtgCCADVcTlNTbGlkZXJDZWxs0gA3ADgBLwEwpQEwALoAZABlADVYTlNTbGlkZXJaezQ4MCwg
MjcyfdIANwA4ATMBNKQBNABkAGUANVxOU0N1c3RvbVZpZXdUdmlld9QADgDcAN0A3gE3AEEAfgE6gEKA
EIAVgEFZb3JkZXJPdXQ60gA3ADgBPQE+owE+AOcANV8QFU5TTmliQ29udHJvbENvbm5lY3RvctQADgDc
AN0A3gE3AEEA+AFDgEKAEIAwgERbb3JkZXJGcm9udDrSAA4APQFGAUeASK4A+QEOAOoAawCHAL8BTgD+
AH8AfgBAAEEATAD4gDSANoAtgBKAF4AhgEaAMoAfgBWAB4AQgAuAMNIADgAyADMBWIAEgEddTlNBcHBs
aWNhdGlvbtIANwA4AVsAz6IAzwA10gAOAD0BRgFegEiuAOoA+QAfAEEAfgB/AB8A+ABrAGsAHwAfAEAA
6oAtgDSAAoAQgBWAH4ACgDCAEoASgAKAAoAHgC3SAA4APQFGAW+ASK8QDwD5AGsA6gEOAIcAvwFOAP4A
fwBAAEwAQQB+AB8A+IA0gBKALYA2gBeAIYBGgDKAH4AHgAuAEIAVgAKAMNIADgA9AUYBgYBIrxAPAYIB
gwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQgEyATYBOgE+AUIBRgFKAU4BUgFWAVoBXgFiAWYBaXxAR
SG9yaXpvbnRhbCBTbGlkZXJcQ29udGVudCBWaWV3W0N1c3RvbSBWaWV3W1NsaWRlciBDZWxsXxAUQnV0
dG9uIENlbGwgKHlpa2VzISlfECFCdXR0b24gQ2VsbCAoUm91bmQgUmVjdCBCdXR0b24pLTFbQXBwbGlj
YXRpb25fEB9CdXR0b24gQ2VsbCAoUm91bmQgUmVjdCBCdXR0b24pXxAnUm91bmQgUmVjdCBCdXR0b24g
KFJvdW5kIFJlY3QgQnV0dG9uKS0xXxARV2luZG93IChXaW5kb3cpLTFeQ29udGVudCBWaWV3LTFfEA9X
aW5kb3cgKFdpbmRvdylfEBpSb3VuZCBSZWN0IEJ1dHRvbiAoeWlrZXMhKVxGaWxlJ3MgT3duZXJfECVS
b3VuZCBSZWN0IEJ1dHRvbiAoUm91bmQgUmVjdCBCdXR0b24p0gAOAD0BRgGigEig0gAOAD0BRgGlgEig
0gAOAD0BRgGogEivEBMA2AD5AQ4A6gBrAIcAvwFOANkA2gD+AH8AfgBAAEEATADXAB8A+IAsgDSANoAt
gBKAF4AhgEaAQIBDgDKAH4AVgAeAEIALgCmAAoAw0gAOAD0BRgG+gEivEBMBvwHAAcEBwgHDAcQBxQHG
AccByAHJAcoBywHMAc0BzgHPAdAB0YBfgGCAYYBigGOAZIBlgGaAZ4BogGmAaoBrgGyAbYBugG+AcIBx
EBQQChALEA0QERAaE//////////9EBgQFhAJEBkQDhAMEBUQGxAI0gAOAD0AfAHkgCOg0gAOAD0BRgHn
gEig0gAOAD0BRgHqgEig0gA3ADgB7AHtogHtADVeTlNJQk9iamVjdERhdGEACAAZACIAJwAxADoAPwBE
AFIAVABmAVUBWwGmAa0BtAHCAdQB8AH+AgoCFgIkAi8CPQJZAmcCegKMAqYCsAK9Ar8CwQLDAsUCxwLJ
AssCzQLPAtEC0wLVAtcC2QLbAt0C3wLhAuoC9gL4AvoDAwMMAxUDIAMlAzQDRwNQA1sDXQNiA2QDZgOP
A5wDqQO3A8EDzwPcA+4EAgQOBBAEEgQUBBYEGwQdBB8EIQQjBCUEQARHBFAEYQRzBHwEiASKBIwEjwSR
BJwEpQSsBLMEvwTYBOEE5gT5BSIFJAUmBSgFKgUsBS4FMAVNBVgFZAVmBWgFagVsBW4FcAV5BXsFgAWC
BYQFpQWtBbQFvgXABcIFxAXGBckFygXMBc4F6AYZBiUGOwZQBl8GcQZ8BoYGlAamBrMGwQbKBswGzgbQ
BtIG1AbWBtgG2gbdBuIG6wbyBwMHCgcRBxoHHAclBycHKQc2Bz8HRAdLB0wHVQdeB2sHeAeBB4wHlQef
B8AHwgfEB8YHyAfJB8sHzQflCBYIGAgaCBwIHgggCCIINgg/CEYIVQhdCGYIbQh6CIAIiQiLCJQIlgiY
CJoInAitCLsIxAjMCM4I0AjSCNQI2wjkCOsJAgkRCSIJJAkmCSgJKglLCU0JTwlRCVMJVQlXCVkJYglk
CWkJawltCY4JkAmSCZQJlgmXCZkJmwm1CeYJ6AnqCewJ7gnwCfIKEwoVChcKGQobChwKHgogCjkKcgp6
CpAKpQqwCrsKxgrUCvEK+gr8Cv4LAAsCCwQLBgsPCxgLGQsaCysLLQsvCzkLQgtLC1gLYQtsC3ULgAuJ
C5ILnwukC7ULtwu5C7sLvQvHC9AL1wvvDAAMAgwEDAYMCAwUDB0MHww8DD4MQAxCDEQMRgxIDEoMTAxO
DFAMUgxUDFYMWAxhDGMMZQxzDHwMgQyKDIwMqQyrDK0MrwyxDLMMtQy3DLkMuwy9DL8MwQzDDMUMzgzQ
DPEM8wz1DPcM+Qz7DP0M/w0BDQMNBQ0HDQkNCw0NDQ8NGA0aDTsNPQ0/DUENQw1FDUcNSQ1LDU0NTw1R
DVMNVQ1XDVkNbQ16DYYNkg2pDc0N2Q37DiUOOQ5IDloOdw6EDqwOtQ63DrgOwQ7DDsQOzQ7PDvgO+g78
Dv4PAA8CDwQPBg8IDwoPDA8ODxAPEg8UDxYPGA8aDxwPHg8nDykPUg9UD1YPWA9aD1wPXg9gD2IPZA9m
D2gPag9sD24PcA9yD3QPdg94D3oPfA9+D4APgg+ED40Pjw+RD5MPlQ+XD5kPmw+dD58PqA+qD6sPtA+2
D7cPwA/CD8MPzA/RAAAAAAAAAgIAAAAAAAAB7gAAAAAAAAAAAAAAAAAAD+A</bytes>
</object>
</data>
</archive>
+2
View File
@@ -12,6 +12,8 @@ import <AppKit/AppKit.j>
import "AppController.j"
CPLogRegister(CPLogPopup);
function main(args, namedArgs)
{
CPApplicationMain(args, namedArgs);
+14
View File
@@ -23,9 +23,23 @@
import "NSButton.j"
import "NSCell.j"
import "NSControl.j"
import "NSCustomObject.j"
import "NSCustomView.j"
import "NSFont.j"
import "NSIBObjectData.j"
import "NSNibConnector.j"
import "NSResponder.j"
import "NSSlider.j"
import "NSView.j"
import "NSWindowTemplate.j"
function CP_NSMapClassName(aClassName)
{
if (aClassName == @"NSView")
return "CPView";
if (aClassName == @"NSWindow")
return @"CPWindow";
return aClassName;
}
+3
View File
@@ -45,6 +45,9 @@ import "NSControl.j"
[self setBezelStyle:[cell bezelStyle]];
[self setBordered:[cell isBordered]];
// FIXME
_sendActionOn = CPLeftMouseUpMask;
}
return self;
+40
View File
@@ -0,0 +1,40 @@
import <AppKit/_CPCibCustomObject.j>
@implementation _CPCibCustomObject (NSCoding)
- (id)NS_initWithCoder:(CPCoder)aCoder
{
self = [super init];
if (self){
_className = [aCoder decodeObjectForKey:@"NSClassName"];
print(":::"+_className);
}
return self;
}
@end
@implementation NSCustomObject : _CPCibCustomObject
{
}
- (id)initWithCoder:(CPCoder)aCoder
{print("i-nit form coder");
return [self NS_initWithCoder:aCoder];
}
- (Class)classForKeyedArchiver
{
return [_CPCibCustomObject class];
}
- (id)awakeAfterUsingCoder:(CPCoder)aCoder
{
print("awaking from coder...");
return self;
}
@end
+4 -9
View File
@@ -25,6 +25,8 @@ import <AppKit/CPCustomView.j>
import "NSView.j"
var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey";
@implementation NSCustomView : CPView
{
CPString _className;
@@ -44,20 +46,13 @@ import "NSView.j"
{
[super encodeWithCoder:aCoder];
[aCoder encodeObject:_NSCustomViewMapClassName(_className) forKey:@"CPCustomViewClassNameKey"];
[aCoder encodeObject:CP_NSMapClassName(_className) forKey:_CPCibCustomViewClassNameKey];
}
- (CPString)classForKeyedArchiver
{
return [CPCustomView class];
return [_CPCibCustomView class];
}
@end
function _NSCustomViewMapClassName(aClassName)
{
if (aClassName == @"NSView")
return "CPView";
return aClassName;
}
+4 -4
View File
@@ -73,9 +73,9 @@ import <AppKit/_CPCibObjectData.j>
//_accessibilityConnectors = [aCoder decodeObjectForKey:@"NSAccessibilityConnectors"];
//_accessibilityOidsKeys = [aCoder decodeObjectForKey:@"NSAccessibilityOidsKeys"];
//_accessibilityOidsValues = [aCoder decodeObjectForKey:@"NSAccessibilityOidsValues"];
_classesKeys = [aCoder decodeObjectForKey:@"NSClassesKeys"];
_classesValues = [aCoder decodeObjectForKey:@"NSClassesValues"];
_classesKeys = [aCoder decodeObjectForKey:@"NSClassesKeys"];print("d");
_classesValues = [aCoder decodeObjectForKey:@"NSClassesValues"];print("e");
_connections = [aCoder decodeObjectForKey:@"NSConnections"];
@@ -90,7 +90,7 @@ import <AppKit/_CPCibObjectData.j>
_oidKeys = [aCoder decodeObjectForKey:@"NSOidsKeys"];
_oidValues = [aCoder decodeObjectForKey:@"NSOidsValues"];
_rootObject = [aCoder decodeObjectForKey:@"NSRoot"];
_fileOwner = [aCoder decodeObjectForKey:@"NSRoot"];
_visibleWindows = [aCoder decodeObjectForKey:@"NSVisibleWindows"];
}
+72
View File
@@ -0,0 +1,72 @@
import <AppKit/_CPCibConnector.j>
@implementation _CPCibConnector (NSCoding)
- (id)NS_initWithCoder:(CPCoder)aCoder
{
self = [super init];
if (self)
{
_source = [aCoder decodeObjectForKey:@"NSSource"];
_destination = [aCoder decodeObjectForKey:@"NSDestination"];
_label = [aCoder decodeObjectForKey:@"NSLabel"];
#if DEBUG
CPLog(@"Connection: " + [_source description] + " " + [_destination description] + " " + _label);
#endif
}
return self;
}
@end
@implementation NSNibConnector : _CPCibConnector
{
}
- (id)initWithCoder:(CPCoder)aCoder
{
return [[_CPCibConnector alloc] NS_initWithCoder:aCoder];
}
- (Class)classForKeyedArchiver
{
return [_CPCibConnector class];
}
@end
@implementation NSNibControlConnector : _CPCibControlConnector
{
}
- (id)initWithCoder:(CPCoder)aCoder
{
return [[_CPCibControlConnector alloc] NS_initWithCoder:aCoder];
}
- (Class)classForKeyedArchiver
{
return [_CPCibControlConnector class];
}
@end
@implementation NSNibOutletConnector : _CPCibOutletConnector
{
}
- (id)initWithCoder:(CPCoder)aCoder
{
return [[_CPCibOutletConnector alloc] NS_initWithCoder:aCoder];
}
- (Class)classForKeyedArchiver
{
return [_CPCibOutletConnector class];
}
@end
+59
View File
@@ -0,0 +1,59 @@
import <AppKit/_CPCibWindowTemplate.j>
@implementation _CPCibWindowTemplate (NSCoding)
- (id)NS_initWithCoder:(CPCoder)aCoder
{
self = [super init];
if (self)
{
_minSize = [aCoder decodeSizeForKey:@"NSMinSize"];
_maxSize = [aCoder decodeSizeForKey:@"NSMaxSize"];
_screenRect = [aCoder decodeRectForKey:@"NSScreenRect"]; // screen created on
_viewClass = [aCoder decodeObjectForKey:@"NSViewClass"];
_wtFlags = [aCoder decodeIntForKey:@"NSWTFlags"];
_windowBacking = [aCoder decodeIntForKey:@"NSWindowBacking"];
// Convert NSWindows to CPWindows.
_windowClass = CP_NSMapClassName([aCoder decodeObjectForKey:@"NSWindowClass"]);
_windowRect = [aCoder decodeRectForKey:@"NSWindowRect"];
_windowStyleMask = [aCoder decodeIntForKey:@"NSWindowStyleMask"];
_windowTitle = [aCoder decodeObjectForKey:@"NSWindowTitle"];
_windowView = [aCoder decodeObjectForKey:@"NSWindowView"];
/*
_windowRect.origin.y -= _screenRect.size.height - [[NSScreen mainScreen] frame].size.height;
if (![_windowClass isEqualToString:@"NSPanel"])
_windowRect.origin.y -= [NSMainMenuView menuHeight]; // compensation for the additional menu bar
*/
}
return self;
}
@end
@implementation NSWindowTemplate : _CPCibWindowTemplate
{
}
- (id)initWithCoder:(CPCoder)aCoder
{
return [self NS_initWithCoder:aCoder];
}
- (id)awakeAfterUsingCoder:(CPCoder)aCoder
{
return self;
}
- (Class)classForKeyedArchiver
{
return [_CPCibWindowTemplate class];
}
@end