From b1c99a5f0a1826bce63c9126c36fae47f7c4d0f8 Mon Sep 17 00:00:00 2001 From: Will Larson Date: Sun, 7 Sep 2008 09:43:28 -0400 Subject: [PATCH 01/17] Added placeholder and setPlaceholder methods to CPTextField, to facilitate displaying placeholder text for textfields before user has entered text. May want to consider changing text color while displaying placeholder text. --- AppKit/CPTextField.j | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 67064bb9e..23cddb8f3 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -66,6 +66,7 @@ var _CPTextFieldSquareBezelColor = nil; BOOL _isSelectable; id _value; + id _placeholderString; CPLineBreakMode _lineBreakMode; #if PLATFORM(DOM) @@ -104,7 +105,8 @@ var _CPTextFieldSquareBezelColor = nil; if (self) { _value = @""; - + _placeholderValue = @""; + #if PLATFORM(DOM) _DOMTextElement = document.createElement("div"); _DOMTextElement.style.position = "absolute"; @@ -245,6 +247,12 @@ var _CPTextFieldSquareBezelColor = nil; [[CPDOMWindowBridge sharedDOMWindowBridge] _propagateCurrentDOMEvent:YES]; + // If current value is the placeholder value, remove it to + // allow user to update. + if ([_value caseInsensitiveCompare:[self placeholderString]]==0) { + [self setStringValue:@""]; + } + return YES; } @@ -254,6 +262,11 @@ var _CPTextFieldSquareBezelColor = nil; _DOMElement.removeChild(element); [self setStringValue:element.value]; + + // If textfield has no value, then display the placeholderValue + if ([_value caseInsensitiveCompare:@""]==0) { + [self setStringValue:[self placeholderString]]; + } return YES; } @@ -354,6 +367,24 @@ var _CPTextFieldSquareBezelColor = nil; #endif } +- (CPString)placeholderString +{ + return [_placeholderString string]; +} + +-(void)setPlaceholderString:(CPString)aStringValue +{ + _placeholderString = aStringValue; +#if PLATFORM(DOM) + var cssString = _value ? [_value cssString] : @""; + + if (CPFeatureIsCompatible(CPJavascriptInnerTextFeature)) + _DOMTextElement.innerText = cssString; + else if (CPFeatureIsCompatible(CPJavascriptTextContentFeature)) + _DOMTextElement.textContent = cssString; +#endif +} + - (void)sizeToFit { #if PLATFORM(DOM) From c5415eae0503db309b8692b1854246372a22268e Mon Sep 17 00:00:00 2001 From: Will Larson Date: Sun, 7 Sep 2008 10:35:17 -0400 Subject: [PATCH 02/17] In attempt to mimic existing code, inadvertantly mimicked too much. Removing unnecessary lines. --- AppKit/CPTextField.j | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 23cddb8f3..03d724284 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -8,7 +8,7 @@ * 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. +c * 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 @@ -375,14 +375,6 @@ var _CPTextFieldSquareBezelColor = nil; -(void)setPlaceholderString:(CPString)aStringValue { _placeholderString = aStringValue; -#if PLATFORM(DOM) - var cssString = _value ? [_value cssString] : @""; - - if (CPFeatureIsCompatible(CPJavascriptInnerTextFeature)) - _DOMTextElement.innerText = cssString; - else if (CPFeatureIsCompatible(CPJavascriptTextContentFeature)) - _DOMTextElement.textContent = cssString; -#endif } - (void)sizeToFit From 3dd3a8733b7463383f7665b5f9b372c0277f87ef Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Wed, 17 Sep 2008 17:03:51 -0700 Subject: [PATCH 03/17] Add CPViewAutoresizingMasks to the documentation. --- AppKit/CPView.j | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 05aedecc4..e09f3f557 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -37,13 +37,47 @@ import "CPGraphicsContext.j" #include "CoreGraphics/CGGeometry.h" #include "Platform/DOM/CPDOMDisplayServer.h" - +/* + @global + @group CPViewAutoresizingMasks + The default resizingMask, the view will not resize or reposition itself. +*/ CPViewNotSizable = 0; +/* + @global + @group CPViewAutoresizingMasks + Allow for flexible space on the left hand side of the view. +*/ CPViewMinXMargin = 1; +/* + @global + @group CPViewAutoresizingMasks + The view should grow and shrink horizontally with its parent view. +*/ CPViewWidthSizable = 2; +/* + @global + @group CPViewAutoresizingMasks + Allow for flexible space to the right hand side of the view. +*/ CPViewMaxXMargin = 4; +/* + @global + @group CPViewAutoresizingMasks + Allow for flexible space above the view. +*/ CPViewMinYMargin = 8; +/* + @global + @group CPViewAutoresizingMasks + The view should grow and shrink vertically with its parent view. +*/ CPViewHeightSizable = 16; +/* + @global + @group CPViewAutoresizingMasks + Allow for flexible space below the view. +*/ CPViewMaxYMargin = 32; CPViewBoundsDidChangeNotification = @"CPViewBoundsDidChangeNotification"; From e95c2b9efce252b2f76fdff7ffb1b12bc06c9d83 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Wed, 17 Sep 2008 22:39:25 -0700 Subject: [PATCH 04/17] Various fixes to support creating images with specifying the size upfront. [#41 milestone:0.5.2 state:resolved]; [#20 milestone:0.5.2 state:resolved]; --- AppKit/CPImage.j | 13 ++++++-- AppKit/CPImageView.j | 51 +++++++++++++++++++++---------- Foundation/CPNotificationCenter.j | 8 ++--- 3 files changed, 49 insertions(+), 23 deletions(-) diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j index f51d44805..b5baef554 100644 --- a/AppKit/CPImage.j +++ b/AppKit/CPImage.j @@ -20,10 +20,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -import -import import +import +import import +import import "CPGeometry.j" @@ -35,6 +36,8 @@ CPImageLoadStatusInvalidData = 4; CPImageLoadStatusUnexpectedEOF = 5; CPImageLoadStatusReadError = 6; +CPImageDidLoadNotification = @"CPImageDidLoadNotification"; + @implementation CPBundle (CPImageAdditions) - (CPString)pathForResource:(CPString)aFilename @@ -219,7 +222,11 @@ CPImageLoadStatusReadError = 6; // FIXME: IE is wrong on image sizes???? if (!_size || (_size.width == -1 && _size.height == -1)) _size = CGSizeMake(_image.width, _image.height); - + + [[CPNotificationCenter defaultCenter] + postNotificationName:CPImageDidLoadNotification + object:self]; + if ([_delegate respondsToSelector:@selector(imageDidLoad:)]) [_delegate imageDidLoad:self]; diff --git a/AppKit/CPImageView.j b/AppKit/CPImageView.j index 6aa860c5c..5cba2ae88 100644 --- a/AppKit/CPImageView.j +++ b/AppKit/CPImageView.j @@ -20,8 +20,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -import "CPImage.j" +import + import "CPControl.j" +import "CPImage.j" import "CPShadowView.j" #include "Platform/Platform.h" @@ -110,20 +112,35 @@ var LEFT_SHADOW_INSET = 3.0, if (_image == anImage) return; + var center = [CPNotificationCenter defaultCenter]; + + if (_image) + [center removeObserver:self name:CPImageDidLoadNotification object:_image]; + _image = anImage; - _DOMImageElement.src = [anImage filename]; + + var size = [_image size]; - if (_imageScaling == CPScaleNone && _image) + if (size && size.width == -1 && size.height == -1) { - var size = [_image size]; + [center addObserver:self selector:@selector(imageDidLoad:) name:CPImageDidLoadNotification object:_image]; + + _DOMImageElement.width = 0; + _DOMImageElement.height = 0; - _DOMImageElement.width = ROUND(size.width); - _DOMImageElement.height = ROUND(size.height); + [_shadowView setHidden:YES]; } - + else + { + [self hideOrDisplayContents]; + [self tile]; + } +} + +- (void)imageDidLoad:(CPNotification)aNotification +{ [self hideOrDisplayContents]; - [self tile]; } @@ -181,13 +198,6 @@ var LEFT_SHADOW_INSET = 3.0, { CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, 0.0, 0.0); } - else if (_imageScaling == CPScaleNone && _image) - { - var size = [_image size]; - - _DOMImageElement.width = ROUND(size.width); - _DOMImageElement.height = ROUND(size.height); - } [self tile]; } @@ -240,7 +250,7 @@ var LEFT_SHADOW_INSET = 3.0, { if (!_image) return; - + var bounds = [self bounds], x = 0.0, y = 0.0, @@ -260,6 +270,9 @@ var LEFT_SHADOW_INSET = 3.0, { var size = [_image size]; + if (size.width == -1 && size.height == -1) + return; + if (_imageScaling == CPScaleProportionally) { // The max size it can be is size.width x size.height, so only @@ -289,6 +302,12 @@ var LEFT_SHADOW_INSET = 3.0, height = size.height; } + if (_imageScaling == CPScaleNone) + { + _DOMImageElement.width = ROUND(size.width); + _DOMImageElement.height = ROUND(size.height); + } + var x = (boundsWidth - width) / 2.0, y = (boundsHeight - height) / 2.0; diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j index f0f301755..c3b166fad 100644 --- a/Foundation/CPNotificationCenter.j +++ b/Foundation/CPNotificationCenter.j @@ -219,7 +219,7 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ while (key = [keys nextObject]) { var observers = [_objectObservers objectForKey:key], - count = observers.length; + count = observers ? observers.length : 0; while (count--) if ([observers[count] observer] == anObserver) @@ -231,7 +231,7 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ observers.splice(count, 1); } - if (observers.length == 0) + if (!observers || observers.length == 0) removedKeys.push(key); } } @@ -239,7 +239,7 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ { var key = [anObject hash], observers = [_objectObservers objectForKey:key]; - count = observers.length; + count = observers ? observers.length : 0; while (count--) if ([observers[count] observer] == anObserver) @@ -251,7 +251,7 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ observers.splice(count, 1) } - if (observers.length == 0) + if (!observers || observers.length == 0) removedKeys.push(key); } From 08d0dfd190cda41e895e9dfd570682e1e98aa360 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 18 Sep 2008 15:55:12 -0700 Subject: [PATCH 05/17] Remove the alert that was added. --- AppKit/CPControl.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index a035f5467..421b89b08 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -253,8 +253,8 @@ var CPControlBlackColor = [CPColor blackColor]; - (void)mouseUp:(CPEvent)anEvent { - if (_sendActionOn & CPLeftMouseUpMask && CPRectContainsPoint([self bounds], [self convertPoint:[anEvent locationInWindow] fromView:nil])){alert([_target description] + " : " + _action); - [self sendAction:_action to:_target];} + if (_sendActionOn & CPLeftMouseUpMask && CPRectContainsPoint([self bounds], [self convertPoint:[anEvent locationInWindow] fromView:nil])) + [self sendAction:_action to:_target]; [super mouseUp:anEvent]; } From 07d4ebdf9f0526e5e3575528c8c702d59e65ec33 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Thu, 18 Sep 2008 16:33:01 -0700 Subject: [PATCH 06/17] Tests README --- Tests/README | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Tests/README diff --git a/Tests/README b/Tests/README new file mode 100644 index 000000000..b81dbe228 --- /dev/null +++ b/Tests/README @@ -0,0 +1,5 @@ +Requires objj be installed, as well as ojunit, located at http://github.com/280north/ojunit + +Run individual tests using a command similar to the following: + + objj ojunit/OJTestRunnerText.j cappuccino/Tests/Foundation/CPDateTest.j From f9e6cf3da98e3bc217382c26e9415a0b4ec6839d Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 18 Sep 2008 16:38:41 -0700 Subject: [PATCH 07/17] Fix infinite loop in CPTextField, add selectText: [#55 state:resolved] --- AppKit/CPTextField.j | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 900015de8..da3d9fdd2 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -140,7 +140,7 @@ var _CPTextFieldSquareBezelColor = nil; - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; - + if (self) { _value = @""; @@ -432,7 +432,7 @@ var _CPTextFieldSquareBezelColor = nil; return [[self class] _inputElement].value; #endif - return [self stringValue]; + return [super stringValue]; } /* @@ -469,6 +469,19 @@ var _CPTextFieldSquareBezelColor = nil; #endif } +/* + Select all the text in the CPTextField. +*/ +- (void)selectText:(id)sender +{ +#if PLATFORM(DOM) + var element = [[self class] _inputElement]; + + if (element.parentNode == _DOMElement && ([self isEditable] || [self isSelectable])) + element.select(); +#endif +} + @end var CPTextFieldIsSelectableKey = @"CPTextFieldIsSelectableKey", From ae6e3f2c47724625331f65caa7585b66f75269cd Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Thu, 18 Sep 2008 22:47:15 -0700 Subject: [PATCH 08/17] Added coding support for tags to CPView and nib2cib. Reviewed by me. --- AppKit/CPView.j | 18 ++++++++++++++++++ Tools/nib2cib/NSView.j | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 1fe0de2e2..8a90392db 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -88,6 +88,8 @@ var DOMElementPrototype = nil, CPGraphicsContext _graphicsContext; + int _tag; + CGRect _frame; CGRect _bounds; CGAffineTransform _boundsTransform; @@ -174,6 +176,8 @@ var DOMElementPrototype = nil, _subviews = []; + _tag = -1; + _frame = _CGRectMakeCopy(aFrame); _bounds = _CGRectMake(0.0, 0.0, width, height); @@ -464,6 +468,11 @@ var DOMElementPrototype = nil, return enclosingMenuItem;*/ } +- (int)tag +{ + return _tag; +} + /* Returns whether the view is flipped. @return YES if the view is flipped. NO, otherwise. @@ -1665,6 +1674,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", CPViewOpacityKey = @"CPViewOpacityKey", CPViewSubviewsKey = @"CPViewSubviewsKey", CPViewSuperviewKey = @"CPViewSuperviewKey", + CPViewTagKey = @"CPViewTagKey", CPViewWindowKey = @"CPViewWindowKey"; @implementation CPView (CPCoding) @@ -1692,6 +1702,11 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", if (self) { + _tag = -1; + + if ([aCoder containsValueForKey:CPViewTagKey]) + _tag = [aCoder decodeIntForKey:CPViewTagKey]; + _window = [aCoder decodeObjectForKey:CPViewWindowKey]; _subviews = [aCoder decodeObjectForKey:CPViewSubviewsKey]; _superview = [aCoder decodeObjectForKey:CPViewSuperviewKey]; @@ -1736,6 +1751,9 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", { [super encodeWithCoder:aCoder]; + if (_tag != -1) + [aCoder encodeInt:_tag forKey:CPViewTagKey]; + [aCoder encodeRect:_frame forKey:CPViewFrameKey]; [aCoder encodeRect:_bounds forKey:CPViewBoundsKey]; diff --git a/Tools/nib2cib/NSView.j b/Tools/nib2cib/NSView.j index 4d92d3010..dc8eb9058 100644 --- a/Tools/nib2cib/NSView.j +++ b/Tools/nib2cib/NSView.j @@ -41,6 +41,11 @@ import if (self) { + _tag = -1; + + if([aCoder containsValueForKey:@"NSTag"]) + _tag = [aCoder decodeIntForKey:@"NSTag"]; + _bounds = CGRectMake(0.0, 0.0, CGRectGetWidth(_frame), CGRectGetHeight(_frame)); _window = [aCoder decodeObjectForKey:@"NSWindow"]; From 96b1dbdb603cd6fec7610b08e8605bc9ed5926a3 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Thu, 18 Sep 2008 23:47:50 -0700 Subject: [PATCH 09/17] Missing imports in AppKit.j, and misplaced comma in CPSlider --- AppKit/AppKit.j | 2 ++ AppKit/CPSlider.j | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index 7a4263b61..b0a9f66d1 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -53,9 +53,11 @@ import "CPSecureTextField.j" import "CPSegmentedControl.j" import "CPShadow.j" import "CPSlider.j" +import "CPSplitView.j" import "CPTextField.j" import "CPToolbar.j" import "CPToolbarItem.j" import "CPView.j" +import "CPWebView.j" import "CPWindow.j" import "CPWindowController.j" diff --git a/AppKit/CPSlider.j b/AppKit/CPSlider.j index 8f0240a9d..ab8d2e6b6 100644 --- a/AppKit/CPSlider.j +++ b/AppKit/CPSlider.j @@ -22,7 +22,7 @@ import "CPControl.j" -var CPSliderHorizontalKnobImage = nil +var CPSliderHorizontalKnobImage = nil, CPSliderHorizontalBarLeftImage = nil, CPSliderHorizontalBarRightImage = nil, CPSliderHorizontalBarCenterImage = nil; From f39dfef168484596d30a1f973281d39de994fcdf Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Fri, 19 Sep 2008 01:12:00 -0700 Subject: [PATCH 10/17] CPSplitView pane splitter (thin divider), archiving, and nib2cib support [#52 state:resolved responsible:tlrobinson] --- AppKit/CPSplitView.j | 117 ++++++++++++++++++++++++++++++------ Tools/nib2cib/NSAppKit.j | 1 + Tools/nib2cib/NSSplitView.j | 55 +++++++++++++++++ Tools/nib2cib/main.j | 1 + 4 files changed, 154 insertions(+), 20 deletions(-) create mode 100644 Tools/nib2cib/NSSplitView.j diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index adafffca9..1ff6f56ac 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -72,8 +72,8 @@ var CPSplitViewHorizontalImage = nil, _DOMDividerElements = []; - [self setVertical:YES]; [self setIsPaneSplitter:YES]; + [self _setVertical:YES]; } return self; @@ -81,7 +81,7 @@ var CPSplitViewHorizontalImage = nil, - (float)dividerThickness { - return 10.0; + return _isPaneSplitter ? 1.0 : 10.0; } - (BOOL)isVertical @@ -90,14 +90,18 @@ var CPSplitViewHorizontalImage = nil, } - (void)setVertical:(BOOL)flag { - _isVertical = flag; - - _originComponent = [self isVertical] ? "x" : "y"; - _sizeComponent = [self isVertical] ? "width" : "height"; - _dividerImagePath = [self isVertical] ? [CPSplitViewVerticalImage filename] : [CPSplitViewHorizontalImage filename]; + [self _setVertical:flag]; [self adjustSubviews]; } +- (void)_setVertical:(BOOL)flag +{ + _isVertical = flag; + + _originComponent = [self isVertical] ? "x" : "y"; + _sizeComponent = [self isVertical] ? "width" : "height"; + _dividerImagePath = [self isVertical] ? [CPSplitViewVerticalImage filename] : [CPSplitViewHorizontalImage filename]; +} - (BOOL)isPaneSplitter { @@ -122,7 +126,8 @@ var CPSplitViewHorizontalImage = nil, var eachSize = (frame.size[_sizeComponent] - dividerThickness * (_subviews.length - 1)) / _subviews.length; - for (var i = 0; i < [_subviews count]; i++) + var count = [_subviews count] + for (var i = 0; i < count; i++) { if ([self isVertical]) [_subviews[i] setFrame:CGRectMake(Math.round((eachSize + dividerThickness) * i), 0, Math.round(eachSize), frame.size.height)]; @@ -157,8 +162,10 @@ var CPSplitViewHorizontalImage = nil, { var realRect = [self rectOfDividerAtIndex:aDivider]; - realRect.size[_sizeComponent] += 4; - realRect.origin[_originComponent] -= 2; + var padding = 2; + + realRect.size[_sizeComponent] += padding * 2; + realRect.origin[_originComponent] -= padding; return realRect; } @@ -187,7 +194,16 @@ var CPSplitViewHorizontalImage = nil, CPDOMDisplayServerSetStyleLeftTop(_DOMDividerElements[_drawingDivider], NULL, _CGRectGetMinX(aRect), _CGRectGetMinY(aRect)); CPDOMDisplayServerSetStyleSize(_DOMDividerElements[_drawingDivider], _CGRectGetWidth(aRect), _CGRectGetHeight(aRect)); - _DOMDividerElements[_drawingDivider].style.backgroundImage = "url('"+_dividerImagePath+"')"; + if (_isPaneSplitter) + { + _DOMDividerElements[_drawingDivider].style.backgroundColor = "#A5A5A5"; + _DOMDividerElements[_drawingDivider].style.backgroundImage = ""; + } + else + { + _DOMDividerElements[_drawingDivider].style.backgroundColor = ""; + _DOMDividerElements[_drawingDivider].style.backgroundImage = "url('"+_dividerImagePath+"')"; + } #endif } @@ -207,6 +223,22 @@ var CPSplitViewHorizontalImage = nil, return CGRectContainsPoint(effectiveRect, aPoint) || (additionalRect && CGRectContainsPoint(additionalRect, aPoint)); } +- (CPView)hitTest:(CGPoint)aPoint +{ + if ([self isHidden] || ![self hitTests] || !CGRectContainsPoint([self frame], aPoint)) + return nil; + + var point = [self convertPoint:aPoint fromView:[self superview]]; + + var count = [_subviews count] - 1; + for (var i = 0; i < count; i++) + { + if ([self cursorAtPoint:point hitDividerAtIndex:i]) + return self; + } + + return [super hitTest:aPoint]; +} /* Tracks the divider. @@ -229,11 +261,11 @@ var CPSplitViewHorizontalImage = nil, if (type == CPLeftMouseDown) { - var location = [anEvent locationInWindow], - point = [self convertPoint:location fromView:nil]; + var point = [self convertPoint:[anEvent locationInWindow] fromView:nil]; _currentDivider = CPNotFound; - for (var i = 0; i < [_subviews count] - 1; i++) + var count = [_subviews count] - 1; + for (var i = 0; i < count; i++) { var frame = [_subviews[i] frame], startPosition = frame.origin[_originComponent] + frame.size[_sizeComponent]; @@ -277,8 +309,7 @@ var CPSplitViewHorizontalImage = nil, { if (_currentDivider != CPNotFound) { - var location = [anEvent locationInWindow], - point = [self convertPoint:location fromView:nil]; + var point = [self convertPoint:[anEvent locationInWindow] fromView:nil]; [self setPosition:(point[_originComponent] + _initialOffset) ofDividerAtIndex:_currentDivider]; } @@ -331,9 +362,9 @@ var CPSplitViewHorizontalImage = nil, var frame = [self frame], viewA = _subviews[dividerIndex], - frameA = CGRectCreateCopy([viewA frame]), + frameA = [viewA frame], viewB = _subviews[dividerIndex+1], - frameB = CGRectCreateCopy([viewB frame]); + frameB = [viewB frame]; var realPosition = MAX(MIN(position, actualMax), actualMin); @@ -364,12 +395,13 @@ var CPSplitViewHorizontalImage = nil, var frame = CGRectCreateCopy([self frame]); - for (var i = 0; i < [_subviews count]; i++) + var count = [_subviews count]; + for (var i = 0; i < count; i++) { var view = [_subviews objectAtIndex:i], newFrame = CGRectCreateCopy(frame); - if(i + 1 == [_subviews count]) + if (i + 1 == count) newFrame.size[_sizeComponent] = frame.size[_sizeComponent] - newFrame.origin[_originComponent]; else newFrame.size[_sizeComponent] = frame.size[_sizeComponent] * ([view frame].size[_sizeComponent] / oldSize[_sizeComponent]); @@ -418,6 +450,51 @@ var CPSplitViewHorizontalImage = nil, @end +var CPSplitViewDelegateKey = "CPSplitViewDelegateKey", + CPSplitViewIsVerticalKey = "CPSplitViewIsVerticalKey", + CPSplitViewIsPaneSplitterKey = "CPSplitViewIsPaneSplitterKey"; + +@implementation CPSplitView (CPCoding) + +/* + Initializes the split view by unarchiving data from aCoder. + @param aCoder the coder containing the archived CPSplitView. +*/ +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super initWithCoder:aCoder]; + + if (self) + { + _currentDivider = CPNotFound; + + _DOMDividerElements = []; + + _delegate = [aCoder decodeObjectForKey:CPSplitViewDelegateKey];; + + _isPaneSplitter = [aCoder decodeBoolForKey:CPSplitViewIsPaneSplitterKey]; + [self _setVertical:[aCoder decodeBoolForKey:CPSplitViewIsVerticalKey]]; + } + + return self; +} + +/* + Archives this split view into the provided coder. + @param aCoder the coder to which the button's instance data will be written. +*/ +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + + [aCoder encodeConditionalObject:_delegate forKey:CPSplitViewDelegateKey]; + + [aCoder encodeBool:_isVertical forKey:CPSplitViewIsVerticalKey]; + [aCoder encodeBool:_isPaneSplitter forKey:CPSplitViewIsPaneSplitterKey]; +} + +@end + // FIXME: once +initialize is fixed for superclasses, remove this and uncomment +initialize var bundle = [CPBundle bundleForClass:CPSplitView]; CPSplitViewHorizontalImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSplitView/CPSplitViewHorizontal.png"] size:CPSizeMake(5.0, 10.0)]; diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index e307708da..efb30c17b 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -32,6 +32,7 @@ import "NSResponder.j" import "NSSlider.j" import "NSView.j" import "NSWindowTemplate.j" +import "NSSplitView.j" function CP_NSMapClassName(aClassName) { diff --git a/Tools/nib2cib/NSSplitView.j b/Tools/nib2cib/NSSplitView.j new file mode 100644 index 000000000..8dc7d83ab --- /dev/null +++ b/Tools/nib2cib/NSSplitView.j @@ -0,0 +1,55 @@ +/* + * NSSplitView.j + * nib2cib + * + * Created by Thomas Robinson. + * 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 + + +@implementation CPSplitView (CPCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + if (self = [super NS_initWithCoder:aCoder]) + { + _isVertical = [aCoder decodeBoolForKey:@"NSIsVertical"]; + _isPaneSplitter = [aCoder decodeIntForKey:@"NSDividerStyle"] == 2 ? YES : NO; + } + + return self; +} + +@end + +@implementation NSSplitView : CPSplitView +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPSplitView class]; +} + +@end diff --git a/Tools/nib2cib/main.j b/Tools/nib2cib/main.j index 8a822799d..43866e029 100644 --- a/Tools/nib2cib/main.j +++ b/Tools/nib2cib/main.j @@ -30,6 +30,7 @@ import "NSAppKit.j" importClass(java.io.FileWriter); importClass(java.io.BufferedWriter); +CPLogRegister(CPLogPrint); function exec(command) { From 5456bb597be8e408b11cfaff04eb6e3d5ab931fb Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 19 Sep 2008 04:02:07 -0700 Subject: [PATCH 11/17] Performance improvements for CPSplitView. Reviewed by me. --- AppKit/CPSplitView.j | 103 ++++++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 46 deletions(-) diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index 1ff6f56ac..fc9ac630a 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -27,6 +27,7 @@ import "CPView.j" #include "Platform/Platform.h" #include "Platform/DOM/CPDOMDisplayServer.h" + CPSplitViewDidResizeSubviewsNotification = @"CPSplitViewDidResizeSubviewsNotification"; CPSplitViewWillResizeSubviewsNotification = @"CPSplitViewWillResizeSubviewsNotification"; @@ -72,7 +73,6 @@ var CPSplitViewHorizontalImage = nil, _DOMDividerElements = []; - [self setIsPaneSplitter:YES]; [self _setVertical:YES]; } @@ -88,12 +88,14 @@ var CPSplitViewHorizontalImage = nil, { return _isVertical; } + - (void)setVertical:(BOOL)flag { [self _setVertical:flag]; [self adjustSubviews]; } + - (void)_setVertical:(BOOL)flag { _isVertical = flag; @@ -107,9 +109,19 @@ var CPSplitViewHorizontalImage = nil, { return _isPaneSplitter; } -- (void)setIsPaneSplitter:(BOOL)flag + +- (void)setIsPaneSplitter:(BOOL)shouldBePaneSplitter { - _isPaneSplitter = flag; + if (_isPaneSplitter == shouldBePaneSplitter) + return; + + _isPaneSplitter = shouldBePaneSplitter; + +#if PLATFORM(DOM) + _DOMDividerElements = []; +#endif + + [self setNeedsDisplay:YES]; } - (void)didAddSubview:(CPView)subview @@ -124,16 +136,16 @@ var CPSplitViewHorizontalImage = nil, [self _postNotificationWillResize]; - var eachSize = (frame.size[_sizeComponent] - dividerThickness * (_subviews.length - 1)) / _subviews.length; - - var count = [_subviews count] - for (var i = 0; i < count; i++) - { - if ([self isVertical]) - [_subviews[i] setFrame:CGRectMake(Math.round((eachSize + dividerThickness) * i), 0, Math.round(eachSize), frame.size.height)]; - else - [_subviews[i] setFrame:CGRectMake(0, Math.round((eachSize + dividerThickness) * i), frame.size.width, Math.round(eachSize))]; - } + var eachSize = ROUND((frame.size[_sizeComponent] - dividerThickness * (_subviews.length - 1)) / _subviews.length), + index = 0, + count = _subviews.length; + + if ([self isVertical]) + for (; index < count; ++index) + [_subviews[index] setFrame:CGRectMake(ROUND((eachSize + dividerThickness) * index), 0, eachSize, frame.size.height)]; + else + for (; index < count; ++index) + [_subviews[index] setFrame:CGRectMake(0, ROUND((eachSize + dividerThickness) * index), frame.size.width, eachSize)]; [self setNeedsDisplay:YES]; @@ -147,10 +159,10 @@ var CPSplitViewHorizontalImage = nil, - (CGRect)rectOfDividerAtIndex:(int)aDivider { - var frame = [_subviews[aDivider] frame]; + var frame = [_subviews[aDivider] frame], + rect = CGRectMakeZero(); - var rect = CGRectMakeZero(); - rect.size = CPSizeCreateCopy([self frame].size); + rect.size = [self frame].size; rect.size[_sizeComponent] = [self dividerThickness]; rect.origin[_originComponent] = frame.origin[_originComponent] + frame.size[_sizeComponent]; @@ -172,11 +184,10 @@ var CPSplitViewHorizontalImage = nil, - (void)drawRect:(CGRect)rect { - var count = [_subviews count]; - for (var _drawingDivider = 0; _drawingDivider < count-1; _drawingDivider++) - { - [self drawDividerInRect:[self rectOfDividerAtIndex:_drawingDivider]]; - } + var count = [_subviews count] - 1; + + while (count--) + [self drawDividerInRect:[self rectOfDividerAtIndex:count]]; } - (void)drawDividerInRect:(CGRect)aRect @@ -188,22 +199,23 @@ var CPSplitViewHorizontalImage = nil, _DOMDividerElements[_drawingDivider].style.cursor = "move"; _DOMDividerElements[_drawingDivider].style.position = "absolute"; _DOMDividerElements[_drawingDivider].style.backgroundRepeat = "repeat"; + CPDOMDisplayServerAppendChild(_DOMElement, _DOMDividerElements[_drawingDivider]); + + if (_isPaneSplitter) + { + _DOMDividerElements[_drawingDivider].style.backgroundColor = "#A5A5A5"; + _DOMDividerElements[_drawingDivider].style.backgroundImage = ""; + } + else + { + _DOMDividerElements[_drawingDivider].style.backgroundColor = ""; + _DOMDividerElements[_drawingDivider].style.backgroundImage = "url('"+_dividerImagePath+"')"; + } } CPDOMDisplayServerSetStyleLeftTop(_DOMDividerElements[_drawingDivider], NULL, _CGRectGetMinX(aRect), _CGRectGetMinY(aRect)); CPDOMDisplayServerSetStyleSize(_DOMDividerElements[_drawingDivider], _CGRectGetWidth(aRect), _CGRectGetHeight(aRect)); - - if (_isPaneSplitter) - { - _DOMDividerElements[_drawingDivider].style.backgroundColor = "#A5A5A5"; - _DOMDividerElements[_drawingDivider].style.backgroundImage = ""; - } - else - { - _DOMDividerElements[_drawingDivider].style.backgroundColor = ""; - _DOMDividerElements[_drawingDivider].style.backgroundImage = "url('"+_dividerImagePath+"')"; - } #endif } @@ -305,14 +317,11 @@ var CPSplitViewHorizontalImage = nil, } } - else if (type == CPLeftMouseDragged) + else if (type == CPLeftMouseDragged && _currentDivider != CPNotFound) { - if (_currentDivider != CPNotFound) - { - var point = [self convertPoint:[anEvent locationInWindow] fromView:nil]; - - [self setPosition:(point[_originComponent] + _initialOffset) ofDividerAtIndex:_currentDivider]; - } + var point = [self convertPoint:[anEvent locationInWindow] fromView:nil]; + + [self setPosition:(point[_originComponent] + _initialOffset) ofDividerAtIndex:_currentDivider]; } [CPApp setTarget:self selector:@selector(trackDivider:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES]; @@ -393,21 +402,23 @@ var CPSplitViewHorizontalImage = nil, [self _postNotificationWillResize]; - var frame = CGRectCreateCopy([self frame]); + var frame = [self frame]; - var count = [_subviews count]; - for (var i = 0; i < count; i++) + var index = 0, + count = [_subviews count], + dividerThickness = [self dividerThickness]; + + for (; index < count; ++index) { - var view = [_subviews objectAtIndex:i], + var view = _subviews[index], newFrame = CGRectCreateCopy(frame); - if (i + 1 == count) + if (index + 1 == count) newFrame.size[_sizeComponent] = frame.size[_sizeComponent] - newFrame.origin[_originComponent]; else newFrame.size[_sizeComponent] = frame.size[_sizeComponent] * ([view frame].size[_sizeComponent] / oldSize[_sizeComponent]); - frame.origin[_originComponent] += newFrame.size[_sizeComponent]; - frame.origin[_originComponent] += [self dividerThickness]; + frame.origin[_originComponent] += newFrame.size[_sizeComponent] + dividerThickness; [view setFrame:newFrame]; } From a5cc45051eb9f634e5db22498dc8fa3debcc6c3a Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 19 Sep 2008 16:30:55 -0700 Subject: [PATCH 12/17] Fix for borderless windows being resizable. [#61 state:resolved] Reviewed by me. --- AppKit/_CPWindowView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPWindowView.j b/AppKit/_CPWindowView.j index f427f98a5..d9919e143 100644 --- a/AppKit/_CPWindowView.j +++ b/AppKit/_CPWindowView.j @@ -62,7 +62,7 @@ var _CPWindowViewResizeIndicatorImage = nil; { _resizeIndicatorOffset = CGSizeMake(0.0, 0.0); - [self setShowsResizeIndicator:((_styleMask & CPBorderlessWindowMask) || (_styleMask & CPBorderlessBridgeWindowMask)) && (_styleMask & CPResizableWindowMask)]; + [self setShowsResizeIndicator:!((_styleMask & CPBorderlessWindowMask) || (_styleMask & CPBorderlessBridgeWindowMask)) && (_styleMask & CPResizableWindowMask)]; } return self; From d183f6c43470072034094d1f78eb17f4a7495a8c Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 19 Sep 2008 16:44:59 -0700 Subject: [PATCH 13/17] Furhter fix for not showing resize indicator. Reviewed by me. --- AppKit/_CPWindowView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPWindowView.j b/AppKit/_CPWindowView.j index d9919e143..7bbadec51 100644 --- a/AppKit/_CPWindowView.j +++ b/AppKit/_CPWindowView.j @@ -62,7 +62,7 @@ var _CPWindowViewResizeIndicatorImage = nil; { _resizeIndicatorOffset = CGSizeMake(0.0, 0.0); - [self setShowsResizeIndicator:!((_styleMask & CPBorderlessWindowMask) || (_styleMask & CPBorderlessBridgeWindowMask)) && (_styleMask & CPResizableWindowMask)]; + [self setShowsResizeIndicator:!(_styleMask & CPBorderlessBridgeWindowMask) && (_styleMask & CPResizableWindowMask)]; } return self; From a10058fc7f4d3469a462c39ecdbce5cdbe103861 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 19 Sep 2008 20:19:08 -0700 Subject: [PATCH 14/17] Improved Cib Support. Reviewed by ross. --- AppKit/CPDocumentController.j | 12 +++---- AppKit/CPView.j | 2 +- AppKit/Cib/CPCib.j | 3 +- AppKit/Cib/_CPCibCustomObject.j | 2 +- AppKit/Cib/_CPCibKeyedUnarchiver.j | 34 +++++++++++++++++++ AppKit/Cib/_CPCibWindowTemplate.j | 2 +- AppKit/Platform/DOM/CPDOMDisplayServer.j | 4 +-- Tools/NibApp/HelloWorld.nib/info.nib | 5 ++- Tools/NibApp/HelloWorld.nib/keyedobjects.nib | Bin 4015 -> 4087 bytes 9 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 AppKit/Cib/_CPCibKeyedUnarchiver.j diff --git a/AppKit/CPDocumentController.j b/AppKit/CPDocumentController.j index 84fbd9d7a..80edb065b 100644 --- a/AppKit/CPDocumentController.j +++ b/AppKit/CPDocumentController.j @@ -100,18 +100,18 @@ var CPSharedDocumentController = nil; */ - (void)openUntitledDocumentOfType:(CPString)aType display:(BOOL)shouldDisplay { - var document = [self makeUntitledDocumentOfType:aType error:nil]; + var theDocument = [self makeUntitledDocumentOfType:aType error:nil]; - if (document) - [self addDocument:document]; + if (theDocument) + [self addDocument:theDocument]; if (shouldDisplay) { - [document makeWindowControllers]; - [document showWindows]; + [theDocument makeWindowControllers]; + [theDocument showWindows]; } - return document; + return theDocument; } /* diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 8a90392db..481cce508 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -368,7 +368,7 @@ var DOMElementPrototype = nil, [aSubview removeFromSuperview]; - [aView _insertSubview:aView atIndex:index]; + [self _insertSubview:aView atIndex:index]; } /* @ignore */ diff --git a/AppKit/Cib/CPCib.j b/AppKit/Cib/CPCib.j index be630aedb..ee27f538d 100644 --- a/AppKit/Cib/CPCib.j +++ b/AppKit/Cib/CPCib.j @@ -26,6 +26,7 @@ import import "CPCustomView.j" import "_CPCibCustomObject.j" +import "_CPCibKeyedUnarchiver.j" import "_CPCibObjectData.j" import "_CPCibWindowTemplate.j" @@ -51,7 +52,7 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; - (BOOL)instantiateCibWithExternalNameTable:(CPDictionary)anExternalNameTable { - var unarchiver = [[CPKeyedUnarchiver alloc] initForReadingWithData:_data], + var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data], objectData = [unarchiver decodeObjectForKey:CPCibObjectDataKey]; if (!objectData || ![objectData isKindOfClass:[_CPCibObjectData class]]) diff --git a/AppKit/Cib/_CPCibCustomObject.j b/AppKit/Cib/_CPCibCustomObject.j index 56b633c9a..5064784d8 100644 --- a/AppKit/Cib/_CPCibCustomObject.j +++ b/AppKit/Cib/_CPCibCustomObject.j @@ -28,7 +28,7 @@ var _CPCibCustomObjectClassName = @"_CPCibCustomObjectClassName"; [aCoder encodeObject:_className forKey:_CPCibCustomObjectClassName]; } -- (id)awakeAfterUsingCoder:(CPCoder)aCoder +- (id)_cibInstantiate { var theClass = CPClassFromString(_className); diff --git a/AppKit/Cib/_CPCibKeyedUnarchiver.j b/AppKit/Cib/_CPCibKeyedUnarchiver.j new file mode 100644 index 000000000..f962d2be6 --- /dev/null +++ b/AppKit/Cib/_CPCibKeyedUnarchiver.j @@ -0,0 +1,34 @@ + +import + + +@implementation _CPCibKeyedUnarchiver : CPKeyedUnarchiver +{ +} + +- (id)decodeObjectForKey:(CPString)aKey +{ + var object = [super decodeObjectForKey:aKey]; + + if ([object respondsToSelector:@selector(_cibInstantiate)]) + { + var index = [[_plistObject objectForKey:aKey] objectForKey:_CPKeyedArchiverUIDKey], + processedObject = [object _cibInstantiate]; + + if (processedObject != object) + { + object = processedObject; + + [self replaceObjectAtUID:index withObject:processedObject]; + } + } + + return object; +} + +- (void)replaceObjectAtUID:(int)aUID withObject:(id)anObject +{ + _objects[aUID] = anObject; +} + +@end \ No newline at end of file diff --git a/AppKit/Cib/_CPCibWindowTemplate.j b/AppKit/Cib/_CPCibWindowTemplate.j index 7147656aa..dec6bd3c4 100644 --- a/AppKit/Cib/_CPCibWindowTemplate.j +++ b/AppKit/Cib/_CPCibWindowTemplate.j @@ -65,7 +65,7 @@ var _CPCibWindowTemplateMinSizeKey = @"_CPCibWindowTemplateMinSizeKey", [aCoder encodeObject:_windowView forKey:_CPCibWindowTemplateWindowViewKey]; } -- (id)awakeAfterUsingCoder:(CPCoder)aCoder +- (id)_cibInstantiate { var windowClass = CPClassFromString(_windowClass); diff --git a/AppKit/Platform/DOM/CPDOMDisplayServer.j b/AppKit/Platform/DOM/CPDOMDisplayServer.j index 0e34fef89..b2338c339 100644 --- a/AppKit/Platform/DOM/CPDOMDisplayServer.j +++ b/AppKit/Platform/DOM/CPDOMDisplayServer.j @@ -133,7 +133,7 @@ CPDOMDisplayServerViewsContext = {}; CPDOMDisplayServerInstructions[index++] = nil; break; - }}catch(e) { alert("here?" + instruction) } + }}catch(e) { CPLog("here?" + instruction) } } CPDOMDisplayServerInstructionCount = 0; @@ -155,7 +155,7 @@ CPDOMDisplayServerViewsContext = {}; [view displayIfNeeded]; } } - + [CPDOMDisplayRunLoop performSelector:@selector(run) target:CPDOMDisplayServer argument:nil order:0 modes:[CPDefaultRunLoopMode]]; } diff --git a/Tools/NibApp/HelloWorld.nib/info.nib b/Tools/NibApp/HelloWorld.nib/info.nib index b8f7650f5..d92bee152 100644 --- a/Tools/NibApp/HelloWorld.nib/info.nib +++ b/Tools/NibApp/HelloWorld.nib/info.nib @@ -7,7 +7,10 @@ IBOldestOS 5 IBOpenObjects - + + 1 + 10 + IBSystem Version 9F33 targetFramework diff --git a/Tools/NibApp/HelloWorld.nib/keyedobjects.nib b/Tools/NibApp/HelloWorld.nib/keyedobjects.nib index 3ad8add67f8afcdbeae4c98d4699dbea7bfd30f6..acebe2aa01ffb8ede7a87325d27929eefad4d8cf 100644 GIT binary patch delta 2371 zcma)7dw5M(7GLYU_dZ+Pkcd}Ayh%eZ^=c4Fh*uJictui8$Q6QwNTgo5tJJGTiBn^| z+DK4DsYkWup=cG=Y8m6v&$MQ~nW?nmO;nlAzV}W#zL|gK?C(2!pL^E&t>60X-#&M5 zL`}r%$=(TIg8(;lg>KLbdP4$?fw7PVsonPuo#oU36h6Ho!=1 zm58meEq2B}I2eau5+-8`4#ia_1#d$a%7hnl`k?>Vqh>P$w7>SE<2`o0DPCvC$ z4X38gUA0&EB}j)L$bgq%ylnqv$b>AI023iwt|mDNTIa#(DXFPNGdu;er+A7vO5~pS5%%YH%ecOTm zqWVs(5!!qsY$}IM5F;ZK^YaRaormtw1Kx(RtxyJAV7gOiv=9}rbsKDjZLl5QamtO3 z)=t<}0lT2mxomW>_Q3WE{~K;b8v9^>IqY}bW|a3Jq`)B<2E$?W=)vpN%a(tl8t!^Yo$Ly z4Y$Fka1u_zY50sHXnOI2#I5r=d;w?SOS$n8aNfCYHgDQi8bF~oql>5HW#<ih{VR=`ELk*ktw-wl{(1qAZnkMUy$u77+O^LVj$yNxK;tzWX1xknYXq` zye#r}YD>*zf#))2c_!xPWsmWf@o}k*s*+JZ$f%Aos%OA2wdU(A?N<#q;g)pEZMnJ& z_ox%~py#QpoV!!E+MXZ!>{dhWD?atQ!n1z+5vru)p1@PT1r^^j=VSn_vE2ix?ETGM*_q21`6|Z(p`(C@D-PCStceMxFL+z3FSP#+r>%;XNeZIaz->mP@ z_v=UX^ZK`Xwf<0lq(9c5=>IgpPz=p53}yrwVMZ&XtI^9yFp`WEV~mkzq#KisnZ|5m zfl*>CHC7v&ja|k8fo{$^Ag_f6HbO>YA;!fa#4ngh*bGt*pdt}s`ctISf< zG1r>w%pK+~bGNz2{J=b7o-xmvUz=CW@60Om2eaC|W!|wA%VjmPBCVEIYpbo*-g@5Z zY4x?nSd*+`YmPO~T3~st<<=T&y|vFeZhc~XYMrt^vo2ZJt?#WH)=lfSmj$!>ER=<@ zMyv@7XA!I&>%gK}CpMCeV;O8b%VZPSMCM^RYzkY%4zfe+L-t$tdv=5!WuLQ4>>8_L z57|##@F4Eu^>_$x&fD`S-i!C)eR(|Z#}oNLKA0!*QG5(f<2if=FXAPfcqw=I)U|va zU(Yx4&HQb?h413K`A7U1|CpcPC;4f9hJV4oPwW%+S^F!y+P-DqvG3Ur>>4MoZvC0{M2K*U zE~2aGE_#X>(ObldIFTUwivePg7$TCzXfald6B%N>$P^PqwwNR)i(D~H=4-7QVN(SM}gp6CeQs64Js1S%Z?L35}43EQGzUfU>Uz z0yBe15;Qn0qQ^mGRRjbV1OhS{;GpBlK?h-2lmUj5dEGsk;W&S$-Z}NEs_*^ocfa?& z*Y{#~$F80jcoA$6&>5bEWatGc&<{q!C>RZ6ARi_|36#PLSP8Gg2KXKP9=5?zTI+o!KoQbn=HqODhI1h$n00|f1 zYq;e7j`%XR97o;hIm)J1ltMZUqQTUg#t@J}y=bf}hBBOe$`anP98w{T7)3kdSu-bB zU9U#bQ_cgmSJU$_78*b{jDr^;9>zls>mtOu|S~=C(eEJ^n!22*1hQV*)PcR%_fOv|b zD0-SK;?#nmIwWJg^0}}-BzbI@!a+Dx0f*qQbAUw^c;ORjz73ATr*I68!wG6lanzpT zDY;szc@j>+=kSGG<5)O7&Xd*OTU_ER%qj8t3#AfS{?ej6??_M9kepoaWNIsIpir9; zWxm3Ee_6QJSvXe#=b+l@Z63SU`QD=EOG|o&GcLj93b-sY zHkdJi`ub_I{&%uKv@FmeyV#rOFU%hqD)TtYS{ZdsMkUCoXD>Wvza(kEzrl6sqMzV~ zl%gwjq$KK6Z@ybW^WCPzUz@MCxpdzza4+aSsFkqIs1rS7QG(;MqTThX>95-@bx+-9{18E0Ma54e6C$ zBrPQsle-5a(M9emsKrLXy(qQaBWq?#x;=vXQfeGSiDU<3lb{Pmkw!h`QU+3|PMz$_ z3$0~Hd5nRoa;O4#J!;D!YV5y9rbMoVRHO*}gmC~pm^``-pP6HjZ-wQ-yCb{3NuQl|s=PYvXf@8At zG&mtUKQ4Pe8ssTie;QJuy;LEZlBEj4Ez&y3S#}UtuSk$fzQjN;PQU`3h(4SoPru1H z1q;!SQ*jy=5gS68`lqShbW;W^ z*~)aO{0e22vPN;7pG0inBjvdAnQ}_GsC=vZsQj!vP%X8Q+Ez_ed#G-;ubQUzSEs16 z)J5`8-lFbQKT^L?ud3J88|vTH+v;8QzWPvoq}FMusalNIR!h|SX)kEwHJ?_hm1#4z z+1fmfv?bayZKbwa+o^q^9ng+zXSHhWf_71>322wKE811NU#V}@ z-_k$SkLl<1OZpZ4s{Wn+yj>o@hg`XhrIQAR7Hy^&;eHByW|Myla4MjF{h zo{?`%F{T>}jMc^_qte)E>@^MMBJ0A^S-{Vxv0_%r%GgXc zo6Th_*=n|ytz(;6CELUHvLoyh_9Z*b&aiXrJo|=SW52LElbM!jn-OND+02YJhHOt0xTXP5zVgIQ(1W9~3_neUnh&9BU_&9i2;dBMDC-ZJl)Kb!Z=`<4>0 zG>ci56=$`xI#>x-qSeXjY-Lz;ta%n$^R0!}Yt~|GowdcPvi4YqtfN-7b-}u5)mWFT zYt}964%fKBP0qRC4Y-Rp;!Su99?M(uPP{u$;pu!3AI-<|ar`Bo!}GY87jPdh;w5|$ zU&5F1zzV*Kui*|~&o}T*yqs6^y?h_v&kyp${9}HUALA$ZNq(Mx%Wv3VH?h0f>Gnjs z)ShRP{ffQRUT&|jU$-~fAJ}{CefEC)pncf>*gk3>vrpJ3?a%Em?bG%dyT-m`-?tyy zkL)^uLKV7T!VqK_rMo@r+0kT}86!BT_}0$Pk&r bBSwnRVvNWW6T| Date: Fri, 19 Sep 2008 20:55:07 -0700 Subject: [PATCH 15/17] Removed some unecessary code with the last update. Reviewed by me. --- Tools/nib2cib/NSCustomObject.j | 6 ------ Tools/nib2cib/NSWindowTemplate.j | 5 ----- 2 files changed, 11 deletions(-) diff --git a/Tools/nib2cib/NSCustomObject.j b/Tools/nib2cib/NSCustomObject.j index 62891fdb3..58b5f600c 100644 --- a/Tools/nib2cib/NSCustomObject.j +++ b/Tools/nib2cib/NSCustomObject.j @@ -31,10 +31,4 @@ import return [_CPCibCustomObject class]; } -- (id)awakeAfterUsingCoder:(CPCoder)aCoder -{ - print("awaking from coder..."); - return self; -} - @end \ No newline at end of file diff --git a/Tools/nib2cib/NSWindowTemplate.j b/Tools/nib2cib/NSWindowTemplate.j index a87338805..9a8b7b2e7 100644 --- a/Tools/nib2cib/NSWindowTemplate.j +++ b/Tools/nib2cib/NSWindowTemplate.j @@ -46,11 +46,6 @@ import return [self NS_initWithCoder:aCoder]; } -- (id)awakeAfterUsingCoder:(CPCoder)aCoder -{ - return self; -} - - (Class)classForKeyedArchiver { return [_CPCibWindowTemplate class]; From 464ddf269df1669d6d9d324e5bd779e1e06d373d Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 21 Sep 2008 02:52:24 -0700 Subject: [PATCH 16/17] A number of fixes for Cib. Reviewed by rossco. --- AppKit/CPDocument.j | 4 +- AppKit/CPDocumentController.j | 39 +++- AppKit/CPResponder.j | 2 +- AppKit/CPView.j | 5 + AppKit/Cib/CPCustomView.j | 64 +++--- AppKit/Cib/_CPCibKeyedUnarchiver.j | 33 +-- AppKit/Cib/_CPCibObjectData.j | 19 +- Foundation/CPString.j | 2 +- Tools/NibApp/HelloWorld.nib/info.nib | 1 - Tools/NibApp/HelloWorld.nib/keyedobjects.nib | Bin 4087 -> 4049 bytes Tools/NibApp/HelloWorld.xib | 215 ++++++++++--------- 11 files changed, 213 insertions(+), 171 deletions(-) diff --git a/AppKit/CPDocument.j b/AppKit/CPDocument.j index 2e53ce40a..cff5335eb 100644 --- a/AppKit/CPDocument.j +++ b/AppKit/CPDocument.j @@ -200,7 +200,7 @@ var CPDocumentUntitledCount = 0; - (CPData)dataOfType:(CPString)aType error:({CPError})anError { [CPException raise:CPUnsupportedMethodException - reason:"This method must be overridden by the document"]; + reason:"dataOfType:error: must be overridden by the document subclass."]; } /* @@ -215,7 +215,7 @@ var CPDocumentUntitledCount = 0; - (void)readFromData:(CPData)aData ofType:(CPString)aType error:(CPError)anError { [CPException raise:CPUnsupportedMethodException - reason:"This method must be overridden by the document"]; + reason:"readFromData:ofType: must be overridden by the document subclass."]; } // Creating and managing window controllers diff --git a/AppKit/CPDocumentController.j b/AppKit/CPDocumentController.j index 80edb065b..dc2c04e33 100644 --- a/AppKit/CPDocumentController.j +++ b/AppKit/CPDocumentController.j @@ -137,9 +137,11 @@ var CPSharedDocumentController = nil; var result = [self documentForURL:anAbsoluteURL]; if (!result) - // FIXME: type(!) - result = [self makeDocumentWithContentsOfURL:anAbsoluteURL ofType:[[_documentTypes objectAtIndex:0] objectForKey:@"CPBundleTypeName"] delegate:self didReadSelector:@selector(document:didRead:contextInfo:) contextInfo:nil]; - + { + var type = [self typeForContentsOfURL:anAbsoluteURL error:anError]; + + result = [self makeDocumentWithContentsOfURL:anAbsoluteURL ofType:type delegate:self didReadSelector:@selector(document:didRead:contextInfo:) contextInfo:[CPDictionary dictionaryWithObject:shouldDisplay forKey:@"shouldDisplay"]]; + } else if (shouldDisplay) [result showWindows]; @@ -200,6 +202,9 @@ var CPSharedDocumentController = nil; [self addDocument:aDocument]; [aDocument makeWindowControllers]; + + if ([aContextInfo objectForKey:@"shouldDisplay"]) + [aDocument showWindows]; } /* @@ -240,6 +245,34 @@ var CPSharedDocumentController = nil; [_documents removeObjectIdenticalTo:aDocument]; } +- (CPString)defaultType +{ + return [_documentTypes[0] objectForKey:@"CPBundleTypeName"]; +} + +- (CPString)typeForContentsOfURL:(CPURL)anAbsoluteURL error:(CPError)outError +{ + var index = 0, + count = _documentTypes.length, + + extension = [[anAbsoluteURL pathExtension] lowercaseString]; + + for (; index < count; ++index) + { + var documentType = _documentTypes[index], + extensions = [documentType objectForKey:@"CFBundleTypeExtensions"], + extensionIndex = 0, + extensionCount = extensions.length; + + for (; extensionIndex < extensionCount; ++extensionIndex) + if ([extensions[extensionIndex] lowercaseString] == extension) + return [documentType objectForKey:@"CPBundleTypeName"]; + } + + // FIXME? + return [self defaultType];//nil; +} + // Managing Document Types /* @ignore */ diff --git a/AppKit/CPResponder.j b/AppKit/CPResponder.j index 34e177677..406dbb43e 100644 --- a/AppKit/CPResponder.j +++ b/AppKit/CPResponder.j @@ -301,7 +301,7 @@ var CPResponderNextResponderKey = @"CPResponderNextResponderKey"; */ - (id)initWithCoder:(CPCoder)aCoder { - self = [self init]; + self = [super init]; if (self) _nextResponder = [aCoder decodeObjectForKey:CPResponderNextResponderKey]; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 481cce508..c6ff80a1c 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -161,6 +161,11 @@ var DOMElementPrototype = nil, _CPViewNotificationCenter = [CPNotificationCenter defaultCenter]; } +- (id)init +{ + return [self initWithFrame:CGRectMakeZero()]; +} + /* Initializes the receiver for usage with the specified bounding rectangle @return the initialized view diff --git a/AppKit/Cib/CPCustomView.j b/AppKit/Cib/CPCustomView.j index e1755d2b5..c0c70fce2 100644 --- a/AppKit/Cib/CPCustomView.j +++ b/AppKit/Cib/CPCustomView.j @@ -22,17 +22,6 @@ import "CPView.j" -var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", - CPViewAutoresizesSubviewsKey = @"CPViewAutoresizesSubviews", - CPViewBackgroundColorKey = @"CPViewBackgroundColor", - CPViewBoundsKey = @"CPViewBoundsKey", - CPViewFrameKey = @"CPViewFrameKey", - CPViewHitTestsKey = @"CPViewHitTestsKey", - CPViewIsHiddenKey = @"CPViewIsHiddenKey", - CPViewOpacityKey = @"CPViewOpacityKey", - CPViewSubviewsKey = @"CPViewSubviewsKey", - CPViewSuperviewKey = @"CPViewSuperviewKey", - CPViewWindowKey = @"CPViewWindowKey"; /* @ignore */ @@ -49,8 +38,23 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; - (id)initWithCoder:(CPCoder)aCoder { - _className = [aCoder decodeObjectForKey:_CPCibCustomViewClassNameKey]; + self = [super initWithCoder:aCoder]; + + if (self) + _className = [aCoder decodeObjectForKey:_CPCibCustomViewClassNameKey]; + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + [aCoder encodeObject:_className forKey:_CPCibCustomViewClassNameKey]; +} + +- (id)_cibInstantiate +{ var theClass = CPClassFromString(_className); // If we don't have this class, just use CPView. @@ -62,37 +66,31 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; theClass = [CPView class]; } - var frame = [aCoder decodeRectForKey:CPViewFrameKey]; - - self = [[CPView alloc] initWithFrame:frame]; + var view = [[theClass alloc] initWithFrame:[self frame]]; - if (self) - { - [self _setWindow:[aCoder decodeObjectForKey:CPViewWindowKey]]; + if (view) + { + [view setBounds:[self bounds]]; // Since the object replacement logic hasn't had a chance to kick in yet, we need to do it manually: - var subviews = [aCoder decodeObjectForKey:CPViewSubviewsKey], + var subviews = [self subviews], index = 0, count = subviews.length; for (; index < count; ++index) - { - // This is a bogus superview "_CPCibCustomView". - subviews[index]._superview = nil; - [self addSubview:subviews[index]]; - } - - _autoresizingMask = [aCoder decodeIntForKey:CPViewAutoresizingMaskKey]; - _autoresizesSubviews = [aCoder decodeBoolForKey:CPViewAutoresizesSubviewsKey]; - - _hitTests = [aCoder decodeObjectForKey:CPViewHitTestsKey]; - _isHidden = [aCoder decodeObjectForKey:CPViewIsHiddenKey]; - _opacity = [aCoder decodeIntForKey:CPViewOpacityKey]; + [view addSubview:subviews[index]]; + + [view setAutoresizingMask:[self autoresizingMask]]; + [view setAutoresizesSubviews:[self autoresizesSubviews]]; - [self setBackgroundColor:[aCoder decodeObjectForKey:CPViewBackgroundColorKey]]; + [view setHitTests:[self hitTests]]; + [view setHidden:[self isHidden]]; + [view setAlphaValue:[self alphaValue]]; + + [view setBackgroundColor:[self backgroundColor]]; } - return self; + return view; } @end diff --git a/AppKit/Cib/_CPCibKeyedUnarchiver.j b/AppKit/Cib/_CPCibKeyedUnarchiver.j index f962d2be6..3776cc5a8 100644 --- a/AppKit/Cib/_CPCibKeyedUnarchiver.j +++ b/AppKit/Cib/_CPCibKeyedUnarchiver.j @@ -6,24 +6,22 @@ import { } -- (id)decodeObjectForKey:(CPString)aKey +- (id)initForReadingWithData:(CPData)data { - var object = [super decodeObjectForKey:aKey]; + self = [super initForReadingWithData:data]; - if ([object respondsToSelector:@selector(_cibInstantiate)]) - { - var index = [[_plistObject objectForKey:aKey] objectForKey:_CPKeyedArchiverUIDKey], - processedObject = [object _cibInstantiate]; - - if (processedObject != object) - { - object = processedObject; - - [self replaceObjectAtUID:index withObject:processedObject]; - } - } + if (self) + [self setDelegate:self]; - return object; + return self; +} + +- (id)unarchiver:(CPKeyedUnarchiver)aKeyedUnarchiver didDecodeObject:(id)anObject +{ + if ([anObject respondsToSelector:@selector(_cibInstantiate)]) + return [anObject _cibInstantiate]; + + return anObject; } - (void)replaceObjectAtUID:(int)aUID withObject:(id)anObject @@ -31,4 +29,9 @@ import _objects[aUID] = anObject; } +- (id)objectAtUID:(int)aUID +{ + return _objects[aUID]; +} + @end \ No newline at end of file diff --git a/AppKit/Cib/_CPCibObjectData.j b/AppKit/Cib/_CPCibObjectData.j index 0e43193ab..736d18265 100644 --- a/AppKit/Cib/_CPCibObjectData.j +++ b/AppKit/Cib/_CPCibObjectData.j @@ -58,27 +58,30 @@ import "_CPCibConnector.j" CPSet _visibleWindows; } -/* + - (CPArray)topLevelObjects { - var count = [_objectsValues count]; - + var count = [_objectsValues count], + topLevelObjects = []; + var str = ""; + str2 = " "; while (count--) - { + {str2 += _namesValues[count] +"\n"; var eachObject = _objectsValues[count]; - if(eachObject == _fileOwner) + if (eachObject == _fileOwner) { var anObject = _objectsKeys[count]; if (anObject != _fileOwner) - topLevelObjects.push(anObject); + {str += _namesValues[count] + "\n"; + anObject.realname = _namesValues[count];str2+='X'+'\n'; + topLevelObjects.push(anObject);} } } - + alert(str2+'\n'+str); return topLevelObjects; } -*/ @end diff --git a/Foundation/CPString.j b/Foundation/CPString.j index efa7c7ecb..691a9ee1b 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -469,7 +469,7 @@ CPNumericSearch */ - (CPString)pathExtension { - return substr(lastIndexOf('.')+1); + return substr(lastIndexOf('.') + 1); } - (CPString)lastPathComponent diff --git a/Tools/NibApp/HelloWorld.nib/info.nib b/Tools/NibApp/HelloWorld.nib/info.nib index d92bee152..e6ff1f2ef 100644 --- a/Tools/NibApp/HelloWorld.nib/info.nib +++ b/Tools/NibApp/HelloWorld.nib/info.nib @@ -9,7 +9,6 @@ IBOpenObjects 1 - 10 IBSystem Version 9F33 diff --git a/Tools/NibApp/HelloWorld.nib/keyedobjects.nib b/Tools/NibApp/HelloWorld.nib/keyedobjects.nib index acebe2aa01ffb8ede7a87325d27929eefad4d8cf..44157a897a5362ecf97855233c68e2cfee0e805d 100644 GIT binary patch delta 2616 zcma)7X;c(f7QVOkdiBskz$A)*VnoCRagB%yC=!=;K~WS%z!qCu8k$BFmwt>o#uybX zMf4a)0gX-~i5lam87F5#OeT|=#BB)TGDeA$Wim-lCQ;)uue%S#{F|zC>Q&Xb@4Mgo z?swn&De`<|USwE-zri)Q z7T4hmxDhuW?}Ll6YYrR6#N-4};PUxL}t4zghm#6b?sgWMdmy)DCLU*?%=FDY^r&bPa*A}Opp z#|#QaV06}sfkWeaM0g6pq!wF*puhYqQcV z^8~zg0N#R=0o^%zN~y==D$KHFr1Cj#moqTy6r8Sw({Kh7=h`wRmU?pYoc3h5J9jzP z$3F(b{s?Dl;Vk^gdRy)6Er&m|hy(C0G{Ads4&G$3AuT8CwrDVPGH@$OYHgFNHZLT^Ic_uj2GZy zEnI|4keFkJa)}&ylS(~KyC>CUP1ZVjTeCFsEKM9HhQlO$`h-!kAc2>>8Lq-LUhwPu z?VoUy^<@27EbGh1c-F7gFSmVuX<@yZe&v@eKK%|fa?gATU->=L%)kCK-Ig&ew;+fo z?84$$Z=FNMSOt1S;{W53|8kGC1U$mHKlt5;d!v{2jvhW4euf8i@E}mHY+k0)5|3+1 zCO70XpDTZn_A#WuN)*^2X0lK=Fw5oU9mvHQ<`)iSRBBOyOV&;;qD`h0h(v?SWOA8? zWS04L{xxC?2Ky0vvFB#{5!2kovMP)aE6)h`W-Z`- zneQmccg;>NdSbBw(WbJbeXaDTKk+`3CDrrR@h!W73+a=!5#HwwbuO?h-b_9TdT>#F z634Kiyu}6w7TAjC;20RWi0|-DT!Mw@!Xhk2HM63kQr`*kcfOJ17ObqnN^39e85hgXr*eMc zynt1B2pjMMUdJ!-t{@7*LLVVfunF^oa$&8oRj{mo(`fHm;X~mg;qSs#p+)#cxFL$fX2~w&wU79N`lAKbZR4kQ9tEKhQW@(4CUpg(lD}5j}%aW|fnoMLWxAV%T+(C|! z6Xb#NV0oxKOiq=@$m#Mpxj=TwOJyd%ByW~0hL)zo0M zquND{P`xo~yqctrQ!~`LYJpm;ma7$NrCP1-R}ZNt)H7;>dQLsBUQ{oujcSwHtbVQD z*F??Gg0%Kpuoj|4X|Y=~ zYE4?Rc1^pX-PAtQZfl=w|MKdBK0qI&57D2~6ZIs0q&{BH)N}NOdZ}KnZ`3#GTlB5E zrN68n)Q{-z>Hp9_)vxGR_3L_z{-b_Zzpp>g9}z-ANEqosdXiqGH|a~_Ndg&229uE_ znWT~_WEROG3&|p~f~+E5QbE>`b!0u+KsFNZc2Y$SlUK?niHO3eVjWVOc*kn{0)y6KP#;7w681=>*#@~#O zjq}DujPH#fXfO?-Ve~2b4DFmpyUlLa9#;?}^} I`lMU_2LnywjsO4v delta 2688 zcma)8X;c(f7QVNtx|UZ@Y}^$UT#+a$?gkYBK~!j!RuI93r9}t=LL=^dqj8I46g!UN zmLRBcizaGJoS9?P#3eB?!Es!2oQX4MvJk~xaGlKS?qHnEpQ(3Fy<1gx{qA>PcU53r z;F{^K3^0L181#jHFbD=iG$g|WNP&sseKx!Tr7#=TKpAX+jj#pYf(qCPd&ReRVL!YF z2Zi>Z#Pfdm7(Ris@E5oMm*H>lclZZ<4?n;Sp?M!3qJ%OsG{w^n~76l+79-R79>Omq|%7UX9+iYD6Z_L7WQ zIgZle2{!wz*u3=Y;#8YGwkUmu!=5wOA!K_=p`*y7L7W1pfjjWl!W7$b%Uoc)mAy0u;hbD1u^eitq`^zc@~^*`pnKc_}t~On!Pso+FD)YEBKw z>W|zIu1)twOY0tUg#WoP59Y%HSO_j4coi1GVt5Ufz*1NS%f)`jW9{wOgd&&}g*hHzmSTafP@<9quyly8G_*a|b;-L>{nm9T9) zY=iBv1Kxpf;XSIv=`6?>g+>dTqJlhOog|PHs6Ow2&(SW}T?xBkkK3iS4462t&w!rY zf_nAuxxn{zAMB{~`E+kp0@e57Km{CdpHjNI4uK60!x$I~iEsqQ!FcFOLDYuYlR=CE zNf6n?2M-&%3MOR2Q9+~tYUlHN431aAaX10tX*PR8iPO^zyTdtNfaGx2_xB{V*bb-Q zG@OCY;B)FkU8pOC(#scw-v(d6mv9cg5>yO?^X?m3Q0rhpNr^fqmFDDU6_ono{1q-% z!bP~`?yh$W^_g4|Cb@8xUJ~kl6p~U0P0D7 z#onL#)z@6>;dC8^UGbpT`@cB-2&x6EpTaXQt81VdQQ$Q$JzE59PQ9qNAzXELf3LR< z|34UvnqY99kHI9^D^?%D+%R{9(b|O#&~F?1`8qE;6kSs6ESTXT&^XUL{#vvL%sOo1 z1v8AoQ@vou775M?IK`A=b8JBoJ4LRoJcot={*VZoATl28IY2}Mf+&nkk8UsMjU7m# zA(Lz_dt_l@UQTAZGp8Wm+ZOB$dn#ZLgx7lw@pujVWhDsD)etFQ_bpR+?oL|0ZXb%+ z<;@`Qe{zt1n}sLip)O&7kr;*1I1FPj7KdXTj-Y57Mllpi!zqqN&`27U>cb_-J6SKJ zoEDpt=Ljwi8eN+2C=y4Xk19c3e0#_gtN(A_goaJA1|=4hUXW8MVxK@ZN=!+vn3F?dP6Q4Dl{zsq31Vgj3nV%Tl)DI=Lp_)Xgu=uW zne@Crc^)4#FdqxB5NBc$7NZkOa2A%LYc|foxip5xQX<)D9F3e!G_7?{FjT#WQ#j|A{y8sia9wr7$T%N|dssh0=0&74P8s zP&y)=kj_b8OXsC)QnhqfdL~PGBE1^n1#jZG%LS>G!L@86;$~tAevQgQryrq;YyOcf3 zKIJ{7O1Yw3Q+{$OH%Sy`@%TCJy%Q4G&%eR&q zOReRh<+0_d<=-l(lB%exYN&o{bG4(|R~@8AtMRH$O;%IXRCT&KQ=O$QP#3Dp)HUiB zb+>v@J*u8otJKTtztkG_z9ws?)=Uf3T%ENDElx|&rfMs+mD(z8wN|FNwRPHhZKt+d z+pF!`V3)t76}<`UiTTX@nIo6Eg=^g4 zjd&9tmdAVZzPvvl$iw+y9>F7dG>_rK`3OFWC-5XbfluUVd@`TPGk6xC#;5aKp2zcf kDWAjV^2K}!U&>eWGQO5?;^n?S1(M|3@lD@ef9L!E18 YES - + YES - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin YES @@ -41,7 +41,7 @@ -2080244224 134217728 - Round Rect Button + Round Rect Button LucidaGrande 1.200000e+01 @@ -133,7 +133,7 @@ -2080244224 134217728 - Round Rect Button + -2038152961 @@ -297,6 +297,7 @@ + Francisco 15 @@ -362,28 +363,28 @@ YES - - - - + + + + {628, 654} {{319, 416}, {480, 272}} - - - com.apple.InterfaceBuilder.CocoaPlugin - {{196, 240}, {480, 270}} - - {{196, 240}, {480, 270}} - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - + + + {{196, 240}, {480, 270}} + + + + + + + + + + + + @@ -438,7 +439,7 @@ IBUserSource - + @@ -448,90 +449,90 @@ 3 YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxB2AAsADAAxADUANgA7ADwA +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxB1AAsADAAxADUANgA7ADwA 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 +CwBmANAA1ADbAOMA5ADoAO0A9QD9AAsA/gEFAQYBCQEOAQ8BFAEZASEBIgE2ATkBOgE9AUAACwBkAUEB +RAFFAVYBWQFaAVwBbQF/AZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABowGmAbwB0gHTAdQB +1QHWAdcB2AEuAdkAVAHaAdsB3AHdAd4B3wHgAK0B4QHiAeUB6AHrVSRudWxs3xASAA0ADgAPABAAEQAS +ABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAw +Vk5TUm9vdFYkY2xhc3NdTlNPYmplY3RzS2V5c18QD05TQ2xhc3Nlc1ZhbHVlc18QGU5TQWNjZXNzaWJp +bGl0eU9pZHNWYWx1ZXNdTlNDb25uZWN0aW9uc1tOU05hbWVzS2V5c1tOU0ZyYW1ld29ya11OU0NsYXNz +ZXNLZXlzWk5TT2lkc0tleXNdTlNOYW1lc1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eUNvbm5lY3RvcnNd +TlNGb250TWFuYWdlcl8QEE5TVmlzaWJsZVdpbmRvd3NfEA9OU09iamVjdHNWYWx1ZXNfEBdOU0FjY2Vz +c2liaWxpdHlPaWRzS2V5c1lOU05leHRPaWRcTlNPaWRzVmFsdWVzgAKAdIBEgFuAc4AogEmABYBagFyA +SoBxgACABoBIgHIQHIBd0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA1hOU09iamVjdNIANwA4ADkAOlgk +Y2xhc3Nlc1okY2xhc3NuYW1logA6ADVeTlNDdXN0b21PYmplY3RfEBBJQkNvY29hRnJhbWV3b3Jr0gAO +AD0APgA/Wk5TLm9iamVjdHOAJ6IAQABBgAeAENoAQwAOAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAA +UQBSAFMAVAArXE5TV2luZG93Vmlld1xOU1NjcmVlblJlY3RdTlNXaW5kb3dUaXRsZVlOU1dURmxhZ3Nd +TlNXaW5kb3dDbGFzc1xOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tpbmdfEBFOU1dpbmRvd1N0eWxl +TWFza1tOU1ZpZXdDbGFzc4ALgA+ADoAJEiQAAACACoAIEAIQD4AAXxAYe3sxOTYsIDI0MH0sIHs0ODAs +IDI3MH19VldpbmRvd1hOU1dpbmRvd9QAWgAOAFsAXAArAF4AXwBgXxAPTlNOZXh0UmVzcG9uZGVyWE5T +dkZsYWdzW05TRnJhbWVTaXplgACADREBAIAMWns0ODAsIDI3MH3SADcAOABjAGSjAGQAZQA1Vk5TVmll +d1tOU1Jlc3BvbmRlcl8QFnt7MCwgMH0sIHsxNjgwLCAxMDI4fX3SADcAOABoAGmiAGkANV8QEE5TV2lu +ZG93VGVtcGxhdGXaAEMADgBEAEUARgBHAEgASQBKAEsAawBNAG0ATwBQAFEAcABTAFQAK4ASgA+AJoAJ +gAqAEYAA1wBaAA4AcwBbAFwAWAB0AHUAXgB3AF8AeAB1AHpaTlNTdWJ2aWV3c1tOU1N1cGVydmlld4AT +gA2AFIAkgBOAJdIADgA9AHwAfYAjogB+AH+AFYAf2ABaAA4AgQCCAFsAgwBYAHQAawCFAIYAhwCIAIkA +dQBrV05TRnJhbWVWTlNDZWxsWU5TRW5hYmxlZIASgB6AFoAXEQEMCYATgBJfEBd7ezE0NSwgMTEzfSwg +ezE1NCwgMTl9fdwAjgAOAI8AkACRAJIAkwCUAJUAlgCXAJgAmQCaAJsAnACdAJsAnwCgAH4AogCjAKRb +TlNDZWxsRmxhZ3NfEBNOU0FsdGVybmF0ZUNvbnRlbnRzXxASTlNQZXJpb2RpY0ludGVydmFsXk5TQnV0 +dG9uRmxhZ3MyXxAPTlNLZXlFcXVpdmFsZW50Wk5TQ29udGVudHNZTlNTdXBwb3J0XU5TQ29udHJvbFZp +ZXdfEA9OU1BlcmlvZGljRGVsYXlcTlNDZWxsRmxhZ3MyXU5TQnV0dG9uRmxhZ3MT/////4QB/gCAHYAc +EEsQpIAcgBiAGYAVEQGQEggAAAAT/////4aEQP9WeWlrZXMh1AAOAKcAqACpAKoAqwCsAK1WTlNTaXpl +Vk5TTmFtZVhOU2ZGbGFnc4AbI0AoAAAAAAAAgBoQEFxMdWNpZGFHcmFuZGXSADcAOACwALGiALEANVZO +U0ZvbnRQ0gA3ADgAtAC1pAC1ALYAggA1XE5TQnV0dG9uQ2VsbFxOU0FjdGlvbkNlbGzSADcAOAC4ALml +ALkAugBkAGUANVhOU0J1dHRvbllOU0NvbnRyb2zYAFoADgCBAIIAWwCDAFgAdABrAIUAvgC/AIgAiQB1 +AGuAEoAegCCAIQmAE4ASXxAVe3swLCAyNTF9LCB7MTU0LCAxOX193ACOAA4AjwCQAJEAkgCTAJQAlQCW +AJcAmACZAJoAmwCcAJ0AmwDIAKAAfwCiAKMApIAdgByAHIAigBmAH18QEVJvdW5kIFJlY3QgQnV0dG9u +0gA3ADgAzQDOowDOAM8ANV5OU011dGFibGVBcnJheVdOU0FycmF50gA3ADgA0QDSowDSANMANVxOU011 +dGFibGVTZXRVTlNTZXTSAA4APQB8ANaAI6QA1wDYANkA2oApgCyANIA21AAOANwA3QDeAN8AQQAfAOJd +TlNEZXN0aW5hdGlvblhOU1NvdXJjZVdOU0xhYmVsgCuAEIACgCpWd2luZG930gA3ADgA5QDmowDmAOcA +NV8QFE5TTmliT3V0bGV0Q29ubmVjdG9yXk5TTmliQ29ubmVjdG9y1AAOANwA3QDeAOkAQQDrAOyAM4AQ +gC2AMtgAWgAOAIEAggBbAIMAWAB0AO4AhQDwAPEAiACJAPMA7oAugB6AL4AxCYAwgC7YAFoADgBzAFsA +XABYADIAdADzAPcA+ACIAPkA8wD7APyAMIBCgDeAP4AwgEGAQF8QF3t7MTU3LCAxMTB9LCB7MTU0LCAx +OX193ACOAA4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwCcAJ0AmwDIAKAA6wCiAKMApIAdgByAHIAi +gBmALVtvcmRlckZyb250OtIANwA4AQcBCKMBCADnADVfEBVOU05pYkNvbnRyb2xDb25uZWN0b3LUAA4A +3ADdAN4A6QBBAH4BDYAzgBCAFYA1WW9yZGVyT3V0OtQADgDcAN0A3gDfAO4AHwETgCuALoACgEPSAA4A +PQB8ARaAI6IA6wEYgC2AONgAWgAOAIEAggBbAIMAWAB0AO4BGwEcAR0AiACJAPMA7oAugD6AOYA6CYAw +gC5fEBZ7ezM1OSwgMTA4fSwgezk2LCAyMX193gEjAI4ADgEkASUAkwCUAJUBJgEnAJcBKAEpASoBKwCZ +ASwBLQEuAJsBMAEYATIBMwEtATQBMwE0V05TVmFsdWVfEBNOU051bWJlck9mVGlja01hcmtzXxASTlNU +aWNrTWFya1Bvc2l0aW9uWk5TTWF4VmFsdWVaTlNNaW5WYWx1ZVpOU1ZlcnRpY2FsXU5TQWx0SW5jVmFs +dWVfEBpOU0FsbG93c1RpY2tNYXJrVmFsdWVzT25seSNASQAAAAAAAIA9EAAQAYAcgDuAOCNAWQAAAAAA +ACMAAAAAAAAAAAgI1AAOAKcAqACpAKoAqwE4AK2AG4A8WUhlbHZldGljYdIANwA4ATsBPKQBPAC2AIIA +NVxOU1NsaWRlckNlbGzSADcAOAE+AT+lAT8AugBkAGUANVhOU1NsaWRlclp7NDgwLCAyNzJ90gA3ADgB +QgFDpAFDAGQAZQA1XE5TQ3VzdG9tVmlld1R2aWV30gAOAD0BRgFHgEeuAGsAfwEYAEAA7gFNAEwA8QEd +AEEA6wCHAL8AfoASgB+AOIAHgC6ARYALgDGAOoAQgC2AF4AhgBXSAA4AMgAzAViABIBGXU5TQXBwbGlj +YXRpb27SADcAOAFbAM+iAM8ANdIADgA9AUYBXoBHrgBBAGsA7gAfAB8AHwBAAOsBGAAfAO4AfgB/AGuA +EIASgC6AAoACgAKAB4AtgDiAAoAugBWAH4AS0gAOAD0BRgFvgEevEA8AawB/ARgAQADuAU0ATADxAR0A +QQAfAOsAvwB+AIeAEoAfgDiAB4AugEWAC4AxgDqAEIACgC2AIYAVgBfSAA4APQFGAYGAR68QDwGCAYMB +hAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkIBLgEyATYBOgE+AUIBRgFKAU4BUgFWAVoBXgFiAWVxDb250 +ZW50IFZpZXdfECdSb3VuZCBSZWN0IEJ1dHRvbiAoUm91bmQgUmVjdCBCdXR0b24pLTFfEBFIb3Jpem9u +dGFsIFNsaWRlcllGcmFuY2lzY29bQ3VzdG9tIFZpZXdbQXBwbGljYXRpb25eQ29udGVudCBWaWV3LTFf +EB9CdXR0b24gQ2VsbCAoUm91bmQgUmVjdCBCdXR0b24pW1NsaWRlciBDZWxsXxAPV2luZG93IChXaW5k +b3cpXEZpbGUncyBPd25lcl8QJVJvdW5kIFJlY3QgQnV0dG9uIChSb3VuZCBSZWN0IEJ1dHRvbilfECFC +dXR0b24gQ2VsbCAoUm91bmQgUmVjdCBCdXR0b24pLTFfEBpSb3VuZCBSZWN0IEJ1dHRvbiAoeWlrZXMh +KV8QFEJ1dHRvbiBDZWxsICh5aWtlcyEp0gAOAD0BRgGigEeg0gAOAD0BRgGlgEeg0gAOAD0BRgGogEev +EBMAawB/ARgA2gDYAEAA2QDuAU0ATADXAPEBHQBBAB8A6wCHAH4Av4ASgB+AOIA2gCyAB4A0gC6ARYAL +gCmAMYA6gBCAAoAtgBeAFYAh0gAOAD0BRgG+gEevEBMBvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHM +Ac0BzgHPAdAB0YBegF+AYIBhgGKAY4BkgGWAZoBngGiAaYBqgGuAbIBtgG6Ab4BwEA0QGRAKEBQQFhAO +EBgT//////////0QFRAJEAsQDBAbEAgQERAa0gAOAD0AfAHkgCOg0gAOAD0BRgHngEeg0gAOAD0BRgHq +gEeg0gA3ADgB7AHtogHtADVeTlNJQk9iamVjdERhdGEACAAZACIAJwAxADoAPwBEAFIAVABmAVMBWQGk +AasBsgHAAdIB7gH8AggCFAIiAi0COwJXAmUCeAKKAqQCrgK7Ar0CvwLBAsMCxQLHAskCywLNAs8C0QLT +AtUC1wLZAtsC3QLfAugC9AL2AvgDAQMKAxMDHgMjAzIDRQNOA1kDWwNgA2IDZAONA5oDpwO1A78DzQPa +A+wEAAQMBA4EEAQSBBQEGQQbBB0EHwQhBCMEPgRFBE4EXwRxBHoEhgSIBIoEjQSPBJoEowSqBLEEvQTW +BN8E5AT3BSAFIgUkBSYFKAUqBSwFLgVLBVYFYgVkBWYFaAVqBWwFbgV3BXkFfgWABYIFowWrBbIFvAW+ +BcAFwgXEBccFyAXKBcwF5gYXBiMGOQZOBl0GbwZ6BoQGkgakBrEGvwbIBsoGzAbOBtAG0gbUBtYG2Abb +BuAG6QbwBwEHCAcPBxgHGgcjByUHJwc0Bz0HQgdJB0oHUwdcB2kHdgd/B4oHkwedB74HwAfCB8QHxgfH +B8kHywfjCBQIFggYCBoIHAgeCCAINAg9CEQIUwhbCGQIawh4CH4IhwiJCJIIlAiWCJgImgirCLkIwgjK +CMwIzgjQCNII2QjiCOkJAAkPCSAJIgkkCSYJKAlJCUsJTQlPCVEJUglUCVYJdwl5CXsJfQl/CYEJgwmF +CZ8J0AnSCdQJ1gnYCdoJ3AnoCfEJ+AoQCiEKIwolCicKKQozCkQKRgpICkoKTApVClcKXApeCmAKgQqD +CoUKhwqJCooKjAqOCqcK4AroCv4LEwseCykLNAtCC18LaAtqC2wLbgtwC3ILdAt9C4YLhwuIC5kLmwud +C6cLsAu5C8YLzwvaC+ML7gv3DAAMDQwSDBsMHQw6DDwMPgxADEIMRAxGDEgMSgxMDE4MUAxSDFQMVgxf +DGEMYwxxDHoMfwyIDIoMpwypDKsMrQyvDLEMswy1DLcMuQy7DL0MvwzBDMMMzAzODO8M8QzzDPUM9wz5 +DPsM/Qz/DQENAw0FDQcNCQ0LDQ0NFg0YDTkNOw09DT8NQQ1DDUUNRw1JDUsNTQ1PDVENUw1VDVcNZA2O +DaINrA24DcQN0w31DgEOEw4gDkgObA6JDqAOqQ6rDqwOtQ63DrgOwQ7DDuwO7g7wDvIO9A72DvgO+g78 +Dv4PAA8CDwQPBg8IDwoPDA8ODxAPEg8bDx0PRg9ID0oPTA9OD1APUg9UD1YPWA9aD1wPXg9gD2IPZA9m +D2gPag9sD24PcA9yD3QPdg94D3oPgw+FD4cPiQ+LD40Pjw+RD5MPnA+eD58PqA+qD6sPtA+2D7cPwA/F +AAAAAAAAAgIAAAAAAAAB7gAAAAAAAAAAAAAAAAAAD9Q From 7f59ce782b815f4eef98960bb30f48e13bdfde03 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 21 Sep 2008 02:56:28 -0700 Subject: [PATCH 17/17] Accidentally committed a few alerts. Reviewed by me. --- AppKit/Cib/_CPCibObjectData.j | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/AppKit/Cib/_CPCibObjectData.j b/AppKit/Cib/_CPCibObjectData.j index 736d18265..f336e6942 100644 --- a/AppKit/Cib/_CPCibObjectData.j +++ b/AppKit/Cib/_CPCibObjectData.j @@ -63,10 +63,9 @@ import "_CPCibConnector.j" { var count = [_objectsValues count], topLevelObjects = []; - var str = ""; - str2 = " "; + while (count--) - {str2 += _namesValues[count] +"\n"; + { var eachObject = _objectsValues[count]; if (eachObject == _fileOwner) @@ -74,12 +73,10 @@ import "_CPCibConnector.j" var anObject = _objectsKeys[count]; if (anObject != _fileOwner) - {str += _namesValues[count] + "\n"; - anObject.realname = _namesValues[count];str2+='X'+'\n'; - topLevelObjects.push(anObject);} + topLevelObjects.push(anObject); } } - alert(str2+'\n'+str); + return topLevelObjects; }