<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>AppKit/Cib/_CPCibCustomResource.j</filename>
    </added>
    <added>
      <filename>Tools/nib2cib/NSCustomResource.j</filename>
    </added>
    <added>
      <filename>Tools/nib2cib/NSImageView.j</filename>
    </added>
    <added>
      <filename>Tools/nib2cib/NSSet.j</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -534,6 +534,8 @@ var CPControlValueKey           = &quot;CPControlValueKey&quot;,
     CPControlActionKey          = &quot;CPControlActionKey&quot;,
     CPControlSendActionOnKey    = &quot;CPControlSendActionOnKey&quot;;
 
+var __Deprecated__CPImageViewImageKey   = @&quot;CPImageViewImageKey&quot;;
+
 @implementation CPControl (CPCoding)
 
 /*
@@ -549,6 +551,9 @@ var CPControlValueKey           = &quot;CPControlValueKey&quot;,
     {
         [self setObjectValue:[aCoder decodeObjectForKey:CPControlValueKey]];
         
+        if ([aCoder containsValueForKey:__Deprecated__CPImageViewImageKey])
+            [self setObjectValue:[aCoder decodeObjectForKey:_DeprecatedCPImageViewImageKey]];
+
         [self setEnabled:[aCoder decodeBoolForKey:CPControlIsEnabledKey]];
         
         [self setAlignment:[aCoder decodeIntForKey:CPControlAlignmentKey]];</diff>
      <filename>AppKit/CPControl.j</filename>
    </modified>
    <modified>
      <diff>@@ -64,7 +64,6 @@ var LEFT_SHADOW_INSET       = 3.0,
 */
 @implementation CPImageView : CPControl
 {
-    CPImage         _image;
     DOMElement      _DOMImageElement;
     
     CPImageScaling  _imageScaling;
@@ -101,35 +100,46 @@ var LEFT_SHADOW_INSET       = 3.0,
 */
 - (CPImage)image
 {
-    return _image;
+    return [self objectValue];
 }
 
-/*!
-    Sets the image for the view.
-    @param anImage the view's image
-*/
 - (void)setImage:(CPImage)anImage
 {
-    if (_image == anImage)
+    [self setObjectValue:anImage];
+}
+
+/*! @ignore */
+- (void)setObjectValue:(CPImage)anImage
+{
+    var oldImage = [self objectValue];
+    
+    if (oldImage === anImage)
         return;
+        
+    [super setObjectValue:anImage];
     
-    var center = [CPNotificationCenter defaultCenter];
+    var defaultCenter = [CPNotificationCenter defaultCenter];
     
-    if (_image)
-        [center removeObserver:self name:CPImageDidLoadNotification object:_image];
+    if (oldImage)
+        [defaultCenter removeObserver:self name:CPImageDidLoadNotification object:oldImage];
 
-    _image = anImage;
-    _DOMImageElement.src = [anImage filename];
+    var newImage = [self objectValue];
+    
+#if PLATFORM(DOM)
+    _DOMImageElement.src = newImage ? [newImage filename] : &quot;&quot;;
+#endif
 
-    var size = [_image size];
+    var size = [newImage size];
     
-    if (size &amp;&amp; size.width == -1 &amp;&amp; size.height == -1)
+    if (size &amp;&amp; size.width === -1 &amp;&amp; size.height === -1)
     {
-        [center addObserver:self selector:@selector(imageDidLoad:) name:CPImageDidLoadNotification object:_image];
-
+        [defaultCenter addObserver:self selector:@selector(imageDidLoad:) name:CPImageDidLoadNotification object:newImage];
+        
+#if PLATFORM(DOM)
         _DOMImageElement.width = 0;
         _DOMImageElement.height = 0;
-        
+#endif
+
         [_shadowView setHidden:YES];
     }
     else
@@ -195,10 +205,12 @@ var LEFT_SHADOW_INSET       = 3.0,
     
     _imageScaling = anImageScaling;
     
+#if PLATFORM(DOM)
     if (_imageScaling == CPScaleToFit)
     {
         CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, 0.0, 0.0);
     }
+#endif
     
     [self tile];
 }
@@ -224,14 +236,18 @@ var LEFT_SHADOW_INSET       = 3.0,
 */
 - (void)hideOrDisplayContents
 {
-    if (!_image)
+    if (![self image])
     {
+#if PLATFORM(DOM)
         _DOMImageElement.style.visibility = &quot;hidden&quot;;
+#endif
         [_shadowView setHidden:YES];
     }
     else
     {
+#if PLATFORM(DOM)
         _DOMImageElement.style.visibility = &quot;visible&quot;;
+#endif
         [_shadowView setHidden:NO];
     }
 }
@@ -249,10 +265,11 @@ var LEFT_SHADOW_INSET       = 3.0,
 */
 - (void)tile
 {
-    if (!_image)
+    if (![self image])
         return;
 
     var bounds = [self bounds],
+        image = [self image],
         x = 0.0,
         y = 0.0,
         insetWidth = (_hasShadow ? HORIZONTAL_SHADOW_INSET : 0.0),
@@ -264,12 +281,14 @@ var LEFT_SHADOW_INSET       = 3.0,
         
     if (_imageScaling == CPScaleToFit)
     {
+#if PLATFORM(DOM)
         _DOMImageElement.width = ROUND(width);
         _DOMImageElement.height = ROUND(height);
+#endif
     }
     else
     {
-        var size = [_image size];
+        var size = [image size];
         
         if (size.width == -1 &amp;&amp; size.height == -1)
             return;
@@ -293,9 +312,11 @@ var LEFT_SHADOW_INSET       = 3.0,
                 else
                     height = width / imageRatio;
             }
-            
+
+#if PLATFORM(DOM)
             _DOMImageElement.width = ROUND(width);
             _DOMImageElement.height = ROUND(height);
+#endif
         }
         else
         {
@@ -305,13 +326,15 @@ var LEFT_SHADOW_INSET       = 3.0,
     
         if (_imageScaling == CPScaleNone)
         {
+#if PLATFORM(DOM)
             _DOMImageElement.width = ROUND(size.width);
             _DOMImageElement.height = ROUND(size.height);
+#endif
         }
 
         var x = (boundsWidth - width) / 2.0,
             y = (boundsHeight - height) / 2.0;
-            
+        
         CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, x, y);
     }
 
@@ -336,20 +359,22 @@ var CPImageViewImageKey         = @&quot;CPImageViewImageKey&quot;,
 */
 - (id)initWithCoder:(CPCoder)aCoder
 {
+#if PLATFORM(DOM)
+    _DOMImageElement = document.createElement(&quot;img&quot;);
+    _DOMImageElement.style.position = &quot;absolute&quot;;
+    _DOMImageElement.style.left = &quot;0px&quot;;
+    _DOMImageElement.style.top = &quot;0px&quot;;
+    _DOMImageElement.style.visibility = &quot;hidden&quot;;
+#endif
+
     self = [super initWithCoder:aCoder];
     
     if (self)
     {
-        _DOMImageElement = document.createElement(&quot;img&quot;);
-        _DOMImageElement.style.position = &quot;absolute&quot;;
-        _DOMImageElement.style.left = &quot;0px&quot;;
-        _DOMImageElement.style.top = &quot;0px&quot;;
-    
+#if PLATFORM(DOM)
         _DOMElement.appendChild(_DOMImageElement);
-        _DOMImageElement.style.visibility = &quot;hidden&quot;;
-        
-        [self setImage:[aCoder decodeObjectForKey:CPImageViewImageKey]];
-        
+#endif
+
         [self setImageScaling:[aCoder decodeIntForKey:CPImageViewImageScalingKey]];
         [self setHasShadow:[aCoder decodeBoolForKey:CPImageViewHasShadowKey]];
         
@@ -381,8 +406,6 @@ var CPImageViewImageKey         = @&quot;CPImageViewImageKey&quot;,
     if (_shadowView)
         _subviews = actualSubviews;
     
-    [aCoder encodeObject:_image forKey:CPImageViewImageKey];
-    
     [aCoder encodeInt:_imageScaling forKey:CPImageViewImageScalingKey];
     [aCoder encodeBool:_hasShadow forKey:CPImageViewHasShadowKey];
 }</diff>
      <filename>AppKit/CPImageView.j</filename>
    </modified>
    <modified>
      <diff>@@ -25,6 +25,7 @@
 @import &lt;Foundation/CPURLRequest.j&gt;
 
 @import &quot;_CPCibCustomObject.j&quot;
+@import &quot;_CPCibCustomResource.j&quot;
 @import &quot;_CPCibCustomView.j&quot;
 @import &quot;_CPCibKeyedUnarchiver.j&quot;
 @import &quot;_CPCibObjectData.j&quot;
@@ -38,7 +39,8 @@ var CPCibObjectDataKey  = @&quot;CPCibObjectDataKey&quot;;
 
 @implementation CPCib : CPObject
 {
-    CPData  _data;
+    CPData      _data;
+    CPBundle    _bundle;
 }
 
 - (id)initWithContentsOfURL:(CPURL)aURL
@@ -51,9 +53,21 @@ var CPCibObjectDataKey  = @&quot;CPCibObjectDataKey&quot;;
     return self;
 }
 
-- (BOOL)instantiateCibWithExternalNameTable:(CPDictionary)anExternalNameTable
+- (id)initWithCibNamed:(CPString)aName bundle:(CPBundle)aBundle
 {
-    var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data],
+    self = [self initWithContentsOfURL:aName];
+    
+    if (self)
+    {
+        _bundle = aBundle;
+    }
+    
+    return self;
+}
+
+- (BOOL)instantiateCibWithExternalNameTable:(CPDictionary)anExternalNameTable
+{   
+    var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data bundle:_bundle],
         objectData = [unarchiver decodeObjectForKey:CPCibObjectDataKey];
 
     if (!objectData || ![objectData isKindOfClass:[_CPCibObjectData class]])</diff>
      <filename>AppKit/Cib/CPCib.j</filename>
    </modified>
    <modified>
      <diff>@@ -46,8 +46,12 @@ var _CPCibCustomViewClassNameKey    = @&quot;_CPCibCustomViewClassNameKey&quot;;
     self = [super initWithCoder:aCoder];
 
     if (self)
+    {
         _className = [aCoder decodeObjectForKey:_CPCibCustomViewClassNameKey];
-
+    
+        [self setBackgroundColor:[CPColor blueColor]];
+    }
+    
     return self;
 }
 
@@ -70,6 +74,10 @@ var _CPCibCustomViewClassNameKey    = @&quot;_CPCibCustomViewClassNameKey&quot;;
         
         theClass = [CPView class];
     }
+    
+    // Hey this is us!
+    if (theClass === [self class])
+        return self;
 
     var view = [[theClass alloc] initWithFrame:[self frame]];
         </diff>
      <filename>AppKit/Cib/_CPCibCustomView.j</filename>
    </modified>
    <modified>
      <diff>@@ -4,18 +4,28 @@
 
 @implementation _CPCibKeyedUnarchiver : CPKeyedUnarchiver
 {
+    CPBundle    _bundle;
 }
 
-- (id)initForReadingWithData:(CPData)data
+- (id)initForReadingWithData:(CPData)data bundle:(CPBundle)aBundle
 {
     self = [super initForReadingWithData:data];
     
     if (self)
+    {
+        _bundle = aBundle;
+        
         [self setDelegate:self];
+    }
     
     return self;
 }
 
+- (CPBundle)bundle
+{
+    return _bundle;
+}
+
 - (id)unarchiver:(CPKeyedUnarchiver)aKeyedUnarchiver didDecodeObject:(id)anObject
 {
     if ([anObject respondsToSelector:@selector(_cibInstantiate)])</diff>
      <filename>AppKit/Cib/_CPCibKeyedUnarchiver.j</filename>
    </modified>
    <modified>
      <diff>@@ -261,7 +261,7 @@
 {
     if (self.__address == nil)
         self.__address = _objj_generateObjectHash();
-        
+
     return self.__address;
 }
 
@@ -800,7 +800,7 @@
         
         if (i != count - 1) description += &quot;, &quot;;
     }
-        
+    
     return description + ')';
 }
 
@@ -1183,7 +1183,7 @@
 
 - (id)initWithCoder:(CPCoder)aCoder
 {
-    return [aCoder _decodeArrayOfObjectsForKey:@&quot;CP.objects&quot;];
+    return [aCoder decodeObjectForKey:@&quot;CP.objects&quot;];
 }
 
 - (void)encodeWithCoder:(CPCoder)aCoder</diff>
      <filename>Foundation/CPArray.j</filename>
    </modified>
    <modified>
      <diff>@@ -181,26 +181,6 @@ var _CPKeyedUnarchiverArrayClass                                            = Ni
 }
 
 /* @ignore */
-- (id)_decodeArrayOfObjectsForKey:(CPString)aKey
-{
-    var object = [_plistObject objectForKey:aKey];
-    
-    if ([object isKindOfClass:_CPKeyedUnarchiverArrayClass])
-    {
-        var index = 0,
-            count = object.length,
-            array = [];
-
-        for (; index &lt; count; ++index)
-            array[index] = _CPKeyedUnarchiverDecodeObjectAtIndex(self, [object[index] objectForKey:_CPKeyedArchiverUIDKey]);
-            
-        return array;
-    }
-    
-    return nil;
-}
-
-/* @ignore */
 - (void)_decodeDictionaryOfObjectsForKey:(CPString)aKey
 {
     var object = [_plistObject objectForKey:aKey];
@@ -313,13 +293,26 @@ var _CPKeyedUnarchiverArrayClass                                            = Ni
 - (id)decodeObjectForKey:(CPString)aKey
 {
     var object = [_plistObject objectForKey:aKey];
-
+    
     if ([object isKindOfClass:_CPKeyedUnarchiverDictionaryClass])
         return _CPKeyedUnarchiverDecodeObjectAtIndex(self, [object objectForKey:_CPKeyedArchiverUIDKey]);
+
     else if ([object isKindOfClass:[CPNumber class]] || [object isKindOfClass:[CPData class]])
         return object;
+
+    else if ([object isKindOfClass:_CPKeyedUnarchiverArrayClass])
+    {
+        var index = 0,
+            count = object.length,
+            array = [];
+
+        for (; index &lt; count; ++index)
+            array[index] = _CPKeyedUnarchiverDecodeObjectAtIndex(self, [object[index] objectForKey:_CPKeyedArchiverUIDKey]);
+        
+        return array;
+    }
 /*    else
-        alert([object className] + &quot; &quot; + object + &quot; &quot; + aKey + &quot; &quot; + [_plistObject description]);*/
+        CPLog([object className] + &quot; &quot; + object + &quot; &quot; + aKey + &quot; &quot; + [_plistObject description]);*/
 
     return nil;
 }</diff>
      <filename>Foundation/CPKeyedUnarchiver.j</filename>
    </modified>
    <modified>
      <diff>@@ -101,12 +101,14 @@
     Initializes a newly allocated set with the objects that are contained in a given array.
     @param array An array of objects to add to the new set. If the same object appears more than once in array, it is represented only once in the returned set.
 */
-- (id)initWithArray:(CPArray)array
+- (id)initWithArray:(CPArray)anArray
 {    
     if (self = [self init])
     {
-        for (var i = 0; i&lt;array.length; i++) 
-            [self addObject:array[i]];
+        var count = anArray.length;
+        
+        while (count--)
+            [self addObject:anArray[count]];
     }
     
     return self;
@@ -414,6 +416,21 @@
 
 @end
 
+var CPSetObjectsKey = @&quot;CPSetObjectsKey&quot;;
+
+@implementation CPSet (CPCoding)
+
+- (id)initWithCoder:(CPCoder)aCoder
+{
+    return [[CPSet alloc] initWithArray:[aCoder decodeObjectForKey:CPSetObjectsKey]];
+}
+
+- (void)encodeWithCoder:(CPCoder)aCoder
+{
+    [aCoder encodeObject:[self allObjects] forKey:CPSetObjectsKey];
+}
+
+@end
 
 @implementation CPMutableSet : CPSet
 @end</diff>
      <filename>Foundation/CPSet.j</filename>
    </modified>
    <modified>
      <diff>@@ -27,9 +27,11 @@
 @import &quot;NSColorWell.j&quot;
 @import &quot;NSControl.j&quot;
 @import &quot;NSCustomObject.j&quot;
+@import &quot;NSCustomResource.j&quot;
 @import &quot;NSCustomView.j&quot;
 @import &quot;NSFont.j&quot;
 @import &quot;NSIBObjectData.j&quot;
+@import &quot;NSImageView.j&quot;
 @import &quot;NSMenu.j&quot;
 @import &quot;NSMenuItem.j&quot;
 @import &quot;NSNibConnector.j&quot;
@@ -37,6 +39,7 @@
 @import &quot;NSResponder.j&quot;
 @import &quot;NSScrollView.j&quot;
 @import &quot;NSScroller.j&quot;
+@import &quot;NSSet.j&quot;
 @import &quot;NSSegmentedControl.j&quot;
 @import &quot;NSSlider.j&quot;
 @import &quot;NSSplitView.j&quot;
@@ -51,15 +54,16 @@
 
 function CP_NSMapClassName(aClassName)
 {
-    switch (aClassName)
+    if (aClassName.indexOf(&quot;NS&quot;) === 0)
     {
-        case @&quot;NSApplication&quot;:  return @&quot;CPApplication&quot;;
-        case @&quot;NSObject&quot;:       return @&quot;CPObject&quot;;
-        case @&quot;NSPanel&quot;:        return @&quot;CPPanel&quot;;
-        case @&quot;NSView&quot;:         return @&quot;CPView&quot;;
-        case @&quot;NSWindow&quot;:       return @&quot;CPWindow&quot;;
+        var mappedClassName = @&quot;CP&quot; + aClassName.substr(2);
         
-        default:                CPLog.warn(&quot;No class name mapping for \&quot;&quot; + aClassName + &quot;\&quot;&quot;);
+        if (window[mappedClassName])
+        {
+            CPLog.warn(&quot;Mapping &quot; + aClassName + &quot; to &quot; + mappedClassName);
+
+            return mappedClassName;
+        }
     }
 
     return aClassName;</diff>
      <filename>Tools/nib2cib/NSAppKit.j</filename>
    </modified>
    <modified>
      <diff>@@ -29,7 +29,7 @@
 
 - (id)initWithCoder:(CPCoder)aCoder
 {
-    return [aCoder _decodeArrayOfObjectsForKey:@&quot;NS.objects&quot;];
+    return [aCoder decodeObjectForKey:@&quot;NS.objects&quot;];
 }
 
 @end
@@ -37,4 +37,4 @@
 @implementation NSMutableArray : NSArray
 {
 }
-@end
\ No newline at end of file
+@end</diff>
      <filename>Tools/nib2cib/NSArray.j</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>0af841cfd4c89c76778a984fe3c0f3e935f83800</id>
    </parent>
  </parents>
  <author>
    <name>Francisco Ryan Tolmasky I</name>
    <email>francisco@280north.com</email>
  </author>
  <url>http://github.com/280north/cappuccino/commit/fb3c43ef6a64f630efd51f45ae118c39598003d7</url>
  <id>fb3c43ef6a64f630efd51f45ae118c39598003d7</id>
  <committed-date>2009-01-09T04:38:35-08:00</committed-date>
  <authored-date>2009-01-09T04:38:35-08:00</authored-date>
  <message>Made CPImageView nib2cib compliant.

Reviewed by me.</message>
  <tree>28b5ed914f4dde442e98364195626d3c0cf2e2c3</tree>
  <committer>
    <name>Francisco Ryan Tolmasky I</name>
    <email>francisco@280north.com</email>
  </committer>
</commit>
