From 82ef2356a5879d5f23322b2c0ddc54539d5ca94f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20H=C3=A4cker?= Date: Mon, 18 May 2009 14:40:43 +0200 Subject: [PATCH 001/244] fixes as per the review from Ross Boucher --- Tests/AppKit/CPCollectionViewTest.j | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Tests/AppKit/CPCollectionViewTest.j diff --git a/Tests/AppKit/CPCollectionViewTest.j b/Tests/AppKit/CPCollectionViewTest.j new file mode 100644 index 000000000..fc6eeafe2 --- /dev/null +++ b/Tests/AppKit/CPCollectionViewTest.j @@ -0,0 +1,16 @@ +// Just doing @import failed on CPWindow not being defined somewhere. +@import + +@implementation CPCollectionViewTest : OJTestCase + +- (void)testItemPrototypeActuallyReturnsTheItemPrototype +{ + var propertiesCollectionView = [[CPCollectionView alloc] initWithFrame:CGRectMakeZero()], + itemPrototype = [[CPCollectionViewItem alloc] init]; + + [propertiesCollectionView setItemPrototype:itemPrototype]; + + [self assert:[CPCollectionViewItem class] equals:[[propertiesCollectionView itemPrototype] class]]; +} + +@end From 35947697f2adba29428da0e5719c2dc5599c55cf Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 31 May 2009 12:12:51 -0700 Subject: [PATCH 002/244] Fix for KAPPA missing in CGPath. Looks like it was auto-merged out. --- AppKit/CoreGraphics/CGPath.j | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AppKit/CoreGraphics/CGPath.j b/AppKit/CoreGraphics/CGPath.j index 017317c3f..0964d02f6 100644 --- a/AppKit/CoreGraphics/CGPath.j +++ b/AppKit/CoreGraphics/CGPath.j @@ -250,6 +250,8 @@ function CGPathMoveToPoint(aPath, aTransform, x, y) aPath.elements[aPath.count++] = { type:kCGPathElementMoveToPoint, x:point.x, y:point.y }; } +var KAPPA = 4.0 * ((SQRT2 - 1.0) / 3.0); + function CGPathWithEllipseInRect(aRect) { var path = CGPathCreateMutable(); From c9e40cbfba0c35c4fcf7bd495d24b0458bc7074d Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 31 May 2009 13:06:50 -0700 Subject: [PATCH 003/244] Fix for a change in CGContextAddEllipseInRect that was breaking existing core graphics code --- AppKit/CoreGraphics/CGContext.j | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/AppKit/CoreGraphics/CGContext.j b/AppKit/CoreGraphics/CGContext.j index ba034d66f..a56d20e4d 100644 --- a/AppKit/CoreGraphics/CGContext.j +++ b/AppKit/CoreGraphics/CGContext.j @@ -548,7 +548,9 @@ var KAPPA = 4.0 * ((SQRT2 - 1.0) / 3.0); */ function CGContextAddEllipseInRect(aContext, aRect) { + CGContextBeginPath(aContext); CGContextAddPath(aContext, CGPathWithEllipseInRect(aRect)); + CGContextClosePath(aContext); } /*! @@ -658,7 +660,9 @@ function CGContextSetStrokeColor(aContext, aColor) */ function CGContextFillRoundedRectangleInRect(aContext, aRect, aRadius, ne, se, sw, nw) { - CGContextAddPath(aContext, CGPathWithRoundedRectangleInRect(aRect, aRadius, aRadius, ne, se, sw, nw)); + CGContextBeginPath(aContext); + CGContextAddPath(aContext, CGPathWithRoundedRectangleInRect(aRect, aRadius, aRadius, ne, se, sw, nw)); + CGContextClosePath(aContext); CGContextFillPath(aContext); } @@ -675,7 +679,9 @@ function CGContextFillRoundedRectangleInRect(aContext, aRect, aRadius, ne, se, s */ function CGContextStrokeRoundedRectangleInRect(aContext, aRect, aRadius, ne, se, sw, nw) { + CGContextBeginPath(aContext); CGContextAddPath(aContext, CGPathWithRoundedRectangleInRect(aRect, aRadius, aRadius, ne, se, sw, nw)); + CGContextClosePath(aContext); CGContextStrokePath(aContext); } From 5409face8ce707b0eb83c4d0bc91e1f753fba0c6 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 31 May 2009 13:44:58 -0700 Subject: [PATCH 004/244] Fix for providing too many image slices breaking CPView. Reviewed by me. --- AppKit/CPView.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 61cba8ec6..2974ed616 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -1208,7 +1208,7 @@ var DOMElementPrototype = nil, amount = 0 - _DOMImageParts.length; } - + if (amount > 0) while (amount--) { @@ -1236,16 +1236,16 @@ var DOMElementPrototype = nil, else { var slices = [patternImage imageSlices], - count = slices.length, + count = MIN(_DOMImageParts.length, slices.length), frameSize = _frame.size; - + while (count--) { var image = slices[count], size = _DOMImageSizes[count] = image ? [image size] : _CGSizeMakeZero(); CPDOMDisplayServerSetStyleSize(_DOMImageParts[count], size.width, size.height); - + _DOMImageParts[count].style.background = image ? "url(\"" + [image filename] + "\")" : ""; } From e1b63b848ff4299ee5c0927a1d4b52ab23934a2d Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 23 May 2009 10:57:44 +0200 Subject: [PATCH 005/244] Set disabled CPMenuItem's text color to lightGrayColor instead of darkGrayColor --- AppKit/CPMenuItem.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPMenuItem.j b/AppKit/CPMenuItem.j index b890c8593..401000872 100644 --- a/AppKit/CPMenuItem.j +++ b/AppKit/CPMenuItem.j @@ -1188,7 +1188,7 @@ var _CPMenuItemSelectionColor = nil, - (CPColor)textColor { - return [_menuItem isEnabled] ? (_textColor ? _textColor : [CPColor colorWithCalibratedRed:70.0 / 255.0 green:69.0 / 255.0 blue:69.0 / 255.0 alpha:1.0]) : [CPColor darkGrayColor]; + return [_menuItem isEnabled] ? (_textColor ? _textColor : [CPColor colorWithCalibratedRed:70.0 / 255.0 green:69.0 / 255.0 blue:69.0 / 255.0 alpha:1.0]) : [CPColor lightGrayColor]; } - (void)setTextShadowColor:(CPColor)aColor From a710dc974ffbd5734e41a3084b3c59514160d8f9 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 31 May 2009 19:17:36 -0700 Subject: [PATCH 006/244] Fix for VML paths --- AppKit/CoreGraphics/CGPath.j | 55 +++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/AppKit/CoreGraphics/CGPath.j b/AppKit/CoreGraphics/CGPath.j index 0964d02f6..1ef93d5b4 100644 --- a/AppKit/CoreGraphics/CGPath.j +++ b/AppKit/CoreGraphics/CGPath.j @@ -87,20 +87,20 @@ function CGPathAddArc(aPath, aTransform, x, y, aRadius, aStartAngle, anEndAngle, var center = _CGPointMake(x, y), end = _CGPointMake(COS(anEndAngle), SIN(anEndAngle)), start = _CGPointMake(COS(aStartAngle), SIN(aStartAngle)); - + end = _CGPointApplyAffineTransform(end, aTransform); start = _CGPointApplyAffineTransform(start, aTransform); center = _CGPointApplyAffineTransform(center, aTransform); - + x = center.x; y = center.y; - + var oldEndAngle = anEndAngle, oldStartAngle = aStartAngle; - + anEndAngle = ATAN2(end.y - aTransform.ty, end.x - aTransform.tx); aStartAngle = ATAN2(start.y - aTransform.ty, start.x - aTransform.tx); - + // Angles that equal "modulo" 2 pi return as equal after transforming them, // so we have to make sure to make them different again if they were different // to start out with. It's the difference between no circle and a full circle. @@ -109,7 +109,7 @@ function CGPathAddArc(aPath, aTransform, x, y, aRadius, aStartAngle, anEndAngle, anEndAngle = anEndAngle - PI2; else aStartAngle = aStartAngle - PI2; - + aRadius = _CGSizeMake(aRadius, 0); aRadius = _CGSizeApplyAffineTransform(aRadius, aTransform); aRadius = SQRT(aRadius.width * aRadius.width + aRadius.height * aRadius.height); @@ -169,23 +169,38 @@ function CGPathAddLineToPoint(aPath, aTransform, x, y) function CGPathAddPath(aPath, aTransform, anotherPath) { - var i = 0, - count = anotherPath.count; - - for (; i < count; ++i) + for (var i = 0, count = anotherPath.count; i < count; ++i) { var element = anotherPath.elements[i]; - - aPath.elements[aPath.count] = { type:element.type, x:element.x, y:element.y, - cpx:element.cpx, cpy:element.cpy, - radius:element.radius, startAngle:element.startAngle, endAngle:element.endAngle, - cp1x:element.cp1x, cp1y:element.cp1y, cp2x:element.cp2x, cp2y:element.cp2y, - points: element.points ? element.points.slice() : nil}; - - aPath.count++ + + switch (element.type) + { + case kCGPathElementAddLineToPoint: CGPathAddLineToPoint(aPath, aTransform, element.x, element.y); + break; + + case kCGPathElementAddCurveToPoint: CGPathAddCurveToPoint(aPath, aTransform, + element.cp1x, element.cp1y, + element.cp2x, element.cp2y, + element.x, element.y); + break; + + case kCGPathElementAddArc: CGPathAddArc(aPath, aTransform, element.x, element.y, + element.radius, element.startAngle, + element.endAngle, element.isClockwise); + break; + + case kCGPathElementAddQuadCurveToPoint: CGPathAddQuadCurveToPoint(aPath, aTransform, + element.cpx, element.cpy, + element.x, element.y); + break; + + case kCGPathElementMoveToPoint: CGPathMoveToPoint(aPath, aTransform, element.x, element.y); + break; + + case kCGPathElementCloseSubpath: CGPathCloseSubpath(aPath); + break; + } } - - aPath.current = anotherPath.current; } function CGPathAddQuadCurveToPoint(aPath, aTransform, cpx, cpy, x, y) From 8971c320bd167d83ef626d267814fe5227b569d7 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 31 May 2009 19:17:56 -0700 Subject: [PATCH 007/244] Don't capture errors during DOM events in DEBUG mode, to make it easier to debug IE --- AppKit/Platform/DOM/CPDOMWindowBridge.j | 36 ++++++++++++++++++++----- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index e86944001..51c1ae023 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -474,9 +474,11 @@ var CTRL_KEY_CODE = 17; return; } - + +#ifndef DEBUG try - { + { +#endif var event, location = _CGPointMake(aDOMEvent.clientX, aDOMEvent.clientY), timestamp = aDOMEvent.timeStamp ? aDOMEvent.timeStamp : new Date(), @@ -571,18 +573,22 @@ var CTRL_KEY_CODE = 17; CPDOMEventStop(aDOMEvent); [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +#ifndef DEBUG } catch (anException) { objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); } +#endif } /* @ignore */ - (void)_bridgeKeyEvent:(DOMEvent)aDOMEvent { +#ifndef DEBUG try - { + { +#endif var event, timestamp = aDOMEvent.timeStamp ? aDOMEvent.timeStamp : new Date(), sourceElement = (aDOMEvent.target || aDOMEvent.srcElement), @@ -717,11 +723,13 @@ var CTRL_KEY_CODE = 17; CPDOMEventStop(aDOMEvent); [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +#ifndef DEBUG } catch (anException) { objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); } +#endif } /* @ignore */ @@ -730,8 +738,10 @@ var CTRL_KEY_CODE = 17; if(!aDOMEvent) aDOMEvent = window.event; +#ifndef DEBUG try { +#endif if (CPFeatureIsCompatible(CPJavaScriptMouseWheelValues_8_15)) { var x = 0.0, @@ -810,19 +820,22 @@ var CTRL_KEY_CODE = 17; CPDOMEventStop(aDOMEvent); [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +#ifndef DEBUG } catch (anException) { objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); } - +#endif } /* @ignore */ - (void)_bridgeResizeEvent:(DOMEvent)aDOMEvent { +#ifndef DEBUG try { +#endif // FIXME: This is not the right way to do this. // We should pay attention to mouse down and mouse up in conjunction with this. //window.liveResize = YES; @@ -849,11 +862,13 @@ var CTRL_KEY_CODE = 17; //window.liveResize = NO; [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +#ifndef DEBUG } catch (anException) { objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); } +#endif } // DOM event properties used in mouse bridge code @@ -868,8 +883,10 @@ var CTRL_KEY_CODE = 17; /* @ignore */ - (void)_bridgeTouchEvent:(DOMEvent)aDOMEvent { +#ifndef DEBUG try { +#endif if (aDOMEvent.touches && (aDOMEvent.touches.length == 1 || (aDOMEvent.touches.length == 0 && aDOMEvent.changedTouches.length == 1))) { var newEvent = {}; @@ -911,20 +928,23 @@ var CTRL_KEY_CODE = 17; if (aDOMEvent.stopPropagation) aDOMEvent.stopPropagation(); } +#ifndef DEBUG } - catch(e) + catch (anException) { - objj_exception_report(e, {path:@"CPDOMWindowBridge.j"}); + objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); } - +#endif // handle touch cases specifically } /* @ignore */ - (void)_checkPasteboardElement { +#ifndef DEBUG try { +#endif var value = _DOMPasteboardElement.value; if ([value length]) @@ -946,11 +966,13 @@ var CTRL_KEY_CODE = 17; _pasteboardKeyDownEvent = nil; [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +#ifndef DEBUG } catch (anException) { objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); } +#endif } /* @ignore */ From 7f60bdec4f9d544270af1fc950f7963aa1e16503 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 1 Jun 2009 10:01:44 -0700 Subject: [PATCH 008/244] Update the documentation of methods define with the BRIDGE macro --- AppKit/CPControl.j | 2 ++ Tools/Documentation/Cappuccino.doxygen | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 6fe63b8a8..33781be35 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -505,10 +505,12 @@ var CPControlBlackColor = [CPColor blackColor]; } #define BRIDGE(UPPERCASE, LOWERCASE, ATTRIBUTENAME) \ +/*! Sets the value for ATTRIBUTENAME */\ - (void)set##UPPERCASE:(id)aValue\ {\ [self setValue:aValue forThemeAttribute:ATTRIBUTENAME];\ }\ +/*! Returns the current value for ATTRIBUTENAME */\ - (id)LOWERCASE\ {\ return [self valueForThemeAttribute:ATTRIBUTENAME];\ diff --git a/Tools/Documentation/Cappuccino.doxygen b/Tools/Documentation/Cappuccino.doxygen index 5c81778b3..f0ca1337a 100644 --- a/Tools/Documentation/Cappuccino.doxygen +++ b/Tools/Documentation/Cappuccino.doxygen @@ -247,7 +247,7 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO +MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = From 6ddb7851f69a58b88701767640713d144156008c Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 1 Jun 2009 17:17:45 -0700 Subject: [PATCH 009/244] Added generation code in a comment for future use if necessary. Reviewed by me. --- AppKit/CPTheme.j | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 2a32a9573..13640948b 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -555,3 +555,34 @@ function CPThemeAttributeDecode(aCoder, anAttributeName, aDefaultValue, aTheme, return attribute; } + +/* TO AUTO CREATE THESE: +function bit_count(bits) + { + var count = 0; + + while (bits) + { + ++count; + bits &= (bits - 1); + } + + return count ; + } + +zeros = "000000000"; + +function pad(string, digits) +{ + return zeros.substr(0, digits - string.length) + string; +} + +var str = "" +str += '['; +for (i = 0;i < Math.pow(2,6);++i) +{ + str += bit_count(i) + " /*" + pad(i.toString(2),6) + "*" + "/, "; +} +print(str+']'); + +*/ \ No newline at end of file From b4c7af498b17657efd30f4466fcb27445c3665df Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 1 Jun 2009 17:38:19 -0700 Subject: [PATCH 010/244] Spacing fix. Reviewed by me. --- AppKit/CPTheme.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 13640948b..499aaa8f7 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -531,7 +531,7 @@ function CPThemeAttributeEncode(aCoder, aThemeAttribute) function CPThemeAttributeDecode(aCoder, anAttributeName, aDefaultValue, aTheme, aClass) { - var key = "$a" + anAttributeName; + var key = "$a" + anAttributeName; if (![aCoder containsValueForKey:key]) var attribute = [[_CPThemeAttribute alloc] initWithName:anAttributeName defaultValue:aDefaultValue]; From cfda93d1e3a0c5279edffa6cf74743d14c9151be Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Tue, 2 Jun 2009 15:02:25 -0700 Subject: [PATCH 011/244] Update JSON support to json2.js, added in Objective-J. Deprecate CPJSObjectCreateJSON and CPJSObjectCreateWithJSON. --- Foundation/CPString.j | 4 +- Foundation/CPValue.j | 120 +---------- Objective-J/Rakefile | 1 + Objective-J/json2.js | 478 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 485 insertions(+), 118 deletions(-) create mode 100644 Objective-J/json2.js diff --git a/Foundation/CPString.j b/Foundation/CPString.j index 5edd41eaa..18f9e39f4 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -671,7 +671,7 @@ var CPStringRegexSpecialCharacters = [ */ + (CPString)JSONFromObject:(JSObject)anObject { - return CPJSObjectCreateJSON(anObject); + return JSON.stringify(anObject); } /*! @@ -679,7 +679,7 @@ var CPStringRegexSpecialCharacters = [ */ - (JSObject)objectFromJSON { - return CPJSObjectCreateWithJSON(self); + return JSON.parse(self); } @end diff --git a/Foundation/CPValue.j b/Foundation/CPValue.j index a7d499f1d..69ab9e7a0 100644 --- a/Foundation/CPValue.j +++ b/Foundation/CPValue.j @@ -99,126 +99,14 @@ var CPValueValueKey = @"CPValueValueKey"; @end -var _JSONCharacterEncodings = {}; - -_JSONCharacterEncodings['\b'] = "\\b"; -_JSONCharacterEncodings['\t'] = "\\t"; -_JSONCharacterEncodings['\n'] = "\\n"; -_JSONCharacterEncodings['\f'] = "\\f"; -_JSONCharacterEncodings['\r'] = "\\r"; -_JSONCharacterEncodings['"'] = "\\\""; -_JSONCharacterEncodings['\\'] = "\\\\"; - -// FIXME: Workaround for https://trac.280north.com/ticket/16 -var _JSONEncodedCharacters = new RegExp("[\\\"\\\\\\x00-\\x1f\\x7f-\\x9f]", 'g'); - function CPJSObjectCreateJSON(aJSObject) { - // typeof new Number() and new String() gives you "object", - // so valueof in those cases. - var type = typeof aJSObject, - valueOf = aJSObject ? aJSObject.valueOf() : null, - typeValueOf = typeof valueOf; - - if (type != typeValueOf) - { - type = typeValueOf; - aJSObject = valueOf; - } - - switch (type) - { - case "string": // If the string contains no control characters, no quote characters, and no - // backslash characters, then we can safely slap some quotes around it. - // Otherwise we must also replace the offending characters with safe sequences. - - if (!_JSONEncodedCharacters.test(aJSObject)) - return '"' + aJSObject + '"'; - - return '"' + aJSObject.replace(_JSONEncodedCharacters, _CPJSObjectEncodeCharacter) + '"'; - - - case "number": // JSON numbers must be finite. Encode non-finite numbers as null. - return isFinite(aJSObject) ? String(aJSObject) : "null"; - - case "boolean": - case "null": return String(aJSObject); - - case "object": // Due to a specification blunder in ECMAScript, - // typeof null is 'object', so watch out for that case. - - if (!aJSObject) - return "null"; - - // If the object has a toJSON method, call it, and stringify the result. - - if (typeof aJSObject.toJSON === "function") - return CPJSObjectCreateJSON(aJSObject.toJSON()); - - var array = []; - - // If the object is an array. Stringify every element. Use null as a placeholder - // for non-JSON values. - if (aJSObject.slice) - { - var index = 0, - count = aJSObject.length; - - for (; index < count; ++index) - array.push(CPJSObjectCreateJSON(aJSObject[index]) || "null"); - - // Join all of the elements together and wrap them in brackets. - return '[' + array.join(',') + ']'; - } - - - // Otherwise, iterate through all of the keys in the object. - var key = NULL; - - for (key in aJSObject) - { - if (!(typeof key === "string")) - continue; - - var value = CPJSObjectCreateJSON(aJSObject[key]); - - if (value) - array.push(CPJSObjectCreateJSON(key) + ':' + value); - } - - // Join all of the member texts together and wrap them in braces. - return '{' + array.join(',') + '}'; - } + CPLog.warn("CPJSObjectCreateJSON deprecated, use JSON.stringify() or CPString's objectFromJSON"); + return JSON.stringify(aJSObject); } -var _CPJSObjectEncodeCharacter = function(aCharacter) -{ - var encoding = _JSONCharacterEncodings[aCharacter]; - - if (encoding) - return encoding; - - encoding = aCharacter.charCodeAt(0); - - return '\\u00' + FLOOR(encoding / 16).toString(16) + (encoding % 16).toString(16); -} - -var _JSONBackslashCharacters = new RegExp("\\\\.", 'g'), - _JSONSimpleValueTokens = new RegExp("\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?", 'g'), - _JSONValidOpenBrackets = new RegExp("(?:^|:|,)(?:\\s*\\[)+", 'g'), - _JSONValidExpression = new RegExp("^[\\],:{}\\s]*$"); - function CPJSObjectCreateWithJSON(aString) { - if (_JSONValidExpression.test(aString.replace(_JSONBackslashCharacters, '@').replace(_JSONSimpleValueTokens, ']').replace(_JSONValidOpenBrackets, ''))) - return eval('(' + aString + ')'); - - return nil; + CPLog.warn("CPJSObjectCreateWithJSON deprecated, use JSON.parse() or CPString's JSONFromObject"); + return JSON.parse(aString); } - -/* -var _JSONBackslashCharacters = /\\./g, - _JSONSimpleValueTokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - _JSONValidOpenBrackets = /(?:^|:|,)(?:\s*\[)+/g, - _JSONValidExpression = /^[\],:{}\s]*$/; -*/ diff --git a/Objective-J/Rakefile b/Objective-J/Rakefile index c8ee921dd..f0f1782ac 100644 --- a/Objective-J/Rakefile +++ b/Objective-J/Rakefile @@ -19,6 +19,7 @@ task :Products => [$BROWSER_FILE, $RHINO_FILE, $LICENSE_PRODUCT] Files = [ 'constants.js', 'utilities.js', + 'json2.js', 'runtime.js', 'dictionary.js', 'plist.js', diff --git a/Objective-J/json2.js b/Objective-J/json2.js new file mode 100644 index 000000000..7e27df518 --- /dev/null +++ b/Objective-J/json2.js @@ -0,0 +1,478 @@ +/* + http://www.JSON.org/json2.js + 2009-04-16 + + Public Domain. + + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + + See http://www.JSON.org/js.html + + This file creates a global JSON object containing two methods: stringify + and parse. + + JSON.stringify(value, replacer, space) + value any JavaScript value, usually an object or array. + + replacer an optional parameter that determines how object + values are stringified for objects. It can be a + function or an array of strings. + + space an optional parameter that specifies the indentation + of nested structures. If it is omitted, the text will + be packed without extra whitespace. If it is a number, + it will specify the number of spaces to indent at each + level. If it is a string (such as '\t' or ' '), + it contains the characters used to indent at each level. + + This method produces a JSON text from a JavaScript value. + + When an object value is found, if the object contains a toJSON + method, its toJSON method will be called and the result will be + stringified. A toJSON method does not serialize: it returns the + value represented by the name/value pair that should be serialized, + or undefined if nothing should be serialized. The toJSON method + will be passed the key associated with the value, and this will be + bound to the object holding the key. + + For example, this would serialize Dates as ISO strings. + + Date.prototype.toJSON = function (key) { + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + You can provide an optional replacer method. It will be passed the + key and value of each member, with this bound to the containing + object. The value that is returned from your method will be + serialized. If your method returns undefined, then the member will + be excluded from the serialization. + + If the replacer parameter is an array of strings, then it will be + used to select the members to be serialized. It filters the results + such that only members with keys listed in the replacer array are + stringified. + + Values that do not have JSON representations, such as undefined or + functions, will not be serialized. Such values in objects will be + dropped; in arrays they will be replaced with null. You can use + a replacer function to replace those with JSON values. + JSON.stringify(undefined) returns undefined. + + The optional space parameter produces a stringification of the + value that is filled with line breaks and indentation to make it + easier to read. + + If the space parameter is a non-empty string, then that string will + be used for indentation. If the space parameter is a number, then + the indentation will be that many spaces. + + Example: + + text = JSON.stringify(['e', {pluribus: 'unum'}]); + // text is '["e",{"pluribus":"unum"}]' + + + text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); + // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' + + text = JSON.stringify([new Date()], function (key, value) { + return this[key] instanceof Date ? + 'Date(' + this[key] + ')' : value; + }); + // text is '["Date(---current time---)"]' + + + JSON.parse(text, reviver) + This method parses a JSON text to produce an object or array. + It can throw a SyntaxError exception. + + The optional reviver parameter is a function that can filter and + transform the results. It receives each of the keys and values, + and its return value is used instead of the original value. + If it returns what it received, then the structure is not modified. + If it returns undefined then the member is deleted. + + Example: + + // Parse the text. Values that look like ISO date strings will + // be converted to Date objects. + + myData = JSON.parse(text, function (key, value) { + var a; + if (typeof value === 'string') { + a = +/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); + if (a) { + return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], + +a[5], +a[6])); + } + } + return value; + }); + + myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { + var d; + if (typeof value === 'string' && + value.slice(0, 5) === 'Date(' && + value.slice(-1) === ')') { + d = new Date(value.slice(5, -1)); + if (d) { + return d; + } + } + return value; + }); + + + This is a reference implementation. You are free to copy, modify, or + redistribute. + + This code should be minified before deployment. + See http://javascript.crockford.com/jsmin.html + + USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + NOT CONTROL. +*/ + +/*jslint evil: true */ + +/*global JSON */ + +/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, + call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf +*/ + +// Create a JSON object only if one does not already exist. We create the +// methods in a closure to avoid creating global variables. + +if (!this.JSON) { + JSON = {}; +} +(function () { + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + if (typeof Date.prototype.toJSON !== 'function') { + + Date.prototype.toJSON = function (key) { + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + String.prototype.toJSON = + Number.prototype.toJSON = + Boolean.prototype.toJSON = function (key) { + return this.valueOf(); + }; + } + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? + '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : + '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : + gap ? '[\n' + gap + + partial.join(',\n' + gap) + '\n' + + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + k = rep[i]; + if (typeof k === 'string') { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : + gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + + mind + '}' : '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== 'function') { + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + } + + +// If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== 'function') { + JSON.parse = function (text, reviver) { + +// The parse method takes a text and an optional reviver function, and returns +// a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + +// The walk method is used to recursively walk the resulting structure so +// that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + +// Parsing happens in four stages. In the first stage, we replace certain +// Unicode characters with escape sequences. JavaScript handles many characters +// incorrectly, either silently deleting them, or treating them as line endings. + + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + +// In the second stage, we run the text against regular expressions that look +// for non-JSON patterns. We are especially concerned with '()' and 'new' +// because they can cause invocation, and '=' because it can cause mutation. +// But just to be safe, we want to reject all unexpected forms. + +// We split the second stage into 4 regexp operations in order to work around +// crippling inefficiencies in IE's and Safari's regexp engines. First we +// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we +// replace all simple value tokens with ']' characters. Third, we delete all +// open brackets that follow a colon or comma or that begin the text. Finally, +// we look to see that the remaining characters are only whitespace or ']' or +// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/. +test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). +replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). +replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + +// In the third stage we use the eval function to compile the text into a +// JavaScript structure. The '{' operator is subject to a syntactic ambiguity +// in JavaScript: it can begin a block or an object literal. We wrap the text +// in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + +// In the optional fourth stage, we recursively walk the new structure, passing +// each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + +// If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + } +}()); From b0470ca2d7e43766f60b52b154ae3df693b8dc72 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Tue, 2 Jun 2009 15:07:07 -0700 Subject: [PATCH 012/244] Update to use JSON.{parse,stringify} --- AppKit/CPColorPanel.j | 2 +- Foundation/CPValue.j | 4 ++-- Tools/bake/main.j | 2 +- Tools/press/main.j | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPColorPanel.j b/AppKit/CPColorPanel.j index 1dde0cd52..b12829400 100644 --- a/AppKit/CPColorPanel.j +++ b/AppKit/CPColorPanel.j @@ -491,7 +491,7 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; var future = new Date(); future.setYear(2019); - [_swatchCookie setValue: CPJSObjectCreateJSON(result) expires:future domain: nil]; + [_swatchCookie setValue: JSON.stringify(result) expires:future domain: nil]; } - (void)setColorPanel:(CPColorPanel)panel diff --git a/Foundation/CPValue.j b/Foundation/CPValue.j index bc0a1a0b8..1c6de7a92 100644 --- a/Foundation/CPValue.j +++ b/Foundation/CPValue.j @@ -85,7 +85,7 @@ var CPValueValueKey = @"CPValueValueKey"; self = [super init]; if (self) - _JSObject = CPJSObjectCreateWithJSON([aCoder decodeObjectForKey:CPValueValueKey]); + _JSObject = JSON.parse([aCoder decodeObjectForKey:CPValueValueKey]); return self; } @@ -96,7 +96,7 @@ var CPValueValueKey = @"CPValueValueKey"; */ - (void)encodeWithCoder:(CPCoder)aCoder { - [aCoder encodeObject:CPJSObjectCreateJSON(_JSObject) forKey:CPValueValueKey]; + [aCoder encodeObject:JSON.stringify(_JSObject) forKey:CPValueValueKey]; } @end diff --git a/Tools/bake/main.j b/Tools/bake/main.j index 4c1ee5f63..5a325be9e 100644 --- a/Tools/bake/main.j +++ b/Tools/bake/main.j @@ -28,7 +28,7 @@ function readConfig(configFile) if (!fileData) throw new Error("Couldn't read file: " + configFile); - var configs = CPJSObjectCreateWithJSON(fileData); + var configs = JSON.parse(fileData); return configs; } diff --git a/Tools/press/main.j b/Tools/press/main.j index d54ec4c88..40101945e 100644 --- a/Tools/press/main.j +++ b/Tools/press/main.j @@ -239,7 +239,7 @@ function main() // add fake bundle response bookkeeping applicationJS.push("var __fakeDidReceiveBundleResponse = " + String(fakeDidReceiveBundleResponse)); - applicationJS.push("var __fakeBundleArchives = " + CPJSObjectCreateJSON(bundleArchives) + ";"); + applicationJS.push("var __fakeBundleArchives = " + JSON.stringify(bundleArchives) + ";"); applicationJS.push("for (var i = 0; i < __fakeBundleArchives.length; i++) __fakeDidReceiveBundleResponse(__fakeBundleArchives[i]);") // add each fragment, wrapped in a function, along with OBJJ_CURRENT_BUNDLE bookkeeping From c7823a92f821c836d57998284c40a1fc7ff1d90d Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 2 Jun 2009 21:14:22 -0700 Subject: [PATCH 013/244] Fix for -description in CPArray containing null or undefined values. Reviewed by me. --- Foundation/CPArray.j | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Foundation/CPArray.j b/Foundation/CPArray.j index 80039d8fd..e5a69f72a 100755 --- a/Foundation/CPArray.j +++ b/Foundation/CPArray.j @@ -789,18 +789,23 @@ */ - (CPString)description { - var i = 0, + var index = 0, count = [self count], description = '('; - - for(; i < count; ++i) + + for(; index < count; ++index) { - if (self[i].isa) description += [self[i] description]; - else description += self[i]; - - if (i != count - 1) description += ", "; + var object = self[index]; + + if (object && object.isa) + description += [object description]; + else + description += object; + + if (index !== count - 1) + description += ", "; } - + return description + ')'; } From 3f27fca518796f5a52f57cc9ec0e442423ea936c Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Thu, 4 Jun 2009 02:38:06 -0700 Subject: [PATCH 014/244] Added support for custom classes on non-customviews in nib2cib. Reviewed by me. --- AppKit/Cib/CPCib.j | 1 + AppKit/Cib/_CPCibClassSwapper.j | 53 ++++++++++++++++++++++++++ Foundation/CPKeyedUnarchiver.j | 13 ++++--- Foundation/CPObject.j | 5 +++ Objective-J/runtime.js | 4 +- Tools/nib2cib/NSAppKit.j | 1 + Tools/nib2cib/NSClassSwapper.j | 66 +++++++++++++++++++++++++++++++++ 7 files changed, 135 insertions(+), 8 deletions(-) create mode 100644 AppKit/Cib/_CPCibClassSwapper.j create mode 100644 Tools/nib2cib/NSClassSwapper.j diff --git a/AppKit/Cib/CPCib.j b/AppKit/Cib/CPCib.j index 2e44da5e6..09b1ca765 100644 --- a/AppKit/Cib/CPCib.j +++ b/AppKit/Cib/CPCib.j @@ -24,6 +24,7 @@ @import @import +@import "_CPCibClassSwapper.j" @import "_CPCibCustomObject.j" @import "_CPCibCustomResource.j" @import "_CPCibCustomView.j" diff --git a/AppKit/Cib/_CPCibClassSwapper.j b/AppKit/Cib/_CPCibClassSwapper.j new file mode 100644 index 000000000..6b41bfae0 --- /dev/null +++ b/AppKit/Cib/_CPCibClassSwapper.j @@ -0,0 +1,53 @@ +/* + * _CPCibClassSwapper.j + * AppKit + * + * Created by Francisco Tolmasky. + * Copyright 2009, 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 +@import + + +var _CPCibClassSwapperClassNameKey = @"_CPCibClassSwapperClassNameKey", + _CPCibClassSwapperOriginalClassNameKey = @"_CPCibClassSwapperOriginalClassNameKey"; + +@implementation _CPCibClassSwapper : CPObject +{ +} + ++ (id)allocWithCoder:(CPCoder)aCoder +{ + var theClassName = [aCoder decodeObjectForKey:_CPCibClassSwapperClassNameKey], + theClass = objj_lookUpClass(theClassName); + + if (!theClass) + { + CPLog.error("Unable to find class " + theClassName + " in cib file."); + + theClassName = [aCoder decodeObjectForKey:_CPCibClassSwapperOriginalClassNameKey]; + theClass = objj_lookUpClass(theClassName); + + if (!theClass) + [CPException raise:CPInvalidArgumentException reason:@"Unable to find class " + theClassName + " in cib file."]; + } + + return [theClass alloc]; +} + +@end diff --git a/Foundation/CPKeyedUnarchiver.j b/Foundation/CPKeyedUnarchiver.j index 3a4f2a87b..0bf92f2f6 100644 --- a/Foundation/CPKeyedUnarchiver.j +++ b/Foundation/CPKeyedUnarchiver.j @@ -426,15 +426,16 @@ var _CPKeyedUnarchiverDecodeObjectAtIndex = function(self, anIndex) if (!theClass) theClass = CPClassFromString(className); - object = [theClass alloc]; - - // It is important to do this before calling initWithCoder so that decoding can be self referential (something = self). - self._objects[anIndex] = object; - var savedPlistObject = self._plistObject; self._plistObject = plistObject; - var string = className; + + // Should we only call this on _CPCibClassSwapper? (currently the only class that makes use of this). + object = [theClass allocWithCoder:self]; + + // It is important to do this before calling initWithCoder so that decoding can be self referential (something = self). + self._objects[anIndex] = object; + var processedObject = [object initWithCoder:self]; self._plistObject = savedPlistObject; diff --git a/Foundation/CPObject.j b/Foundation/CPObject.j index 06e744efb..0cb462fbe 100644 --- a/Foundation/CPObject.j +++ b/Foundation/CPObject.j @@ -93,6 +93,11 @@ CPLog(@"Got some class: %@", inst); return class_createInstance(self); } ++ (id)allocWithCoder:(CPCoder)aCoder +{ + return [self alloc]; +} + /*! Initializes the receiver @return the initialized receiver diff --git a/Objective-J/runtime.js b/Objective-J/runtime.js index 5ed505846..365ab725a 100644 --- a/Objective-J/runtime.js +++ b/Objective-J/runtime.js @@ -177,8 +177,8 @@ function class_addMethod(/*Class*/ aClass, /*SEL*/ aName, /*IMP*/ anImplementati // FIXME: Should this be done here? // If this is a root class... if (!ISMETA(aClass) && GETMETA(aClass).isa === GETMETA(aClass)) - class_addMethods(GETMETA(aClass), methods); - + class_addMethod(GETMETA(aClass), method); + return YES; } diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index 955c45b20..5e13cb706 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -22,6 +22,7 @@ @import "NSButton.j" @import "NSCell.j" +@import "NSClassSwapper.j" @import "NSClipView.j" @import "NSColor.j" @import "NSColorWell.j" diff --git a/Tools/nib2cib/NSClassSwapper.j b/Tools/nib2cib/NSClassSwapper.j new file mode 100644 index 000000000..a0e8822fd --- /dev/null +++ b/Tools/nib2cib/NSClassSwapper.j @@ -0,0 +1,66 @@ + +var NSClassSwapperClassNames = {}, + NSClassSwapperOriginalClassNames = {}; + +var _CPCibClassSwapperClassNameKey = @"_CPCibClassSwapperClassNameKey", + _CPCibClassSwapperOriginalClassNameKey = @"_CPCibClassSwapperOriginalClassNameKey"; + +@implementation NSClassSwapper : _CPCibClassSwapper +{ +} + ++ (id)swapperClassForClassName:(CPString)aClassName originalClassName:(CPString)anOriginalClassName +{ + var swapperClassName = "$NSClassSwapper_" + aClassName + "_" + anOriginalClassName; + swapperClass = objj_lookUpClass(swapperClassName); + + if (!swapperClass) + { + var originalClass = objj_lookUpClass(anOriginalClassName); + + swapperClass = objj_allocateClassPair(originalClass, swapperClassName); + + objj_registerClassPair(swapperClass); +try{ + class_addMethod(swapperClass, @selector(initWithCoder:), function(self, _cmd, aCoder) + { + self = objj_msgSendSuper({super_class:originalClass, receiver:self}, _cmd, aCoder); + + if (self) + { + var UID = [self UID]; + + NSClassSwapperClassNames[UID] = aClassName; + NSClassSwapperOriginalClassNames[UID] = anOriginalClassName; + } + + return self; + }, ""); + }catch(e) { alert("B"); }try{ + class_addMethod(swapperClass, @selector(classForKeyedArchiver), function(self, _cmd) + { + return [_CPCibClassSwapper class]; + }, ""); + + class_addMethod(swapperClass, @selector(encodeWithCoder:), function(self, _cmd, aCoder) + { + objj_msgSendSuper({super_class:originalClass, receiver:self}, _cmd, aCoder); + + // FIXME: map class name as well? + [aCoder encodeObject:aClassName forKey:_CPCibClassSwapperClassNameKey]; + [aCoder encodeObject:CP_NSMapClassName(anOriginalClassName) forKey:_CPCibClassSwapperOriginalClassNameKey]; + }, "");}catch(e) { alert("C"); } + } + + return swapperClass; +} + ++ (id)allocWithCoder:(CPCoder)aCoder +{ + var className = [aCoder decodeObjectForKey:@"NSClassName"], + originalClassName = [aCoder decodeObjectForKey:@"NSOriginalClassName"]; + + return [[self swapperClassForClassName:className originalClassName:originalClassName] alloc]; +} + +@end From c42fb68d8a372017d14b48408a3d9a0b0b70a338 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 5 Jun 2009 17:28:42 -0700 Subject: [PATCH 015/244] Made class swapping more robust. Reviewed by me. --- AppKit/CPMenu.j | 6 ++--- AppKit/Cib/_CPCibClassSwapper.j | 41 +++++++++++++++++++++++++-------- Tools/nib2cib/NSClassSwapper.j | 6 ++--- Tools/nib2cib/NSIBObjectData.j | 6 ++--- 4 files changed, 41 insertions(+), 18 deletions(-) diff --git a/AppKit/CPMenu.j b/AppKit/CPMenu.j index 10bb0b4dc..7a8fbb622 100644 --- a/AppKit/CPMenu.j +++ b/AppKit/CPMenu.j @@ -684,13 +684,13 @@ var _CPMenuBarVisible = NO, [_CPMenuWindow poolMenuWindow:aMenuWindow]; - if([aMenuItem isEnabled]) - [CPApp sendAction:[aMenuItem action] to:[aMenuItem target] from:aMenuItem]; - var delegate = [menu delegate]; if ([delegate respondsToSelector:@selector(menuDidClose:)]) [delegate menuDidClose:menu]; + + if([aMenuItem isEnabled]) + [CPApp sendAction:[aMenuItem action] to:[aMenuItem target] from:aMenuItem]; } // Managing Display of State Column diff --git a/AppKit/Cib/_CPCibClassSwapper.j b/AppKit/Cib/_CPCibClassSwapper.j index 6b41bfae0..8e1c133df 100644 --- a/AppKit/Cib/_CPCibClassSwapper.j +++ b/AppKit/Cib/_CPCibClassSwapper.j @@ -31,23 +31,46 @@ var _CPCibClassSwapperClassNameKey = @"_CPCibClassSwapperClassNameKey", { } -+ (id)allocWithCoder:(CPCoder)aCoder ++ (void)allocObjectWithCoder:(CPCoder)aCoder className:(CPString)aClassName { - var theClassName = [aCoder decodeObjectForKey:_CPCibClassSwapperClassNameKey], - theClass = objj_lookUpClass(theClassName); + // FIXME: Also check class classForClassName: + var theClass = [aCoder classForClassName:aClassName]; if (!theClass) { - CPLog.error("Unable to find class " + theClassName + " in cib file."); - - theClassName = [aCoder decodeObjectForKey:_CPCibClassSwapperOriginalClassNameKey]; - theClass = objj_lookUpClass(theClassName); - + theClass = objj_lookUpClass(aClassName); + if (!theClass) - [CPException raise:CPInvalidArgumentException reason:@"Unable to find class " + theClassName + " in cib file."]; + return nil; } return [theClass alloc]; } ++ (id)allocWithCoder:(CPCoder)aCoder +{ + if ([aCoder respondsToSelector:@selector(usesOriginalClasses)] && [aCoder usesOriginalClasses]) + { + var theClassName = [aCoder decodeObjectForKey:_CPCibClassSwapperOriginalClassNameKey], + object = [self allocObjectWithCoder:aCoder className:theClassName]; + } + else + { + var theClassName = [aCoder decodeObjectForKey:_CPCibClassSwapperClassNameKey], + object = [self allocObjectWithCoder:aCoder className:theClassName]; + + if (!object) + { + CPLog.error("Unable to find class " + theClassName + " in cib file."); + + object = [self allocObjectWithCoder:aCoder className:[aCoder decodeObjectForKey:_CPCibClassSwapperOriginalClassNameKey]]; + } + } + + if (!object) + [CPException raise:CPInvalidArgumentException reason:@"Unable to find class " + theClassName + " in cib file."]; + + return object; +} + @end diff --git a/Tools/nib2cib/NSClassSwapper.j b/Tools/nib2cib/NSClassSwapper.j index a0e8822fd..f406aa310 100644 --- a/Tools/nib2cib/NSClassSwapper.j +++ b/Tools/nib2cib/NSClassSwapper.j @@ -21,7 +21,7 @@ var _CPCibClassSwapperClassNameKey = @"_CPCibClassSwapperClassNameKey", swapperClass = objj_allocateClassPair(originalClass, swapperClassName); objj_registerClassPair(swapperClass); -try{ + class_addMethod(swapperClass, @selector(initWithCoder:), function(self, _cmd, aCoder) { self = objj_msgSendSuper({super_class:originalClass, receiver:self}, _cmd, aCoder); @@ -36,7 +36,7 @@ try{ return self; }, ""); - }catch(e) { alert("B"); }try{ + class_addMethod(swapperClass, @selector(classForKeyedArchiver), function(self, _cmd) { return [_CPCibClassSwapper class]; @@ -49,7 +49,7 @@ try{ // FIXME: map class name as well? [aCoder encodeObject:aClassName forKey:_CPCibClassSwapperClassNameKey]; [aCoder encodeObject:CP_NSMapClassName(anOriginalClassName) forKey:_CPCibClassSwapperOriginalClassNameKey]; - }, "");}catch(e) { alert("C"); } + }, ""); } return swapperClass; diff --git a/Tools/nib2cib/NSIBObjectData.j b/Tools/nib2cib/NSIBObjectData.j index 11f81287f..a18435793 100644 --- a/Tools/nib2cib/NSIBObjectData.j +++ b/Tools/nib2cib/NSIBObjectData.j @@ -75,9 +75,9 @@ //_accessibilityOidsKeys = [aCoder decodeObjectForKey:@"NSAccessibilityOidsKeys"]; //_accessibilityOidsValues = [aCoder decodeObjectForKey:@"NSAccessibilityOidsValues"]; - _classesKeys = [aCoder decodeObjectForKey:@"NSClassesKeys"];print("d"); - _classesValues = [aCoder decodeObjectForKey:@"NSClassesValues"];print("e"); - + _classesKeys = [aCoder decodeObjectForKey:@"NSClassesKeys"]; + _classesValues = [aCoder decodeObjectForKey:@"NSClassesValues"]; + _connections = [aCoder decodeObjectForKey:@"NSConnections"]; //_fontManager = [aCoder decodeObjectForKey:@"NSFontManager"] retain]; From 886b4ef1188438ce9b3b8fdf982708c5de28df02 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 5 Jun 2009 20:00:39 -0700 Subject: [PATCH 016/244] Fix for image views in toolbar items not displaying their images. Reviewed by me. --- AppKit/CPToolbarItem.j | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/AppKit/CPToolbarItem.j b/AppKit/CPToolbarItem.j index b0d9f9c47..c235463a9 100644 --- a/AppKit/CPToolbarItem.j +++ b/AppKit/CPToolbarItem.j @@ -458,15 +458,16 @@ CPToolbarItemVisibilityPriorityUser [copy setLabel:_label]; [copy setPaletteLabel:_paletteLabel]; [copy setToolTip:[self toolTip]]; - + [copy setTag:[self tag]]; [copy setTarget:[self target]]; [copy setAction:[self action]]; [copy setEnabled:[self isEnabled]]; - [copy setImage:_image]; - [copy setAlternateImage:_alternateImage]; - + + [copy setImage:[self image]]; + [copy setAlternateImage:[self alternateImage]]; + [copy setMinSize:_minSize]; [copy setMaxSize:_maxSize]; From 896eaf7937685a72659f7786addd7c69048c83fc Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Fri, 5 Jun 2009 23:40:31 -0700 Subject: [PATCH 017/244] Update Externals to latest. Remove first arg in objj, objjc, and cplutil to match changes to Narwhal. --- External/browserjs | 2 +- External/jack | 2 +- External/narwhal | 2 +- External/ojunit | 2 +- Objective-J/Tools/objj/bin/cplutil | 3 +++ Objective-J/Tools/objj/bin/objjc | 3 +++ Objective-J/Tools/objj/lib/objj/objj.js | 3 +++ 7 files changed, 13 insertions(+), 4 deletions(-) diff --git a/External/browserjs b/External/browserjs index bd20c3745..497f4106b 160000 --- a/External/browserjs +++ b/External/browserjs @@ -1 +1 @@ -Subproject commit bd20c3745e242f1428a9565e19d9d4825cf3c1b4 +Subproject commit 497f4106bfb643e9231aa4b1f4d8141e69ab2a65 diff --git a/External/jack b/External/jack index ffc5ea4a6..d7b5ca58f 160000 --- a/External/jack +++ b/External/jack @@ -1 +1 @@ -Subproject commit ffc5ea4a6e84f9eb2979fac4364ebda371a6f8d0 +Subproject commit d7b5ca58f431de3a1e6a3a8eb791f4092b1fab3a diff --git a/External/narwhal b/External/narwhal index b91ecad8a..e0bb2640c 160000 --- a/External/narwhal +++ b/External/narwhal @@ -1 +1 @@ -Subproject commit b91ecad8a498467be409bef1ea02119c33b15493 +Subproject commit e0bb2640c541ecff490e2e3d8f7c57301e4209f6 diff --git a/External/ojunit b/External/ojunit index ca10912c3..e2d0cddea 160000 --- a/External/ojunit +++ b/External/ojunit @@ -1 +1 @@ -Subproject commit ca10912c3ff8823d19067d327828812698239c56 +Subproject commit e2d0cddea2ec8094add1cfb3e34820227f2077d9 diff --git a/Objective-J/Tools/objj/bin/cplutil b/Objective-J/Tools/objj/bin/cplutil index 6168fd7b5..7428b1214 100755 --- a/Objective-J/Tools/objj/bin/cplutil +++ b/Objective-J/Tools/objj/bin/cplutil @@ -13,6 +13,9 @@ function printUsage() function main() { + // FIXME: ARGS + system.args.shift(); + if (system.args.length < 1) return printUsage(); diff --git a/Objective-J/Tools/objj/bin/objjc b/Objective-J/Tools/objj/bin/objjc index ad60ee887..042076c57 100755 --- a/Objective-J/Tools/objj/bin/objjc +++ b/Objective-J/Tools/objj/bin/objjc @@ -164,6 +164,9 @@ function preprocess(aFilePath, outFilePath, gccArgs, flags) function main() { + // FIXME: ARGS + system.args.shift(); + var filePaths = [], outFilePaths = [], diff --git a/Objective-J/Tools/objj/lib/objj/objj.js b/Objective-J/Tools/objj/lib/objj/objj.js index 3882c51bc..e17a54d9f 100644 --- a/Objective-J/Tools/objj/lib/objj/objj.js +++ b/Objective-J/Tools/objj/lib/objj/objj.js @@ -12,6 +12,9 @@ if (system.env["OBJJ_INCLUDE_PATHS"]) window.args = system.args; +// FIXME: ARGS +system.args.shift(); + with (window) { eval(File.read(OBJJ_HOME + "/lib/Frameworks/Objective-J/rhino.platform/Objective-J.js", { charset:"UTF-8" })); From fc74bba68c48c7b07b40cf369b7036d8758b22de Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 6 Jun 2009 15:27:25 -0700 Subject: [PATCH 018/244] CPSearchField contributed by cacaodev --- AppKit/CPSearchField.j | 696 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 696 insertions(+) create mode 100644 AppKit/CPSearchField.j diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j new file mode 100644 index 000000000..6a3775c13 --- /dev/null +++ b/AppKit/CPSearchField.j @@ -0,0 +1,696 @@ +/* + * CPSearchField.j + * AppKit + * + * Created by cacaodev. + * Copyright 2009. + * + * 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 "CPTextField.j" + +/*! + @global + @group Menu tags +*/ +CPSearchFieldRecentsTitleMenuItemTag = 1000; +/*! + @global + @group Menu tags +*/ +CPSearchFieldRecentsMenuItemTag = 1001; +/*! + @global + @group Menu tags +*/ +CPSearchFieldClearRecentsMenuItemTag = 1002; +/*! + @global + @group Menu tags +*/ +CPSearchFieldNoRecentsMenuItemTag = 1003; + +var CPSearchFieldSearchImage = nil, + CPSearchFieldFindImage = nil, + CPSearchFieldCancelImage = nil, + CPSearchFieldCancelPressedImage = nil; + +/*! + @ingroup appkit + @class CPSearchField + The CPSearchField class defines the programmatic interface for text fields that are optimized for text-based searches. A CPSearchField object directly inherits from the CPTextField class. The search field implemented by these classes presents a standard user interface for searches, including a search button, a cancel button, and a pop-up icon menu for listing recent search strings and custom search categories. + + When the user types and then pauses, the text field's action message is sent to its target. You can query the text field's string value for the current text to search for. Do not rely on the sender of the action to be an CPMenu object because the menu may change. If you need to change the menu, modify the search menu template and call the setSearchMenuTemplate: method to update. +*/ +@implementation CPSearchField : CPTextField +{ + CPButton _searchButton; + CPButton _cancelButton; + CPMenu _searchMenuTemplate; + CPMenu _searchMenu; + + CPString _recentsAutosaveName; + CPArray _recentSearches; + + int _maximumRecents; + BOOL _sendsWholeSearchString; + BOOL _sendsSearchStringImmediately; + CPTimer _partialStringTimer; +} + ++ (void)initialize +{ + if (self != [CPSearchField class]) + return; + + var bundle = [CPBundle bundleForClass:self]; + CPSearchFieldSearchImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSearchField/CPSearchFieldSearch.png"]]; + CPSearchFieldFindImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSearchField/CPSearchFieldFind.png"]]; + CPSearchFieldCancelImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSearchField/CPSearchFieldCancel.png"]]; + CPSearchFieldCancelPressedImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSearchField/CPSearchFieldCancelPressed.png"]]; +} + +- (id)initWithFrame:(CPRect)frame +{ + self = [super initWithFrame:frame]; + if (self != nil) + { + _recentSearches = [CPArray array]; + _maximumRecents = 10; + _sendsWholeSearchString = NO; + _sendsSearchStringImmediately = NO; + + [self setBezeled:YES]; + [self setBezelStyle:CPTextFieldRoundedBezel]; + [self setBordered:YES]; + [self setEditable:YES]; + [self setDelegate:self]; + + _cancelButton = [[CPButton alloc] initWithFrame:CPMakeRect(frame.size.width - 27,(frame.size.height-22)/2,22,22)]; + [self resetCancelButton]; + _cancelButton._DOMElement.style.cursor = "default"; + [_cancelButton setHidden:YES]; + [self addSubview:_cancelButton]; + + _searchButton = [[CPButton alloc] initWithFrame:CPMakeRect(5,(frame.size.height-25)/2,25,25)]; + [_searchButton setBezelStyle:CPRegularSquareBezelStyle]; + [_searchButton setBordered:NO]; + [_searchButton setImageScaling:CPScaleToFit]; + _searchButton._DOMElement.style.cursor = "default"; + + [self setSearchMenuTemplate:[self _searchMenuTemplate]]; + [self addSubview:_searchButton]; + } + + return self; +} + +- (id)copy +{ + var copy = [super copy]; + + [copy setCancelButton:[_cancelButton copy]]; + [copy setSearchButton:[_searchButton copy]]; + [copy setrecentsAutosaveName:[_recentsAutosaveName copy]]; + [copy setSendsWholeSearchString:[_sendsWholeSearchString copy]]; + [copy setSendsSearchStringImmediately:[_sendsSearchStringImmediately copy]]; + [copy setMaximumRecents:_maximumRecents]; + [copy setSearchMenutemplate:[_searchMenuTemplate copy]]; + + return copy; +} + +// Managing Buttons +/*! + Sets the button used to display the search-button image + @param button + @param The search button. +*/ +- (void)setSearchButton:(CPButton)button +{ + _searchButton = button; +} + +/*! + Returns the button used to display the search-button image. + @return The search button. +*/ +- (CPButton)searchButton +{ + return _searchButton; +} + +/*! + Resets the search button to its default attributes. + This method resets the target, action, regular image, and pressed image. By default, when users click the search button or press the Return key, the action defined for the receiver is sent to its designated target. This method gives you a way to customize the search button for specific situations and then reset the button defaults without having to undo changes individually. +*/ +- (void)resetSearchButton +{ + var searchButtonImage, + action, + target, + button = [self searchButton]; + + if (_searchMenuTemplate == nil) + { + searchButtonImage = CPSearchFieldSearchImage; + action = [self action]; + target = [self target]; + } + else + { + searchButtonImage = CPSearchFieldFindImage; + action = @selector(_showMenu:); + target = self; + } + + [button setImage:searchButtonImage]; + [button setTarget:target]; + [button setAction:action]; +} + +/*! + Sets the button object used to display the cancel-button image. + @param button The cancel button. +*/ +- (void)setCancelButton:(CPButton)button +{ + _cancelButton = button; +} + +/*! + Returns the button object used to display the cancel-button image. + @return The cancel button. +*/ +- (CPButton)cancelButton +{ + return _cancelButton; +} + +/*! + Resets the cancel button to its default attributes. + This method resets the target, action, regular image, and pressed image. By default, when users click the cancel button, the delete: action message is sent up the responder chain. This method gives you a way to customize the cancel button for specific situations and then reset the button defaults without having to undo changes individually. +*/ +- (void)resetCancelButton +{ + var button = [self cancelButton]; + [button setBezelStyle:CPRegularSquareBezelStyle]; + [button setBordered:NO]; + [button setImageScaling:CPScaleToFit]; + [button setImage:CPSearchFieldCancelImage]; + [button setAlternateImage:CPSearchFieldCancelPressedImage]; + [button setTarget:self]; + [button setAction:@selector(_searchFieldCancel:)]; +} + +// Custom Layout +/*! + Modifies the bounding rectangle for the search-text field. + @param rect The current bounding rectangle for the search text field. + @return The updated bounding rectangle to use for the search text field. The default value is the value passed into the rect parameter. + Subclasses can override this method to return a new bounding rectangle for the text-field object. You might use this method to provide a custom layout for the search field control. +*/ +- (CPRect)searchTextRectForBounds:(CPRect)rect +{ + var leftOffset = 0, width = rect.size.width; + + if (_searchButton) + { + var searchRect = [_searchButton frame]; + leftOffset = searchRect.origin.x + searchRect.size.width; + } + + if (_cancelButton) + { + var cancelRect = [_cancelButton frame]; + width = cancelRect.origin.x - leftOffset; + } + + return CPMakeRect(leftOffset,rect.origin.y,width,rect.size.height); +} + +/*! + Modifies the bounding rectangle for the search button. + @param rect The current bounding rectangle for the search button. + Subclasses can override this method to return a new bounding rectangle for the search button. You might use this method to provide a custom layout for the search field control. +*/ +- (CPRect)searchButtonRectForBounds:(CPRect)rect // fix +{ + return [_searchButton frame]; +} + +/*! + Modifies the bounding rectangle for the cancel button. + @param rect The updated bounding rectangle to use for the cancel button. The default value is the value passed into the rect parameter. + Subclasses can override this method to return a new bounding rectangle for the cancel button. You might use this method to provide a custom layout for the search field control. +*/ +- (CPRect)cancelButtonRectForBounds:(CPRect)rect +{ + return [_cancelButton frame]; +} + +// Managing Menu Templates +/*! + Returns the menu template object used to dynamically construct the search pop-up icon menu. + @return The current menu template. +*/ +- (CPMenu)searchMenuTemplate +{ + return _searchMenuTemplate; +} + +/*! + Sets the menu template object used to dynamically construct the receiver's pop-up icon menu. + @param menu The menu template to use. + The receiver looks for the tag constants described in Menu tags to determine how to populate the menu with items related to recent searches. See Configuring a Search Menu for a sample of how you might set up the search menu template. +*/ +- (void)setSearchMenuTemplate:(CPMenu)menu +{ + _searchMenuTemplate = menu; + + [self resetSearchButton]; + [self _updateSearchMenu]; +} + +// Managing Search Modes +/*! + Returns a Boolean value indicating whether the receiver sends the search action message when the user clicks the search button (or presses return) or after each keystroke. + @return YES if the action message is sent all at once when the user clicks the search button or presses return; otherwise, NO if the search string is sent after each keystroke. The default value is NO. +*/ +- (BOOL)sendsWholeSearchString +{ + return _sendsWholeSearchString; +} + +/*! + Sets whether the receiver sends the search action message when the user clicks the search button (or presses return) or after each keystroke. + @param flag YES to send the action message all at once when the user clicks the search button or presses return; otherwise, NO to send the search string after each keystroke. +*/ +- (void)setSendsWholeSearchString:(BOOL)flag +{ + _sendsWholeSearchString = flag; +} + +/*! + Returns a Boolean value indicating whether the receiver sends its action immediately upon being notified of changes to the search field text or after a brief pause. + @return YES if the text field sends its action immediately upon notification of any changes to the search field; otherwise, NO. +*/ +- (BOOL)sendsSearchStringImmediately +{ + return _sendsSearchStringImmediately; +} + +/*! + Sets whether the text field sends its action message to the target immediately upon notification of any changes to the search field text or after a brief pause. + @param flag YES to send the text field's action immediately upon notification of any changes to the search field; otherwise, NO if you want the text field to pause briefly before sending its action message. Pausing gives the user the opportunity to type more text into the search field before initiating the search. +*/ +- (void)setSendsSearchStringImmediately:(BOOL)flag +{ + _sendsSearchStringImmediately = flag; +} + +// Managing Recent Search Strings +/*! + Returns the maximum number of recent search strings to display in the custom search menu. + @return The maximum number of search strings that can appear in the menu. This value is between 0 and 254. +*/ +- (int)maximumRecents +{ + return _maximumRecents; +} + +/*! + Sets the maximum number of search strings that can appear in the search menu. + @param maxRecents The maximum number of search strings that can appear in the menu. This value can be between 0 and 254. Specifying a value less than 0 sets the value to the default, which is 10. Specifying a value greater than 254 sets the maximum to 254. +*/ +- (void)setMaximumRecents:(int)max +{ + if (max > 254) + max = 254; + else if (max < 0) + max = 10; + + _maximumRecents = max; +} + +/*! + Returns the list of recent search strings for the control. + @return An array of objects, each of which contains a search string either displayed in the search menu or from a recent autosave archive. If there have been no recent searches and no prior searches saved under an autosave name, this array may be empty. + */ +- (CPArray)recentSearches +{ + return _recentSearches; +} + +/*! + Sets the list of recent search strings to list in the pop-up icon menu of the receiver. + @param searches An array of CPString objects containing the search strings. + You might use this method to set the recent list of searches from an archived copy. +*/ +- (void)setRecentSearches:(CPArray)searches +{ + var max = MIN([self maximumRecents],[searches count]); + var searches = [searches subarrayWithRange:CPMakeRange(0,max)]; + _recentSearches = searches; + + [self _autosaveRecentSearchList]; +} + +/*! + Returns the key under which the prior list of recent search strings has been archived. + @return The autosave name, which is used as a key in the standard user defaults to save the recent searches. The default value is nil, which causes searches not to be autosaved. +*/ +- (CPString)recentsAutosaveName +{ + return _recentsAutosaveName; +} + +/*! + Sets the autosave name under which the receiver automatically archives the list of recent search strings. + @param name The autosave name, which is used as a key in the standard user defaults to save the recent searches. If you specify nil or an empty string for this parameter, no autosave name is set and searches are not autosaved. +*/ +- (void)setRecentsAutosaveName:(CPString)name +{ + _recentsAutosaveName = name; + + if(name != nil) + [self _registerForAutosaveNotification]; + else + [self _deregisterForAutosaveNotification]; +} + +// Private methods and subclassing + +- (CPRect)contentRectForBounds:(CPRect)bounds +{ + var superbounds = [super contentRectForBounds:bounds]; + return [self searchTextRectForBounds:superbounds]; +} + ++ (double)_keyboardDelayForPartialSearchString:(CPString)string +{ + return (6 - MIN([string length],4))/10; +} + +- (CPMenu)menu +{ + return _searchMenu; +} + +- (BOOL)isOpaque +{ + return [super isOpaque] && [_cancelButton isOpaque] && [_searchButton isOpaque]; +} + +- (void)_updateCancelButtonVisibility +{ + [_cancelButton setHidden:([[self stringValue] length] == 0)]; +} + +- (void)controlTextDidChange:(CPNotification)aNotification +{ + if(!_sendsWholeSearchString) + { + if(_sendsSearchStringImmediately) + [self _sendPartialString]; + else + { + [_partialStringTimer invalidate]; + var timeInterval = [CPSearchField _keyboardDelayForPartialSearchString:[self stringValue]]; + + _partialStringTimer = [CPTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(_sendPartialString) userInfo:nil repeats:NO]; + } + } + [self _updateCancelButtonVisibility]; +} + +- (void)sendAction:(SEL)anAction to:(id)anObject +{ + [super sendAction:anAction to:anObject]; + + [_partialStringTimer invalidate]; + + var current_value = [self objectValue]; + if(current_value != nil && current_value != "" && ![_recentSearches containsObject:current_value]) + { + [self _addStringToRecentSearches:current_value]; + [self _updateSearchMenu]; + } + + [self _updateCancelButtonVisibility]; +} + +- (void)_addStringToRecentSearches:(CPString)string +{ + var newSearches = [CPMutableArray arrayWithArray:_recentSearches]; + [newSearches addObject:string]; + [self setRecentSearches:newSearches]; +} + +- (BOOL)trackMouse:(CPEvent)event +{ + var rect; + var point; + var location = [event locationInWindow]; + + point = [self convertPoint:location fromView:nil]; + + rect = [self searchButtonRectForBounds:[self frame]]; + + if (CPRectContainsPoint(rect,point)) + { + return [[self searchButton] trackMouse:event]; + } + + rect = [self cancelButtonRectForBounds:[self frame]]; + if (CPRectContainsPoint(rect,point)) + { + return [[self cancelButton] trackMouse:event]; + } + + return [super trackMouse:event]; +} + +- (CPMenu)_searchMenuTemplate +{ + var template, item; + + template = [[CPMenu alloc] init]; + + item = [[CPMenuItem alloc] initWithTitle:@"Recent searches" action:NULL keyEquivalent:@""]; + [item setTag:CPSearchFieldRecentsTitleMenuItemTag]; + [item setEnabled:NO]; + [template addItem:item]; + + item = [[CPMenuItem alloc] initWithTitle:@"Recent search item" action:@selector(_searchFieldSearch:) keyEquivalent:@""]; + [item setTag:CPSearchFieldRecentsMenuItemTag]; + [item setTarget:self]; + [template addItem:item]; + + item = [[CPMenuItem alloc] initWithTitle:@"Clear recent searches" action:@selector(_searchFieldClearRecents:) keyEquivalent:@""]; + [item setTag:CPSearchFieldClearRecentsMenuItemTag]; + [item setTarget:self]; + [template addItem:item]; + + item = [[CPMenuItem alloc] initWithTitle:@"No recent searches" action:NULL keyEquivalent:@""]; + [item setTag:CPSearchFieldNoRecentsMenuItemTag]; + [item setEnabled:NO]; + [template addItem:item]; + + return template; +} + +- (void)_updateSearchMenu +{ + if(_searchMenuTemplate == nil) + return; + + var i, menu = [[CPMenu alloc] init]; + var countOfRecents = [_recentSearches count]; + + for (i = 0; i < [_searchMenuTemplate numberOfItems]; i++) + { + var item = [_searchMenuTemplate itemAtIndex:i]; + var tag = [item tag]; + + if(tag == CPSearchFieldClearRecentsMenuItemTag && countOfRecents != 0) + { + var separator = [CPMenuItem separatorItem]; + [menu addItem:separator]; + } + + if (!(tag == CPSearchFieldRecentsTitleMenuItemTag && countOfRecents == 0) && + !(tag == CPSearchFieldClearRecentsMenuItemTag && countOfRecents == 0) && + !(tag == CPSearchFieldNoRecentsMenuItemTag && countOfRecents != 0) && + !(tag == CPSearchFieldRecentsMenuItemTag)) + { + var templateItem = [[CPMenuItem alloc] initWithTitle:[item title] action:[item action] keyEquivalent:[item keyEquivalent]]; + [templateItem setTarget:[item target]]; + [templateItem setEnabled:[item isEnabled]]; + [templateItem setTag:[item tag]]; + [menu addItem:templateItem]; + } + else if (tag == CPSearchFieldRecentsMenuItemTag) + { + var j; + for (j = 0; j < countOfRecents; j++) + { + var rencentItem = [[CPMenuItem alloc] initWithTitle:[_recentSearches objectAtIndex:j] action:[item action] keyEquivalent:[item keyEquivalent]]; + [rencentItem setTarget:[item target]]; + [menu addItem:rencentItem]; + } + } + } + _searchMenu = menu; +} + + +- (void)_showMenu:(id)sender +{ + if(_searchMenu == nil) + return; + + [super selectText:nil]; + + var origin = CPMakePoint([self frame].origin.x, [self frame].origin.y + [self frame].size.height); + var anEvent = [CPEvent keyEventWithType:CPRightMouseDown location:origin modifierFlags:0 timestamp:[CPDate date] windowNumber:1 context:[[CPGraphicsContext currentContext] graphicsPort] characters:"" charactersIgnoringModifiers:"" isARepeat:NO keyCode:0]; + + [CPMenu popUpContextMenu:_searchMenu withEvent:anEvent forView:sender]; +} + +- (void)_sendPartialString +{ + [[self target] performSelector:[self action] withObject:self]; +} + +- (void)_searchFieldCancel:(id)sender +{ + [self setObjectValue:nil]; + [self _sendPartialString]; + [self _updateCancelButtonVisibility]; + [sender setHidden:YES]; +} + +- (void)_searchFieldSearch:(id)sender +{ + [self setObjectValue:[sender title]]; + [self _sendPartialString]; + [self _updateCancelButtonVisibility]; +} + +- (void)_searchFieldClearRecents:(id)sender +{ + [self setRecentSearches:[CPArray array]]; + [self _updateSearchMenu]; + } + +- (void)_registerForAutosaveNotification +{ + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateAutosavedRecents:) name:@"CPAutosavedRecentsChangedNotification" object:nil]; +} + +- (void)_deregisterForAutosaveNotification +{ + [[CPNotificationCenter defaultCenter] removeObserver:self name:@"CPAutosavedRecentsChangedNotification" object:nil]; +} + +- (void)_updateAutosavedRecents:(id)notification +{ + var name = [notification object]; + var list = [self recentSearches]; + + [[CPUserDefaults standardUserDefaults] setObject:list forKey:name]; + +} + +- (void)_autosaveRecentSearchList +{ + if(_recentsAutosaveName != nil) + [[CPNotificationCenter defaultCenter] postNotificationName:@"CPAutosavedRecentsChangedNotification" object:_recentsAutosaveName]; +} + +- (void)_loadRecentSearchList +{ + var list, + name = [self recentsAutosaveName]; + + list = [[CPUserDefaults standardUserDefaults] objectForKey:name]; + _recentSearches = list; +} + +/* +- (BOOL)trackMouse:(CPEvent)theEvent inRect:(CPRect)cellFrame ofView:(CPView)aTextView untilMouseUp:(BOOL)flag +{ +} + +- (BOOL)_trimRecentSearchList +{ +} + +- (void)_trackButton:(CPButton)button forEvent:(CPEvent)event inRect:(CPRect)rect ofView:(id)view +{ +} + +- (id)_selectOrEdit:(CPRect)rect inView:(id)view target:(id)target editor:(id)editor event:(id)event start:(int)start end:(int)end +{ +} + +- (void)resetCursorRect:(CPRect)rect inView:(id)view +{ +} +*/ + +@end + +var CPSearchButtonKey = @"CPSearchButtonKey", + CPCancelButtonKey = @"CPCancelButtonKey", + CPRecentsAutosaveNameKey = @"CPRecentsAutosaveNameKey", + CPSendsWholeSearchStringKey = @"CPSendsWholeSearchStringKey", + CPSendsSearchStringImmediatelyKey = @"CPSendsSearchStringImmediatelyKey", + CPMaximumRecentsKey = @"CPMaximumRecentsKey", + CPSearchMenuTemplateKey = @"CPSearchMenuTemplateKey"; + +@implementation CPSearchField (CPCoding) + +- (void)encodeWithCoder:(CPCoder)coder +{ + [super encodeWithCoder:coder]; + + [coder encodeObject:_searchButton forKey:CPSearchButtonKey]; + [coder encodeObject:_cancelButton forKey:CPCancelButtonKey]; + [coder encodeObject:_recentsAutosaveName forKey:CPRecentsAutosaveNameKey]; + [coder encodeBool:_sendsWholeSearchString forKey:CPSendsWholeSearchStringKey]; + [coder encodeBool:_sendsSearchStringImmediately forKey:CPSendsSearchStringImmediatelyKey]; + [coder encodeInt:_maximumRecents forKey:CPMaximumRecentsKey]; + [coder encodeObject:_searchMenuTemplate forKey:CPSearchMenuTemplateKey]; +} + +- (id)initWithCoder:(CPCoder)coder +{ + self = [super initWithCoder:coder]; + + _searchButton = [coder decodeObjectForKey:CPSearchButtonKey]; + _searchButton = [coder decodeObjectForKey:CPCancelButtonKey]; + _recentsAutosaveName = [coder decodeObjectForKey:CPRecentsAutosaveNameKey]; + _sendsWholeSearchString = [coder decodeBoolForKey:CPSendsWholeSearchStringKey]; + _sendsSearchStringImmediately = [coder decodeBoolForKey:CPSendsSearchStringImmediatelyKey]; + _maximumRecents = [coder decodeIntForKey:CPMaximumRecentsKey]; + [self setSearchMenuTemplate:[coder decodeObjectForKey:CPSearchMenuTemplateKey]]; + + return self; +} + +@end \ No newline at end of file From a5c467fba5959e18966fdd3fe9beb58241a7de1b Mon Sep 17 00:00:00 2001 From: tlrobinson Date: Sat, 6 Jun 2009 16:12:02 -0700 Subject: [PATCH 019/244] Add CPSearchField.j to AppKit.j imports --- AppKit/AppKit.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index 3a2a3f421..1687acd26 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -57,6 +57,7 @@ @import "CPProgressIndicator.j" @import "CPRadio.j" @import "CPResponder.j" +@import "CPSearchField.j" @import "CPScrollView.j" @import "CPScroller.j" @import "CPSecureTextField.j" From 927b94244ada46a660465a643af2f8f18c273021 Mon Sep 17 00:00:00 2001 From: aburkhalter Date: Sat, 6 Jun 2009 16:44:46 -0700 Subject: [PATCH 020/244] Added test coverage for CPSearchField instantiation, recentSearch getter/setter, added DOM protection to class init --- AppKit/CPSearchField.j | 11 +++++++++-- Tests/AppKit/CPSearchFieldTest.j | 28 ++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 Tests/AppKit/CPSearchFieldTest.j diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j index 6a3775c13..8adc431aa 100644 --- a/AppKit/CPSearchField.j +++ b/AppKit/CPSearchField.j @@ -22,6 +22,8 @@ @import "CPTextField.j" +#include "Platform/Platform.h" + /*! @global @group Menu tags @@ -101,7 +103,8 @@ var CPSearchFieldSearchImage = nil, _cancelButton = [[CPButton alloc] initWithFrame:CPMakeRect(frame.size.width - 27,(frame.size.height-22)/2,22,22)]; [self resetCancelButton]; - _cancelButton._DOMElement.style.cursor = "default"; + + [_cancelButton setHidden:YES]; [self addSubview:_cancelButton]; @@ -109,7 +112,11 @@ var CPSearchFieldSearchImage = nil, [_searchButton setBezelStyle:CPRegularSquareBezelStyle]; [_searchButton setBordered:NO]; [_searchButton setImageScaling:CPScaleToFit]; - _searchButton._DOMElement.style.cursor = "default"; + +#if PLATFORM(DOM) + _cancelButton._DOMElement.style.cursor = "default"; + _searchButton._DOMElement.style.cursor = "default"; +#endif [self setSearchMenuTemplate:[self _searchMenuTemplate]]; [self addSubview:_searchButton]; diff --git a/Tests/AppKit/CPSearchFieldTest.j b/Tests/AppKit/CPSearchFieldTest.j new file mode 100644 index 000000000..0ee5ff3a1 --- /dev/null +++ b/Tests/AppKit/CPSearchFieldTest.j @@ -0,0 +1,28 @@ +@import + +@implementation CPSearchFieldTest : OJTestCase +{ + CPSearchField _searchField; +} + +- (void)setUp +{ + _searchField = [[CPSearchField alloc] initWithFrame:CGRectMakeZero()]; +} + +- (void)testMakeCPSearchFieldInstance +{ + [self assertNotNull:_searchField]; +} + +- (void)testRecentSearchesStartsEmpty +{ + [self assertTrue:[[_searchField recentSearches] count] == 0 message:@"After instance creation we shouldn't have any recent searches."]; +} + +- (void)testSetRecentSearches +{ + searches = ["foo", "bar", "baz"]; + [_searchField setRecentSearches:searches] + [self assertTrue:[[_searchField recentSearches] count] == 3 message:@"After setRecentSearches array doesn't include results"]; +} From 7ca3473b64eab575cdc00390335b4a5413aedd4a Mon Sep 17 00:00:00 2001 From: aburkhalter Date: Sat, 6 Jun 2009 17:51:32 -0700 Subject: [PATCH 021/244] failing test for issue #112, fix for said issue of _doubleAction ReferenceError --- AppKit/CPTableView.j | 1 + Tests/AppKit/CPTableViewTest.j | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 Tests/AppKit/CPTableViewTest.j diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 343852bdc..02b2e5cd9 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -81,6 +81,7 @@ var _CPTableViewWillDisplayCellSelector = 1 << 0, //CPColor _gridColor; //BOOL _drawsGrid; + SEL _doubleAction; // Not archived: diff --git a/Tests/AppKit/CPTableViewTest.j b/Tests/AppKit/CPTableViewTest.j new file mode 100644 index 000000000..df1766404 --- /dev/null +++ b/Tests/AppKit/CPTableViewTest.j @@ -0,0 +1,23 @@ +@import + +@implementation CPTableViewTest : OJTestCase +{ +} + +- (void)setUp +{ + // setup a reasonable table + _tableView = [[CPTableView alloc] initWithFrame:CGRectMakeZero()]; + _tableColumn = [[CPTableColumn alloc] initWithIdentifier:@"Foo"]; + [_tableView addTableColumn:_tableColumn]; +} + +// Failing test for issue 112, See:http://github.com/280north/cappuccino/issues/#issue/112 +- (void)testCPTableDoubleAction +{ + // CPEvent with 2 clickCount + var dblClk = [CPEvent mouseEventWithType:CPLeftMouseUp location:CGPointMakeZero() modifierFlags:0 + timestamp:0 windowNumber:0 context:nil eventNumber:0 clickCount:2 pressure:0]; + + [_tableView trackSelection:dblClk]; +} From e7e804cae3689fb996772ecc713b2eee0b30fc39 Mon Sep 17 00:00:00 2001 From: tlrobinson Date: Sun, 7 Jun 2009 14:58:24 -0700 Subject: [PATCH 022/244] TableTest --- TableTest/AppController.j | 109 ++++++++++++++++++++++++++++++++ TableTest/Info.plist | 12 ++++ TableTest/Rakefile | 25 ++++++++ TableTest/Resources/spinner.gif | Bin 0 -> 1849 bytes TableTest/index-debug.html | 69 ++++++++++++++++++++ TableTest/index.html | 69 ++++++++++++++++++++ TableTest/main.j | 18 ++++++ 7 files changed, 302 insertions(+) create mode 100644 TableTest/AppController.j create mode 100644 TableTest/Info.plist create mode 100644 TableTest/Rakefile create mode 100644 TableTest/Resources/spinner.gif create mode 100644 TableTest/index-debug.html create mode 100644 TableTest/index.html create mode 100755 TableTest/main.j diff --git a/TableTest/AppController.j b/TableTest/AppController.j new file mode 100644 index 000000000..97e6e1ba4 --- /dev/null +++ b/TableTest/AppController.j @@ -0,0 +1,109 @@ + +import +import + +CPLogRegister(CPLogConsole); + +@implementation AppController : CPObject +{ + CPTableView _tableView; + CPArray _data; + CPImage _iconImage; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var view = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; + + [view setBackgroundColor:[CPColor whiteColor]]; + [view enterFullScreenMode:nil withOptions:nil]; + + _data = [1, 2]; + + _tableView = [[CPTableView alloc] initWithFrame:[view bounds]]; + //[_tableView setBackgroundColor:[CPColor blueColor]]; + + var iconView = [[CPImageView alloc] initWithFrame:CGRectMake(16,16,0,0)]; + [iconView setImageScaling:CPScaleNone]; + + var iconColumn = [[CPTableColumn alloc] initWithIdentifier:"icons"]; + [iconColumn setWidth:32]; + [iconColumn setDataView:iconView]; + + [_tableView addTableColumn:iconColumn]; + + for (var i = 1; i <= 10; i++) + { + var column = [[CPTableColumn alloc] initWithIdentifier:String(i)]; + + [[column headerView] setStringValue:"Number"]; + [[column headerView] sizeToFit]; + [column setWidth:[[column headerView] frame].size.width]; + + [_tableView addTableColumn:column]; + } + + var scrollView = [[CPScrollView alloc] initWithFrame:[view bounds]]; + + [scrollView setDocumentView:_tableView]; + [scrollView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; + + [view addSubview:scrollView]; + + [_tableView setDelegate:self]; + [_tableView setDataSource:self]; + + _iconImage = [[CPImage alloc] initWithContentsOfFile:"http://cappuccino.org/images/favicon.png" size:CGSizeMake(16,16)]; +} + +- (int)numberOfRowsInTableView:(CPTableView)tableView +{ + return 7000000; +} + +- (id)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row +{ + if ([tableColumn identifier] == "icons") + return _iconImage + else + return String((row + 1) * [[tableColumn identifier] intValue]); +} +/* +- (id)tableView:(CPTableView)tableView heightOfRow:(int)row +{ + //CPLog.info("heightOfRow:"+row); + return 20.0 + ROUND(row * 0.5); +} +*/ +//- (void)tableViewSelectionIsChanging:(CPNotification)aNotification +//{ +// CPLog.debug(@"changing! %@", [aNotification description]); +//} +// +//- (void)tableViewSelectionDidChange:(CPNotification)aNotification +//{ +// CPLog.debug(@"did change! %@", [aNotification description]); +//} + +- (BOOL)tableView:(CPTableView)aTableView shouldSelectRow:(int)rowIndex +{ + //CPLog.debug(@"shouldSelectRow %d", rowIndex); + for (var i = 2, sqrt = SQRT(rowIndex+1); i <= sqrt; i++) + if ((rowIndex+1) % i === 0) + return false + return true; +} + +- (BOOL)selectionShouldChangeInTableView:(CPTableView)aTableView +{ + //CPLog.debug(@"selectionShouldChangeInTableView"); + return YES; +} + +//- (CPIndexSet)tableView:(CPTableView)tableView selectionIndexesForProposedSelection:(CPIndexSet)proposedSelectionIndexes +//{ +// CPLog.debug(@"selectionIndexesForProposedSelection %@", [proposedSelectionIndexes description]); +// return proposedSelectionIndexes; +//} + +@end diff --git a/TableTest/Info.plist b/TableTest/Info.plist new file mode 100644 index 000000000..78ac6aab8 --- /dev/null +++ b/TableTest/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + TableTest + CPPrincipalClass + CPApplication + + diff --git a/TableTest/Rakefile b/TableTest/Rakefile new file mode 100644 index 000000000..26682d25f --- /dev/null +++ b/TableTest/Rakefile @@ -0,0 +1,25 @@ + +require 'objective-j' +require 'objective-j/bundletask' + +if !ENV['CONFIG'] + ENV['CONFIG'] = 'Debug' +end + +ObjectiveJ::BundleTask.new(:TableTest) do |t| + t.name = 'TableTest' + t.identifier = 'com.yourcompany.TableTest' + t.version = '1.0' + t.author = 'Your Company' + t.email = 'feedback @nospam@ yourcompany.com' + t.summary = 'TableTest' + t.sources = FileList['*.j'] + t.resources = FileList['Resources/*'] + t.index_file = 'index.html' + t.info_plist = 'Info.plist' + t.build_path = File.join('Build', ENV['CONFIG'], 'TableTest') + t.flag = '-DDEBUG' if ENV['CONFIG'] == 'Debug' + t.flag = '-O' if ENV['CONFIG'] == 'Release' +end + +task :default => [:TableTest] diff --git a/TableTest/Resources/spinner.gif b/TableTest/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/TableTest/index-debug.html b/TableTest/index-debug.html new file mode 100644 index 000000000..9bb71cc81 --- /dev/null +++ b/TableTest/index-debug.html @@ -0,0 +1,69 @@ + + + + + + + + TableTest + + + + + + + + + + + + +
+ + + +
+ + + diff --git a/TableTest/index.html b/TableTest/index.html new file mode 100644 index 000000000..9965f27f7 --- /dev/null +++ b/TableTest/index.html @@ -0,0 +1,69 @@ + + + + + + + + TableTest + + + + + + + + + + + + +
+ + + +
+ + + + diff --git a/TableTest/main.j b/TableTest/main.j new file mode 100755 index 000000000..ee431dc77 --- /dev/null +++ b/TableTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * TableTest + * + * Created by You on June 7, 2009. + * Copyright 2009, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From c74642b6417cc9f84a24afdccfd49dce9cc33967 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 7 Jun 2009 15:47:21 -0700 Subject: [PATCH 023/244] Replacing several instances of -hash with the new -UID method. Partial fix for http://github.com/280north/cappuccino/issues#issue/10 . Reviewed by andrew. --- Foundation/CPCountedSet.j | 24 ++++++++++++------------ Foundation/CPJSONPConnection.j | 10 +++++----- Foundation/CPKeyValueCoding.j | 12 ++++++------ Foundation/CPKeyValueObserving.j | 22 +++++++++++----------- Foundation/CPKeyedArchiver.j | 20 ++++++++++---------- Foundation/CPNotificationCenter.j | 10 +++++----- Foundation/CPObject.j | 6 +++--- Foundation/CPSet.j | 6 +++--- 8 files changed, 55 insertions(+), 55 deletions(-) diff --git a/Foundation/CPCountedSet.j b/Foundation/CPCountedSet.j index ccad1365f..a99b94a98 100644 --- a/Foundation/CPCountedSet.j +++ b/Foundation/CPCountedSet.j @@ -40,12 +40,12 @@ [super addObject:anObject]; - var hash = [anObject hash]; + var UID = [anObject UID]; - if (_counts[hash] === undefined) - _counts[hash] = 1; + if (_counts[UID] === undefined) + _counts[UID] = 1; else - ++_counts[hash]; + ++_counts[UID]; } - (void)removeObject:(id)anObject @@ -53,18 +53,18 @@ if (!_counts) return; - var hash = [anObject hash]; + var UID = [anObject UID]; - if (_counts[hash] === undefined) + if (_counts[UID] === undefined) return; else { - --_counts[hash]; + --_counts[UID]; - if (_counts[hash] === 0) + if (_counts[UID] === 0) { - delete _counts[hash]; + delete _counts[UID]; [super removeObject:anObject]; } } @@ -85,12 +85,12 @@ if (!_counts) _counts = {}; - var hash = [anObject hash]; + var UID = [anObject UID]; - if (_counts[hash] === undefined) + if (_counts[UID] === undefined) return 0; - return _counts[hash]; + return _counts[UID]; } diff --git a/Foundation/CPJSONPConnection.j b/Foundation/CPJSONPConnection.j index 7076697f3..f721291f7 100644 --- a/Foundation/CPJSONPConnection.j +++ b/Foundation/CPJSONPConnection.j @@ -86,7 +86,7 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; { try { - CPJSONPConnectionCallbacks["callback"+[self hash]] = function(data) + CPJSONPConnectionCallbacks["callback"+[self UID]] = function(data) { [_delegate connection:self didReceiveData:data]; [self removeScriptTag]; @@ -100,11 +100,11 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; if (_callbackParameter) { source += (source.indexOf('?') < 0) ? "?" : "&"; - source += _callbackParameter+"=CPJSONPConnectionCallbacks.callback"+[self hash]; + source += _callbackParameter+"=CPJSONPConnectionCallbacks.callback"+[self UID]; } else if (source.indexOf(CPJSONPCallbackReplacementString) >= 0) { - source = [source stringByReplacingOccurrencesOfString:CPJSONPCallbackReplacementString withString:"CPJSONPConnectionCallbacks.callback"+[self hash]]; + source = [source stringByReplacingOccurrencesOfString:CPJSONPCallbackReplacementString withString:"CPJSONPConnectionCallbacks.callback"+[self UID]]; } else return; @@ -130,8 +130,8 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; if(_scriptTag && _scriptTag.parentNode == head) head.removeChild(_scriptTag); - CPJSONPConnectionCallbacks["callback"+[self hash]] = nil; - delete CPJSONPConnectionCallbacks["callback"+[self hash]]; + CPJSONPConnectionCallbacks["callback"+[self UID]] = nil; + delete CPJSONPConnectionCallbacks["callback"+[self UID]]; } - (void)cancel diff --git a/Foundation/CPKeyValueCoding.j b/Foundation/CPKeyValueCoding.j index cc661e80e..59720316a 100644 --- a/Foundation/CPKeyValueCoding.j +++ b/Foundation/CPKeyValueCoding.j @@ -45,9 +45,9 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; if (!CPObjectAccessorsForClass) CPObjectAccessorsForClass = [CPDictionary dictionary]; - var hash = [isa hash], + var UID = [isa UID], selector = nil, - accessors = [CPObjectAccessorsForClass objectForKey:hash]; + accessors = [CPObjectAccessorsForClass objectForKey:UID]; if (accessors) { @@ -60,7 +60,7 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; { accessors = [CPDictionary dictionary]; - [CPObjectAccessorsForClass setObject:accessors forKey:hash]; + [CPObjectAccessorsForClass setObject:accessors forKey:UID]; } var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substr(1); @@ -88,9 +88,9 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; if (!CPObjectModifiersForClass) CPObjectModifiersForClass = [CPDictionary dictionary]; - var hash = [isa hash], + var UID = [isa UID], selector = nil, - modifiers = [CPObjectModifiersForClass objectForKey:hash]; + modifiers = [CPObjectModifiersForClass objectForKey:UID]; if (modifiers) { @@ -103,7 +103,7 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; { modifiers = [CPDictionary dictionary]; - [CPObjectModifiersForClass setObject:modifiers forKey:hash]; + [CPObjectModifiersForClass setObject:modifiers forKey:UID]; } if (selector) diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 107b80810..189bf803a 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -58,7 +58,7 @@ if (!anObserver || !aPath) return; - [[KVOProxyMap objectForKey:[self hash]] _removeObserver:anObserver forKeyPath:aPath]; + [[KVOProxyMap objectForKey:[self UID]] _removeObserver:anObserver forKeyPath:aPath]; } + (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey @@ -119,7 +119,7 @@ var KVOProxyMap = [CPDictionary dictionary], + (id)proxyForObject:(CPObject)anObject { - var proxy = [KVOProxyMap objectForKey:[anObject hash]]; + var proxy = [KVOProxyMap objectForKey:[anObject UID]]; if (proxy) return proxy; @@ -128,7 +128,7 @@ var KVOProxyMap = [CPDictionary dictionary], [proxy _replaceClass]; - [KVOProxyMap setObject:proxy forKey:[anObject hash]]; + [KVOProxyMap setObject:proxy forKey:[anObject UID]]; return proxy; } @@ -215,12 +215,12 @@ var KVOProxyMap = [CPDictionary dictionary], if (!composedOfKeys) return; - var dependentKeysForClass = [DependentKeysMap objectForKey:[_nativeClass hash]]; + var dependentKeysForClass = [DependentKeysMap objectForKey:[_nativeClass UID]]; if (!dependentKeysForClass) { dependentKeysForClass = [CPDictionary new]; - [DependentKeysMap setObject:dependentKeysForClass forKey:[_nativeClass hash]]; + [DependentKeysMap setObject:dependentKeysForClass forKey:[_nativeClass UID]]; } for (var i=0, count=composedOfKeys.length; i */ - (CPString)description { - return "<" + isa.name + " 0x" + [CPString stringWithHash:[self hash]] + ">"; + return "<" + isa.name + " 0x" + [CPString stringWithHash:[self UID]] + ">"; } // Sending Messages @@ -357,7 +357,7 @@ CPLog(@"Got some class: %@", inst); { [CPException raise:CPInvalidArgumentException reason: (class_isMetaClass(isa) ? "+" : "-") + " [" + [self className] + " " + aSelector + "] unrecognized selector sent to " + - (class_isMetaClass(isa) ? "class" : "instance") + " 0x" + [CPString stringWithHash:[self hash]]]; + (class_isMetaClass(isa) ? "class" : "instance") + " 0x" + [CPString stringWithHash:[self UID]]]; } // Archiving @@ -482,7 +482,7 @@ CPLog(@"Got some class: %@", inst); */ - (BOOL)isEqual:(id)anObject { - return self === anObject || [self hash] === [anObject hash]; + return self === anObject || [self UID] === [anObject UID]; } /*! diff --git a/Foundation/CPSet.j b/Foundation/CPSet.j index 824b925dc..02cbeaef5 100644 --- a/Foundation/CPSet.j +++ b/Foundation/CPSet.j @@ -232,7 +232,7 @@ */ - (BOOL)containsObject:(id)anObject { - if (_contents[[anObject hash]] && [_contents[[anObject hash]] isEqual:anObject]) + if (_contents[[anObject UID]] && [_contents[[anObject UID]] isEqual:anObject]) return YES; return NO; @@ -372,7 +372,7 @@ */ - (void)addObject:(id)anObject { - _contents[[anObject hash]] = anObject; + _contents[[anObject UID]] = anObject; _count++; } @@ -396,7 +396,7 @@ { if ([self containsObject:anObject]) { - delete _contents[[anObject hash]]; + delete _contents[[anObject UID]]; _count--; } } From 6cab77e005333413f3c6c31e0835c29df8fc3723 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 7 Jun 2009 16:07:08 -0700 Subject: [PATCH 024/244] More hash->UID name changes. Reviewed by andrew. --- AppKit/CPTableColumn.j | 54 ++++++++++++------------ AppKit/CPToolbar.j | 8 ++-- AppKit/CPView.j | 17 +++----- AppKit/Cib/CPCibLoading.j | 8 ++-- AppKit/Cib/_CPCibConnector.j | 4 +- AppKit/Cib/_CPCibObjectData.j | 8 ++-- AppKit/CoreAnimation/CALayer.j | 6 +-- AppKit/Platform/DOM/CPDOMDisplayServer.h | 10 ++--- AppKit/Platform/DOM/CPDOMDisplayServer.j | 2 +- 9 files changed, 56 insertions(+), 61 deletions(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 4484e266d..6d37c1de9 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -72,9 +72,9 @@ CPTableColumnUserResizingMask = 2; CPView _dataView; // default data view for this column - Object _dataViewData; // cache of data view archives (key=data view hash, value=data view archive) - Object _dataViewForView; // mapping from view instances back to their data view prototype (key=view instance hash, value=data view) - Object _purgableInfosForDataView; // (key=data view hash, value=) + Object _dataViewData; // cache of data view archives (key=data view UID, value=data view archive) + Object _dataViewForView; // mapping from view instances back to their data view prototype (key=view instance UID, value=data view) + Object _purgableInfosForDataView; // (key=data view UID, value=) } /*! @@ -290,10 +290,10 @@ CPTableColumnUserResizingMask; - (void)setDataView:(CPView )aView { if (_dataView) - _dataViewData[[_dataView hash]] = nil; + _dataViewData[[_dataView UID]] = nil; _dataView = aView; - _dataViewData[[aView hash]] = [CPKeyedArchiver archivedDataWithRootObject:aView]; + _dataViewData[[aView UID]] = [CPKeyedArchiver archivedDataWithRootObject:aView]; } /*! @@ -330,42 +330,42 @@ CPTableColumnUserResizingMask; /* - (void)_markViewAsPurgable:(CPView)aView { - var viewHash = [aView hash], - dataViewHash = [_dataViewForView[viewHash] hash]; + var viewUID = [aView UID], + dataViewUID = [_dataViewForView[viewUID] UID]; - if (!_purgableInfosForDataView[dataViewHash]) - _purgableInfosForDataView[dataViewHash] = [CPDictionary dictionary]; + if (!_purgableInfosForDataView[dataViewUID]) + _purgableInfosForDataView[dataViewUID] = [CPDictionary dictionary]; - [_purgableInfosForDataView[dataViewHash] setObject:aView forKey:viewHash]; + [_purgableInfosForDataView[dataViewUID] setObject:aView forKey:viewUID]; } */ - (void)_markView:(CPView)aView inRow:(unsigned)aRow asPurgable:(BOOL)isPurgable { - var viewHash = [aView hash], - dataViewHash = [_dataViewForView[viewHash] hash]; + var viewUID = [aView UID], + dataViewUID = [_dataViewForView[viewUID] UID]; - if (!_purgableInfosForDataView[dataViewHash]) + if (!_purgableInfosForDataView[dataViewUID]) { if (!isPurgable) return; - _purgableInfosForDataView[dataViewHash] = {}; + _purgableInfosForDataView[dataViewUID] = {}; } if (!isPurgable) { - if (_purgableInfosForDataView[dataViewHash][viewHash]) - CPLog.warn("removing unpurgable " + _purgableInfosForDataView[dataViewHash][viewHash]); - delete _purgableInfosForDataView[dataViewHash][viewHash]; + if (_purgableInfosForDataView[dataViewUID][viewUID]) + CPLog.warn("removing unpurgable " + _purgableInfosForDataView[dataViewUID][viewUID]); + delete _purgableInfosForDataView[dataViewUID][viewUID]; } else - _purgableInfosForDataView[dataViewHash][viewHash] = PurgableInfoMake(aView, aRow); + _purgableInfosForDataView[dataViewUID][viewUID] = PurgableInfoMake(aView, aRow); } - (CPView)_newDataViewForRow:(int)aRowIndex avoidingRows:(CPRange)rows { var view = [self dataViewForRow:aRowIndex], - viewHash = [view hash], - purgableInfos = _purgableInfosForDataView[viewHash]; + viewUID = [view UID], + purgableInfos = _purgableInfosForDataView[viewUID]; if (purgableInfos) { @@ -384,14 +384,14 @@ CPTableColumnUserResizingMask; } // if we haven't cached an archive of the data view, do it now - if (!_dataViewData[viewHash]) - _dataViewData[viewHash] = [CPKeyedArchiver archivedDataWithRootObject:view]; + if (!_dataViewData[viewUID]) + _dataViewData[viewUID] = [CPKeyedArchiver archivedDataWithRootObject:view]; // unarchive the data view cache - var newView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[viewHash]]; + var newView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[viewUID]]; - // map the new view's hash to it's data view prototype - _dataViewForView[[newView hash]] = view; + // map the new view's UID to it's data view prototype + _dataViewForView[[newView UID]] = view; CPLog.warn("creating cell: %s", newView); @@ -400,9 +400,9 @@ CPTableColumnUserResizingMask; - (void)_purge { - for (var viewHash in _purgableInfosForDataView) + for (var viewUID in _purgableInfosForDataView) { - var purgableInfos = _purgableInfosForDataView[viewHash]; + var purgableInfos = _purgableInfosForDataView[viewUID]; for (var key in purgableInfos) { diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 7d976b513..f292d7631 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -725,7 +725,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) - (CPView)viewForItem:(CPToolbarItem)anItem { - var info = [_itemInfos objectForKey:[anItem hash]]; + var info = [_itemInfos objectForKey:[anItem UID]]; if (!info) return nil; @@ -735,7 +735,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) - (CPTextField)labelForItem:(CPToolbarItem)anItem { - var info = [_itemInfos objectForKey:[anItem hash]]; + var info = [_itemInfos objectForKey:[anItem UID]]; if (!info) return nil; @@ -745,7 +745,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) - (float)minWidthForItem:(CPToolbarItem)anItem { - var info = [_itemInfos objectForKey:[anItem hash]]; + var info = [_itemInfos objectForKey:[anItem UID]]; if (!info) return 0; @@ -814,7 +814,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) var minSize = [item minSize], minWidth = MAX(minSize.width, CGRectGetWidth([label frame])); - [_itemInfos setObject:_CPToolbarItemInfoMake(index, view, label, minWidth) forKey:[item hash]]; + [_itemInfos setObject:_CPToolbarItemInfoMake(index, view, label, minWidth) forKey:[item UID]]; _minWidth += minWidth + TOOLBAR_ITEM_MARGIN; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 2974ed616..3bc588813 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -143,8 +143,6 @@ var DOMElementPrototype = nil, BOOL _postsBoundsChangedNotifications; BOOL _inhibitFrameAndBoundsChangedNotifications; - CPString _displayHash; - #if PLATFORM(DOM) DOMElement _DOMElement; DOMElement _DOMContentsElement; @@ -242,8 +240,6 @@ var DOMElementPrototype = nil, _isHidden = NO; _hitTests = YES; - _displayHash = [self hash]; - #if PLATFORM(DOM) _DOMElement = DOMElementPrototype.cloneNode(false); @@ -1535,13 +1531,13 @@ setBoundsOrigin: - (void)setNeedsDisplayInRect:(CPRect)aRect { #if PLATFORM(DOM) - var hash = [[self class] hash], - hasCustomDrawRect = CustomDrawRectViews[hash]; + var UID = [[self class] UID], + hasCustomDrawRect = CustomDrawRectViews[UID]; if (!hasCustomDrawRect && typeof hasCustomDrawRect === "undefined") { hasCustomDrawRect = [self methodForSelector:@selector(drawRect:)] != [CPView instanceMethodForSelector:@selector(drawRect:)]; - CustomDrawRectViews[hash] = hasCustomDrawRect; + CustomDrawRectViews[UID] = hasCustomDrawRect; } if (!hasCustomDrawRect) @@ -1666,13 +1662,13 @@ setBoundsOrigin: _needsLayout = YES; #if PLATFORM(DOM) - var hash = [[self class] hash], - hasCustomLayoutSubviews = CustomLayoutSubviewsViews[hash]; + var UID = [[self class] UID], + hasCustomLayoutSubviews = CustomLayoutSubviewsViews[UID]; if (hasCustomLayoutSubviews === undefined) { hasCustomLayoutSubviews = [self methodForSelector:@selector(layoutSubviews)] != [CPView instanceMethodForSelector:@selector(layoutSubviews)]; - CustomLayoutSubviewsViews[hash] = hasCustomLayoutSubviews; + CustomLayoutSubviewsViews[UID] = hasCustomLayoutSubviews; } if (!hasCustomLayoutSubviews) @@ -2256,7 +2252,6 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", //_subviews[index]._superview = self; } #endif - _displayHash = [self hash]; if ([aCoder containsValueForKey:CPViewIsHiddenKey]) [self setHidden:[aCoder decodeBoolForKey:CPViewIsHiddenKey]]; diff --git a/AppKit/Cib/CPCibLoading.j b/AppKit/Cib/CPCibLoading.j index dea773582..0ab07aef6 100644 --- a/AppKit/Cib/CPCibLoading.j +++ b/AppKit/Cib/CPCibLoading.j @@ -43,7 +43,7 @@ var LoadInfoForCib = {}; { var cib = [[CPCib alloc] initWithContentsOfURL:anAbsolutePath loadDelegate:self]; - LoadInfoForCib[[cib hash]] = { loadDelegate:aDelegate, externalNameTable:aNameTable }; + LoadInfoForCib[[cib UID]] = { loadDelegate:aDelegate, externalNameTable:aNameTable }; } + (void)loadCibNamed:(CPString)aName owner:(id)anOwner loadDelegate:(id)aDelegate @@ -59,14 +59,14 @@ var LoadInfoForCib = {}; { var cib = [[CPCib alloc] initWithCibNamed:aFileName bundle:self loadDelegate:[self class]]; - LoadInfoForCib[[cib hash]] = { loadDelegate:aDelegate, externalNameTable:aNameTable }; + LoadInfoForCib[[cib UID]] = { loadDelegate:aDelegate, externalNameTable:aNameTable }; } + (void)cibDidFinishLoading:(CPCib)aCib { - var loadInfo = LoadInfoForCib[[aCib hash]]; + var loadInfo = LoadInfoForCib[[aCib UID]]; - delete LoadInfoForCib[[aCib hash]]; + delete LoadInfoForCib[[aCib UID]]; [aCib instantiateCibWithExternalNameTable:loadInfo.externalNameTable]; diff --git a/AppKit/Cib/_CPCibConnector.j b/AppKit/Cib/_CPCibConnector.j index 2a134492b..6ddd6ce05 100644 --- a/AppKit/Cib/_CPCibConnector.j +++ b/AppKit/Cib/_CPCibConnector.j @@ -16,12 +16,12 @@ var _CPCibConnectorSourceKey = @"_CPCibConnectorSourceKey", - (void)replaceObjects:(JSObject)replacementObjects { - var replacement = replacementObjects[[_source hash]]; + var replacement = replacementObjects[[_source UID]]; if (replacement !== undefined) _source = replacement; - replacement = replacementObjects[[_destination hash]]; + replacement = replacementObjects[[_destination UID]]; if (replacement !== undefined) _destination = replacement; diff --git a/AppKit/Cib/_CPCibObjectData.j b/AppKit/Cib/_CPCibObjectData.j index 5a5525ea7..a5deb3bf6 100644 --- a/AppKit/Cib/_CPCibObjectData.j +++ b/AppKit/Cib/_CPCibObjectData.j @@ -119,7 +119,7 @@ objectEnumerator = [_visibleWindows objectEnumerator]; while (object = [objectEnumerator nextObject]) - [_replacementObjects[[object hash]] makeKeyAndOrderFront:self]; + [_replacementObjects[[object UID]] makeKeyAndOrderFront:self]; } @end @@ -242,7 +242,7 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey if (instantiatedObject !== object) { - _replacementObjects[[object hash]] = instantiatedObject; + _replacementObjects[[object UID]] = instantiatedObject; if ([instantiatedObject isKindOfClass:[CPView class]]) { @@ -266,7 +266,7 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey - (void)establishConnectionsWithOwner:(id)anOwner topLevelObjects:(CPMutableArray)topLevelObjects { - _replacementObjects[[_fileOwner hash]] = anOwner; + _replacementObjects[[_fileOwner UID]] = anOwner; var index = 0, count = _connections.length; @@ -287,7 +287,7 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey while (count--) { var object = _objectsKeys[count], - instantiatedObject = _replacementObjects[[object hash]]; + instantiatedObject = _replacementObjects[[object UID]]; if (instantiatedObject) object = instantiatedObject; diff --git a/AppKit/CoreAnimation/CALayer.j b/AppKit/CoreAnimation/CALayer.j index baef5f944..85e415787 100644 --- a/AppKit/CoreAnimation/CALayer.j +++ b/AppKit/CoreAnimation/CALayer.j @@ -779,9 +779,9 @@ if (_DOMContentsElement && aLayer._zPosition > _DOMContentsElement.style.zIndex) + (void)runLoopUpdateLayers {if (window.oops) {alert(window.latest); objj_debug_print_backtrace();} window.loop = true; - for (hash in CALayerRegisteredRunLoopUpdates) + for (UID in CALayerRegisteredRunLoopUpdates) { - var layer = CALayerRegisteredRunLoopUpdates[hash], + var layer = CALayerRegisteredRunLoopUpdates[UID], mask = layer._runLoopUpdateMask; if (mask & CALayerDOMUpdateMask) @@ -813,7 +813,7 @@ if (_DOMContentsElement && aLayer._zPosition > _DOMContentsElement.style.zIndex) } _runLoopUpdateMask |= anUpdateMask; - CALayerRegisteredRunLoopUpdates[[self hash]] = self; + CALayerRegisteredRunLoopUpdates[[self UID]] = self; } /* diff --git a/AppKit/Platform/DOM/CPDOMDisplayServer.h b/AppKit/Platform/DOM/CPDOMDisplayServer.h index 9216ab901..c094205fa 100644 --- a/AppKit/Platform/DOM/CPDOMDisplayServer.h +++ b/AppKit/Platform/DOM/CPDOMDisplayServer.h @@ -104,20 +104,20 @@ #define CPDOMDisplayServerAddView(aView)\ {\ - var ___hash = [aView hash];\ - if (typeof (CPDOMDisplayServerViewsContext[___hash]) == "undefined")\ + var ___UID = [aView UID];\ + if (typeof (CPDOMDisplayServerViewsContext[___UID]) == "undefined")\ {\ CPDOMDisplayServerViews[CPDOMDisplayServerViewsCount++] = aView;\ - CPDOMDisplayServerViewsContext[___hash] = aView;\ + CPDOMDisplayServerViewsContext[___UID] = aView;\ }\ }\ #define CPDOMDisplayServerRemoveView(aView)\ {\ - var index = CPDOMDisplayServerViewsContext[[aView hash]];\ + var index = CPDOMDisplayServerViewsContext[[aView UID]];\ if (typeof index != "undefined") \ {\ - CPDOMDisplayServerViewsContext[[aView hash]];\ + CPDOMDisplayServerViewsContext[[aView UID]];\ CPDOMDisplayServerViews[index] = NULL;\ }\ }\ diff --git a/AppKit/Platform/DOM/CPDOMDisplayServer.j b/AppKit/Platform/DOM/CPDOMDisplayServer.j index 2c77e40e3..b4e974646 100644 --- a/AppKit/Platform/DOM/CPDOMDisplayServer.j +++ b/AppKit/Platform/DOM/CPDOMDisplayServer.j @@ -150,7 +150,7 @@ CPDOMDisplayServerViewsContext = {}; { var view = views[index]; - delete CPDOMDisplayServerViewsContext[[view hash]]; + delete CPDOMDisplayServerViewsContext[[view UID]]; [view layoutIfNeeded]; [view displayIfNeeded]; From ece999662d08e40feabe68a34016431e6ccec3d9 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 8 Jun 2009 10:27:25 -0700 Subject: [PATCH 025/244] Beginnings of new versions of these classes. Reviewed by me. --- AppKit/CPTableHeaderView.j | 19 ++ AppKit/NEWCPTableColumn.j | 335 +++++++++++++++++++++ AppKit/NEWCPTableView.j | 577 +++++++++++++++++++++++++++++++++++++ 3 files changed, 931 insertions(+) create mode 100644 AppKit/CPTableHeaderView.j create mode 100644 AppKit/NEWCPTableColumn.j create mode 100644 AppKit/NEWCPTableView.j diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j new file mode 100644 index 000000000..faa544189 --- /dev/null +++ b/AppKit/CPTableHeaderView.j @@ -0,0 +1,19 @@ + +@import + + +@implementation CPTableHeaderView : CPView +{ +} + +- (void)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + + if (self) + [self setBackgroundColor:[CPColor redColor]]; + + return self; +} + +@end \ No newline at end of file diff --git a/AppKit/NEWCPTableColumn.j b/AppKit/NEWCPTableColumn.j new file mode 100644 index 000000000..eaa4ffe43 --- /dev/null +++ b/AppKit/NEWCPTableColumn.j @@ -0,0 +1,335 @@ + +@import +@import +@import +@import + +@import "CPTableHeaderView.j" + +/* + @global + @class CPTableColumn +*/ +CPTableColumnNoResizing = 0; +/* + @global + @class CPTableColumn +*/ +CPTableColumnAutoresizingMask = 1; +/* + @global + @class CPTableColumn +*/ +CPTableColumnUserResizingMask = 2; + + +@implementation NEWCPTableColumn : CPObject +{ + CPTableView _tableView; + CPView _headerView; + + float _width; + float _minWidth; + float _maxWidth; + + id _identifier; + BOOL _isEditable; + CPSortDescriptor _sortDescriptorPrototype; + BOOL _isHidden; + CPString _headerToolTip; +} + +- (id)initWithIdentifier:(id)anIdentifier +{ + self = [super init]; + + if (self) + { + [self setIdentifier:anIdentifier]; + [self setHeaderView:[CPTableHeaderView new]]; + } + + return self +} + +- (void)setTableView:(CPTableView)aTableView +{ + _tableView = aTableView; +} + +- (CPTableView)tableView +{ + return _tableView; +} + +- (void)setWidth:(float)aWidth +{ + aWidth = +aWidth; + + if (_width === aWidth) + return; + + var newWidth = MIN(MAX(aWidth, [self minWidth]), [self maxWidth]); + + if (_width === newWidth) + return; + + var oldWidth = _width; + + _width = newWidth; + + var tableView = [self tableView]; + + if (tableView) + [[CPNotificationCenter defaultCenter] + postNotificationName:CPTableViewColumnDidResizeNotification + object:tableView + userInfo:[CPDictionary dictionaryWithObjects:[self, oldWidth] forKeys:[@"CPTableColumn", "CPOldWidth"]]]; +} + +- (float)width +{ + return _width; +} + + (void)setMinWidth:(float)aMinWidth +{ + aMinWidth = +aMinWidth; + + if (_minWidth === aMinWidth) + return; + + _minWidth = aMinWidth; + + var width = [self width], + newWidth = MAX(width, [self minWidth]); + + if (width !== newWidth) + [self setWidth:newWidth]; +} + +- (float)minWidth +{ + return _minWidth; +} + + (void)setMaxWidth:(float)aMaxWidth +{ + aMaxWidth = +aMaxWidth; + + if (_maxWidth === aMaxWidth) + return; + + _maxWidth = aMaxWidth; + + var width = [self width], + newWidth = MAX(width, [self maxWidth]); + + if (width !== newWidth) + [self setWidth:newWidth]; +} + +- (float)maxWidth +{ + return _maxWidth; +} + + (void)setResizingMask:(unsigned)aResizingMask +{ + _resizingMask = aResizingMask; +} + +- (float)resizingMask +{ + return _resizingMask; +} + +- (void)sizeToFit +{ + var width = _CGRectGetWidth([_headerView frame]); + + if (width < [self minWidth]) + [self setMinWidth:width]; + else if (width > [self maxWidth]) + [self setMaxWidth:width] + + if (_width !== width) + [self setWidth:width]; +} + +//Setting Component Cells +- (void)setHeaderView:(CPView)aView +{ + if (!_headerView) + [CPException raise:CPInvalidArgumentException reason:@"Attempt to set nil header view on " + [self description]]; + + _headerView = aView; +} + +- (CPView)headerView +{ + return _headerView; +} + +- (void)setDataView:(CPView)aView +{ + if (_dataView === aView) + return; + + if (_dataView) + _dataViewData[[_dataView UID]] = nil; + + _dataView = aView; + _dataViewData[[aView UID]] = [CPKeyedArchiver archivedDataWithRootObject:aView]; +} + +- (CPView)dataView +{ + return _dataView; +} + +/* + Returns the CPView object used by the CPTableView to draw values for the receiver. + + By default, this method just calls dataView. Subclassers can override if they need to + potentially use different cells for different rows. Subclasses should expect this method + to be invoked with row equal to 1 in cases where no actual row is involved but the table + view needs to get some generic cell info. +*/ + (id)dataViewForRow:(int)aRowIndex +{ + return [self dataView]; +} + +- (id)_newDataViewForRow:(int)aRowIndex +{ + var dataView = [self dataViewForRow:aRowIndex], + dataViewUID = [view UID]; + + // if we haven't cached an archive of the data view, do it now + if (!_dataViewData[dataViewUID]) + _dataViewData[dataViewUID] = [CPKeyedArchiver archivedDataWithRootObject:dataView]; + + // unarchive the data view cache + var newDataView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[dataViewUID]]; + + return newView; +} + +//Setting the Identifier + +/* + Sets the receivers identifier to anIdentifier. +*/ + (void)setIdentifier:(id)anIdentifier +{ + _identifier = anIdentifier; +} + +/* + Returns the object used by the data source to identify the attribute corresponding to the receiver. +*/ + (id)identifier +{ + return _identifier; +} + + +//Controlling Editability + +/* + Controls whether the user can edit cells in the receiver by double-clicking them. +*/ + (void)setEditable:(BOOL)shouldBeEditable +{ + _isEditable = shouldBeEditable; +} + +/* + Returns YES if the user can edit cells associated with the receiver by double-clicking the + column in the NSTableView, NO otherwise. +*/ + (BOOL)isEditable +{ + return _isEditable; +} + + +//Sorting +- (void)setSortDescriptorPrototype:(CPSortDescriptor)aSortDescriptor +{ + _sortDescriptorPrototype = aSortDescriptor; +} + +- (CPSortDescriptor)sortDescriptorPrototype +{ + return _sortDescriptorPrototype; +} + +//Setting Column Visibility + (BOOL)isHidden +{ + return _isHidden; +} + + + (void)setHidden:(BOOL)shouldBeHidden: +{ + _isHidden = shouldBeHidden; +} + + +//Setting Tool Tips + +/* + Sets the tooltip string that is displayed when the cursor pauses over the + header cell of the receiver. +*/ + + (void)setHeaderToolTip:(CPString)aToolTip +{ + _headerToolTip = aToolTip; +} + + + (CPString)headerToolTip +{ + return _headerToolTip; +} + +@end + + +@implementation NEWCPTableColumn (NSInCompatibility) + +- (void)setHeaderCell:(CPView)aView +{ + [CPException raise:CPUnsupportedMethodException + reason:"Not supported. -setHeaderCell:aView instead."]; +} + +- (CPView)headerCell +{ + [CPException raise:CPUnsupportedMethodException + reason:"Not supported. -headerView instead."]; +} + +- (void)setDataCell:(CPView)aView +{ + [CPException raise:CPUnsupportedMethodException + reason:"Not supported. Use -setHeaderCell:aView instead."]; +} + +- (CPView)dataCell +{ + [CPException raise:CPUnsupportedMethodException + reason:"Not supported. Use -dataCell instead."]; +} + +- (id)dataCellForRow:(int)row +{ + [CPException raise:CPUnsupportedMethodException + reason:"Not supported. Use -dataViewForRow:row instead."]; +} + +@end diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j new file mode 100644 index 000000000..b3da188cd --- /dev/null +++ b/AppKit/NEWCPTableView.j @@ -0,0 +1,577 @@ +@import + +var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2 + + CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_ = 1 << 3, + CPTableViewDataSource_tableView_namesOfPromisedFilesDroppedAtDestination_forDraggedRowsWithIndexes_ = 1 << 4, + CPTableViewDataSource_tableView_validateDrop_proposedRow_proposedDropOperation_ = 1 << 5, + CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_ = 1 << 6, + + CPTableViewDataSource_tableView_sortDescriptorsDidChange_ = 1 << 7; + +var CPTableViewDelegate_selectionShouldChangeInTableView_ = 1 << 0, + CPTableViewDelegate_tableView_dataViewForTableColumn_row_ = 1 << 1, + CPTableViewDelegate_tableView_didClickTableColumn_ = 1 << 2, + CPTableViewDelegate_tableView_didDragTableColumn_ = 1 << 3, + CPTableViewDelegate_tableView_heightOfRow_ = 1 << 4, + CPTableViewDelegate_tableView_isGroupRow_ = 1 << 5, + CPTableViewDelegate_tableView_mouseDownInHeaderOfTableColumn_ = 1 << 6, + CPTableViewDelegate_tableView_nextTypeSelectMatchFromRow_toRow_forString_ = 1 << 7, + CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_ = 1 << 8, + CPTableViewDelegate_tableView_shouldEditTableColumn_row_ = 1 << 9, + CPTableViewDelegate_tableView_shouldSelectRow_ = 1 << 10, + CPTableViewDelegate_tableView_shouldSelectTableColumn_ = 1 << 11, + CPTableViewDelegate_tableView_shouldShowViewExpansionForTableColumn_row_ = 1 << 12, + CPTableViewDelegate_tableView_shouldTrackView_forTableColumn_row_ = 1 << 13, + CPTableViewDelegate_tableView_shouldTypeSelectForEvent_withCurrentSearchString_ = 1 << 14, + CPTableViewDelegate_tableView_toolTipForView_rect_tableColumn_row_mouseLocation_ = 1 << 15, + CPTableViewDelegate_tableView_typeSelectStringForTableColumn_row_ = 1 << 16, + CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_ = 1 << 17, + CPTableViewDelegate_tableViewSelectionDidChange_ = 1 << 18, + CPTableViewDelegate_tableViewSelectionIsChanging_ = 1 << 19; + +// TODO: add docs +CPTableViewSelectionHighlightStyleRegular = 0; +CPTableViewSelectionHighlightStyleSourceList = 1; + + +@implementation NEWCPTableView : CPControl +{ + id _dataSource; + unsigned _implementedDataSourceMethods; + CPArray _tableColumns; + + //Configuring Behavior + BOOL _allowsColumnReordering; + BOOL _allowsColumnResizing; + BOOL _allowsMultipleSelection; + BOOL _allowsEmptySelection; + + //Setting Display Attributes + CGSize _intercellSpacing; + float _rowHeight; + BOOL _usesAlternatingRowBackgroundColors; + unsigned _selectionHighlightMask; + unsigned _currentHighlightedTableColumn; + + unsigned _numberOfRows; + unsigned _numberOfColumns; + +} + +- (void)_init +{ + //Configuring Behavior + _allowsColumnReordering = YES; + _allowsColumnResizing = YES; + _allowsMultipleSelection = NO; + _allowsEmptySelection = YES; + _allowsColumnSelection = NO; + + //Setting Display Attributes + _selectionHighlightMask = CPTableViewSelectionHighlightStyleRegular; +} + + + +- (void)setDataSource:(id)aDataSource +{ + if (_dataSource === aDataSource) + return; + + _dataSource = aDataSource; + _implementedDataSourceMethods = 0; + + if (!_dataSource) + return; + + if (![_dataSource respondsToSelector:@selector(numberOfRowsInTableView:)]) + [CPException raise:CPInternalInconsistencyException + reason:[aDataSource description] " does not implement numberOfRowsInTableView:."]; + + if (![_dataSource respondsToSelector:@selector(tableView:objectValueForTableColumn:row:)]) + [CPException raise:CPInternalInconsistencyException + reason:[aDataSource description] " does not implement tableView:objectValueForTableColumn:row:"]; + + if ([_dataSource respondsToSelector:@selector(tableView:setObjectValue:forTableColumn:row:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_; + + if ([_dataSource respondsToSelector:@selector(tableView:setObjectValue:forTableColumn:row:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_; + + if ([_dataSource respondsToSelector:@selector(tableView:namesOfPromisedFilesDroppedAtDestination:forDraggedRowsWithIndexes:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_namesOfPromisedFilesDroppedAtDestination_forDraggedRowsWithIndexes_; + + if ([_dataSource respondsToSelector:@selector(tableView:validateDrop:proposedRow:proposedDropOperation:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_validateDrop_proposedRow_proposedDropOperation_; + + if ([_dataSource respondsToSelector:@selector(tableView:writeRowsWithIndexes:toPasteboard:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_; +} + +- (id)dataSource +{ + return _dataSource; +} + +//Loading Data + + * reloadData + +//Target-action Behavior + + * setDoubleAction: + * doubleAction + * clickedColumn + * clickedRow + +//Configuring Behavior + + (void)setAllowsColumnReordering:(BOOL)allowsColumnReordering +{ + _allowsColumnReordering = allowsColumnReordering; +} + + (BOOL)allowsColumnReordering +{ + return _allowsColumnReordering; +} + + (void)setAllowsColumnResizing:(BOOL)allowsColumnResizing +{ + _allowsColumnResizing = allowsColumnResizing; +} + + (BOOL)allowsColumnResizing +{ + return _allowsColumnResizing; +} + + (void)setAllowsMultipleSelection:(BOOL)allowsMultipleSelection +{ + _allowsMultipleSelection = allowsMultipleSelection; +} + + + (BOOL)allowsMultipleSelection +{ + return _allowsMultipleSelection; +} + + (void)setAllowsEmptySelection:(BOOL)allowsEmptySelection +{ + _allowsEmptySelection = allowsEmptySelection; +} + + (BOOL)allowsEmptySelection +{ + return _allowsEmptySelection; +} + + (void)setAllowsColumnSelection:(BOOL)allowsColumnSelection +{ + _allowsColumnSelection = allowsColumnSelection; +} + + (BOOL)allowsColumnSelection +{ + return allowsColumnSelection; +} + +//Setting Display Attributes + + (void)setIntercellSpacing:(CGSize)aSize +{ + if (_intercellSpacing.width != aSize.width) + { + var i = 1, + delta = aSize.width - _intercellSpacing.width; + total = delta; + + for (; i < _tableColumns.length; ++i, total += delta) + { + var origin = [_tableColumnViews[i] frame].origin; + [_tableColumnViews[i] setFrameOrigin:CGPointMake(origin.x + total, origin.y)]; + } + } + + if (_intercellSpacing.height != aSize.height) + { + var i = 0; + + for (; i < _tableColumns.length; ++i, total += delta) + { + [_tableColumnViews[i] setFrameSize:CGSizeMake([_tableColumnViews[i] width], _numberOfRows * (_rowHeight + _intercellSpacing.height))]; + + var j = 1, + y = _rowHeight + _intercellSpacing.height; + + for (; j < _numberOfRows; ++i, y += _rowHeight + _intercellSpacing.height) + { + if (!_tableCells[i][j]) + continue; + + [_tableCells[i][j] setFrameOrigin:CPPointMake(0.0, y)]; + } + } + + // FIXME: variable height rows + } + + _intercellSpacing = _CGSizeCreateCopy(aSize); +} + + (CPSize)intercellSpacing +{ + return _intercellSpacing; +} + + + (void)setRowHeight:(unsigned)aRowHeight +{ + if (_rowHeight == aRowHeight) + return; + + _rowHeight = aRowHeight; +} + +- (unsigned)rowHeight +{ + return _rowHeight; +} + + + +// TODO: confirm: comes from superclass CPView +// setBackgroundColor: +// backgroundColor + + + (void)setUsesAlternatingRowBackgroundColors:(BOOL)shouldUseAlternatingRowBackgroundColors +{ + // TODO:need to look at how one actually sets the alternating row, a tip at: + // http://forums.macnn.com/79/developer-center/228347/nstableview-alternating-row-colors/ + // otherwise this may not be feasible or may introduce an additional change req'd in CP + // we'd probably need to iterate through rowId % 2 == 0 and setBackgroundColor with + // whatever the alternating row color is. + _usesAlternatingRowBackgroundColors = shouldUseAlternatingRowBackgroundColors; +} + + (BOOL)usesAlternatingRowBackgroundColors +{ + return _usesAlternatingRowBackgroundColors; +} + + (unsigned)selectionHighlightStyle +{ + return _selectionHighlightMask; +} + + (void)setSelectionHighlightStyle:(unsigned)aSelectionHighlightStyle +{ + _selectionHighlightMask = aSelectionHighlightStyle; +} + + setGridColor: + + + * gridColor + * setGridStyleMask: + * gridStyleMask + * indicatorImageInTableColumn: + * setIndicatorImage:inTableColumn: + +//Column Management + + * addTableColumn: + * removeTableColumn: + * moveColumn:toColumn: + * tableColumns + * columnWithIdentifier: + * tableColumnWithIdentifier: + +//Selecting Columns and Rows + + * selectColumnIndexes:byExtendingSelection: + * selectRowIndexes:byExtendingSelection: + * selectedColumnIndexes + * selectedRowIndexes + * deselectColumn: + * deselectRow: + * numberOfSelectedColumns + * numberOfSelectedRows + * selectedColumn + * selectedRow + * isColumnSelected: + * isRowSelected: + * selectAll: + * deselectAll: + * allowsTypeSelect + * setAllowsTypeSelect: + +//Table Dimensions + + (int)numberOfColumns +{ + return _numberOfColumns; +} + +/* + Returns the number of rows in the receiver. +*/ + (int)numberOfRows +{ + return _numberOfRows; +} + +//Displaying Cell + + * tableView:willDisplayCell:forTableColumn:row: delegate method + * preparedCellAtColumn:row: + * tableView:dataCellForTableColumn:row: delegate method + * tableView:shouldShowCellExpansionForTableColumn:row: delegate method + * tableView:isGroupRow: delegate method + +//Editing Cells + + * editColumn:row:withEvent:select: + * editedColumn + * editedRow + * tableView:shouldEditTableColumn:row: delegate method + +//Setting Auxiliary Views + + * setHeaderView: + * headerView + * setCornerView: + * cornerView + +//Layout Support + + * rectOfColumn: + * rectOfRow: + * rowsInRect: + * columnIndexesInRect: + * columnAtPoint: + * rowAtPoint: + * frameOfCellAtColumn:row: + * columnAutoresizingStyle + * setColumnAutoresizingStyle: + * sizeLastColumnToFit + * noteNumberOfRowsChanged + * tile + * sizeToFit + * noteHeightOfRowsWithIndexesChanged: + * tableView:heightOfRow: delegate method + * columnsInRect: Deprecated in Mac OS X v10.5 + +//Drawing + + * drawRow:clipRect: + * drawGridInClipRect: + * highlightSelectionInClipRect: + * drawBackgroundInClipRect: + +//Scrolling + + * scrollRowToVisible: + * scrollColumnToVisible: + +//Persistence + + * autosaveName + * autosaveTableColumns + * setAutosaveName: + * setAutosaveTableColumns: + +//Selecting in the Tableview + + * selectionShouldChangeInTableView: delegate method + * tableView:shouldSelectRow: delegate method + * tableView:selectionIndexesForProposedSelection: delegate method + * tableView:shouldSelectTableColumn: delegate method + * tableViewSelectionIsChanging: delegate method + * tableViewSelectionDidChange: delegate method + * tableView:shouldTypeSelectForEvent:withCurrentSearchString: delegate method + * tableView:typeSelectStringForTableColumn:row: delegate method + * tableView:nextTypeSelectMatchFromRow:toRow:forString: delegate method + +//Setting the Delegate:(id)aDelegate + + +- (void)setDelegate:(id)aDelegate +{ + if (_delegate === aDelegate) + return; + + var defaultCenter = [CPNotificationCenter defaultCenter]; + + if (_delegate) + { + if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) + [defaultCenter + removeObserver:_delegate + name:CPTableViewColumnDidMoveNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) + [defaultCenter + removeObserver:_delegate + name:CPTableViewColumnDidResizeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) + [defaultCenter + removeObserver:_delegate + name:CPTableViewSelectionDidChangeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) + [defaultCenter + removeObserver:_delegate + name:CPTableViewSelectionIsChangingNotification + object:self]; + } + + _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(selectionShouldChangeInTableView:)]) + _implementedDelegateMethods |= CPTableViewDelegate_selectionShouldChangeInTableView_; + + if ([_delegate respondsToSelector:@selector(tableView:dataViewForTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_dataViewForTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:didClickTableColumn:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_didClickTableColumn_; + + if ([_delegate respondsToSelector:@selector(tableView:didDragTableColumn:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_didDragTableColumn_; + + if ([_delegate respondsToSelector:@selector(tableView:heightOfRow:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_heightOfRow_; + + if ([_delegate respondsToSelector:@selector(tableView:isGroupRow:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_isGroupRow_; + + if ([_delegate respondsToSelector:@selector(tableView:mouseDownInHeaderOfTableColumn:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_mouseDownInHeaderOfTableColumn_; + + if ([_delegate respondsToSelector:@selector(tableView:nextTypeSelectMatchFromRow:toRow:forString:) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_nextTypeSelectMatchFromRow_toRow_forString_; + + if ([_delegate respondsToSelector:@selector(tableView:selectionIndexesForProposedSelection:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldEditTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldEditTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldSelectRow:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldSelectRow_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldSelectTableColumn:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldSelectTableColumn_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldShowViewExpansionForTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldShowViewExpansionForTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldTrackView:forTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldTrackView_forTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldTypeSelectForEvent:withCurrentSearchString:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldTypeSelectForEvent_withCurrentSearchString_; + + if ([_delegate respondsToSelector:@selector(tableView:toolTipForView:rect:tableColumn:row:mouseLocation:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_toolTipForView_rect_tableColumn_row_mouseLocation_; + + if ([_delegate respondsToSelector:@selector(tableView:typeSelectStringForTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_typeSelectStringForTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:willDisplayView:forTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(tableViewColumnDidMove:) + name:CPTableViewColumnDidMoveNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(tableViewColumnDidMove:) + name:CPTableViewColumnDidResizeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(tableViewSelectionDidChange:) + name:CPTableViewSelectionDidChangeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(tableViewSelectionIsChanging:) + name:CPTableViewSelectionIsChangingNotification + object:self]; +} + +- (id)delegate +{ + return _delegate; +} + +//Highlightable Column Headers + + (CPTableColumn)highlightedTableColumn +{ + +} + + * setHighlightedTableColumn: + +//Dragging + + * dragImageForRowsWithIndexes:tableColumns:event:offset: + * canDragRowsWithIndexes:atPoint: + * setDraggingSourceOperationMask:forLocal: + * setDropRow:dropOperation: + * setVerticalMotionCanBeginDrag: + * verticalMotionCanBeginDrag + +//Sorting + + * setSortDescriptors: + * sortDescriptors + +//Moving and Resizing Columns + + * tableView:didDragTableColumn: delegate method + * tableViewColumnDidMove: delegate method + * tableViewColumnDidResize: delegate method + +//Responding to Mouse Events + + * tableView:didClickTableColumn: delegate method + * tableView:mouseDownInHeaderOfTableColumn: delegate method + * tableView:shouldTrackCell:forTableColumn:row: delegate method + +//Text Delegate Methods + + * textShouldBeginEditing: + * textDidBeginEditing: + * textDidChange: + * textShouldEndEditing: + * textDidEndEditing: + +//Displaying Tooltips + + * tableView:toolTipForCell:rect:tableColumn:row:mouseLocation: delegate method + + + + +@end \ No newline at end of file From eab4f4bf780e8d07d82a711f822f8bf70cc18899 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 9 Jun 2009 15:36:53 -0700 Subject: [PATCH 026/244] Made CPImageView accept image drag and drop. Reviewed by me. --- AppKit/CPImageView.j | 48 +++++++++++++++++++++++- AppKit/CPPasteboard.j | 6 ++- AppKit/CPView.j | 2 +- Tools/Rake/lib/objective-j/bundletask.rb | 2 + Tools/nib2cib/NSImageView.j | 1 + 5 files changed, 55 insertions(+), 4 deletions(-) diff --git a/AppKit/CPImageView.j b/AppKit/CPImageView.j index ceec7c59d..11b180534 100644 --- a/AppKit/CPImageView.j +++ b/AppKit/CPImageView.j @@ -70,7 +70,9 @@ var LEFT_SHADOW_INSET = 3.0, BOOL _hasShadow; CPView _shadowView; - + + BOOL _isEditable; + CGRect _imageRect; } @@ -339,11 +341,47 @@ var LEFT_SHADOW_INSET = 3.0, [[self nextResponder] mouseDown:anEvent]; } +- (void)setEditable:(BOOL)shouldBeEditable +{ + if (_isEditable === shouldBeEditable) + return _isEditable; + + _isEditable = shouldBeEditable; + + if (_isEditable) + [self registerForDraggedTypes:[CPImagesPboardType]]; + + else + { + var draggedTypes = [self registeredDraggedTypes]; + + [self unregisterDraggedTypes]; + + [draggedTypes removeObjectIdenticalTo:CPImagesPboardType]; + + [self registerForDraggedTypes:draggedTypes]; + } +} + +- (BOOL)isEditable +{ + return _isEditable; +} + +- (void)performDragOperation:(CPDraggingInfo)aSender +{ + var images = [CPKeyedUnarchiver unarchiveObjectWithData:[[aSender draggingPasteboard] dataForType:CPImagesPboardType]]; + + if ([images count]) + [self setImage:images[0]]; +} + @end var CPImageViewImageKey = @"CPImageViewImageKey", CPImageViewImageScalingKey = @"CPImageViewImageScalingKey", - CPImageViewHasShadowKey = @"CPImageViewHasShadowKey"; + CPImageViewHasShadowKey = @"CPImageViewHasShadowKey", + CPImageViewIsEditableKey = @"CPImageViewIsEditableKey"; @implementation CPImageView (CPCoding) @@ -372,6 +410,9 @@ var CPImageViewImageKey = @"CPImageViewImageKey", [self setHasShadow:[aCoder decodeBoolForKey:CPImageViewHasShadowKey]]; + if ([aCoder decodeBoolForKey:CPImageViewIsEditableKey] || NO) + [self setEditable:YES]; + [self setNeedsLayout]; [self setNeedsDisplay:YES]; } @@ -402,6 +443,9 @@ var CPImageViewImageKey = @"CPImageViewImageKey", _subviews = actualSubviews; [aCoder encodeBool:_hasShadow forKey:CPImageViewHasShadowKey]; + + if (_isEditable) + [aCoder encodeBool:_isEditable forKey:CPImageViewIsEditableKey]; } @end diff --git a/AppKit/CPPasteboard.j b/AppKit/CPPasteboard.j index dd7c5816f..31ba69299 100644 --- a/AppKit/CPPasteboard.j +++ b/AppKit/CPPasteboard.j @@ -38,8 +38,12 @@ CPFontPboardType = @"CPFontPboardType"; CPHTMLPboardType = @"CPHTMLPboardType"; CPStringPboardType = @"CPStringPboardType"; CPURLPboardType = @"CPURLPboardType"; +CPImagesPboardType = @"CPImagesPboardType"; +CPVideosPboardType = @"CPVideosPboardType"; + +// Deprecated CPImagePboardType = @"CPImagePboardType"; -CPVideoPboardType = @"CPVideoPboardType"; + var CPPasteboards = nil; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 3bc588813..e9c489a50 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -1465,7 +1465,7 @@ setBoundsOrigin: */ - (void)registerForDraggedTypes:(CPArray)pasteboardTypes { - if (!pasteboardTypes) + if (!pasteboardTypes || ![pasteboardTypes count]) return; var theWindow = [self window]; diff --git a/Tools/Rake/lib/objective-j/bundletask.rb b/Tools/Rake/lib/objective-j/bundletask.rb index 8ed8be5f9..eeee33003 100644 --- a/Tools/Rake/lib/objective-j/bundletask.rb +++ b/Tools/Rake/lib/objective-j/bundletask.rb @@ -545,6 +545,8 @@ module ObjectiveJ list.each do |fileName| + fileName = File.expand_path(fileName) + File.open(fileName) do |file| if fileName.index(platform_absolute_path) == 0 diff --git a/Tools/nib2cib/NSImageView.j b/Tools/nib2cib/NSImageView.j index 871085599..62eb55fe0 100644 --- a/Tools/nib2cib/NSImageView.j +++ b/Tools/nib2cib/NSImageView.j @@ -34,6 +34,7 @@ var cell = [aCoder decodeObjectForKey:@"NSCell"]; _imageScaling = [cell imageScaling]; + _isEditable = [cell isEditable]; } return self; From 90fe0d64f5457f30095d499c90ff4fc21aa7d077 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 9 Jun 2009 16:45:27 -0700 Subject: [PATCH 027/244] Fix for dragged types not working on decoded views. Reviewed by me. --- AppKit/CPImageView.j | 2 +- AppKit/CPView.j | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/AppKit/CPImageView.j b/AppKit/CPImageView.j index 11b180534..c8657562f 100644 --- a/AppKit/CPImageView.j +++ b/AppKit/CPImageView.j @@ -344,7 +344,7 @@ var LEFT_SHADOW_INSET = 3.0, - (void)setEditable:(BOOL)shouldBeEditable { if (_isEditable === shouldBeEditable) - return _isEditable; + return; _isEditable = shouldBeEditable; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index e9c489a50..98cfa6ad0 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2230,6 +2230,10 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", _subviews = [aCoder decodeObjectForKey:CPViewSubviewsKey] || []; _superview = [aCoder decodeObjectForKey:CPViewSuperviewKey]; + // FIXME: Should we encode/decode this? + _registeredDraggedTypes = [CPSet set]; + _registeredDraggedTypesArray = []; + _autoresizingMask = [aCoder decodeIntForKey:CPViewAutoresizingMaskKey] || CPViewNotSizable; _autoresizesSubviews = ![aCoder containsValueForKey:CPViewAutoresizesSubviewsKey] || [aCoder decodeBoolForKey:CPViewAutoresizesSubviewsKey]; From 7e88b1abfdd084a88e7d29b2a0afbd92c9d32a4b Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 9 Jun 2009 17:54:18 -0700 Subject: [PATCH 028/244] Minor stylistic changes. Reviewed by me. --- AppKit/CPBezierPath.j | 16 ++++++++-------- Tools/nib2cib/NSWindowTemplate.j | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/AppKit/CPBezierPath.j b/AppKit/CPBezierPath.j index 05a156fac..11d8c19ee 100644 --- a/AppKit/CPBezierPath.j +++ b/AppKit/CPBezierPath.j @@ -52,12 +52,12 @@ var DefaultLineWidth = 1.0; + (CPBezierPath)bezierPath { - return [[[self class] alloc] init]; + return [[self alloc] init]; } + (CPBezierPath)bezierPathWithOvalInRect:(CGRect)rect { - var path = [[self class] bezierPath]; + var path = [self bezierPath]; [path appendBezierPathWithOvalInRect:rect]; @@ -66,7 +66,7 @@ var DefaultLineWidth = 1.0; + (CPBezierPath)bezierPathWithRect:(CGRect)rect { - var path = [[self class] bezierPath]; + var path = [self bezierPath]; [path appendBezierPathWithRect:rect]; @@ -83,19 +83,19 @@ var DefaultLineWidth = 1.0; DefaultLineWidth = width; } -+ (void)fillRect:(CGRect)rect ++ (void)fillRect:(CGRect)aRect { - [[[self class] bezierPathWithRect:rect] fill]; + [[self bezierPathWithRect:aRect] fill]; } -+ (void)strokeRect:(CGRect)rect ++ (void)strokeRect:(CGRect)aRect { - [[[self class] bezierPathWithRect:rect] stroke]; + [[self bezierPathWithRect:aRect] stroke]; } + (void)strokeLineFromPoint:(CGPoint)point1 toPoint:(CGPoint)point2 { - var path = [[self class] bezierPath]; + var path = [self bezierPath]; [path moveToPoint:point1]; [path lineToPoint:point2]; diff --git a/Tools/nib2cib/NSWindowTemplate.j b/Tools/nib2cib/NSWindowTemplate.j index 01eaad9cd..97afbe8ce 100644 --- a/Tools/nib2cib/NSWindowTemplate.j +++ b/Tools/nib2cib/NSWindowTemplate.j @@ -71,7 +71,7 @@ var NSBorderlessWindowMask = 0x00, (_windowStyleMask & NSResizableWindowMask ? CPResizableWindowMask : 0) | (_windowStyleMask & NSTexturedBackgroundWindowMask ? NSTexturedBackgroundWindowMask : 0) | (_windowStyleMask & NSHUDBackgroundWindowMask ? CPHUDBackgroundWindowMask : 0); - + _windowIsFullBridge = [aCoder decodeObjectForKey:"NSFrameAutosaveName"] === "CPBorderlessBridgeWindowMask"; /*if (![_windowClass isEqualToString:@"NSPanel"]) From 8b25240d040eaafe36c7fad9caa7a0a3d8c93520 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 10 Jun 2009 11:49:16 -0700 Subject: [PATCH 029/244] Cleaned up CPControl ephemeral views code and got rid of some dead code in cib logic. Reviewed by me. --- AppKit/CPControl.j | 67 ---------------------------------- AppKit/CPView.j | 68 +++++++++++++++++++++++++++++++++-- AppKit/Cib/_CPCibCustomView.j | 22 +++--------- 3 files changed, 71 insertions(+), 86 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 33781be35..4151688f4 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -100,9 +100,6 @@ var CPControlBlackColor = [CPColor blackColor]; BOOL _trackingWasWithinFrame; unsigned _trackingMouseDownFlags; CGPoint _previousTrackingLocation; - - JSObject _ephemeralSubviewsForNames; - CPSet _ephereralSubviews; CPString _toolTip; } @@ -557,54 +554,6 @@ BRIDGE(ImageScaling, imageScaling, "image-scaling") return [self hasThemeState:CPThemeStateHighlighted]; } -- (CPView)createEphemeralSubviewNamed:(CPString)aViewName -{ - return nil; -} - -- (CGRect)rectForEphemeralSubviewNamed:(CPString)aViewName -{ - return _CGRectMakeZero(); -} - -- (CPView)layoutEphemeralSubviewNamed:(CPString)aViewName - positioned:(CPWindowOrderingMode)anOrderingMode - relativeToEphemeralSubviewNamed:(CPString)relativeToViewName -{ - if (!_ephemeralSubviewsForNames) - { - _ephemeralSubviewsForNames = {}; - _ephemeralSubviews = [CPSet set]; - } - - var frame = [self rectForEphemeralSubviewNamed:aViewName]; - - if (frame && !_CGRectIsEmpty(frame)) - { - if (!_ephemeralSubviewsForNames[aViewName]) - { - _ephemeralSubviewsForNames[aViewName] = [self createEphemeralSubviewNamed:aViewName]; - - [_ephemeralSubviews addObject:_ephemeralSubviewsForNames[aViewName]]; - - if (_ephemeralSubviewsForNames[aViewName]) - [self addSubview:_ephemeralSubviewsForNames[aViewName] positioned:anOrderingMode relativeTo:_ephemeralSubviewsForNames[relativeToViewName]]; - } - - if (_ephemeralSubviewsForNames[aViewName]) - [_ephemeralSubviewsForNames[aViewName] setFrame:frame]; - } - else if (_ephemeralSubviewsForNames[aViewName]) - { - [_ephemeralSubviewsForNames[aViewName] removeFromSuperview]; - - [_ephemeralSubviews removeObject:_ephemeralSubviewsForNames[aViewName]]; - delete _ephemeralSubviewsForNames[aViewName]; - } - - return _ephemeralSubviewsForNames[aViewName]; -} - @end var CPControlValueKey = "CPControlValueKey", @@ -647,24 +596,8 @@ var __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey"; */ - (void)encodeWithCoder:(CPCoder)aCoder { - var count = [_subviews count], - ephemeral - subviews = nil; - - if (count > 0 && [_ephemeralSubviews count] > 0) - { - subviews = [_subviews.slice(0) copy]; - - while (count--) - if ([_ephemeralSubviews containsObject:_subviews[count]]) - _subviews.splice(count, 1); - } - [super encodeWithCoder:aCoder]; - if (subviews) - _subviews = subviews; - if (_value !== nil) [aCoder encodeObject:_value forKey:CPControlValueKey]; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 98cfa6ad0..7862fea77 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -178,6 +178,9 @@ var DOMElementPrototype = nil, JSObject _themeAttributes; unsigned _themeState; + JSObject _ephemeralSubviewsForNames; + CPSet _ephereralSubviews; + // Key View Support CPView _nextKeyView; CPView _previousKeyView; @@ -2180,6 +2183,54 @@ setBoundsOrigin: return [_themeAttributes[aName] valueForState:_themeState]; } +- (CPView)createEphemeralSubviewNamed:(CPString)aViewName +{ + return nil; +} + +- (CGRect)rectForEphemeralSubviewNamed:(CPString)aViewName +{ + return _CGRectMakeZero(); +} + +- (CPView)layoutEphemeralSubviewNamed:(CPString)aViewName + positioned:(CPWindowOrderingMode)anOrderingMode + relativeToEphemeralSubviewNamed:(CPString)relativeToViewName +{ + if (!_ephemeralSubviewsForNames) + { + _ephemeralSubviewsForNames = {}; + _ephemeralSubviews = [CPSet set]; + } + + var frame = [self rectForEphemeralSubviewNamed:aViewName]; + + if (frame && !_CGRectIsEmpty(frame)) + { + if (!_ephemeralSubviewsForNames[aViewName]) + { + _ephemeralSubviewsForNames[aViewName] = [self createEphemeralSubviewNamed:aViewName]; + + [_ephemeralSubviews addObject:_ephemeralSubviewsForNames[aViewName]]; + + if (_ephemeralSubviewsForNames[aViewName]) + [self addSubview:_ephemeralSubviewsForNames[aViewName] positioned:anOrderingMode relativeTo:_ephemeralSubviewsForNames[relativeToViewName]]; + } + + if (_ephemeralSubviewsForNames[aViewName]) + [_ephemeralSubviewsForNames[aViewName] setFrame:frame]; + } + else if (_ephemeralSubviewsForNames[aViewName]) + { + [_ephemeralSubviewsForNames[aViewName] removeFromSuperview]; + + [_ephemeralSubviews removeObject:_ephemeralSubviewsForNames[aViewName]]; + delete _ephemeralSubviewsForNames[aViewName]; + } + + return _ephemeralSubviewsForNames[aViewName]; +} + @end var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", @@ -2286,6 +2337,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", } [self setNeedsDisplay:YES]; + [self setNeedsLayout]; } return self; @@ -2309,8 +2361,20 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", if (_window !== nil) [aCoder encodeConditionalObject:_window forKey:CPViewWindowKey]; - if (_subviews.length > 0) - [aCoder encodeObject:_subviews forKey:CPViewSubviewsKey]; + var count = [_subviews count], + encodedSubviews = _subviews; + + if (count > 0 && [_ephemeralSubviews count] > 0) + { + encodedSubviews = [encodedSubviews copy]; + + while (count--) + if ([_ephemeralSubviews containsObject:encodedSubviews[count]]) + encodedSubviews.splice(count, 1); + } + + if (encodedSubviews.length > 0) + [aCoder encodeObject:encodedSubviews forKey:CPViewSubviewsKey]; // This will come out nil on the other side with decodeObjectForKey: if (_superview !== nil) diff --git a/AppKit/Cib/_CPCibCustomView.j b/AppKit/Cib/_CPCibCustomView.j index 092054c96..db187a984 100644 --- a/AppKit/Cib/_CPCibCustomView.j +++ b/AppKit/Cib/_CPCibCustomView.j @@ -47,29 +47,17 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; if (self) _className = [aCoder decodeObjectForKey:_CPCibCustomViewClassNameKey]; - + return self; } - (void)encodeWithCoder:(CPCoder)aCoder { [super encodeWithCoder:aCoder]; - + [aCoder encodeObject:_className forKey:_CPCibCustomViewClassNameKey]; } -- (void)drawRect:(CGRect)aRect -{ - var bounds = [self bounds], - context = [[CPGraphicsContext currentContext] graphicsPort]; - - CGContextSetLineWidth(context, 1.0); - CGContextSetStrokeColor(context, [CPColor colorWithCalibratedRed:169.0 / 255.0 green:173.0 / 255.0 blue:178.0 / 255.0 alpha:1.0]); - CGContextStrokeRect(context, CGRectInset(CGRectIntegral(bounds), 0.5, 0.5)); - CGContextSetFillColor(context, [CPColor colorWithCalibratedRed:224.0 / 255.0 green:236.0 / 255.0 blue:250.0 / 255.0 alpha:1.0]); - CGContextFillRect(context, CGRectInset(bounds, 2.0, 2.0)); -} - - (id)_cibInstantiate { var theClass = CPClassFromString(_className); @@ -83,7 +71,7 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; #endif theClass = [CPView class]; } - + // Hey this is us! if (theClass === [self class]) { @@ -110,7 +98,7 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; [view setAutoresizingMask:[self autoresizingMask]]; [view setAutoresizesSubviews:[self autoresizesSubviews]]; - + [view setHitTests:[self hitTests]]; [view setHidden:[self isHidden]]; [view setAlphaValue:[self alphaValue]]; @@ -119,7 +107,7 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; [view setBackgroundColor:[self backgroundColor]]; } - + return view; } From 1f0e4b0eca77a2606db0b825785b8eb5a4364c46 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 10 Jun 2009 13:17:09 -0700 Subject: [PATCH 030/244] Fix for window returning a direct reference to its frame instead of a copy. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index a2dd7d717..103fc2890 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -567,7 +567,7 @@ CPTexturedBackgroundWindowMask */ - (CGRect)frame { - return _frame; + return _CGRectMakeCopy(_frame); } /*! From cb9d81aa7f6766f446218dc1dcfc33a1b3f5b4df Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Thu, 11 Jun 2009 14:05:12 -0700 Subject: [PATCH 031/244] Fix for capitalization issue with circular slider images. Reviewed by me. --- ...SliderBezel.png => slider-circular-bezel.png} | Bin ...arSliderKnob.png => slider-circular-knob.png} | Bin AppKit/Themes/Aristo/Resources/spinner.gif | Bin 0 -> 1849 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 4 ++-- 4 files changed, 2 insertions(+), 2 deletions(-) rename AppKit/Themes/Aristo/Resources/{CircularSliderBezel.png => slider-circular-bezel.png} (100%) rename AppKit/Themes/Aristo/Resources/{CircularSliderKnob.png => slider-circular-knob.png} (100%) create mode 100644 AppKit/Themes/Aristo/Resources/spinner.gif diff --git a/AppKit/Themes/Aristo/Resources/CircularSliderBezel.png b/AppKit/Themes/Aristo/Resources/slider-circular-bezel.png similarity index 100% rename from AppKit/Themes/Aristo/Resources/CircularSliderBezel.png rename to AppKit/Themes/Aristo/Resources/slider-circular-bezel.png diff --git a/AppKit/Themes/Aristo/Resources/CircularSliderKnob.png b/AppKit/Themes/Aristo/Resources/slider-circular-knob.png similarity index 100% rename from AppKit/Themes/Aristo/Resources/CircularSliderKnob.png rename to AppKit/Themes/Aristo/Resources/slider-circular-knob.png diff --git a/AppKit/Themes/Aristo/Resources/spinner.gif b/AppKit/Themes/Aristo/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index f5ecf0d27..72efe57a9 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -516,12 +516,12 @@ + (CPSlider)themedCircularSlider { var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 34.0, 34.0)], - trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"circularSliderBezel.png" size:CGSizeMake(34.0, 34.0)]); + trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"slider-circular-bezel.png" size:CGSizeMake(34.0, 34.0)]); [slider setSliderType:CPCircularSlider]; [slider setValue:trackColor forThemeAttribute:@"track-color" inState:CPThemeStateCircular]; - var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"circularSliderKnob.png" size:CGSizeMake(5.0, 5.0)]], + var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"slider-circular-knob.png" size:CGSizeMake(5.0, 5.0)]], knobHighlightedColor = knobColor; [slider setValue:CGSizeMake(5.0, 5.0) forThemeAttribute:@"knob-size" inState:CPThemeStateCircular]; From fe21fc82c4c2b9de98a932240371fc4a294d620f Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 12 Jun 2009 13:50:26 -0700 Subject: [PATCH 032/244] Updating version strings to 0.7.1. Reviewed by me. --- AppKit/Rakefile | 2 +- AppKit/Tools/BlendKit/Rakefile | 2 +- AppKit/Tools/blend/Rakefile | 2 +- Foundation/Rakefile | 2 +- Tools/Rake/Rakefile | 4 ++-- Tools/bake/Rakefile | 2 +- Tools/capp/Rakefile | 2 +- Tools/capp/main.j | 2 +- Tools/nib2cib/Rakefile | 2 +- Tools/press/Rakefile | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/AppKit/Rakefile b/AppKit/Rakefile index 90a77b47c..f4f3d30cc 100644 --- a/AppKit/Rakefile +++ b/AppKit/Rakefile @@ -17,7 +17,7 @@ AppKitFiles = FileList['**/*.j'].exclude('CoreGraphics/CGContextCanvas.j', 'Core ObjectiveJ::BundleTask.new(:AppKit) do |t| t.name = 'AppKit' t.identifier = 'com.280n.AppKit' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'AppKit classes for Cappuccino' diff --git a/AppKit/Tools/BlendKit/Rakefile b/AppKit/Tools/BlendKit/Rakefile index 47edc0a5f..0de00f5c5 100644 --- a/AppKit/Tools/BlendKit/Rakefile +++ b/AppKit/Tools/BlendKit/Rakefile @@ -12,7 +12,7 @@ $BUILD_PATH = File.join($BUILD_DIR, $CONFIGURATION, 'BlendKit') ObjectiveJ::BundleTask.new(:BlendKit) do |t| t.name = 'BlendKit' t.identifier = 'com.280n.BlendKit' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'BlendKit classes for Cappuccino' diff --git a/AppKit/Tools/blend/Rakefile b/AppKit/Tools/blend/Rakefile index 010e38fe8..ab4ccf908 100644 --- a/AppKit/Tools/blend/Rakefile +++ b/AppKit/Tools/blend/Rakefile @@ -15,7 +15,7 @@ $ENVIRONMENT_LIB_PRODUCT = File.join($ENVIRONMENT_LIB_DIR, 'blend') ObjectiveJ::BundleTask.new(:blend) do |t| t.name = 'blend' t.identifier = 'com.280n.blend' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'blend classes for Cappuccino' diff --git a/Foundation/Rakefile b/Foundation/Rakefile index 4a4b4d2ed..fe768cbc4 100644 --- a/Foundation/Rakefile +++ b/Foundation/Rakefile @@ -14,7 +14,7 @@ task :build => [:Foundation, $ENVIRONMENT_PRODUCT] ObjectiveJ::BundleTask.new(:Foundation) do |t| t.name = 'Foundation' t.identifier = 'com.280n.Foundation' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'Foundation classes for Cappuccino' diff --git a/Tools/Rake/Rakefile b/Tools/Rake/Rakefile index 4d1136c87..499992b66 100644 --- a/Tools/Rake/Rakefile +++ b/Tools/Rake/Rakefile @@ -17,7 +17,7 @@ spec = Gem::Specification.new do |s| s.homepage = 'http://cappuccino.org/' s.summary = "Objective-J extensions to Rake." s.name = 'objective-j' - s.version = "0.7.0" + s.version = "0.7.1" s.requirements << 'rake' s.require_path = 'lib' s.files = PKG_FILES @@ -34,7 +34,7 @@ Rake::GemPackageTask.new(spec) do |pkg| end #task :install do -# Gem::Installer.new(File.join($BUILD_DIR, $CONFIGURATION, 'rake', 'objective-j-0.7.0.gem')).install +# Gem::Installer.new(File.join($BUILD_DIR, $CONFIGURATION, 'rake', 'objective-j-0.7.1.gem')).install #end task :objj_gem => [:gem] do diff --git a/Tools/bake/Rakefile b/Tools/bake/Rakefile index 31227621b..e833736e0 100644 --- a/Tools/bake/Rakefile +++ b/Tools/bake/Rakefile @@ -15,7 +15,7 @@ $ENVIRONMENT_LIB_PRODUCT = File.join($ENVIRONMENT_LIB_DIR, 'bake') ObjectiveJ::BundleTask.new(:bake) do |t| t.name = 'bake' t.identifier = 'com.280n.bake' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'Deployment tool for Cappuccino applications' diff --git a/Tools/capp/Rakefile b/Tools/capp/Rakefile index 65dd06b42..c43dabd57 100644 --- a/Tools/capp/Rakefile +++ b/Tools/capp/Rakefile @@ -14,7 +14,7 @@ $ENVIRONMENT_LIB_PRODUCT = File.join($ENVIRONMENT_LIB_DIR, 'capp') ObjectiveJ::BundleTask.new(:capp) do |t| t.name = 'capp' t.identifier = 'com.280n.capp' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'Setup up Cappuccino projects' diff --git a/Tools/capp/main.j b/Tools/capp/main.j index 34d30702a..f48c67b4a 100644 --- a/Tools/capp/main.j +++ b/Tools/capp/main.j @@ -24,7 +24,7 @@ function main() switch (argument) { case "version": - case "--version": return print("capp version 0.7.0"); + case "--version": return print("capp version 0.7.1"); case "-h": case "--help": return printUsage(); diff --git a/Tools/nib2cib/Rakefile b/Tools/nib2cib/Rakefile index 06afd6890..e62d3de10 100644 --- a/Tools/nib2cib/Rakefile +++ b/Tools/nib2cib/Rakefile @@ -14,7 +14,7 @@ $ENVIRONMENT_LIB_PRODUCT = File.join($ENVIRONMENT_LIB_DIR, 'nib2cib') ObjectiveJ::BundleTask.new(:nib2cib) do |t| t.name = 'nib2cib' t.identifier = 'com.280n.nib2cib' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'nib2cib converts Cocoa nib and xibs to Cappuccino cibs' diff --git a/Tools/press/Rakefile b/Tools/press/Rakefile index 28eabe3d2..b483a0b05 100644 --- a/Tools/press/Rakefile +++ b/Tools/press/Rakefile @@ -16,7 +16,7 @@ $ENVIRONMENT_BRIDGE = File.join($ENVIRONMENT_LIB_DIR, 'press', 'bridge.js') ObjectiveJ::BundleTask.new(:press) do |t| t.name = 'press' t.identifier = 'com.280n.press' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'Deployment tool for Cappuccino applications' From 1e3b79de1798ea4f8a84b72792e66bb7e1aa5d79 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 13 Jun 2009 14:50:38 -0700 Subject: [PATCH 033/244] Fix for superview's not remaining mouseEntered when mouse moves over subviews. Closes #126. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 63 +++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 103fc2890..4044620d8 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -253,7 +253,7 @@ var CPWindowSaveImage = nil, CPView _contentView; CPView _toolbarView; - CPView _mouseOverView; + CPArray _mouseEnteredStack; CPView _leftMouseDownView; CPView _rightMouseDownView; @@ -1212,23 +1212,56 @@ CPTexturedBackgroundWindowMask case CPMouseMoved: if (!_acceptsMouseMovedEvents) return; - + + if (!_mouseEnteredStack) + _mouseEnteredStack = []; + var hitTestView = [_windowView hitTest:point]; - - if (hitTestView != _mouseOverView) + + if ([_mouseEnteredStack count] && [_mouseEnteredStack lastObject] === hitTestView) + return [hitTestView mouseMoved:anEvent]; + + var view = hitTestView, + mouseEnteredStack = []; + + while (view) { - if (_mouseOverView) - [_mouseOverView mouseExited:[CPEvent mouseEventWithType:CPMouseExited location:point - modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]]; - - if (hitTestView) - [hitTestView mouseEntered:[CPEvent mouseEventWithType:CPMouseEntered location:point - modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]]; - - _mouseOverView = hitTestView; + mouseEnteredStack.unshift(view); + + view = [view superview]; } - - [_mouseOverView mouseMoved:anEvent]; + + var deviation = MIN(_mouseEnteredStack.length, mouseEnteredStack.length); + + while (deviation--) + if (_mouseEnteredStack[deviation] !== mouseEnteredStack[deviation]) + break; + + var index = deviation, + count = _mouseEnteredStack.length; + + if (index < count) + { + var event = [CPEvent mouseEventWithType:CPMouseExited location:point modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]; + + for (; index < count; ++index) + [_mouseEnteredStack[index] mouseExited:event]; + } + + index = deviation; + count = mouseEnteredStack.length; + + if (index < count) + { + var event = [CPEvent mouseEventWithType:CPMouseEntered location:point modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]; + + for (; index < count; ++index) + [mouseEnteredStack[index] mouseEntered:event]; + } + + _mouseEnteredStack = mouseEnteredStack; + + [hitTestView mouseMoved:anEvent]; } } From bfcb94a8441480a22cfd649938b6252160fe8be5 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 13 Jun 2009 18:27:31 -0700 Subject: [PATCH 034/244] Various key input fixes. Reviewed by me. --- AppKit/CPCompatibility.j | 7 +++++-- AppKit/CPResponder.j | 38 ++++++++++++++++---------------------- Objective-J/debug.js | 2 +- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index 2ba69a747..e5e30c41f 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -106,9 +106,12 @@ else if (USER_AGENT.indexOf("AppleWebKit/") != -1) var versionStart = USER_AGENT.indexOf("AppleWebKit/") + "AppleWebKit/".length, versionEnd = USER_AGENT.indexOf(" ", versionStart), - version = parseFloat(USER_AGENT.substring(versionStart, versionEnd), 10); + versionString = USER_AGENT.substring(versionStart, versionEnd), + versionDivision = versionString.indexOf('.'), + majorVersion = parseInt(versionString.substring(0, versionDivision)), + minorVersion = parseInt(versionString.substr(versionDivision + 1)); - if(USER_AGENT.indexOf("Plainview") == -1 && version >= 525.14 || USER_AGENT.indexOf("Chrome") != -1) + if((USER_AGENT.indexOf("Safari") !== CPNotFound && (majorVersion >= 525 && minorVersion > 14)) || USER_AGENT.indexOf("Chrome") !== CPNotFound) PLATFORM_FEATURES |= CPJavascriptRemedialKeySupport; } diff --git a/AppKit/CPResponder.j b/AppKit/CPResponder.j index 5d07e987b..c55a2731c 100644 --- a/AppKit/CPResponder.j +++ b/AppKit/CPResponder.j @@ -96,36 +96,38 @@ CPDownArrowKeyCode = 40; */ - (void)interpretKeyEvents:(CPArray)events { - var event, - index = 0; - - while(event = events[index++]) + var index = 0, + count = [events count]; + + for (; index < count; ++index) { + var event = events[index]; + switch([event keyCode]) { - case CPLeftArrowKeyCode: [self moveBackward:self]; + case CPLeftArrowKeyCode: [self doCommandBySelector:@selector(moveLeft:)]; break; - case CPRightArrowKeyCode: [self moveForward:self]; + case CPRightArrowKeyCode: [self doCommandBySelector:@selector(moveRight:)]; break; - case CPUpArrowKeyCode: [self moveUp:self]; + case CPUpArrowKeyCode: [self doCommandBySelector:@selector(moveUp:)]; break; - case CPDownArrowKeyCode: [self moveDown:self]; + case CPDownArrowKeyCode: [self doCommandBySelector:@selector(moveDown:)]; break; - case CPDeleteKeyCode: [self deleteBackward:self]; + case CPDeleteKeyCode: [self doCommandBySelector:@selector(deleteBackward:)]; break; case CPReturnKeyCode: - case 3: [self insertLineBreak:self]; + case 3: [self doCommandBySelector:@selector(insertLineBreak:)]; break; - case CPEscapeKeyCode: [self cancel:self]; + case CPEscapeKeyCode: [self doCommandBySelector:@selector(cancel:)]; break; case CPTabKeyCode: var shift = [event modifierFlags] & CPShiftKeyMask; if (!shift) - [self insertTab:self]; + [self doCommandBySelector:@selector(insertTab:)]; else - [self insertBackTab:self]; + [self doCommandBySelector:@selector(insertBackTab:)]; break; @@ -224,14 +226,6 @@ CPDownArrowKeyCode = 40; } // Action Methods -/*! - Deletes one character backward, or the selection if anything is selected. - @param aSender the object requesting this -*/ -- (void)deleteBackward:(id)aSender -{ -} - /*! Insert a line break at the caret position or selection. @param aSender the object requesting this @@ -278,7 +272,7 @@ CPDownArrowKeyCode = 40; */ - (void)doCommandBySelector:(SEL)aSelector { - if([self respondsToSelector:aSelector]) + if ([self respondsToSelector:aSelector]) [self performSelector:aSelector]; else [_nextResponder doCommandBySelector:aSelector]; diff --git a/Objective-J/debug.js b/Objective-J/debug.js index 9702e00c8..cbc5fd447 100644 --- a/Objective-J/debug.js +++ b/Objective-J/debug.js @@ -119,7 +119,7 @@ function objj_backtrace_set_enabled(enabled) function objj_debug_print_backtrace() { - print(objj_debug_backtrace_string()); + alert(objj_debug_backtrace_string()); } function objj_debug_backtrace_string() From 9bb9db760eccf2d6f9f2307b5b8aca2303826cc8 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 13 Jun 2009 21:45:46 -0700 Subject: [PATCH 035/244] Added removeObjectsInArray: convinience method to CPMutableSet. Reviewed by me. --- Foundation/CPSet.j | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Foundation/CPSet.j b/Foundation/CPSet.j index 02cbeaef5..16d9820ff 100644 --- a/Foundation/CPSet.j +++ b/Foundation/CPSet.j @@ -380,12 +380,12 @@ Adds to the receiver each object contained in a given array that is not already a member. @param array An array of objects to add to the receiver. */ -- (void)addObjectsFromArray:(CPArray)array +- (void)addObjectsFromArray:(CPArray)objects { - for (var i = 0, count = array.length; i < count; i++) - { - [self addObject:array[i]]; - } + var count = [objects count]; + + while (count--) + [self addObject:objects[count]]; } /* @@ -401,6 +401,14 @@ } } +- (void)removeObjectsInArray:(CPArray)objects +{ + var count = [objects count]; + + while (count--) + [self removeObject:objects[count]]; +} + /* Empties the receiver of all of its members. */ From b4abc5a99dc3d41eeb8c33a0a056aacc41e834be Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 15 Jun 2009 12:33:16 -0700 Subject: [PATCH 036/244] Further key handling fixes. Reviewed by me. --- AppKit/CPMenu.j | 8 ++++---- AppKit/CPWindow/CPWindow.j | 6 +++--- AppKit/Cib/_CPCibWindowTemplate.j | 19 +++++++++++++++++++ AppKit/Platform/DOM/CPDOMWindowBridge.j | 2 +- Tools/nib2cib/NSIBObjectData.j | 2 +- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/AppKit/CPMenu.j b/AppKit/CPMenu.j index 7a8fbb622..4940bcd96 100644 --- a/AppKit/CPMenu.j +++ b/AppKit/CPMenu.j @@ -267,13 +267,13 @@ var _CPMenuBarVisible = NO, - (void)insertItem:(CPMenuItem)aMenuItem atIndex:(unsigned)anIndex { var menu = [aMenuItem menu]; - + if (menu) - if (menu != self) + if (menu !== self) [CPException raise:CPInternalInconsistencyException reason:@"Attempted to insert item into menu that was already in another menu."]; else return; - + [aMenuItem setMenu:self]; [_items insertObject:aMenuItem atIndex:anIndex]; @@ -1735,7 +1735,7 @@ var _CPMenuBarWindowBackgroundColor = nil, return frame; } -- (CPView)menuItemAtPoint:(CGPoint)aPoint +- (CPMenuItem)menuItemAtPoint:(CGPoint)aPoint { var items = [_menu itemArray], count = items.length; diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 4044620d8..e2ef55142 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -670,13 +670,13 @@ CPTexturedBackgroundWindowMask { if ([_delegate respondsToSelector:@selector(windowWillClose:)]) [_delegate windowWillClose:self]; - + [_bridge order:CPWindowOut window:self relativeTo:nil]; - + if ([CPApp keyWindow] == self) { [self resignKeyWindow]; - + CPApp._keyWindow = nil; } } diff --git a/AppKit/Cib/_CPCibWindowTemplate.j b/AppKit/Cib/_CPCibWindowTemplate.j index 2ba886395..9aea4ff28 100644 --- a/AppKit/Cib/_CPCibWindowTemplate.j +++ b/AppKit/Cib/_CPCibWindowTemplate.j @@ -33,6 +33,25 @@ var _CPCibWindowTemplateMinSizeKey = @"_CPCibWindowTemplateMinSizeK BOOL _windowIsFullBridge; } +- (id)init +{ + self = [super init]; + + if (self) + { + _windowClass = @"CPWindow"; + _windowRect = CGRectMake(0.0, 0.0, 400.0, 200.0); + _windowStyleMask = CPTitledWindowMask | CPClosableWindowMask | CPMiniaturizableWindowMask | CPResizableWindowMask; + + _windowTitle = @"Window"; + _windowView = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 400.0, 200.0)]; + + _windowIsFullBridge = NO; + } + + return self; +} + - (id)initWithCoder:(CPCoder)aCoder { self = [super init]; diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index 51c1ae023..2499c84f1 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -394,7 +394,7 @@ var CPDOMWindowGetFrame = function(_DOMWindow) //might be mac only, we should investigate futher later. var KeyCodesToPrevent = {}, CharacterKeysToPrevent = {}, - KeyCodesWithoutKeyPressEvents = { '8':1, '9':1, '37':1, '38':1, '39':1, '40':1, '46':1, '33':1, '34':1 }; + KeyCodesWithoutKeyPressEvents = { '8':1, '9':1, '16':1, '37':1, '38':1, '39':1, '40':1, '46':1, '33':1, '34':1 }; var CTRL_KEY_CODE = 17; diff --git a/Tools/nib2cib/NSIBObjectData.j b/Tools/nib2cib/NSIBObjectData.j index a18435793..9031edd02 100644 --- a/Tools/nib2cib/NSIBObjectData.j +++ b/Tools/nib2cib/NSIBObjectData.j @@ -87,7 +87,7 @@ _objectsKeys = [aCoder decodeObjectForKey:@"NSObjectsKeys"]; _objectsValues = [aCoder decodeObjectForKey:@"NSObjectsValues"]; - + _oidKeys = [aCoder decodeObjectForKey:@"NSOidsKeys"]; _oidValues = [aCoder decodeObjectForKey:@"NSOidsValues"]; From e36ab855e872b6c1eed39e92fc6847d62c8fcb6b Mon Sep 17 00:00:00 2001 From: tlrobinson Date: Mon, 15 Jun 2009 18:20:12 -0700 Subject: [PATCH 037/244] Missing import for CibLoading in CPApplication --- AppKit/CPApplication.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 012cc2ffb..f150bb026 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -28,6 +28,7 @@ @import "CPResponder.j" @import "CPDocumentController.j" @import "CPThemeBlend.j" +@import "CPCibLoading.j" var CPMainCibFile = @"CPMainCibFile", CPMainCibFileHumanFriendly = @"Main cib file base name"; From 35a9305347d6ca82c43eb6a5afb080ef9ad90e3b Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 16 Jun 2009 17:21:52 -0700 Subject: [PATCH 038/244] Add setters/getters to cib custom objects/view/windows. Reviewed by me. --- AppKit/Cib/_CPCibCustomObject.j | 5 +++++ AppKit/Cib/_CPCibCustomView.j | 10 ++++++++++ AppKit/Cib/_CPCibWindowTemplate.j | 11 +++++++++++ 3 files changed, 26 insertions(+) diff --git a/AppKit/Cib/_CPCibCustomObject.j b/AppKit/Cib/_CPCibCustomObject.j index 724265191..631efbc3d 100644 --- a/AppKit/Cib/_CPCibCustomObject.j +++ b/AppKit/Cib/_CPCibCustomObject.j @@ -14,6 +14,11 @@ var _CPCibCustomObjectClassName = @"_CPCibCustomObjectClassName"; return _className; } +- (void)setCustomClassName:(CPString)aClassName +{ + _className = aClassName; +} + - (CPString)description { return [super description] + " (" + [self customClassName] + ')'; diff --git a/AppKit/Cib/_CPCibCustomView.j b/AppKit/Cib/_CPCibCustomView.j index db187a984..c420a90d4 100644 --- a/AppKit/Cib/_CPCibCustomView.j +++ b/AppKit/Cib/_CPCibCustomView.j @@ -35,6 +35,11 @@ return _className; } +- (void)setCustomClassName:(CPString)aClassName +{ + _className = aClassName; +} + @end var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; @@ -58,6 +63,11 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; [aCoder encodeObject:_className forKey:_CPCibCustomViewClassNameKey]; } +- (CPString)customClassName +{ + return _className; +} + - (id)_cibInstantiate { var theClass = CPClassFromString(_className); diff --git a/AppKit/Cib/_CPCibWindowTemplate.j b/AppKit/Cib/_CPCibWindowTemplate.j index 9aea4ff28..f7880e5d1 100644 --- a/AppKit/Cib/_CPCibWindowTemplate.j +++ b/AppKit/Cib/_CPCibWindowTemplate.j @@ -97,6 +97,17 @@ var _CPCibWindowTemplateMinSizeKey = @"_CPCibWindowTemplateMinSizeK [aCoder encodeObject:_windowIsFullBridge forKey:_CPCibWindowTemplateWindowIsFullBridgeKey]; } +- (CPString)customClassName +{ + return _windowClass; +} + + +- (void)setCustomClassName:(CPString)aClassName +{ + _windowClass = aClassName; +} + - (CPString)windowClass { return _windowClass; From 19f165782425720ecefb1ed087a85256eb0dc95d Mon Sep 17 00:00:00 2001 From: tlrobinson Date: Wed, 17 Jun 2009 01:43:39 -0700 Subject: [PATCH 039/244] Disable encoding/decoding of plusses in URIs --- External/browserjs | 2 +- External/jack | 2 +- Objective-J/file.js | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/External/browserjs b/External/browserjs index 497f4106b..87a9b481d 160000 --- a/External/browserjs +++ b/External/browserjs @@ -1 +1 @@ -Subproject commit 497f4106bfb643e9231aa4b1f4d8141e69ab2a65 +Subproject commit 87a9b481d1362aa380ee69392c7920fb08361d3e diff --git a/External/jack b/External/jack index d7b5ca58f..7b410a132 160000 --- a/External/jack +++ b/External/jack @@ -1 +1 @@ -Subproject commit d7b5ca58f431de3a1e6a3a8eb791f4092b1fab3a +Subproject commit 7b410a1323367d309b9cf77bf332f1496b086b84 diff --git a/Objective-J/file.js b/Objective-J/file.js index 748c3cf46..2299e5f52 100644 --- a/Objective-J/file.js +++ b/Objective-J/file.js @@ -301,7 +301,9 @@ objj_search.prototype.request = function(aFilePath, aMethod) try { - request.open("GET", aFilePath.replace(/\+/g, "%2B"), YES); + // unclear whether plusses are reserved in the URI path + //request.open("GET", aFilePath.replace(/\+/g, "%2B"), YES); + request.open("GET", aFilePath, YES); request.send(""); } catch (anException) From 4e94fa51fe619319be287abebc0fcf6057431817 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Thu, 18 Jun 2009 01:28:33 -0700 Subject: [PATCH 040/244] Further fleshed out methods. Reviewed by me. --- AppKit/NEWCPTableColumn.j | 58 +++--- AppKit/NEWCPTableView.j | 381 +++++++++++++++++++++----------------- 2 files changed, 234 insertions(+), 205 deletions(-) diff --git a/AppKit/NEWCPTableColumn.j b/AppKit/NEWCPTableColumn.j index eaa4ffe43..38513111b 100644 --- a/AppKit/NEWCPTableColumn.j +++ b/AppKit/NEWCPTableColumn.j @@ -6,6 +6,7 @@ @import "CPTableHeaderView.j" + /* @global @class CPTableColumn @@ -22,12 +23,11 @@ CPTableColumnAutoresizingMask = 1; */ CPTableColumnUserResizingMask = 2; - @implementation NEWCPTableColumn : CPObject { CPTableView _tableView; CPView _headerView; - + float _width; float _minWidth; float _maxWidth; @@ -92,7 +92,7 @@ CPTableColumnUserResizingMask = 2; return _width; } - (void)setMinWidth:(float)aMinWidth +- (void)setMinWidth:(float)aMinWidth { aMinWidth = +aMinWidth; @@ -103,7 +103,7 @@ CPTableColumnUserResizingMask = 2; var width = [self width], newWidth = MAX(width, [self minWidth]); - + if (width !== newWidth) [self setWidth:newWidth]; } @@ -113,7 +113,7 @@ CPTableColumnUserResizingMask = 2; return _minWidth; } - (void)setMaxWidth:(float)aMaxWidth +- (void)setMaxWidth:(float)aMaxWidth { aMaxWidth = +aMaxWidth; @@ -124,7 +124,7 @@ CPTableColumnUserResizingMask = 2; var width = [self width], newWidth = MAX(width, [self maxWidth]); - + if (width !== newWidth) [self setWidth:newWidth]; } @@ -134,7 +134,7 @@ CPTableColumnUserResizingMask = 2; return _maxWidth; } - (void)setResizingMask:(unsigned)aResizingMask +- (void)setResizingMask:(unsigned)aResizingMask { _resizingMask = aResizingMask; } @@ -160,7 +160,7 @@ CPTableColumnUserResizingMask = 2; //Setting Component Cells - (void)setHeaderView:(CPView)aView { - if (!_headerView) + if (!aView) [CPException raise:CPInvalidArgumentException reason:@"Attempt to set nil header view on " + [self description]]; _headerView = aView; @@ -193,10 +193,10 @@ CPTableColumnUserResizingMask = 2; By default, this method just calls dataView. Subclassers can override if they need to potentially use different cells for different rows. Subclasses should expect this method - to be invoked with row equal to 1 in cases where no actual row is involved but the table + to be invoked with row equal to -1 in cases where no actual row is involved but the table view needs to get some generic cell info. */ - (id)dataViewForRow:(int)aRowIndex +- (id)dataViewForRow:(int)aRowIndex { return [self dataView]; } @@ -221,7 +221,7 @@ CPTableColumnUserResizingMask = 2; /* Sets the receivers identifier to anIdentifier. */ - (void)setIdentifier:(id)anIdentifier +- (void)setIdentifier:(id)anIdentifier { _identifier = anIdentifier; } @@ -229,18 +229,17 @@ CPTableColumnUserResizingMask = 2; /* Returns the object used by the data source to identify the attribute corresponding to the receiver. */ - (id)identifier +- (id)identifier { return _identifier; } - //Controlling Editability /* Controls whether the user can edit cells in the receiver by double-clicking them. */ - (void)setEditable:(BOOL)shouldBeEditable +- (void)setEditable:(BOOL)shouldBeEditable { _isEditable = shouldBeEditable; } @@ -249,11 +248,10 @@ CPTableColumnUserResizingMask = 2; Returns YES if the user can edit cells associated with the receiver by double-clicking the column in the NSTableView, NO otherwise. */ - (BOOL)isEditable +- (BOOL)isEditable { return _isEditable; } - //Sorting - (void)setSortDescriptorPrototype:(CPSortDescriptor)aSortDescriptor @@ -267,17 +265,16 @@ CPTableColumnUserResizingMask = 2; } //Setting Column Visibility - (BOOL)isHidden -{ - return _isHidden; -} - - (void)setHidden:(BOOL)shouldBeHidden: +- (void)setHidden:(BOOL)shouldBeHidden { _isHidden = shouldBeHidden; } +- (BOOL)isHidden +{ + return _isHidden; +} //Setting Tool Tips @@ -285,51 +282,48 @@ CPTableColumnUserResizingMask = 2; Sets the tooltip string that is displayed when the cursor pauses over the header cell of the receiver. */ - - (void)setHeaderToolTip:(CPString)aToolTip +- (void)setHeaderToolTip:(CPString)aToolTip { _headerToolTip = aToolTip; } - - (CPString)headerToolTip +- (CPString)headerToolTip { return _headerToolTip; } @end - @implementation NEWCPTableColumn (NSInCompatibility) - (void)setHeaderCell:(CPView)aView { [CPException raise:CPUnsupportedMethodException - reason:"Not supported. -setHeaderCell:aView instead."]; + reason:@"setHeaderCell: is not supported. -setHeaderCell:aView instead."]; } - (CPView)headerCell { [CPException raise:CPUnsupportedMethodException - reason:"Not supported. -headerView instead."]; + reason:@"headCell is not supported. -headerView instead."]; } - (void)setDataCell:(CPView)aView { [CPException raise:CPUnsupportedMethodException - reason:"Not supported. Use -setHeaderCell:aView instead."]; + reason:@"setDataCell: is not supported. Use -setHeaderCell:aView instead."]; } - (CPView)dataCell { [CPException raise:CPUnsupportedMethodException - reason:"Not supported. Use -dataCell instead."]; + reason:@"dataCell is not supported. Use -dataCell instead."]; } - (id)dataCellForRow:(int)row { [CPException raise:CPUnsupportedMethodException - reason:"Not supported. Use -dataViewForRow:row instead."]; + reason:@"dataCellForRow: is not supported. Use -dataViewForRow:row instead."]; } @end diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index b3da188cd..a605012f1 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -1,6 +1,11 @@ -@import -var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2 +@import + +@import "CPControl.j" +@import "CPTableColumn.j" + + +var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2, CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_ = 1 << 3, CPTableViewDataSource_tableView_namesOfPromisedFilesDroppedAtDestination_forDraggedRowsWithIndexes_ = 1 << 4, @@ -8,7 +13,7 @@ var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_ = 1 << 6, CPTableViewDataSource_tableView_sortDescriptorsDidChange_ = 1 << 7; - + var CPTableViewDelegate_selectionShouldChangeInTableView_ = 1 << 0, CPTableViewDelegate_tableView_dataViewForTableColumn_row_ = 1 << 1, CPTableViewDelegate_tableView_didClickTableColumn_ = 1 << 2, @@ -31,14 +36,19 @@ var CPTableViewDelegate_selectionShouldChangeInTableView_ CPTableViewDelegate_tableViewSelectionIsChanging_ = 1 << 19; // TODO: add docs +/* CPTableViewSelectionHighlightStyleRegular = 0; CPTableViewSelectionHighlightStyleSourceList = 1; - +*/ @implementation NEWCPTableView : CPControl { id _dataSource; - unsigned _implementedDataSourceMethods; + CPInteger _implementedDataSourceMethods; + + id _delegate; + CPInteger _implementedDelegateMethods; + CPArray _tableColumns; //Configuring Behavior @@ -59,21 +69,28 @@ CPTableViewSelectionHighlightStyleSourceList = 1; } -- (void)_init +- (id)initWithFrame:(CGRect)aFrame { - //Configuring Behavior - _allowsColumnReordering = YES; - _allowsColumnResizing = YES; - _allowsMultipleSelection = NO; - _allowsEmptySelection = YES; - _allowsColumnSelection = NO; - - //Setting Display Attributes - _selectionHighlightMask = CPTableViewSelectionHighlightStyleRegular; + self = [super initWithFrame:aFrame]; + + if (self) + { + //Configuring Behavior + _allowsColumnReordering = YES; + _allowsColumnResizing = YES; + _allowsMultipleSelection = NO; + _allowsEmptySelection = YES; + _allowsColumnSelection = NO; + + //Setting Display Attributes +// _selectionHighlightMask = CPTableViewSelectionHighlightStyleRegular; + + _tableColumns = []; + } + + return self; } - - - (void)setDataSource:(id)aDataSource { if (_dataSource === aDataSource) @@ -87,11 +104,11 @@ CPTableViewSelectionHighlightStyleSourceList = 1; if (![_dataSource respondsToSelector:@selector(numberOfRowsInTableView:)]) [CPException raise:CPInternalInconsistencyException - reason:[aDataSource description] " does not implement numberOfRowsInTableView:."]; + reason:[aDataSource description] + " does not implement numberOfRowsInTableView:."]; if (![_dataSource respondsToSelector:@selector(tableView:objectValueForTableColumn:row:)]) [CPException raise:CPInternalInconsistencyException - reason:[aDataSource description] " does not implement tableView:objectValueForTableColumn:row:"]; + reason:[aDataSource description] + " does not implement tableView:objectValueForTableColumn:row:"]; if ([_dataSource respondsToSelector:@selector(tableView:setObjectValue:forTableColumn:row:)]) _implementedDataSourceMethods |= CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_; @@ -107,6 +124,8 @@ CPTableViewSelectionHighlightStyleSourceList = 1; if ([_dataSource respondsToSelector:@selector(tableView:writeRowsWithIndexes:toPasteboard:)]) _implementedDataSourceMethods |= CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_; + + [self reloadData]; } - (id)dataSource @@ -116,137 +135,113 @@ CPTableViewSelectionHighlightStyleSourceList = 1; //Loading Data - * reloadData +- (void)reloadData +{ + +} //Target-action Behavior - * setDoubleAction: - * doubleAction - * clickedColumn - * clickedRow - -//Configuring Behavior - - (void)setAllowsColumnReordering:(BOOL)allowsColumnReordering +- (void)setDoubleAction:(SEL)anAction { - _allowsColumnReordering = allowsColumnReordering; + _doubleAction = anAction; } - (BOOL)allowsColumnReordering +- (SEL)doubleAction +{ + return _doubleAction; +} + +/* + * clickedColumn + * clickedRow +*/ +//Configuring Behavior + +- (void)setAllowsColumnReordering:(BOOL)shouldAllowColumnReordering +{ + _allowsColumnReordering = !!shouldAllowColumnReordering; +} + +- (BOOL)allowsColumnReordering { return _allowsColumnReordering; } - (void)setAllowsColumnResizing:(BOOL)allowsColumnResizing +- (void)setAllowsColumnResizing:(BOOL)shouldAllowColumnResizing { - _allowsColumnResizing = allowsColumnResizing; + _allowsColumnResizing = !!shouldAllowColumnResizing; } - (BOOL)allowsColumnResizing +- (BOOL)allowsColumnResizing { return _allowsColumnResizing; } - (void)setAllowsMultipleSelection:(BOOL)allowsMultipleSelection +- (void)setAllowsMultipleSelection:(BOOL)shouldAllowMultipleSelection { - _allowsMultipleSelection = allowsMultipleSelection; + _allowsMultipleSelection = !!shouldAllowMultipleSelection; } - - (BOOL)allowsMultipleSelection +- (BOOL)allowsMultipleSelection { return _allowsMultipleSelection; } - (void)setAllowsEmptySelection:(BOOL)allowsEmptySelection +- (void)setAllowsEmptySelection:(BOOL)shouldAllowEmptySelection { - _allowsEmptySelection = allowsEmptySelection; + _allowsEmptySelection = !!shouldAllowEmptySelection; } - (BOOL)allowsEmptySelection +- (BOOL)allowsEmptySelection { return _allowsEmptySelection; } - (void)setAllowsColumnSelection:(BOOL)allowsColumnSelection +- (void)setAllowsColumnSelection:(BOOL)shouldAllowColumnSelection { - _allowsColumnSelection = allowsColumnSelection; + _allowsColumnSelection = !!shouldAllowColumnSelection; } - (BOOL)allowsColumnSelection +- (BOOL)allowsColumnSelection { - return allowsColumnSelection; + return _allowsColumnSelection; } //Setting Display Attributes - (void)setIntercellSpacing:(CGSize)aSize +- (void)setIntercellSpacing:(CGSize)aSize { - if (_intercellSpacing.width != aSize.width) - { - var i = 1, - delta = aSize.width - _intercellSpacing.width; - total = delta; - - for (; i < _tableColumns.length; ++i, total += delta) - { - var origin = [_tableColumnViews[i] frame].origin; - [_tableColumnViews[i] setFrameOrigin:CGPointMake(origin.x + total, origin.y)]; - } - } - - if (_intercellSpacing.height != aSize.height) - { - var i = 0; - - for (; i < _tableColumns.length; ++i, total += delta) - { - [_tableColumnViews[i] setFrameSize:CGSizeMake([_tableColumnViews[i] width], _numberOfRows * (_rowHeight + _intercellSpacing.height))]; - - var j = 1, - y = _rowHeight + _intercellSpacing.height; - - for (; j < _numberOfRows; ++i, y += _rowHeight + _intercellSpacing.height) - { - if (!_tableCells[i][j]) - continue; - - [_tableCells[i][j] setFrameOrigin:CPPointMake(0.0, y)]; - } - } - - // FIXME: variable height rows - } - - _intercellSpacing = _CGSizeCreateCopy(aSize); -} - - (CPSize)intercellSpacing -{ - return _intercellSpacing; -} - - - (void)setRowHeight:(unsigned)aRowHeight -{ - if (_rowHeight == aRowHeight) + if (_CGSizeEqualToSize(_intercellSpacing, aSize)) return; - + + _intercellSpacing = _CGSizeMakeCopy(aSize); + + [self setNeedsLayout]; +} + +- (CGSize)intercellSpacing +{ + return _CGSizeMakeCopy(_intercellSpacing); +} + +- (void)setRowHeight:(unsigned)aRowHeight +{ + aRowHeight = +aRowHeight; + + if (_rowHeight === aRowHeight) + return; + _rowHeight = aRowHeight; + + [self setNeedsLayout]; } - (unsigned)rowHeight { return _rowHeight; } - - - -// TODO: confirm: comes from superclass CPView -// setBackgroundColor: -// backgroundColor - - +/* (void)setUsesAlternatingRowBackgroundColors:(BOOL)shouldUseAlternatingRowBackgroundColors { // TODO:need to look at how one actually sets the alternating row, a tip at: @@ -280,18 +275,71 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * gridStyleMask * indicatorImageInTableColumn: * setIndicatorImage:inTableColumn: - +*/ //Column Management - * addTableColumn: - * removeTableColumn: - * moveColumn:toColumn: - * tableColumns - * columnWithIdentifier: - * tableColumnWithIdentifier: +- (void)addTableColumn:(CPTableColumn)aTableColumn +{ + [_tableColumns addObject:aTableColumn]; + + [self setNeedsLayout]; +} + +- (void)removeTableColumn:(CPTableColumn)aTableColumn +{ + [_tableColumns removeObjectIdenticalTo:aTableColumn]; + + [self setNeedsLayout]; +} + +- (void)moveColumn:(unsigned)fromIndex toColumn:(unsigned)toIndex +{ + fromIndex = +fromIndex; + toIndex = +toIndex; + + if (fromIndex === toIndex) + return; + + if (toIndex > fromIndex) + --toIndex; + + var tableColumn = _tableColumns[fromIndex]; + + [_tableColumns removeObjectAtIndex:fromIndex]; + [_tableColumns insertObject:tableColumn atIndex:toIndex]; + + [self setNeedsLayout]; +} + +- (CPArray)tableColumns +{ + return _tableColumns; +} + +- (CPInteger)columnWithIdentifier:(CPString)anIdentifier +{ + var index = 0, + count = _tableColumns.length; + + for (; index < count; ++index) + if ([_tableColumns identifier] === anIdentifier) + return index; + + return CPNotFound; +} + +- (CPTableColumn)tableColumnWithIdentifier:(CPString)anIdentifier +{ + var index = [self columnWithIdentifier:anIdentifier]; + + if (index < 0) + return nil; + + return _tableColumns[index]; +} //Selecting Columns and Rows - +/* * selectColumnIndexes:byExtendingSelection: * selectRowIndexes:byExtendingSelection: * selectedColumnIndexes @@ -308,47 +356,58 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * deselectAll: * allowsTypeSelect * setAllowsTypeSelect: - +*/ //Table Dimensions - (int)numberOfColumns +- (int)numberOfColumns { - return _numberOfColumns; + return _tableColumns.length; } /* Returns the number of rows in the receiver. */ - (int)numberOfRows +- (int)numberOfRows { - return _numberOfRows; + if (!_dataSource) + return 0; + + return [_dataSource numberOfRowsInTableView:self]; } //Displaying Cell - - * tableView:willDisplayCell:forTableColumn:row: delegate method +/* * preparedCellAtColumn:row: - * tableView:dataCellForTableColumn:row: delegate method - * tableView:shouldShowCellExpansionForTableColumn:row: delegate method - * tableView:isGroupRow: delegate method - +*/ //Editing Cells - +/* * editColumn:row:withEvent:select: * editedColumn * editedRow - * tableView:shouldEditTableColumn:row: delegate method - +*/ //Setting Auxiliary Views - +/* * setHeaderView: * headerView * setCornerView: * cornerView - +*/ //Layout Support +/* +- (void)_recalculateTableColumnRects +{ + for () + _tabelColumnWidths[index] = CGRectMake(); +} + +- (CGRect)rectOfColumn:(CPInteger)aColumnIndex +{ + if (?) + [self _recalculateTableColumnRects]; + + return CGRectMake(_tableColumnWidth[aColumnIndex]; +} - * rectOfColumn: * rectOfRow: * rowsInRect: * columnIndexesInRect: @@ -364,41 +423,29 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * noteHeightOfRowsWithIndexesChanged: * tableView:heightOfRow: delegate method * columnsInRect: Deprecated in Mac OS X v10.5 - +*/ //Drawing - +/* * drawRow:clipRect: * drawGridInClipRect: * highlightSelectionInClipRect: * drawBackgroundInClipRect: - +*/ //Scrolling - +/* * scrollRowToVisible: * scrollColumnToVisible: - +*/ //Persistence - +/* * autosaveName * autosaveTableColumns * setAutosaveName: * setAutosaveTableColumns: - -//Selecting in the Tableview - - * selectionShouldChangeInTableView: delegate method - * tableView:shouldSelectRow: delegate method - * tableView:selectionIndexesForProposedSelection: delegate method - * tableView:shouldSelectTableColumn: delegate method - * tableViewSelectionIsChanging: delegate method - * tableViewSelectionDidChange: delegate method - * tableView:shouldTypeSelectForEvent:withCurrentSearchString: delegate method - * tableView:typeSelectStringForTableColumn:row: delegate method - * tableView:nextTypeSelectMatchFromRow:toRow:forString: delegate method +*/ //Setting the Delegate:(id)aDelegate - - (void)setDelegate:(id)aDelegate { if (_delegate === aDelegate) @@ -438,7 +485,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; if ([_delegate respondsToSelector:@selector(selectionShouldChangeInTableView:)]) _implementedDelegateMethods |= CPTableViewDelegate_selectionShouldChangeInTableView_; - + if ([_delegate respondsToSelector:@selector(tableView:dataViewForTableColumn:row:)]) _implementedDelegateMethods |= CPTableViewDelegate_tableView_dataViewForTableColumn_row_; @@ -457,7 +504,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; if ([_delegate respondsToSelector:@selector(tableView:mouseDownInHeaderOfTableColumn:)]) _implementedDelegateMethods |= CPTableViewDelegate_tableView_mouseDownInHeaderOfTableColumn_; - if ([_delegate respondsToSelector:@selector(tableView:nextTypeSelectMatchFromRow:toRow:forString:) + if ([_delegate respondsToSelector:@selector(tableView:nextTypeSelectMatchFromRow:toRow:forString:)]) _implementedDelegateMethods |= CPTableViewDelegate_tableView_nextTypeSelectMatchFromRow_toRow_forString_; if ([_delegate respondsToSelector:@selector(tableView:selectionIndexesForProposedSelection:)]) @@ -503,7 +550,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; selector:@selector(tableViewColumnDidMove:) name:CPTableViewColumnDidResizeNotification object:self]; - + if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) [defaultCenter addObserver:_delegate @@ -525,53 +572,41 @@ CPTableViewSelectionHighlightStyleSourceList = 1; } //Highlightable Column Headers - +/* (CPTableColumn)highlightedTableColumn { } * setHighlightedTableColumn: - +*/ //Dragging - +/* * dragImageForRowsWithIndexes:tableColumns:event:offset: * canDragRowsWithIndexes:atPoint: * setDraggingSourceOperationMask:forLocal: * setDropRow:dropOperation: * setVerticalMotionCanBeginDrag: * verticalMotionCanBeginDrag - +*/ //Sorting - +/* * setSortDescriptors: * sortDescriptors - -//Moving and Resizing Columns - - * tableView:didDragTableColumn: delegate method - * tableViewColumnDidMove: delegate method - * tableViewColumnDidResize: delegate method - -//Responding to Mouse Events - - * tableView:didClickTableColumn: delegate method - * tableView:mouseDownInHeaderOfTableColumn: delegate method - * tableView:shouldTrackCell:forTableColumn:row: delegate method +*/ //Text Delegate Methods - +/* * textShouldBeginEditing: * textDidBeginEditing: * textDidChange: * textShouldEndEditing: * textDidEndEditing: +*/ -//Displaying Tooltips +- (void)layoutSubviews +{ - * tableView:toolTipForCell:rect:tableColumn:row:mouseLocation: delegate method +} - - - -@end \ No newline at end of file +@end From 201fda96a5a7c5f286fd2e0a0f6f839974a54cf0 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Thu, 18 Jun 2009 16:56:49 -0700 Subject: [PATCH 041/244] Getting something on the screen. Reviewed by me. --- AppKit/NEWCPTableColumn.j | 21 ++- AppKit/NEWCPTableView.j | 275 ++++++++++++++++++++++++++++++++++---- TableTest/AppController.j | 65 ++++----- 3 files changed, 299 insertions(+), 62 deletions(-) diff --git a/AppKit/NEWCPTableColumn.j b/AppKit/NEWCPTableColumn.j index 38513111b..6f5bc33ce 100644 --- a/AppKit/NEWCPTableColumn.j +++ b/AppKit/NEWCPTableColumn.j @@ -27,6 +27,8 @@ CPTableColumnUserResizingMask = 2; { CPTableView _tableView; CPView _headerView; + CPView _dataView; + Object _dataViewData; float _width; float _minWidth; @@ -45,8 +47,15 @@ CPTableColumnUserResizingMask = 2; if (self) { + _dataViewData = { }; + + _width = 100.0; + _minWidth = 10.0; + _maxWidth = 1000000.0; + [self setIdentifier:anIdentifier]; [self setHeaderView:[CPTableHeaderView new]]; + [self setDataView:[CPTextField new]]; } return self @@ -162,7 +171,7 @@ CPTableColumnUserResizingMask = 2; { if (!aView) [CPException raise:CPInvalidArgumentException reason:@"Attempt to set nil header view on " + [self description]]; - + _headerView = aView; } @@ -190,7 +199,7 @@ CPTableColumnUserResizingMask = 2; /* Returns the CPView object used by the CPTableView to draw values for the receiver. - + By default, this method just calls dataView. Subclassers can override if they need to potentially use different cells for different rows. Subclasses should expect this method to be invoked with row equal to -1 in cases where no actual row is involved but the table @@ -204,7 +213,7 @@ CPTableColumnUserResizingMask = 2; - (id)_newDataViewForRow:(int)aRowIndex { var dataView = [self dataViewForRow:aRowIndex], - dataViewUID = [view UID]; + dataViewUID = [dataView UID]; // if we haven't cached an archive of the data view, do it now if (!_dataViewData[dataViewUID]) @@ -213,7 +222,7 @@ CPTableColumnUserResizingMask = 2; // unarchive the data view cache var newDataView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[dataViewUID]]; - return newView; + return newDataView; } //Setting the Identifier @@ -232,7 +241,7 @@ CPTableColumnUserResizingMask = 2; - (id)identifier { return _identifier; -} +} //Controlling Editability @@ -252,7 +261,7 @@ CPTableColumnUserResizingMask = 2; { return _isEditable; } - + //Sorting - (void)setSortDescriptorPrototype:(CPSortDescriptor)aSortDescriptor { diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index a605012f1..edf020fc0 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -4,6 +4,8 @@ @import "CPControl.j" @import "CPTableColumn.j" +#include "CoreGraphics/CGGeometry.h" + var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2, @@ -50,6 +52,10 @@ CPTableViewSelectionHighlightStyleSourceList = 1; CPInteger _implementedDelegateMethods; CPArray _tableColumns; + CPArray _tableColumnRanges; + CPInteger _dirtyTableColumnRangeIndex; + + Object _objectValues; //Configuring Behavior BOOL _allowsColumnReordering; @@ -65,8 +71,6 @@ CPTableViewSelectionHighlightStyleSourceList = 1; unsigned _currentHighlightedTableColumn; unsigned _numberOfRows; - unsigned _numberOfColumns; - } - (id)initWithFrame:(CGRect)aFrame @@ -86,6 +90,14 @@ CPTableViewSelectionHighlightStyleSourceList = 1; // _selectionHighlightMask = CPTableViewSelectionHighlightStyleRegular; _tableColumns = []; + _tableColumnRanges = []; + _dirtyTableColumnRangeIndex = CPNotFound; + + _objectValues = { }; + _numberOfRows = 0; + + _intercellSpacing = _CGSizeMake(0.0, 0.0); + _rowHeight = 24.0; } return self; @@ -137,7 +149,13 @@ CPTableViewSelectionHighlightStyleSourceList = 1; - (void)reloadData { + if (!_dataSource) + return; + _numberOfRows = [_dataSource numberOfRowsInTableView:self]; + _objectValues = { }; + + [self layoutSubviews]; } //Target-action Behavior @@ -220,6 +238,10 @@ CPTableViewSelectionHighlightStyleSourceList = 1; [self setNeedsLayout]; } +- (void)setThemeState:(int)astae +{ +} + - (CGSize)intercellSpacing { return _CGSizeMakeCopy(_intercellSpacing); @@ -282,12 +304,29 @@ CPTableViewSelectionHighlightStyleSourceList = 1; { [_tableColumns addObject:aTableColumn]; + if (_dirtyTableColumnRangeIndex < 0) + _dirtyTableColumnRangeIndex = _tableColumns.length - 1; + else + _dirtyTableColumnRangeIndex = MIN(_tableColumns.length - 1, _dirtyTableColumnRangeIndex); + [self setNeedsLayout]; } - (void)removeTableColumn:(CPTableColumn)aTableColumn { - [_tableColumns removeObjectIdenticalTo:aTableColumn]; + var index = [_tableColumns indeOfObjectIdenticalTo:aTableColumn]; + + [_tableColumns removeObjectAtIndex:index]; + + var tableColumnUID = [aTableColumn UID]; + + if (_objectValues[tableColumnUID]) + _objectValues[tableColumnUID] = nil; + + if (_dirtyTableColumnRangeIndex < 0) + _dirtyTableColumnRangeIndex = index; + else + _dirtyTableColumnRangeIndex = MIN(index, _dirtyTableColumnRangeIndex); [self setNeedsLayout]; } @@ -300,6 +339,11 @@ CPTableViewSelectionHighlightStyleSourceList = 1; if (fromIndex === toIndex) return; + if (_dirtyTableColumnRangeIndex < 0) + _dirtyTableColumnRangeIndex = MIN(fromIndex, toIndex); + else + _dirtyTableColumnRangeIndex = MIN(fromIndex, toIndex, _dirtyTableColumnRangeIndex); + if (toIndex > fromIndex) --toIndex; @@ -393,26 +437,138 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * cornerView */ //Layout Support -/* -- (void)_recalculateTableColumnRects + +- (void)_recalculateTableColumnRanges { - for () - _tabelColumnWidths[index] = CGRectMake(); + if (_dirtyTableColumnRangeIndex < 0) + return; + + var index = _dirtyTableColumnRangeIndex, + count = _tableColumns.length, + x = index === 0 ? 0.0 : CPMaxRange(_tableColumnRanges[index - 1]); + + for (; index < count; ++index) + { + var tableColumn = _tableColumns[index]; + + if ([tableColumn isHidden]) + _tableColumnRanges[index] = CPMakeRange(x, 0.0); + + else + { + var width = [_tableColumns[index] width]; + + _tableColumnRanges[index] = CPMakeRange(x, width); + + x += width; + } + } + + _tableColumnRanges.length = count; + _dirtyTableColumnRangeIndex = CPNotFound; } - (CGRect)rectOfColumn:(CPInteger)aColumnIndex { - if (?) - [self _recalculateTableColumnRects]; + aColumnIndex = +aColumnIndex; - return CGRectMake(_tableColumnWidth[aColumnIndex]; + if (aColumnIndex < 0 || aColumnIndex >= _tableColumns.length) + return _CGRectMakeZero(); + + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; + + var range = _tableColumnRanges[aColumnIndex]; + + return _CGRectMake(range.location, 0.0, range.length, CGRectGetHeight([self bounds])); } - * rectOfRow: - * rowsInRect: - * columnIndexesInRect: - * columnAtPoint: - * rowAtPoint: +- (CGRect)rectOfRow:(CPInteger)aRowIndex +{ + if (NO) + return NULL; + + return _CGRectMake(0.0, (aRowIndex * (_rowHeight + _intercellSpacing.height)), _CGRectGetWidth([self bounds]), _rowHeight); +} + +- (CPRange)rowsInRect:(CGRect)aRect +{ + return CPMakeRange( MAX(0, [self rowAtPoint:aRect.origin]), + MIN(_numberOfRows, [self rowAtPoint:_CGPointMake(_CGRectGetMaxX(aRect), _CGRectGetMaxY(aRect))])); +} + +- (CPIndexSet)columnIndexesInRect:(CGRect)aRect +{ + var indexSet = [CPIndexSet indexSet], + column = MAX(0, [self columnAtPoint:_CGPointMake(aRect.origin.x, 0.0)]), + lastColumn = [self columnAtPoint:_CGPointMake(_CGRectGetMaxX(aRect), 0.0)]; + + if (lastColumn === CPNotFound) + lastColumn = [self numberOfColumns] - 1; + + for (; column <= lastColumn; ++column) + { + var tableColumn = _tableColumns[column]; + + if (![tableColumn isHidden]) + [indexSet addIndex:column]; + } + + return indexSet; +} + +- (CPInteger)columnAtPoint:(CGPoint)aPoint +{ + if (!CGRectContainsPoint([self bounds], aPoint)) + return CPNotFound; + + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; + + var x = aPoint.x, + low = 0, + high = _tableColumnRanges.length - 1; + + while (low <= high) + { + var middle = FLOOR(low + (high - low) / 2), + range = _tableColumnRanges[middle]; + + if (x < range.location) + high = middle - 1; + + else if (x > CPMaxRange(range)) + low = middle + 1; + + else + { + var numberOfColumns = _tableColumnRanges.length; + + while (middle < numberOfColumns && [_tableColumns[middle] isHidden]) + ++middle; + + if (middle < numberOfColumns) + return middle; + + return CPNotFound; + } + } + + return CPNotFound; +} + +- (CPInteger)rowAtPoint:(CGPoint)aPoint +{ + var y = aPoint.y; + + if (NO) + { + } + + return FLOOR(y / (_rowHeight + _intercellSpacing.height)); +} + +/* * frameOfCellAtColumn:row: * columnAutoresizingStyle * setColumnAutoresizingStyle: @@ -421,15 +577,6 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * tile * sizeToFit * noteHeightOfRowsWithIndexesChanged: - * tableView:heightOfRow: delegate method - * columnsInRect: Deprecated in Mac OS X v10.5 -*/ -//Drawing -/* - * drawRow:clipRect: - * drawGridInClipRect: - * highlightSelectionInClipRect: - * drawBackgroundInClipRect: */ //Scrolling /* @@ -575,7 +722,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; /* (CPTableColumn)highlightedTableColumn { - + } * setHighlightedTableColumn: @@ -604,9 +751,85 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * textDidEndEditing: */ +- (id)_objectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex +{ + var tableColumnUID = [aTableColumn UID], + tableColumnObjectValues = _objectValues[tableColumnUID]; + + if (!tableColumnObjectValues) + { + tableColumnObjectValues = []; + _objectValues[tableColumnUID] = tableColumnObjectValues; + } + + var objectValue = tableColumnObjectValues[aRowIndex]; + + if (objectValue === undefined) + { + objectValue = [_dataSource tableView:self objectValueForTableColumn:aTableColumn row:aRowIndex]; + tableColumnObjectValues[aRowIndex] = objectValue; + } + + return objectValue; +} + +- (CGRect)_exposedRect +{ + var superview = [self superview]; + + if (!superview) + return [self bounds]; + + return [self convertRect:CGRectIntersection([superview bounds], [self frame]) fromView:superview]; +} + +- (void)load +{console.log("logging."); + if (!_dataSource) + { + // remove? + return; + } + + // SLOWMO + var subviews = [self subviews], + count = [subviews count]; + + while (count--) + [subviews[count] removeFromSuperview]; + + var exposedRect = [self _exposedRect], + exposedRows = [self rowsInRect:exposedRect], + exposedColumns = [self columnIndexesInRect:exposedRect], + columnIndex = [exposedColumns firstIndex]; + + while (columnIndex !== CPNotFound) + { + var tableColumn = _tableColumns[columnIndex], + tableColumnRange = _tableColumnRanges[columnIndex]; + + var rowIndex = exposedRows.location, + lastRowIndex = CPMaxRange(exposedRows); + + for (; rowIndex < lastRowIndex; ++rowIndex) + { + var dataView = [tableColumn _newDataViewForRow:rowIndex], + rectOfRow = [self rectOfRow:rowIndex]; + + [dataView setBackgroundColor:[CPColor redColor]]; + [dataView setFrame:_CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow))]; + [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:rowIndex]]; + + [self addSubview:dataView]; + } + + columnIndex = [exposedColumns indexGreaterThanIndex:columnIndex]; + } +} + - (void)layoutSubviews { - + [self load]; } @end diff --git a/TableTest/AppController.j b/TableTest/AppController.j index 97e6e1ba4..79c6cd957 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -1,14 +1,15 @@ -import -import +@import +@import +@import + CPLogRegister(CPLogConsole); @implementation AppController : CPObject { - CPTableView _tableView; - CPArray _data; - CPImage _iconImage; + CPTableView tableView; + CPImage iconImage; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification @@ -18,42 +19,45 @@ CPLogRegister(CPLogConsole); [view setBackgroundColor:[CPColor whiteColor]]; [view enterFullScreenMode:nil withOptions:nil]; - _data = [1, 2]; - - _tableView = [[CPTableView alloc] initWithFrame:[view bounds]]; - //[_tableView setBackgroundColor:[CPColor blueColor]]; - + tableView = [[NEWCPTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 500.0, 500.0)];//[view bounds]]; + + [tableView setBackgroundColor:[CPColor blueColor]]; + var iconView = [[CPImageView alloc] initWithFrame:CGRectMake(16,16,0,0)]; + [iconView setImageScaling:CPScaleNone]; - var iconColumn = [[CPTableColumn alloc] initWithIdentifier:"icons"]; - [iconColumn setWidth:32]; + var iconColumn = [[NEWCPTableColumn alloc] initWithIdentifier:"icons"]; + + [iconColumn setWidth:32.0]; [iconColumn setDataView:iconView]; - - [_tableView addTableColumn:iconColumn]; + + [tableView addTableColumn:iconColumn]; for (var i = 1; i <= 10; i++) { - var column = [[CPTableColumn alloc] initWithIdentifier:String(i)]; + var column = [[NEWCPTableColumn alloc] initWithIdentifier:String(i)]; - [[column headerView] setStringValue:"Number"]; - [[column headerView] sizeToFit]; - [column setWidth:[[column headerView] frame].size.width]; +// [[column headerView] setStringValue:"Number"]; +// [[column headerView] sizeToFit]; +// [column setWidth:[[column headerView] frame].size.width]; + + [column setWidth:200.0]; - [_tableView addTableColumn:column]; + [tableView addTableColumn:column]; } - + var scrollView = [[CPScrollView alloc] initWithFrame:[view bounds]]; - - [scrollView setDocumentView:_tableView]; + + [scrollView setDocumentView:tableView]; [scrollView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - + [view addSubview:scrollView]; + + [tableView setDelegate:self]; + [tableView setDataSource:self]; - [_tableView setDelegate:self]; - [_tableView setDataSource:self]; - - _iconImage = [[CPImage alloc] initWithContentsOfFile:"http://cappuccino.org/images/favicon.png" size:CGSizeMake(16,16)]; + iconImage = [[CPImage alloc] initWithContentsOfFile:"http://cappuccino.org/images/favicon.png" size:CGSizeMake(16,16)]; } - (int)numberOfRowsInTableView:(CPTableView)tableView @@ -63,8 +67,8 @@ CPLogRegister(CPLogConsole); - (id)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row { - if ([tableColumn identifier] == "icons") - return _iconImage + if ([tableColumn identifier] === "icons") + return iconImage else return String((row + 1) * [[tableColumn identifier] intValue]); } @@ -90,7 +94,8 @@ CPLogRegister(CPLogConsole); //CPLog.debug(@"shouldSelectRow %d", rowIndex); for (var i = 2, sqrt = SQRT(rowIndex+1); i <= sqrt; i++) if ((rowIndex+1) % i === 0) - return false + return false; + return true; } From 8beb71aa769892092aedb9847982a4a80751ab94 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 19 Jun 2009 03:37:14 -0700 Subject: [PATCH 042/244] Work on appropriately sizing table view. Reviewed by me. --- AppKit/NEWCPTableView.j | 179 ++++++++++++++++++++++++++++++++++---- TableTest/AppController.j | 4 +- 2 files changed, 165 insertions(+), 18 deletions(-) diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index edf020fc0..863d477af 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -43,6 +43,8 @@ CPTableViewSelectionHighlightStyleRegular = 0; CPTableViewSelectionHighlightStyleSourceList = 1; */ +#define NUMBER_OF_COLUMNS() (_tableColumns.length) + @implementation NEWCPTableView : CPControl { id _dataSource; @@ -54,6 +56,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; CPArray _tableColumns; CPArray _tableColumnRanges; CPInteger _dirtyTableColumnRangeIndex; + CPInteger _numberOfHiddenColumns; Object _objectValues; @@ -86,12 +89,15 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _allowsEmptySelection = YES; _allowsColumnSelection = NO; + _tableViewFlags = 0; + //Setting Display Attributes // _selectionHighlightMask = CPTableViewSelectionHighlightStyleRegular; _tableColumns = []; _tableColumnRanges = []; _dirtyTableColumnRangeIndex = CPNotFound; + _numberOfHiddenColumns = 0; _objectValues = { }; _numberOfRows = 0; @@ -152,9 +158,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; if (!_dataSource) return; - _numberOfRows = [_dataSource numberOfRowsInTableView:self]; _objectValues = { }; - + [self noteNumberOfRowsChanged]; +[self _sizeToParent]; [self layoutSubviews]; } @@ -305,9 +311,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; [_tableColumns addObject:aTableColumn]; if (_dirtyTableColumnRangeIndex < 0) - _dirtyTableColumnRangeIndex = _tableColumns.length - 1; + _dirtyTableColumnRangeIndex = NUMBER_OF_COLUMNS() - 1; else - _dirtyTableColumnRangeIndex = MIN(_tableColumns.length - 1, _dirtyTableColumnRangeIndex); + _dirtyTableColumnRangeIndex = MIN(NUMBER_OF_COLUMNS() - 1, _dirtyTableColumnRangeIndex); [self setNeedsLayout]; } @@ -363,7 +369,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; - (CPInteger)columnWithIdentifier:(CPString)anIdentifier { var index = 0, - count = _tableColumns.length; + count = NUMBER_OF_COLUMNS(); for (; index < count; ++index) if ([_tableColumns identifier] === anIdentifier) @@ -405,7 +411,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; - (int)numberOfColumns { - return _tableColumns.length; + return NUMBER_OF_COLUMNS(); } /* @@ -438,13 +444,15 @@ CPTableViewSelectionHighlightStyleSourceList = 1; */ //Layout Support +// Complexity: +// O(Columns) - (void)_recalculateTableColumnRanges { if (_dirtyTableColumnRangeIndex < 0) return; var index = _dirtyTableColumnRangeIndex, - count = _tableColumns.length, + count = NUMBER_OF_COLUMNS(), x = index === 0 ? 0.0 : CPMaxRange(_tableColumnRanges[index - 1]); for (; index < count; ++index) @@ -468,11 +476,13 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _dirtyTableColumnRangeIndex = CPNotFound; } +// Complexity: +// O(1) - (CGRect)rectOfColumn:(CPInteger)aColumnIndex { aColumnIndex = +aColumnIndex; - if (aColumnIndex < 0 || aColumnIndex >= _tableColumns.length) + if (aColumnIndex < 0 || aColumnIndex >= NUMBER_OF_COLUMNS()) return _CGRectMakeZero(); if (_dirtyTableColumnRangeIndex !== CPNotFound) @@ -488,23 +498,59 @@ CPTableViewSelectionHighlightStyleSourceList = 1; if (NO) return NULL; + // FIXME: WRONG: ASK TABLE COLUMN RANGE return _CGRectMake(0.0, (aRowIndex * (_rowHeight + _intercellSpacing.height)), _CGRectGetWidth([self bounds]), _rowHeight); } +// Complexity: +// O(1) - (CPRange)rowsInRect:(CGRect)aRect { - return CPMakeRange( MAX(0, [self rowAtPoint:aRect.origin]), - MIN(_numberOfRows, [self rowAtPoint:_CGPointMake(_CGRectGetMaxX(aRect), _CGRectGetMaxY(aRect))])); + var bounds = nil, + firstRow = [self rowAtPoint:aRect.origin], + lastRow = [self rowAtPoint:_CGPointMake(0.0, _CGRectGetMaxY(aRect))]; + + if (firstRow < 0) + { + bounds = [self bounds]; + + if (_CGRectGetMinY(aRect) < _CGRectGetMinY(bounds)) + firstRow = 0; + else + firstRow = _numberOfRows - 1; + } + + if (lastRow < 0) + { + if (!bounds) + bounds = [self bounds]; + + if (_CGRectGetMaxY(aRect) < _CGRectGetMinY(bounds)) + lastRow = 0; + else + lastRow = _numberOfRows - 1; + } + + return CPMakeRange(firstRow, lastRow - firstRow + 1); } +// Complexity: +// O(lg Columns) if table view contains no hidden columns +// O(Columns) if table view contains hidden columns - (CPIndexSet)columnIndexesInRect:(CGRect)aRect { - var indexSet = [CPIndexSet indexSet], - column = MAX(0, [self columnAtPoint:_CGPointMake(aRect.origin.x, 0.0)]), + var column = MAX(0, [self columnAtPoint:_CGPointMake(aRect.origin.x, 0.0)]), lastColumn = [self columnAtPoint:_CGPointMake(_CGRectGetMaxX(aRect), 0.0)]; if (lastColumn === CPNotFound) - lastColumn = [self numberOfColumns] - 1; + lastColumn = NUMBER_OF_COLUMNS() - 1; + + // Don't bother doing the expensive removal of hidden indexes if we have no hidden columns. + if (_numberOfHiddenColumns < 0) + return [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(column, lastColumn - column)]; + + // + var indexSet = [CPIndexSet indexSet]; for (; column <= lastColumn; ++column) { @@ -517,6 +563,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; return indexSet; } +// Complexity: +// O(lg Columns) if table view contains now hidden columns +// O(Columns) if table view contains hidden columns - (CPInteger)columnAtPoint:(CGPoint)aPoint { if (!CGRectContainsPoint([self bounds], aPoint)) @@ -572,8 +621,41 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * frameOfCellAtColumn:row: * columnAutoresizingStyle * setColumnAutoresizingStyle: - * sizeLastColumnToFit - * noteNumberOfRowsChanged +*/ +- (void)sizeLastColumnToFit +{ + var superview = [self superview]; + + if (!superview) + return; + + var superviewSize = [superview bounds].size; + + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; + + var count = NUMBER_OF_COLUMNS(); + + while (count-- && [_tableColumns[count] isHidden]) ; + + if (count >= 0) + { + var difference = superviewSize.width - CPMaxRange(_tableColumnRanges[count]), + tableColumn = _tableColumns[count]; + + [tableColumn setWidth:MAX(0.0, [tableColumn width] + difference)]; + } + + [self setNeedsLayout]; +} + +- (void)noteNumberOfRowsChanged +{ + _numberOfRows = [_dataSource numberOfRowsInTableView:self]; + + [self setNeedsLayout]; +} +/* * tile * sizeToFit * noteHeightOfRowsWithIndexesChanged: @@ -591,6 +673,23 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * setAutosaveTableColumns: */ +- (void)_sizeToParent +{ + var superviewSize = [[self superview] bounds].size; + + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; + + if (_tableColumnRanges.length > 0) + var naturalWidth = CPMaxRange([_tableColumnRanges lastObject]); + + else + var naturalWidth = 0.0; + + [self setFrameSize:_CGSizeMake( MAX(superviewSize.width, naturalWidth), + MAX(superviewSize.height, (_rowHeight + _intercellSpacing.height) * _numberOfRows))]; +} + //Setting the Delegate:(id)aDelegate - (void)setDelegate:(id)aDelegate @@ -777,14 +876,14 @@ CPTableViewSelectionHighlightStyleSourceList = 1; { var superview = [self superview]; - if (!superview) + if (![superview isKindOfClass:[CPClipView class]]) return [self bounds]; return [self convertRect:CGRectIntersection([superview bounds], [self frame]) fromView:superview]; } - (void)load -{console.log("logging."); +{//console.log("logging."); if (!_dataSource) { // remove? @@ -832,4 +931,50 @@ CPTableViewSelectionHighlightStyleSourceList = 1; [self load]; } +- (void)viewWillMoveToSuperview:(CPView)aView +{ + var superview = [self superview], + defaultCenter = [CPNotificationCenter defaultCenter]; + + if (superview) + { + [defaultCenter + removeObserver:self + name:CPViewFrameDidChangeNotification + object:superview]; + + [defaultCenter + removeObserver:self + name:CPViewBoundsDidChangeNotification + object:superview]; + } + + if (aView) + { + [aView setPostsFrameChangedNotifications:YES]; + [aView setPostsBoundsChangedNotifications:YES]; + + [defaultCenter + addObserver:self + selector:@selector(superviewFrameChanged:) + name:CPViewFrameDidChangeNotification + object:aView]; + + [defaultCenter + addObserver:self + selector:@selector(superviewBoundsChanged:) + name:CPViewBoundsDidChangeNotification + object:aView]; + } +} + +- (void)superviewBoundsChanged:(CPNotification)aNotification +{ + [self setNeedsLayout]; +} + +- (void)superviewFrameChanged:(CPNotification)aNotification +{ +} + @end diff --git a/TableTest/AppController.j b/TableTest/AppController.j index 79c6cd957..409171419 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -1,5 +1,7 @@ @import + +@import @import @import @@ -62,7 +64,7 @@ CPLogRegister(CPLogConsole); - (int)numberOfRowsInTableView:(CPTableView)tableView { - return 7000000; + return 700000; } - (id)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row From 05cdc2bab31b0f286131960e4b0ac77da0720b87 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 20 Jun 2009 01:56:38 -0700 Subject: [PATCH 043/244] Changed file type to UTF-8. Reviewed by me. --- AppKit/NEWCPTableColumn.j | 2 +- AppKit/NEWCPTableView.j | 126 +++++++++++++++++++------------------- 2 files changed, 64 insertions(+), 64 deletions(-) diff --git a/AppKit/NEWCPTableColumn.j b/AppKit/NEWCPTableColumn.j index 6f5bc33ce..7a6e8b8fc 100644 --- a/AppKit/NEWCPTableColumn.j +++ b/AppKit/NEWCPTableColumn.j @@ -228,7 +228,7 @@ CPTableColumnUserResizingMask = 2; //Setting the Identifier /* - Sets the receivers identifier to anIdentifier. + Sets the receiverÕs identifier to anIdentifier. */ - (void)setIdentifier:(id)anIdentifier { diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index 863d477af..997971204 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -177,8 +177,8 @@ CPTableViewSelectionHighlightStyleSourceList = 1; } /* - * clickedColumn - * clickedRow + * - clickedColumn + * - clickedRow */ //Configuring Behavior @@ -270,7 +270,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; return _rowHeight; } /* - (void)setUsesAlternatingRowBackgroundColors:(BOOL)shouldUseAlternatingRowBackgroundColors +- (void)setUsesAlternatingRowBackgroundColors:(BOOL)shouldUseAlternatingRowBackgroundColors { // TODO:need to look at how one actually sets the alternating row, a tip at: // http://forums.macnn.com/79/developer-center/228347/nstableview-alternating-row-colors/ @@ -280,29 +280,29 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _usesAlternatingRowBackgroundColors = shouldUseAlternatingRowBackgroundColors; } - (BOOL)usesAlternatingRowBackgroundColors +- (BOOL)usesAlternatingRowBackgroundColors { return _usesAlternatingRowBackgroundColors; } - (unsigned)selectionHighlightStyle +- (unsigned)selectionHighlightStyle { return _selectionHighlightMask; } - (void)setSelectionHighlightStyle:(unsigned)aSelectionHighlightStyle +- (void)setSelectionHighlightStyle:(unsigned)aSelectionHighlightStyle { _selectionHighlightMask = aSelectionHighlightStyle; } - setGridColor: +- setGridColor: - * gridColor - * setGridStyleMask: - * gridStyleMask - * indicatorImageInTableColumn: - * setIndicatorImage:inTableColumn: + * - gridColor + * - setGridStyleMask: + * - gridStyleMask + * - indicatorImageInTableColumn: + * - setIndicatorImage:inTableColumn: */ //Column Management @@ -390,22 +390,22 @@ CPTableViewSelectionHighlightStyleSourceList = 1; //Selecting Columns and Rows /* - * selectColumnIndexes:byExtendingSelection: - * selectRowIndexes:byExtendingSelection: - * selectedColumnIndexes - * selectedRowIndexes - * deselectColumn: - * deselectRow: - * numberOfSelectedColumns - * numberOfSelectedRows - * selectedColumn - * selectedRow - * isColumnSelected: - * isRowSelected: - * selectAll: - * deselectAll: - * allowsTypeSelect - * setAllowsTypeSelect: + * - selectColumnIndexes:byExtendingSelection: + * - selectRowIndexes:byExtendingSelection: + * - selectedColumnIndexes + * - selectedRowIndexes + * - deselectColumn: + * - deselectRow: + * - numberOfSelectedColumns + * - numberOfSelectedRows + * - selectedColumn + * - selectedRow + * - isColumnSelected: + * - isRowSelected: + * - selectAll: + * - deselectAll: + * - allowsTypeSelect + * - setAllowsTypeSelect: */ //Table Dimensions @@ -427,20 +427,20 @@ CPTableViewSelectionHighlightStyleSourceList = 1; //Displaying Cell /* - * preparedCellAtColumn:row: + * - preparedCellAtColumn:row: */ //Editing Cells /* - * editColumn:row:withEvent:select: - * editedColumn - * editedRow + * - editColumn:row:withEvent:select: + * - editedColumn + * - editedRow */ //Setting Auxiliary Views /* - * setHeaderView: - * headerView - * setCornerView: - * cornerView + * - setHeaderView: + * - headerView + * - setCornerView: + * - cornerView */ //Layout Support @@ -618,9 +618,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; } /* - * frameOfCellAtColumn:row: - * columnAutoresizingStyle - * setColumnAutoresizingStyle: + * - frameOfCellAtColumn:row: + * - columnAutoresizingStyle + * - setColumnAutoresizingStyle: */ - (void)sizeLastColumnToFit { @@ -656,21 +656,21 @@ CPTableViewSelectionHighlightStyleSourceList = 1; [self setNeedsLayout]; } /* - * tile - * sizeToFit - * noteHeightOfRowsWithIndexesChanged: + * - tile + * - sizeToFit + * - noteHeightOfRowsWithIndexesChanged: */ //Scrolling /* - * scrollRowToVisible: - * scrollColumnToVisible: + * - scrollRowToVisible: + * - scrollColumnToVisible: */ //Persistence /* - * autosaveName - * autosaveTableColumns - * setAutosaveName: - * setAutosaveTableColumns: + * - autosaveName + * - autosaveTableColumns + * - setAutosaveName: + * - setAutosaveTableColumns: */ - (void)_sizeToParent @@ -819,35 +819,35 @@ CPTableViewSelectionHighlightStyleSourceList = 1; //Highlightable Column Headers /* - (CPTableColumn)highlightedTableColumn +- (CPTableColumn)highlightedTableColumn { } - * setHighlightedTableColumn: + * - setHighlightedTableColumn: */ //Dragging /* - * dragImageForRowsWithIndexes:tableColumns:event:offset: - * canDragRowsWithIndexes:atPoint: - * setDraggingSourceOperationMask:forLocal: - * setDropRow:dropOperation: - * setVerticalMotionCanBeginDrag: - * verticalMotionCanBeginDrag + * - dragImageForRowsWithIndexes:tableColumns:event:offset: + * - canDragRowsWithIndexes:atPoint: + * - setDraggingSourceOperationMask:forLocal: + * - setDropRow:dropOperation: + * - setVerticalMotionCanBeginDrag: + * - verticalMotionCanBeginDrag */ //Sorting /* - * setSortDescriptors: - * sortDescriptors + * - setSortDescriptors: + * - sortDescriptors */ //Text Delegate Methods /* - * textShouldBeginEditing: - * textDidBeginEditing: - * textDidChange: - * textShouldEndEditing: - * textDidEndEditing: + * - textShouldBeginEditing: + * - textDidBeginEditing: + * - textDidChange: + * - textShouldEndEditing: + * - textDidEndEditing: */ - (id)_objectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex From c7f81691bff7a9ffd5d73d967111c071175c0a4e Mon Sep 17 00:00:00 2001 From: Nabil Elisa Date: Fri, 19 Jun 2009 21:28:34 +0100 Subject: [PATCH 044/244] Added more colors to satisfy issue #182 --- AppKit/CPColor.j | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/AppKit/CPColor.j b/AppKit/CPColor.j index d4188c92e..464ddecb3 100644 --- a/AppKit/CPColor.j +++ b/AppKit/CPColor.j @@ -46,6 +46,11 @@ var cachedBlackColor, cachedLightGrayColor, cachedDarkGrayColor, cachedWhiteColor, + cachedBrownColor, + cachedCyanColor, + cachedMagentaColor, + cachedOrangeColor, + cachedPurpleColor, cachedShadowColor, cachedClearColor; @@ -291,6 +296,61 @@ var cachedBlackColor, return cachedYellowColor; } +/*! + Returns a brown color object (RGBA=[0.6, 0.4, 0.2, 1.0]) +*/ ++ (CPColor)brownColor +{ + if (!cachedBrownColor) + cachedBrownColor = [[CPColor alloc] _initWithRGBA:[0.6, 0.4, 0.2, 1.0]]; + + return cachedBrownColor; +} + +/*! + Returns a cyan color object (RGBA=[0.0, 1.0, 1.0, 1.0]) +*/ ++ (CPColor)cyanColor +{ + if (!cachedCyanColor) + cachedCyanColor = [[CPColor alloc] _initWithRGBA:[0.0, 1.0, 1.0, 1.0]]; + + return cachedCyanColor; +} + +/*! + Returns a magenta color object (RGBA=[1.0, 0.0, 1.0, 1.0]) +*/ ++ (CPColor)magentaColor +{ + if (!cachedMagentaColor) + cachedMagentaColor = [[CPColor alloc] _initWithRGBA:[1.0, 0.0, 1.0, 1.0]]; + + return cachedMagentaColor; +} + +/*! + Returns a orange color object (RGBA=[1.0, 0.5, 0.0, 1.0]) +*/ ++ (CPColor)orangeColor +{ + if (!cachedOrangeColor) + cachedOrangeColor = [[CPColor alloc] _initWithRGBA:[1.0, 0.5, 0.0, 1.0]]; + + return cachedOrangeColor; +} + +/*! + Returns a purple color object (RGBA=[0.5, 0.0, 0.5, 1.0]) +*/ ++ (CPColor)purpleColor +{ + if (!cachedPurpleColor) + cachedPurpleColor = [[CPColor alloc] _initWithRGBA:[0.5, 0.0, 0.5, 1.0]]; + + return cachedPurpleColor; +} + /*! Returns a shadow looking color (RGBA=[0.0, 0.0, 0.0, 0.33]) */ From 71a99deada4974ccb028cec7bcb3ed8d4d42cfd5 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 20 Jun 2009 17:06:24 -0700 Subject: [PATCH 045/244] Further work on loading system and fixed faulty test. Reviewed by me. --- AppKit/NEWCPTableView.j | 51 ++++++++++++++++++++++++++++++++------- TableTest/AppController.j | 8 +++--- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index 997971204..22e13a01f 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -59,6 +59,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; CPInteger _numberOfHiddenColumns; Object _objectValues; + CPArray _dataViews; + CPRange _exposedRows; + CPIndexSet _exposedColumns; //Configuring Behavior BOOL _allowsColumnReordering; @@ -100,7 +103,10 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _numberOfHiddenColumns = 0; _objectValues = { }; + _dataViews= []; _numberOfRows = 0; + _exposedRows = [CPIndexSet indexSet]; + _exposedColumns = [CPIndexSet indexSet]; _intercellSpacing = _CGSizeMake(0.0, 0.0); _rowHeight = 24.0; @@ -883,7 +889,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; } - (void)load -{//console.log("logging."); +{ if (!_dataSource) { // remove? @@ -891,26 +897,49 @@ CPTableViewSelectionHighlightStyleSourceList = 1; } // SLOWMO - var subviews = [self subviews], +/* var subviews = [self subviews], count = [subviews count]; while (count--) [subviews[count] removeFromSuperview]; - +*/ var exposedRect = [self _exposedRect], - exposedRows = [self rowsInRect:exposedRect], + exposedRows = [CPIndexSet indexSetWithIndexesInRange:[self rowsInRect:exposedRect]], exposedColumns = [self columnIndexesInRect:exposedRect], - columnIndex = [exposedColumns firstIndex]; + previouslyExposedRows = [_exposedRows copy], + previouslyExposedColumns = [_exposedColumns copy], + newlyExposedRows = [exposedRows copy], + newlyExposedColumns = [exposedColumns copy]; + + [newlyExposedRows removeIndexes:_exposedRows]; + [newlyExposedColumns removeIndexes:_exposedColumns]; + [previouslyExposedRows removeIndexes:newlyExposedRows]; + [previouslyExposedColumns removeIndexes:newlyExposedColumns]; + + //console.log("newly exposed rows: " + newlyExposedRows + "\nnewly exposed columns: " + newlyExposedColumns); + _exposedRows = exposedRows; + _exposedColumns = exposedColumns; + + [self r:previouslyExposedRows c:newlyExposedColumns]; + [self r:newlyExposedRows c:previouslyExposedColumns]; + [self r:newlyExposedRows c:newlyExposedColumns]; +} + +- (void)r:(CPIndexSet)rows c:(CPIndexSet)columns +{ + var columnIndex = [columns firstIndex]; while (columnIndex !== CPNotFound) { + if (!_dataViews[columnIndex]) + _dataViews[columnIndex] = []; + var tableColumn = _tableColumns[columnIndex], tableColumnRange = _tableColumnRanges[columnIndex]; - var rowIndex = exposedRows.location, - lastRowIndex = CPMaxRange(exposedRows); + var rowIndex = [rows firstIndex] - for (; rowIndex < lastRowIndex; ++rowIndex) + while (rowIndex !== CPNotFound) { var dataView = [tableColumn _newDataViewForRow:rowIndex], rectOfRow = [self rectOfRow:rowIndex]; @@ -920,9 +949,13 @@ CPTableViewSelectionHighlightStyleSourceList = 1; [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:rowIndex]]; [self addSubview:dataView]; + + _dataViews[columnIndex][rowIndex] = dataView; + + rowIndex = [rows indexGreaterThanIndex:rowIndex]; } - columnIndex = [exposedColumns indexGreaterThanIndex:columnIndex]; + columnIndex = [columns indexGreaterThanIndex:columnIndex]; } } diff --git a/TableTest/AppController.j b/TableTest/AppController.j index 409171419..cc6d96473 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -35,7 +35,9 @@ CPLogRegister(CPLogConsole); [iconColumn setDataView:iconView]; [tableView addTableColumn:iconColumn]; - + + iconImage = [[CPImage alloc] initWithContentsOfFile:"http://cappuccino.org/images/favicon.png" size:CGSizeMake(16,16)]; + for (var i = 1; i <= 10; i++) { var column = [[NEWCPTableColumn alloc] initWithIdentifier:String(i)]; @@ -58,8 +60,6 @@ CPLogRegister(CPLogConsole); [tableView setDelegate:self]; [tableView setDataSource:self]; - - iconImage = [[CPImage alloc] initWithContentsOfFile:"http://cappuccino.org/images/favicon.png" size:CGSizeMake(16,16)]; } - (int)numberOfRowsInTableView:(CPTableView)tableView @@ -70,7 +70,7 @@ CPLogRegister(CPLogConsole); - (id)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row { if ([tableColumn identifier] === "icons") - return iconImage + return iconImage; else return String((row + 1) * [[tableColumn identifier] intValue]); } From 7d158de356edde342fa6f0e4d9e8c4704a76218c Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sat, 20 Jun 2009 17:12:03 -0700 Subject: [PATCH 046/244] Fix for incorrect chain received mouseEntered events. Closes #199. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index e2ef55142..48a9968c6 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -1234,10 +1234,10 @@ CPTexturedBackgroundWindowMask var deviation = MIN(_mouseEnteredStack.length, mouseEnteredStack.length); while (deviation--) - if (_mouseEnteredStack[deviation] !== mouseEnteredStack[deviation]) + if (_mouseEnteredStack[deviation] === mouseEnteredStack[deviation]) break; - var index = deviation, + var index = deviation + 1, count = _mouseEnteredStack.length; if (index < count) @@ -1248,7 +1248,7 @@ CPTexturedBackgroundWindowMask [_mouseEnteredStack[index] mouseExited:event]; } - index = deviation; + index = deviation + 1; count = mouseEnteredStack.length; if (index < count) From d16576174010876b2c5039f18e9c1f2e2ed012bd Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 21 Jun 2009 03:50:06 -0700 Subject: [PATCH 047/244] Began work on rewriting CPIndexSet. Reviewed by me. --- AppKit/NEWCPTableView.j | 7 +- Foundation/CPIndexSet.j | 408 +++++++++++++++++++++------------------- 2 files changed, 215 insertions(+), 200 deletions(-) diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index 22e13a01f..32ef24b24 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -574,7 +574,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; // O(Columns) if table view contains hidden columns - (CPInteger)columnAtPoint:(CGPoint)aPoint { - if (!CGRectContainsPoint([self bounds], aPoint)) + var bounds = [self bounds]; + + if (!_CGRectContainsPoint(bounds, aPoint)) return CPNotFound; if (_dirtyTableColumnRangeIndex !== CPNotFound) @@ -895,7 +897,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; // remove? return; } - +console.profile("cell-load"); // SLOWMO /* var subviews = [self subviews], count = [subviews count]; @@ -923,6 +925,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; [self r:previouslyExposedRows c:newlyExposedColumns]; [self r:newlyExposedRows c:previouslyExposedColumns]; [self r:newlyExposedRows c:newlyExposedColumns]; +console.profileEnd("cell-load"); } - (void)r:(CPIndexSet)rows c:(CPIndexSet)columns diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j index 50f7421a7..4b33b1995 100644 --- a/Foundation/CPIndexSet.j +++ b/Foundation/CPIndexSet.j @@ -35,7 +35,6 @@ @implementation CPIndexSet : CPObject { unsigned _count; - unsigned _cachedRangeIndex; CPArray _ranges; } @@ -75,7 +74,6 @@ { _count = 0; _ranges = []; - _cachedRangeIndex = 0; } return self; @@ -92,8 +90,7 @@ if (self) { _count = 1; - _ranges = [CPArray arrayWithObject:CPMakeRange(anIndex, 1)]; - _cachedRangeIndex = 0; + _ranges = [CPMakeRange(anIndex, 1)]; } return self; @@ -111,8 +108,7 @@ if (self) { _count = aRange.length; - _ranges = [CPArray arrayWithObject:aRange]; - _cachedRangeIndex = 0; + _ranges = [aRange]; } return self; @@ -131,13 +127,12 @@ { _count = [anIndexSet count]; _ranges = []; - _cachedRangeIndex = 0; - - var index = 0, - count = anIndexSet._ranges.length; - - for (; index < count; ++index) - _ranges.push(CPCopyRange(anIndexSet._ranges[index])); + + var otherRanges = anIndexSet._ranges, + otherRangesCount = otherRanges.length; + + while (otherRangesCount--) + _ranges[otherRangesCount] = CPCopyRange(otherRanges[otherRangesCount]); } return self; @@ -151,24 +146,26 @@ */ - (BOOL)isEqualToIndexSet:(CPIndexSet)anIndexSet { + if (!anIndexSet) + return NO; + // Comparisons to ourself are always return YES. - if (self == anIndexSet) + if (self === anIndexSet) return YES; - - var i = 0, - count = _ranges.length; + + var rangesCount = _ranges.length, otherRanges = anIndexSet._ranges; - + // If we have a discrepency in the number of ranges or the number of indexes, // simply return NO. - if (count != otherRanges.length || _count != [anIndexSet count]) - return NO; - - for (; i < count; ++i) - if (!CPEqualRanges(_ranges[i], otherRanges[i])) - return NO; - - return YES; + if (rangesCount !== otherRanges.length || _count !== anIndexSet._count) + return NO; + + while (count--) + if (!CPEqualRanges(_ranges[count], otherRanges[count])) + return NO; + + return YES; } /*! @@ -178,7 +175,7 @@ */ - (BOOL)containsIndex:(unsigned)anIndex { - return [self containsIndexesInRange:CPMakeRange(anIndex, 1)]; + return positionOfIndex(_ranges, anIndex) !== CPNotFound; } /*! @@ -187,29 +184,24 @@ */ - (BOOL)containsIndexesInRange:(CPRange)aRange { - if(!_count) + if (aRange.length <= 0) return NO; - var i = SOERangeIndex(self, aRange.location), - lower = aRange.location, - upper = CPMaxRange(aRange), - count = _ranges.length; + // If we have less total indexes than aRange, we can't possibly contain aRange. + if(_count < aRange.length) + return NO; - // Stop if the location is ever bigger than or equal to our - // non-inclusive upper bound - for(;i < count && _ranges[i].location < upper; ++i) - // The range must be a subset of one our ranges. - if (_ranges[i].location <= lower && CPMaxRange(_ranges[i]) >= upper) - { - _cachedRangeIndex = i; - return YES; - } - - // The value isn't here, but values greater than anIndex should - // start from here regardless. - _cachedRangeIndex = i; - - return NO; + // Search for first location + var rangeIndex = positionOfIndex(_ranges, aRange.location); + + // If we don't have the first location, then we don't contain aRange. + if (rangeIndex === CPNotFound) + return NO; + + var range = _ranges[rangeIndex]; + + // The intersection must contain all the indexes from the original range. + return CPIntersectionRange(range, aRange).length === aRange.length; } /*! @@ -218,22 +210,22 @@ */ - (BOOL)containsIndexes:(CPIndexSet)anIndexSet { - // Return YES if anIndexSet has no indexes - if(![anIndexSet count]) + var otherCount = anIndexSet._count; + + if(otherCount <= 0) return YES; - - // Return NO if we have no indexes. - if(!_count) + + // If we have less total indexes than anIndexSet, we can't possibly contain aRange. + if (_count < otherCount) return NO; - var i = 0, - count = _ranges.length; - - // This is fast thanks to the _cachedIndexRange. - for(; i < count; ++i) - if (![anIndexSet containsIndexesInRange:_ranges[i]]) + var otherRanges = anIndexSet._ranges, + otherRangesCount = otherRanges.length; + + while (otherRangesCount--) + if (![self containsIndexesInRange:otherRanges[otherRangesCount]]) return NO; - + return YES; } @@ -275,7 +267,10 @@ */ - (int)firstIndex { - return _count ? _ranges[0].location : CPNotFound; + if (_count > 0) + return _ranges[0].location; + + return CPNotFound; } /*! @@ -283,32 +278,41 @@ */ - (int)lastIndex { - return _count ? CPMaxRange(_ranges[_ranges.length - 1]) - 1 : CPNotFound; + if (_count > 0) + return CPMaxRange(_ranges[_ranges.length - 1]) - 1; + + return CPNotFound; } /*! Returns the first index value in the receiver which is greater than anIndex. @return the closest index or CPNotFound if no match was found */ -- (unsigned)indexGreaterThanIndex:(unsigned)anIndex +- (CPInteger)indexGreaterThanIndex:(CPInteger)anIndex { - if(!_count) - return CPNotFound; - - var i = SOERangeIndex(self, anIndex++), - count = _ranges.length; - - for(; i < count && anIndex >= CPMaxRange(_ranges[i]); ++i) ; + // The first possible index that would satisfy this requirement. + ++anIndex; - if (i == count) - return CPNotFound; - - _cachedRangeIndex = i; - - if (anIndex < _ranges[i].location) - return _ranges[i].location; + // Attempt to find it or something bigger. + var rangeIndex = assumedPositionOfIndex(_ranges, anIndex); - return anIndex; + // Nothing at all found? + if (rangeIndex === CPNotFound) + return CPNotFound; + + rangeIndex = CEIL(rangeIndex); + + if (rangeIndex >= _ranges.length) + return CPNotFound; + + var range = _ranges[rangeIndex]; + + // Check if it's actually in this range. + if (CPLocationInRange(anIndex, range)) + return anIndex; + + // If not, it must be the first element of this range. + return range.location; } /*! @@ -317,25 +321,29 @@ */ - (unsigned)indexLessThanIndex:(unsigned)anIndex { - if (!_count) - return CPNotFound; - - var i = GOERangeIndex(self, anIndex--); - - for (; i >= 0 && anIndex < _ranges[i].location; --i) ; + // The first possible index that would satisfy this requirement. + --anIndex; - if(i < 0) - return CPNotFound; - - _cachedRangeIndex = i; + // Attempt to find it or something smaller. + var rangeIndex = assumedPositionOfIndex(_ranges, anIndex); - if (CPLocationInRange(anIndex, _ranges[i])) + // Nothing at all found? + if (rangeIndex === CPNotFound) + return CPNotFound; + + rangeIndex = FLOOR(rangeIndex); + + if (rangeIndex < 0) + return CPNotFound; + + var range = _ranges[rangeIndex]; + + // Check if it's actually in this range. + if (CPLocationInRange(anIndex, range)) return anIndex; - - if (CPMaxRange(_ranges[i]) - 1 < anIndex) - return CPMaxRange(_ranges[i]) - 1; - return CPNotFound; + // If not, it must be the first element of this range. + return CPMaxRange(range) - 1; } /*! @@ -422,7 +430,7 @@ for (i = 0; i < _ranges.length; i++) { desc += _ranges[i].location; - if (_ranges[i].length > 1) desc += "-" + (CPMaxRange(_ranges[i])-1) + ":"+_ranges[i].length+":"; + if (_ranges[i].length > 1) desc += "-" + (CPMaxRange(_ranges[i])-1) + "["+_ranges[i].length+"]"; if (i+1 < _ranges.length) desc += " "; } desc += ")]"; @@ -452,13 +460,12 @@ */ - (void)addIndexes:(CPIndexSet)anIndexSet { - var i = 0, - ranges = anIndexSet._ranges, - count = ranges.length; - + var otherRanges = anIndexSet._ranges, + otherRangesCount = otherRanges.length; + // Simply add each range within anIndexSet. - for(; i < count; ++i) - [self addIndexesInRange:ranges[i]]; + while (otherRangesCount--) + [self addIndexesInRange:otherRanges[otherRangesCount]]; } /*! @@ -467,91 +474,52 @@ */ - (void)addIndexesInRange:(CPRange)aRange { - if (_ranges.length == 0) + // If empty range, bail. + if (aRange.length <= 0) + return; + + // If we currently don't have any indexes, this represents our entire set. + if (_count <= 0) { _count = aRange.length; + _ranges = [aRange]; - return [_ranges addObject:CPCopyRange(aRange)]; + return; + } +var x = aRange.location - 1, y = CPMaxRange(aRange); + var rangeCount = _ranges.length, + lhsRangeIndex = assumedPositionOfIndex(_ranges, aRange.location - 1), + lhsRangeIndexCEIL = CEIL(lhsRangeIndex); +try{ + if (lhsRangeIndexCEIL === lhsRangeIndex && lhsRangeIndexCEIL < rangeCount) + aRange = CPUnionRange(aRange, _ranges[lhsRangeIndexCEIL]); +}catch(e) { alert("123456789 " + lhsRangeIndexCEIL + " " + rangeCount + " " + lhsRangeIndex);} + var rhsRangeIndex = assumedPositionOfIndex(_ranges, CPMaxRange(aRange)), + rhsRangeIndexFLOOR = FLOOR(rhsRangeIndex); + + if (rhsRangeIndexFLOOR === rhsRangeIndex && rhsRangeIndexFLOOR > 0) + aRange = CPUnionRange(aRange, _ranges[rhsRangeIndexFLOOR]); +//print("the returned indxes were for searching for " + x + " to " + y + " are " + lhsRangeIndex + " and " + rhsRangeIndex); + var removalCount = rhsRangeIndexFLOOR - lhsRangeIndexCEIL + 1; + + if (removalCount === 1) + { + if (lhsRangeIndexCEIL < _ranges.length) + _count -= _ranges[lhsRangeIndexCEIL].length; + + _count += aRange.length; + _ranges[lhsRangeIndexCEIL] = aRange; } - - // FIXME: Should we really use SOERangeIndex here? There is no real - // reason the cached index would be a better guess than 0, and it - // would avoid a function call. - var i = SOERangeIndex(self, aRange.location), - count = _ranges.length, - padded = CPMakeRange(aRange.location - 1, aRange.length + 2), - maximum = CPMaxRange(aRange); - // If our range won't intersect with the last range, just append it to the end. - if (count && CPMaxRange(_ranges[count - 1]) < aRange.location) - [_ranges addObject:CPCopyRange(aRange)]; else - for (; i < count; ++i) - { - // This range is completely independent of existing ranges, - // simply add it to the array. - if (maximum < _ranges[i].location) - { - _count += aRange.length; - - // Keep _cachedRangeIndex relevant. - if (i < _cachedRangeIndex) ++_cachedRangeIndex; - - return [_ranges insertObject:CPCopyRange(aRange) atIndex:i]; - } - - if (CPIntersectionRange(_ranges[i], padded).length) - { - var union = CPUnionRange(_ranges[i], aRange); - - // We already contain all the indexes in this range. - if (union.length == _ranges[i].length) - return; - - // Pad the length to collapse with later ranges. - ++union.length; - - // We only need to check if we now intersect with any following - // ranges since if we now intersected with the previous range, - // it would have already been handled. We start at i and not i + 1 - // to make sure we subtract i's length. - var j = i; - - for(; j < count; ++j) - // Bail as soon as we don't find an intersection. - if(CPIntersectionRange(union, _ranges[j]).length) - _count -= _ranges[j].length; - else - break; - - // Remove the padding now that we are done. - // NOTE: We could have set _ranges[i] = CPCopyRange(union), - // and then not had to bother decerementing here, but this avoids - // a lookup above during unioning, and a function call (CPCopyRange). - --union.length; - _ranges[i] = union; - - // Now remove indexes [i + 1, j - 1] - if (j - i - 1 > 0) - { - var remove = CPMakeRange(i + 1, j - i - 1); - - _ranges[i] = CPUnionRange(_ranges[i], _ranges[j - 1]); - [_ranges removeObjectsInRange:remove]; - - // Keep _cachedRangeIndex relevant. - if (_cachedRangeIndex >= CPMaxRange(remove)) _cachedRangedIndex -= remove.length; - else if (CPLocationInRange(_cachedRangeIndex, remove)) _cachedRangeIndex = i; - } - - // Update count. - _count += _ranges[i].length; - - return; - } - } - - _count += aRange.length; + { + if (removalCount > 0) + [_ranges removeObjectsInRange:CPMakeRange(lhsRangeIndexCEIL, removalCount)]; + + [_ranges insertObject:aRange atIndex:lhsRangeIndexCEIL]; + + //FIXME COUNT! + } } // Removing Indexes @@ -571,13 +539,12 @@ */ - (void)removeIndexes:(CPIndexSet)anIndexSet { - var i = 0, - ranges = anIndexSet._ranges, - count = ranges.length; + var otherRanges = anIndexSet._ranges, + otherRangesCount = otherRanges.length; // Simply remove each index from anIndexSet - for(; i < count; ++i) - [self removeIndexesInRange:ranges[i]]; + while (otherRangesCount--) + [self removeIndexesInRange:otherRanges[otherRangesCount]]; } /*! @@ -587,7 +554,6 @@ { _ranges = []; _count = 0; - _cachedRangeIndex = 0; } /*! @@ -830,26 +796,72 @@ var CPIndexSetCountKey = @"CPIndexSetCountKey", @end -var SOERangeIndex = function(anIndexSet, anIndex) +var positionOfIndex = function(ranges, anIndex) { - var ranges = anIndexSet._ranges, - cachedRangeIndex = 0;//anIndexSet._cachedRangeIndex; - - if(cachedRangeIndex < ranges.length && anIndex >= ranges[cachedRangeIndex].location) - return cachedRangeIndex; + var low = 0, + high = ranges.length - 1; - return 0; + while (low <= high) + { + var middle = FLOOR(low + (high - low) / 2), + range = ranges[middle]; + + if (anIndex < range.location) + high = middle - 1; + + else if (anIndex >= CPMaxRange(range)) + low = middle + 1; + + else + return middle; + } + + return CPNotFound; } -var GOERangeIndex = function(anIndexSet, anIndex) +var assumedPositionOfIndex = function(ranges, anIndex) { - var ranges = anIndexSet._ranges, - cachedRangeIndex = anIndexSet._ranges.length;//anIndexSet._cachedRangeIndex; + var count = ranges.length; + + if (count <= 0) + return CPNotFound; + + var low = 0, + high = count * 2; + + while (low <= high) + { + var middle = FLOOR(low + (high - low) / 2), + position = middle / 2, + positionFLOOR = FLOOR(position); - if(cachedRangeIndex < ranges.length && anIndex <= ranges[cachedRangeIndex].location) - return cachedRangeIndex; - - return ranges.length - 1; + if (position === positionFLOOR) + {try{ + if (positionFLOOR - 1 >= 0 && anIndex < CPMaxRange(ranges[positionFLOOR - 1])) + high = middle - 1; + + else if (positionFLOOR < count && anIndex >= ranges[positionFLOOR].location) + low = middle + 1; + + else + return positionFLOOR - 0.5;}catch(e) { alert("here!");} + } + else + {try{ + var range = ranges[positionFLOOR]; + + if (anIndex < range.location) + high = middle - 1; + + else if (anIndex >= CPMaxRange(range)) + low = middle + 1; + + else + return positionFLOOR;}catch(e){alert("yes!");} + } + } + + return CPNotFound; } /* From f4171f9afacfbd5ca2a7ac58f75c565d874a32c6 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 21 Jun 2009 13:59:58 -0700 Subject: [PATCH 048/244] Made all initializers call designated initializers and fixed numerous spacing issues. Reviewed by me. --- Foundation/CPIndexSet.j | 362 +++++++++++++++++++--------------------- 1 file changed, 173 insertions(+), 189 deletions(-) diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j index 4b33b1995..87e208d68 100644 --- a/Foundation/CPIndexSet.j +++ b/Foundation/CPIndexSet.j @@ -44,7 +44,7 @@ */ + (id)indexSet { - return [[self alloc] init]; + return [[self alloc] init]; } /*! @@ -52,7 +52,7 @@ */ + (id)indexSetWithIndex:(int)anIndex { - return [[self alloc] initWithIndex:anIndex]; + return [[self alloc] initWithIndex:anIndex]; } /*! @@ -61,39 +61,23 @@ */ + (id)indexSetWithIndexesInRange:(CPRange)aRange { - return [[self alloc] initWithIndexesInRange:aRange]; + return [[self alloc] initWithIndexesInRange:aRange]; } // Initializing and Index Set - (id)init { - self = [super init]; - - if (self) - { - _count = 0; - _ranges = []; - } - - return self; + return [self initWithIndexesInRange:CPMakeRange(0, 0)]; } /*! Initializes the index set with a single index. @return the initialized index set */ -- (id)initWithIndex:(int)anIndex +- (id)initWithIndex:(CPInteger)anIndex { - self = [super init]; - - if (self) - { - _count = 1; - _ranges = [CPMakeRange(anIndex, 1)]; - } - - return self; + return [self initWithIndexesInRange:CPMakeRange(anIndex, 1)]; } /*! @@ -104,13 +88,17 @@ - (id)initWithIndexesInRange:(CPRange)aRange { self = [super init]; - + if (self) { - _count = aRange.length; - _ranges = [aRange]; + _count = MAX(0, aRange.length); + + if (_count > 0) + _ranges = [aRange]; + else + _ranges = []; } - + return self; } @@ -122,7 +110,7 @@ - (id)initWithIndexSet:(CPIndexSet)anIndexSet { self = [super init]; - + if (self) { _count = [anIndexSet count]; @@ -134,7 +122,7 @@ while (otherRangesCount--) _ranges[otherRangesCount] = CPCopyRange(otherRanges[otherRangesCount]); } - + return self; } @@ -150,14 +138,14 @@ return NO; // Comparisons to ourself are always return YES. - if (self === anIndexSet) - return YES; + if (self === anIndexSet) + return YES; var rangesCount = _ranges.length, otherRanges = anIndexSet._ranges; - // If we have a discrepency in the number of ranges or the number of indexes, - // simply return NO. + // If we have a discrepency in the number of ranges or the number of indexes, + // simply return NO. if (rangesCount !== otherRanges.length || _count !== anIndexSet._count) return NO; @@ -173,7 +161,7 @@ @param anIndex the index to check for in the set @return YES if anIndex is in the receiver index set */ -- (BOOL)containsIndex:(unsigned)anIndex +- (BOOL)containsIndex:(CPInteger)anIndex { return positionOfIndex(_ranges, anIndex) !== CPNotFound; } @@ -213,7 +201,7 @@ var otherCount = anIndexSet._count; if(otherCount <= 0) - return YES; + return YES; // If we have less total indexes than anIndexSet, we can't possibly contain aRange. if (_count < otherCount) @@ -236,20 +224,21 @@ */ - (BOOL)intersectsIndexesInRange:(CPRange)aRange { + //FIXME: OLD // This is fast thanks to the _cachedIndexRange. if(!_count) return NO; - + var i = SOERangeIndex(self, aRange.location), count = _ranges.length, upper = CPMaxRange(aRange); - + // Stop if the location is ever bigger than or equal to our // non-inclusive upper bound - for (; i < count && _ranges[i].location < upper; ++i) + for (; i < count && _ranges[i].location < upper; ++i) if(CPIntersectionRange(aRange, _ranges[i]).length) return YES; - + return NO; } @@ -265,7 +254,7 @@ /*! Return the first index in the set */ -- (int)firstIndex +- (CPInteger)firstIndex { if (_count > 0) return _ranges[0].location; @@ -276,7 +265,7 @@ /*! Returns the last index in the set */ -- (int)lastIndex +- (CPInteger)lastIndex { if (_count > 0) return CPMaxRange(_ranges[_ranges.length - 1]) - 1; @@ -301,7 +290,7 @@ return CPNotFound; rangeIndex = CEIL(rangeIndex); - + if (rangeIndex >= _ranges.length) return CPNotFound; @@ -319,7 +308,7 @@ Returns the first index value in the receiver which is less than anIndex. @return the closest index or CPNotFound if no match was found */ -- (unsigned)indexLessThanIndex:(unsigned)anIndex +- (CPInteger)indexLessThanIndex:(CPInteger)anIndex { // The first possible index that would satisfy this requirement. --anIndex; @@ -332,7 +321,7 @@ return CPNotFound; rangeIndex = FLOOR(rangeIndex); - + if (rangeIndex < 0) return CPNotFound; @@ -350,18 +339,18 @@ Returns the first index value in the receiver which is greater than or equal to anIndex. @return the matching index or CPNotFound if no match was found */ -- (unsigned int)indexGreaterThanOrEqualToIndex:(unsigned)anIndex +- (CPInteger)indexGreaterThanOrEqualToIndex:(CPInteger)anIndex { - return [self indexGreaterThanIndex:anIndex - 1]; + return [self indexGreaterThanIndex:anIndex - 1]; } /*! Returns the first index value in the receiver which is less than or equal to anIndex. @return the matching index or CPNotFound if no match was found */ -- (unsigned int)indexLessThanOrEqualToIndex:(unsigned)anIndex +- (CPInteger)indexLessThanOrEqualToIndex:(CPInteger)anIndex { - return [self indexLessThanIndex:anIndex + 1]; + return [self indexLessThanIndex:anIndex + 1]; } /*! @@ -377,67 +366,67 @@ { if (!_count || aMaxCount <= 0 || aRangePointer && !aRangePointer.length) return 0; - + var i = SOERangeIndex(self, aRangePointer? aRangePointer.location : 0), total = 0, count = _ranges.length; - + for (; i < count; ++i) { // If aRangePointer is nil, all indexes are acceptable. var intersection = aRangePointer ? CPIntersectionRange(_ranges[i], aRangePointer) : _ranges[i], index = intersection.location, maximum = CPMaxRange(intersection); - + for (; index < maximum; ++index) { anArray[total++] = index; - + if (total == aMaxCount) { // Update aRangePointer if it exists... if (aRangePointer) { var upper = CPMaxRange(aRangePointer); - + // Don't use CPMakeRange since the values need to persist. aRangePointer.location = index + 1; aRangePointer.length = upper - index - 1; } - + return aMaxCount; } } } - + // Update aRangePointer if it exists... - if (aRangePointer) + if (aRangePointer) { aRangePointer.location = CPNotFound; aRangePointer.length = 0; } - + return total; } - (CPString)description { var desc = [super description] + " "; - - if (_count) - { - desc += "[number of indexes: " + _count + " (in " + _ranges.length + " ranges), indexes: ("; - for (i = 0; i < _ranges.length; i++) - { - desc += _ranges[i].location; - if (_ranges[i].length > 1) desc += "-" + (CPMaxRange(_ranges[i])-1) + "["+_ranges[i].length+"]"; - if (i+1 < _ranges.length) desc += " "; - } - desc += ")]"; - } - else - desc += "(no indexes)"; - return desc; + + if (_count) + { + desc += "[number of indexes: " + _count + " (in " + _ranges.length + " ranges), indexes: ("; + for (i = 0; i < _ranges.length; i++) + { + desc += _ranges[i].location; + if (_ranges[i].length > 1) desc += "-" + (CPMaxRange(_ranges[i])-1) + "["+_ranges[i].length+"]"; + if (i+1 < _ranges.length) desc += " "; + } + desc += ")]"; + } + else + desc += "(no indexes)"; + return desc; } @end @@ -449,7 +438,7 @@ Adds an index to the set. @param anIndex the index to add */ -- (void)addIndex:(unsigned)anIndex +- (void)addIndex:(CPInteger)anIndex { [self addIndexesInRange:CPMakeRange(anIndex, 1)]; } @@ -483,7 +472,7 @@ { _count = aRange.length; _ranges = [aRange]; - + return; } var x = aRange.location - 1, y = CPMaxRange(aRange); @@ -502,11 +491,17 @@ try{ //print("the returned indxes were for searching for " + x + " to " + y + " are " + lhsRangeIndex + " and " + rhsRangeIndex); var removalCount = rhsRangeIndexFLOOR - lhsRangeIndexCEIL + 1; - if (removalCount === 1) + if (removalCount === _ranges.length) + { + _ranges = [aRange]; + _count = aRange.length; + } + + else if (removalCount === 1) { if (lhsRangeIndexCEIL < _ranges.length) _count -= _ranges[lhsRangeIndexCEIL].length; - + _count += aRange.length; _ranges[lhsRangeIndexCEIL] = aRange; } @@ -514,11 +509,19 @@ try{ else { if (removalCount > 0) + { + var removal = lhsRangeIndexCEIL, + lastRemoval = lhsRangeIndexCEIL + removalCount - 1; + + for (; removal <= lastRemoval; ++removal) + _count -= _ranges[removal].length; + [_ranges removeObjectsInRange:CPMakeRange(lhsRangeIndexCEIL, removalCount)]; - + } + [_ranges insertObject:aRange atIndex:lhsRangeIndexCEIL]; - - //FIXME COUNT! + + _count += aRange.length; } } @@ -527,7 +530,7 @@ try{ Removes an index from the set @param anIndex the index to remove */ -- (void)removeIndex:(unsigned int)anIndex +- (void)removeIndex:(CPInteger)anIndex { [self removeIndexesInRange:CPMakeRange(anIndex, 1)]; } @@ -541,7 +544,7 @@ try{ { var otherRanges = anIndexSet._ranges, otherRangesCount = otherRanges.length; - + // Simply remove each index from anIndexSet while (otherRangesCount--) [self removeIndexesInRange:otherRanges[otherRangesCount]]; @@ -553,7 +556,7 @@ try{ - (void)removeAllIndexes { _ranges = []; - _count = 0; + _count = 0; } /*! @@ -563,63 +566,47 @@ try{ */ - (void)removeIndexesInRange:(CPRange)aRange { - // FIXME: Should we really use SOERangeIndex here? There is no real - // reason the cached index would be a better guess than 0, and it - // would avoid a function call. - var i = SOERangeIndex(self, aRange.location), - count = _ranges.length, - maximum = CPMaxRange(aRange), - removal = CPMakeRange(CPNotFound, 0); - - for (; i < count; ++i) - { - var range = _ranges[i]; - - // Our range will not intersect with any coming ranges. - if (maximum < range.location) - break; + // FIXME: OLD + // If empty range, bail. + if (aRange.length <= 0) + return; - var intersection = CPIntersectionRange(range, aRange); - - // If we don't have an intersection, then just continue iterating. - if (!intersection.length) - continue; - - // If the intersection consists of the entirety of this range, - // then remove it completely. - else if (intersection.length == range.length) - { - if (removal.location == CPNotFound) - removal = CPMakeRange(i, 1); - else - ++removal.length; - } - // If the intersection is contained entirely within this range, - // then split it into two and return. - else if (intersection.location > range.location && CPMaxRange(intersection) < CPMaxRange(range)) - { - var insert = CPMakeRange(CPMaxRange(intersection), CPMaxRange(range) - CPMaxRange(intersection)); - - range.length = intersection.location - range.location; - - _count -= intersection.length; - - return [_ranges insertObject:insert atIndex:i + 1]; - } - // Else if we at least have an intersection, then trim the existing range. - else - { - range.length -= intersection.length; - - if (intersection.location <= range.location) - range.location += intersection.length; - } - - _count -= intersection.length; + // If we currently don't have any indexes, there's nothing to remove. + if (_count <= 0) + return; + + var rangeCount = _ranges.length, + lhsRangeIndex = assumedPositionOfIndex(_ranges, aRange.location - 1), + lhsRangeIndexCEIL = CEIL(lhsRangeIndex); + + if (lhsRangeIndexCEIL === lhsRangeIndex && lhsRangeIndexCEIL < rangeCount) + aRange = CPUnionRange(aRange, _ranges[lhsRangeIndexCEIL]); + + var rhsRangeIndex = assumedPositionOfIndex(_ranges, CPMaxRange(aRange)), + rhsRangeIndexFLOOR = FLOOR(rhsRangeIndex); + + if (rhsRangeIndexFLOOR === rhsRangeIndex && rhsRangeIndexFLOOR > 0) + aRange = CPUnionRange(aRange, _ranges[rhsRangeIndexFLOOR]); + + var removalCount = rhsRangeIndexFLOOR - lhsRangeIndexCEIL + 1; + + if (removalCount === 1) + { + if (lhsRangeIndexCEIL < _ranges.length) + _count -= _ranges[lhsRangeIndexCEIL].length; + + _count += aRange.length; + _ranges[lhsRangeIndexCEIL] = aRange; + } + + else + { + if (removalCount > 0) + [_ranges removeObjectsInRange:CPMakeRange(lhsRangeIndexCEIL, removalCount)]; + + [_ranges insertObject:aRange atIndex:lhsRangeIndexCEIL]; + //FIXME COUNT! } - - if (removal.length) - [_ranges removeObjectsInRange:removal]; } // Shifting Index Groups @@ -629,11 +616,11 @@ try{ @param aDelta the amount and direction to shift. A positive value shifts to the right. A negative value shifts to the left. */ -- (void)shiftIndexesStartingAtIndex:(unsigned)anIndex by:(int)aDelta -{ - if (!_count || aDelta == 0) - return; - +- (void)shiftIndexesStartingAtIndex:(CPInteger)anIndex by:(int)aDelta +{ + if (!_count || aDelta == 0) + return; + // Later indexes have a higher probability of being shifted // than lower ones, so start at the end and work backwards. var i = _ranges.length - 1, @@ -643,7 +630,7 @@ try{ { var range = _ranges[i], maximum = CPMaxRange(range); - + if (anIndex > maximum) break; @@ -665,11 +652,11 @@ try{ shifted.length = CPMaxRange(shifted); shifted.location = 0; } - + // We don't need to continue. break; } - + // Shift the range, and normalize it if the result is negative. if ((range.location += aDelta) < 0) { @@ -677,21 +664,21 @@ try{ range.location = 0; } } - + // We need to add the shifted ranges if the delta is negative. if (aDelta < 0) { var j = i + 1, count = _ranges.length, shifts = []; - + for (; j < count; ++j) [shifts addObject:_ranges[j]]; - + if ((j = i + 1) < count) { [_ranges removeObjectsInRange:CPMakeRange(j, count - j)]; - + for (j = 0, count = shifts.length; j < count; ++j) [self addIndexesInRange:shifts[j]]; } @@ -704,7 +691,6 @@ try{ @end var CPIndexSetCountKey = @"CPIndexSetCountKey", - CPIndexSetCachedRangeIndexKey = @"CPIndexSetCachedRangeIndexKey", CPIndexSetRangeStringsKey = @"CPIndexSetRangeStringsKey"; @implementation CPIndexSet (CPCoding) @@ -718,21 +704,20 @@ var CPIndexSetCountKey = @"CPIndexSetCountKey", - (id)initWithCoder:(CPCoder)aCoder { self = [super init]; - + if (self) { _count = [aCoder decodeIntForKey:CPIndexSetCountKey]; - _cachedRangeIndex = [aCoder decodeIntForKey:CPIndexSetCachedRangeIndexKey]; _ranges = []; - + var rangeStrings = [aCoder decodeObjectForKey:CPIndexSetRangeStringsKey], index = 0, count = rangeStrings.length; - + for (; index < count; ++index) _ranges.push(CPRangeFromString(rangeStrings[index])); } - + return self; } @@ -744,12 +729,11 @@ var CPIndexSetCountKey = @"CPIndexSetCountKey", - (void)encodeWithCoder:(CPCoder)aCoder { [aCoder encodeInt:_count forKey:CPIndexSetCountKey]; - [aCoder encodeInt:_cachedRangeIndex forKey:CPIndexSetCachedRangeIndexKey]; - + var index = 0, count = _ranges.length, rangeStrings = []; - + for (; index < count; ++index) rangeStrings[index] = CPStringFromRange(_ranges[index]); @@ -834,7 +818,7 @@ var assumedPositionOfIndex = function(ranges, anIndex) var middle = FLOOR(low + (high - low) / 2), position = middle / 2, positionFLOOR = FLOOR(position); - + if (position === positionFLOOR) {try{ if (positionFLOOR - 1 >= 0 && anIndex < CPMaxRange(ranges[positionFLOOR - 1])) @@ -842,7 +826,7 @@ var assumedPositionOfIndex = function(ranges, anIndex) else if (positionFLOOR < count && anIndex >= ranges[positionFLOOR].location) low = middle + 1; - + else return positionFLOOR - 0.5;}catch(e) { alert("here!");} } @@ -852,10 +836,10 @@ var assumedPositionOfIndex = function(ranges, anIndex) if (anIndex < range.location) high = middle - 1; - + else if (anIndex >= CPMaxRange(range)) low = middle + 1; - + else return positionFLOOR;}catch(e){alert("yes!");} } @@ -866,32 +850,32 @@ var assumedPositionOfIndex = function(ranges, anIndex) /* new old method -X + (id)indexSet; -X + (id)indexSetWithIndex:(unsigned int)value; -X + (id)indexSetWithIndexesInRange:(NSRange)range; -X X - (id)init; -X X - (id)initWithIndex:(unsigned int)value; -X X - (id)initWithIndexesInRange:(NSRange)range; // designated initializer -X X - (id)initWithIndexSet:(NSIndexSet *)indexSet; // designated initializer -X - (BOOL)isEqualToIndexSet:(NSIndexSet *)indexSet; -X X - (unsigned int)count; -X X - (unsigned int)firstIndex; -X X - (unsigned int)lastIndex; -X X - (unsigned int)indexGreaterThanIndex:(unsigned int)value; -X X - (unsigned int)indexLessThanIndex:(unsigned int)value; -X X - (unsigned int)indexGreaterThanOrEqualToIndex:(unsigned int)value; -X X - (unsigned int)indexLessThanOrEqualToIndex:(unsigned int)value; -X - (unsigned int)getIndexes:(unsigned int *)indexBuffer maxCount:(unsigned int)bufferSize inIndexRange:(NSRangePointer)range; -X X - (BOOL)containsIndex:(unsigned int)value; -X X - (BOOL)containsIndexesInRange:(NSRange)range; -X X - (BOOL)containsIndexes:(NSIndexSet *)indexSet; -X X - (BOOL)intersectsIndexesInRange:(NSRange)range; -X X - (void)addIndexes:(NSIndexSet *)indexSet; -X - (void)removeIndexes:(NSIndexSet *)indexSet; -X X - (void)removeAllIndexes; -X - (void)addIndex:(unsigned int)value; -X - (void)removeIndex:(unsigned int)value; -X - (void)addIndexesInRange:(NSRange)range; -X - (void)removeIndexesInRange:(NSRange)range; - - (void)shiftIndexesStartingAtIndex:(unsigned int)index by:(int)delta; +X + (id)indexSet; +X + (id)indexSetWithIndex:(unsigned int)value; +X + (id)indexSetWithIndexesInRange:(NSRange)range; +X X - (id)init; +X X - (id)initWithIndex:(unsigned int)value; +X X - (id)initWithIndexesInRange:(NSRange)range; // designated initializer +X X - (id)initWithIndexSet:(NSIndexSet *)indexSet; // designated initializer +X - (BOOL)isEqualToIndexSet:(NSIndexSet *)indexSet; +X X - (unsigned int)count; +X X - (unsigned int)firstIndex; +X X - (unsigned int)lastIndex; +X X - (unsigned int)indexGreaterThanIndex:(unsigned int)value; +X X - (unsigned int)indexLessThanIndex:(unsigned int)value; +X X - (unsigned int)indexGreaterThanOrEqualToIndex:(unsigned int)value; +X X - (unsigned int)indexLessThanOrEqualToIndex:(unsigned int)value; +X - (unsigned int)getIndexes:(unsigned int *)indexBuffer maxCount:(unsigned int)bufferSize inIndexRange:(NSRangePointer)range; +X X - (BOOL)containsIndex:(unsigned int)value; +X X - (BOOL)containsIndexesInRange:(NSRange)range; +X X - (BOOL)containsIndexes:(NSIndexSet *)indexSet; +X X - (BOOL)intersectsIndexesInRange:(NSRange)range; +X X - (void)addIndexes:(NSIndexSet *)indexSet; +X - (void)removeIndexes:(NSIndexSet *)indexSet; +X X - (void)removeAllIndexes; +X - (void)addIndex:(unsigned int)value; +X - (void)removeIndex:(unsigned int)value; +X - (void)addIndexesInRange:(NSRange)range; +X - (void)removeIndexesInRange:(NSRange)range; + - (void)shiftIndexesStartingAtIndex:(unsigned int)index by:(int)delta; */ From c97bb6cbdd2aca378b2f8135b0f14a21514b3ef2 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 21 Jun 2009 15:20:24 -0700 Subject: [PATCH 049/244] CPIndexSet test --- Tests/Foundation/CPIndexSetTest.j | 190 ++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 Tests/Foundation/CPIndexSetTest.j diff --git a/Tests/Foundation/CPIndexSetTest.j b/Tests/Foundation/CPIndexSetTest.j new file mode 100644 index 000000000..18933d22b --- /dev/null +++ b/Tests/Foundation/CPIndexSetTest.j @@ -0,0 +1,190 @@ +@import + +@implementation CPIndexSetTest : OJTestCase +{ + CPIndexSet _set; +} + +- (void)setUp +{ + _set = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 10)]; +} + +- (void)tearDown +{ + _set = nil; +} + +- (void)testIndexSet:(CPIndexSet)set containsRange:(CPRange)range +{ + [self assertFalse:[set containsIndex:range.location -1]]; + + for (var i=range.location, max=CPMaxRange(range); i Date: Sun, 21 Jun 2009 16:16:45 -0700 Subject: [PATCH 050/244] Fix a bug in [CPArray indexOfObject:sortedByDesciptors:], add a matching test. --- Foundation/CPArray.j | 2 +- Tests/Foundation/CPArrayTest.j | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Foundation/CPArray.j b/Foundation/CPArray.j index e5a69f72a..29139a5f5 100755 --- a/Foundation/CPArray.j +++ b/Foundation/CPArray.j @@ -488,7 +488,7 @@ */ - (unsigned)indexOfObject:(id)anObject sortedByDescriptors:(CPArray)descriptors { - [self indexOfObject:anObject sortedByFunction:function(lhs, rhs) + return [self indexOfObject:anObject sortedByFunction:function(lhs, rhs) { var i = 0, count = [descriptors count], diff --git a/Tests/Foundation/CPArrayTest.j b/Tests/Foundation/CPArrayTest.j index d14632902..eba367e5c 100644 --- a/Tests/Foundation/CPArrayTest.j +++ b/Tests/Foundation/CPArrayTest.j @@ -1,6 +1,7 @@ @import @import @import +@import @implementation CPArrayTest : OJTestCase @@ -92,4 +93,39 @@ [self assert:array equals:[@"one", @"two", @"four"]]; } + +- (void)testIndexOfObjectSortedByFunction +{ + var array = [0, 1, 2, 3, 4, 7]; + + [self assert:[array indexOfObject:3 sortedByFunction:function(a, b){ return a - b; }] equals:3]; + [self assert:[[array arrayByReversingArray] indexOfObject:3 sortedByFunction:function(a, b){ return b - a; }] equals:2]; +} + +- (void)testIndexOfObjectSortedByDescriptors +{ + var array = [0, 1, 2, 3, 4, 7]; + + [self assert:[array indexOfObject:3 + sortedByDescriptors:[[[CPSortDescriptor alloc] initWithKey:@"intValue" ascending:YES]]] + equals:3]; + + [self assert:[[array arrayByReversingArray] indexOfObject:3 + sortedByDescriptors:[[[CPSortDescriptor alloc] initWithKey:@"intValue" ascending:NO]]] + equals:2]; +} + +@end + +@implementation CPArray (reverse) + +- (CPArray)arrayByReversingArray +{ + var a = []; + for (i = length - 1; i>0; --i) + a.push(self[i]); + + return a; +} + @end From bd07054a1bec531b0735b8c73ff3fc41ca5aa1be Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 21 Jun 2009 20:25:29 -0700 Subject: [PATCH 051/244] Fix for removeIndex in CPIndexSet and added tests for CPIndexSet. Reviewed by me. --- AppKit/NEWCPTableView.j | 9 +- Foundation/CPIndexSet.j | 145 ++++++++----- Tests/Foundation/CPIndexSetTest.j | 332 ++++++++++++++++++++++++++++++ 3 files changed, 434 insertions(+), 52 deletions(-) create mode 100644 Tests/Foundation/CPIndexSetTest.j diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index 32ef24b24..09a3b7e3d 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -552,8 +552,8 @@ CPTableViewSelectionHighlightStyleSourceList = 1; lastColumn = NUMBER_OF_COLUMNS() - 1; // Don't bother doing the expensive removal of hidden indexes if we have no hidden columns. - if (_numberOfHiddenColumns < 0) - return [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(column, lastColumn - column)]; + if (_numberOfHiddenColumns <= 0) + return [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(column, lastColumn - column + 1)]; // var indexSet = [CPIndexSet indexSet]; @@ -913,12 +913,15 @@ console.profile("cell-load"); newlyExposedRows = [exposedRows copy], newlyExposedColumns = [exposedColumns copy]; +// console.log("exposed rows: " + exposedRows + " exposed columns: " + exposedColumns); +// console.log("but rows: " + _exposedRows + " exposed columns: " + _exposedColumns); + [newlyExposedRows removeIndexes:_exposedRows]; [newlyExposedColumns removeIndexes:_exposedColumns]; [previouslyExposedRows removeIndexes:newlyExposedRows]; [previouslyExposedColumns removeIndexes:newlyExposedColumns]; - //console.log("newly exposed rows: " + newlyExposedRows + "\nnewly exposed columns: " + newlyExposedColumns); +// console.log("newly exposed rows: " + newlyExposedRows + "\nnewly exposed columns: " + newlyExposedColumns); _exposedRows = exposedRows; _exposedColumns = exposedColumns; diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j index 87e208d68..040d32690 100644 --- a/Foundation/CPIndexSet.j +++ b/Foundation/CPIndexSet.j @@ -224,22 +224,20 @@ */ - (BOOL)intersectsIndexesInRange:(CPRange)aRange { - //FIXME: OLD - // This is fast thanks to the _cachedIndexRange. - if(!_count) + if (_count <= 0) return NO; - var i = SOERangeIndex(self, aRange.location), - count = _ranges.length, - upper = CPMaxRange(aRange); + var lhsRangeIndex = assumedPositionOfIndex(_ranges, aRange.location); - // Stop if the location is ever bigger than or equal to our - // non-inclusive upper bound - for (; i < count && _ranges[i].location < upper; ++i) - if(CPIntersectionRange(aRange, _ranges[i]).length) - return YES; + if (FLOOR(lhsRangeIndex) === lhsRangeIndex) + return YES; - return NO; + var rhsRangeIndex = assumedPositionOfIndex(_ranges, CPMaxRange(aRange) - 1); + + if (FLOOR(rhsRangeIndex) === rhsRangeIndex) + return YES; + + return lhsRangeIndex !== rhsRangeIndex; } /*! @@ -411,22 +409,40 @@ - (CPString)description { - var desc = [super description] + " "; + var description = [super description]; if (_count) { - desc += "[number of indexes: " + _count + " (in " + _ranges.length + " ranges), indexes: ("; - for (i = 0; i < _ranges.length; i++) + var index = 0, + count = _ranges.length; + + description += "[number of indexes: " + _count + " (in " + count; + + if (count === 1) + description += " range), indexes: ("; + else + description += " ranges), indexes: ("; + + for (; index < count; ++index) { - desc += _ranges[i].location; - if (_ranges[i].length > 1) desc += "-" + (CPMaxRange(_ranges[i])-1) + "["+_ranges[i].length+"]"; - if (i+1 < _ranges.length) desc += " "; + var range = _ranges[index]; + + description += range.location; + + if (range.length > 1) + description += "-" + (CPMaxRange(range) - 1); + + if (index + 1 < count) + description += " "; } - desc += ")]"; + + description += ")]"; } + else - desc += "(no indexes)"; - return desc; + description += "(no indexes)"; + + return description; } @end @@ -475,20 +491,20 @@ return; } -var x = aRange.location - 1, y = CPMaxRange(aRange); + var rangeCount = _ranges.length, lhsRangeIndex = assumedPositionOfIndex(_ranges, aRange.location - 1), lhsRangeIndexCEIL = CEIL(lhsRangeIndex); -try{ + if (lhsRangeIndexCEIL === lhsRangeIndex && lhsRangeIndexCEIL < rangeCount) aRange = CPUnionRange(aRange, _ranges[lhsRangeIndexCEIL]); -}catch(e) { alert("123456789 " + lhsRangeIndexCEIL + " " + rangeCount + " " + lhsRangeIndex);} + var rhsRangeIndex = assumedPositionOfIndex(_ranges, CPMaxRange(aRange)), rhsRangeIndexFLOOR = FLOOR(rhsRangeIndex); if (rhsRangeIndexFLOOR === rhsRangeIndex && rhsRangeIndexFLOOR > 0) aRange = CPUnionRange(aRange, _ranges[rhsRangeIndexFLOOR]); -//print("the returned indxes were for searching for " + x + " to " + y + " are " + lhsRangeIndex + " and " + rhsRangeIndex); + var removalCount = rhsRangeIndexFLOOR - lhsRangeIndexCEIL + 1; if (removalCount === _ranges.length) @@ -566,7 +582,6 @@ try{ */ - (void)removeIndexesInRange:(CPRange)aRange { - // FIXME: OLD // If empty range, bail. if (aRange.length <= 0) return; @@ -576,36 +591,68 @@ try{ return; var rangeCount = _ranges.length, - lhsRangeIndex = assumedPositionOfIndex(_ranges, aRange.location - 1), + lhsRangeIndex = assumedPositionOfIndex(_ranges, aRange.location), lhsRangeIndexCEIL = CEIL(lhsRangeIndex); - if (lhsRangeIndexCEIL === lhsRangeIndex && lhsRangeIndexCEIL < rangeCount) - aRange = CPUnionRange(aRange, _ranges[lhsRangeIndexCEIL]); + // Do we fall on an actual existing range? + if (lhsRangeIndex === lhsRangeIndexCEIL && lhsRangeIndexCEIL < rangeCount) + { + var existingRange = _ranges[lhsRangeIndexCEIL]; - var rhsRangeIndex = assumedPositionOfIndex(_ranges, CPMaxRange(aRange)), + // If these ranges don't start in the same place, we have to cull it. + if (aRange.location !== existingRange.location) + { + var maxRange = CPMaxRange(aRange), + existingMaxRange = CPMaxRange(existingRange); + + existingRange.length = aRange.location - existingRange.location; + + // If this range is internal to the existing range, we have a unique splitting case. + if (maxRange < existingMaxRange) + { + _count -= aRange.length; + [_ranges insertObject:CPMakeRange(maxRange, existingMaxRange - maxRange) atIndex:lhsRangeIndexCEIL + 1]; + + return; + } + else + { + _count -= existingMaxRange - aRange.location; + lhsRangeIndexCEIL += 1; + } + } + } + + var rhsRangeIndex = assumedPositionOfIndex(_ranges, CPMaxRange(aRange) - 1), rhsRangeIndexFLOOR = FLOOR(rhsRangeIndex); - if (rhsRangeIndexFLOOR === rhsRangeIndex && rhsRangeIndexFLOOR > 0) - aRange = CPUnionRange(aRange, _ranges[rhsRangeIndexFLOOR]); + if (rhsRangeIndex === rhsRangeIndexFLOOR && rhsRangeIndexFLOOR >= 0) + { + var maxRange = CPMaxRange(aRange), + existingRange = _ranges[rhsRangeIndexFLOOR], + existingMaxRange = CPMaxRange(existingRange); + + if (maxRange !== existingMaxRange) + { + _count -= maxRange - existingRange.location; + rhsRangeIndexFLOOR -= 1; // This is accounted for, and thus as if we got the previous spot. + + existingRange.location = maxRange; + existingRange.length = existingMaxRange - maxRange; + } + } var removalCount = rhsRangeIndexFLOOR - lhsRangeIndexCEIL + 1; - if (removalCount === 1) + if (removalCount > 0) { - if (lhsRangeIndexCEIL < _ranges.length) - _count -= _ranges[lhsRangeIndexCEIL].length; + var removal = lhsRangeIndexCEIL, + lastRemoval = lhsRangeIndexCEIL + removalCount - 1; - _count += aRange.length; - _ranges[lhsRangeIndexCEIL] = aRange; - } + for (; removal <= lastRemoval; ++removal) + _count -= _ranges[removal].length; - else - { - if (removalCount > 0) - [_ranges removeObjectsInRange:CPMakeRange(lhsRangeIndexCEIL, removalCount)]; - - [_ranges insertObject:aRange atIndex:lhsRangeIndexCEIL]; - //FIXME COUNT! + [_ranges removeObjectsInRange:CPMakeRange(lhsRangeIndexCEIL, removalCount)]; } } @@ -820,7 +867,7 @@ var assumedPositionOfIndex = function(ranges, anIndex) positionFLOOR = FLOOR(position); if (position === positionFLOOR) - {try{ + { if (positionFLOOR - 1 >= 0 && anIndex < CPMaxRange(ranges[positionFLOOR - 1])) high = middle - 1; @@ -828,10 +875,10 @@ var assumedPositionOfIndex = function(ranges, anIndex) low = middle + 1; else - return positionFLOOR - 0.5;}catch(e) { alert("here!");} + return positionFLOOR - 0.5; } else - {try{ + { var range = ranges[positionFLOOR]; if (anIndex < range.location) @@ -841,7 +888,7 @@ var assumedPositionOfIndex = function(ranges, anIndex) low = middle + 1; else - return positionFLOOR;}catch(e){alert("yes!");} + return positionFLOOR; } } diff --git a/Tests/Foundation/CPIndexSetTest.j b/Tests/Foundation/CPIndexSetTest.j new file mode 100644 index 000000000..1d1b68fee --- /dev/null +++ b/Tests/Foundation/CPIndexSetTest.j @@ -0,0 +1,332 @@ +@import + +function descriptionWithoutEntity(aString) +{ + var descriptionWithEntity = [aString description]; +//print(descriptionWithEntity); + return descriptionWithEntity.substr(descriptionWithEntity.indexOf('>') + 1); +} + +@implementation CPIndexSetTest : OJTestCase +{ + CPIndexSet _set; +} + +- (void)testAddIndexes +{ + var indexSet = [CPIndexSet indexSet]; + + // Test no indexes + [self assert:descriptionWithoutEntity(indexSet) equals:@"(no indexes)"]; + + // Test adding initial range + [indexSet addIndexesInRange:CPMakeRange(30,10)]; + + [self assert:@"[number of indexes: 10 (in 1 range), indexes: (30-39)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test adding range after existing ranges. + [indexSet addIndexesInRange:CPMakeRange(50,10)]; + + [self assert:@"[number of indexes: 20 (in 2 ranges), indexes: (30-39 50-59)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test adding range before existing ranges. + [indexSet addIndexesInRange:CPMakeRange(10,10)]; + + [self assert:@"[number of indexes: 30 (in 3 ranges), indexes: (10-19 30-39 50-59)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test adding range inbetween existing ranges. + [indexSet addIndexesInRange:CPMakeRange(45,2)]; + + [self assert:@"[number of indexes: 32 (in 4 ranges), indexes: (10-19 30-39 45-46 50-59)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test adding single index inbetween existing ranges. + [indexSet addIndexesInRange:CPMakeRange(23,1)]; + + [self assert:@"[number of indexes: 33 (in 5 ranges), indexes: (10-19 23 30-39 45-46 50-59)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test adding range inbetween existing ranges that forces a combination + [indexSet addIndexesInRange:CPMakeRange(47,3)]; + + [self assert:@"[number of indexes: 36 (in 4 ranges), indexes: (10-19 23 30-39 45-59)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test adding range across ranges forcing a combination + [indexSet addIndexesInRange:CPMakeRange(35,15)]; + + [self assert:@"[number of indexes: 41 (in 3 ranges), indexes: (10-19 23 30-59)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test adding range across two empty slots forcing a combination + [indexSet addIndexesInRange:CPMakeRange(0,70)]; + + [self assert:@"[number of indexes: 70 (in 1 range), indexes: (0-69)]" equals:descriptionWithoutEntity(indexSet)]; +} + +- (void)testRemoveIndexes +{ + var indexSet = [CPIndexSet indexSet]; + + // Test no indexes + [self assert:descriptionWithoutEntity(indexSet) equals:@"(no indexes)"]; + + // Test adding initial range + [indexSet addIndexesInRange:CPMakeRange(0, 70)]; + + [self assert:@"[number of indexes: 70 (in 1 range), indexes: (0-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test remove range that is subset of existing range, causing a split. + [indexSet removeIndexesInRange:CPMakeRange(30, 10)]; + + [self assert:@"[number of indexes: 60 (in 2 ranges), indexes: (0-29 40-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test remove range that is subset of existing range, causing a split. + [indexSet removeIndexesInRange:CPMakeRange(50, 5)]; + + [self assert:@"[number of indexes: 55 (in 3 ranges), indexes: (0-29 40-49 55-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test remove index that is subset of existing range, causing a split. + [indexSet removeIndex:57]; + + [self assert:@"[number of indexes: 54 (in 4 ranges), indexes: (0-29 40-49 55-56 58-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test remove range that is an exactly represented in the set. + [indexSet removeIndexesInRange:CPMakeRange(40, 10)]; + + [self assert:@"[number of indexes: 44 (in 3 ranges), indexes: (0-29 55-56 58-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test remove range that isn't in the set. + [indexSet removeIndexesInRange:CPMakeRange(35, 3)]; + + [self assert:@"[number of indexes: 44 (in 3 ranges), indexes: (0-29 55-56 58-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test remove range that is partially in a left range. + [indexSet removeIndexesInRange:CPMakeRange(25, 7)]; + + [self assert:@"[number of indexes: 39 (in 3 ranges), indexes: (0-24 55-56 58-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test remove range that is partially in a left range. + [indexSet removeIndexesInRange:CPMakeRange(57, 3)]; + + [self assert:@"[number of indexes: 37 (in 3 ranges), indexes: (0-24 55-56 60-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Test remove range that is partially in a left and right range. + [indexSet removeIndexesInRange:CPMakeRange(20, 36)]; + + [self assert:@"[number of indexes: 31 (in 3 ranges), indexes: (0-19 56 60-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Remove single index that represents an entire range. + [indexSet removeIndex:56]; + + [self assert:@"[number of indexes: 30 (in 2 ranges), indexes: (0-19 60-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Remove index set that is subset of existing range, causing a split. + [indexSet removeIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(5, 10)]]; + + [self assert:@"[number of indexes: 20 (in 3 ranges), indexes: (0-4 15-19 60-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Remove indexes that are partially in 2 ranges and contains intermediate range. + [indexSet removeIndexesInRange:CPMakeRange(2, 62)]; + + [self assert:@"[number of indexes: 8 (in 2 ranges), indexes: (0-1 64-69)]" equals:descriptionWithoutEntity(indexSet)]; + + // Remove indexes that fit exactly in 2 ranges. + [indexSet removeIndexesInRange:CPMakeRange(0, 70)]; + + [self assert:@"(no indexes)" equals:descriptionWithoutEntity(indexSet)]; + + indexSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, 30)]; + + // Remove indexes from left hand of single range + [indexSet removeIndexesInRange:CPMakeRange(0, 29)]; + + [self assert:@"[number of indexes: 1 (in 1 range), indexes: (29)]" equals:descriptionWithoutEntity(indexSet)]; + + indexSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, 30)]; + + // Remove indexes from right hand of single range + [indexSet removeIndexesInRange:CPMakeRange(1, 29)]; + + [self assert:@"[number of indexes: 1 (in 1 range), indexes: (0)]" equals:descriptionWithoutEntity(indexSet)]; +} + +- (void)setUp +{ + _set = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 10)]; +} + +- (void)tearDown +{ + _set = nil; +} + +- (void)testIndexSet:(CPIndexSet)set containsRange:(CPRange)range +{ + [self assertFalse:[set containsIndex:range.location -1]]; + + for (var i=range.location, max=CPMaxRange(range); i Date: Tue, 23 Jun 2009 10:51:16 -0700 Subject: [PATCH 052/244] Further improvements to tableview, and reimplemented getIndexes: for CPIndexSet to match the new architecture. Reviewed by me. --- AppKit/CPView.j | 63 ++++++------ AppKit/NEWCPTableColumn.j | 8 +- AppKit/NEWCPTableView.j | 159 ++++++++++++++++++++++-------- Foundation/CPIndexSet.j | 93 ++++++++++------- Tests/Foundation/CPIndexSetTest.j | 25 +++++ 5 files changed, 241 insertions(+), 107 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 7862fea77..2c6c226ed 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -94,12 +94,13 @@ var DOMElementPrototype = nil, BackgroundTrivialColor = 0, BackgroundVerticalThreePartImage = 1, BackgroundHorizontalThreePartImage = 2, - BackgroundNinePartImage = 3, - - CustomDrawRectViews = {}, - CustomLayoutSubviewsViews = {}; + BackgroundNinePartImage = 3; #endif +var CPViewFlags = { }, + CPViewHasCustomDrawRect = 1 << 0, + CPViewHasCustomLayoutSubviews = 1 << 1; + /*! @ingroup appkit @class CPView @@ -184,6 +185,8 @@ var DOMElementPrototype = nil, // Key View Support CPView _nextKeyView; CPView _previousKeyView; + + unsigned _viewClassFlags; } /* @@ -209,6 +212,27 @@ var DOMElementPrototype = nil, CachedNotificationCenter = [CPNotificationCenter defaultCenter]; } +- (void)setupViewFlags +{ + var theClass = [self class], + classUID = [theClass UID]; + + if (CPViewFlags[classUID] === undefined) + { + var flags = 0; + + if ([theClass instanceMethodForSelector:@selector(drawRect:)] !== [CPView instanceMethodForSelector:@selector(drawRect:)]) + flags |= CPViewHasCustomDrawRect; + + if ([theClass instanceMethodForSelector:@selector(layoutSubviews)] !== [CPView instanceMethodForSelector:@selector(layoutSubviews)]) + flags |= CPViewHasCustomLayoutSubviews; + + CPViewFlags[classUID] = flags; + } + + _viewClassFlags = CPViewFlags[classUID]; +} + - (id)init { return [self initWithFrame:CGRectMakeZero()]; @@ -256,6 +280,8 @@ var DOMElementPrototype = nil, _theme = [CPTheme defaultTheme]; _themeState = CPThemeStateNormal; + [self setupViewFlags]; + [self _loadThemeAttributes]; } @@ -1534,16 +1560,7 @@ setBoundsOrigin: - (void)setNeedsDisplayInRect:(CPRect)aRect { #if PLATFORM(DOM) - var UID = [[self class] UID], - hasCustomDrawRect = CustomDrawRectViews[UID]; - - if (!hasCustomDrawRect && typeof hasCustomDrawRect === "undefined") - { - hasCustomDrawRect = [self methodForSelector:@selector(drawRect:)] != [CPView instanceMethodForSelector:@selector(drawRect:)]; - CustomDrawRectViews[UID] = hasCustomDrawRect; - } - - if (!hasCustomDrawRect) + if (!(_viewClassFlags & CPViewHasCustomDrawRect)) return; #endif @@ -1665,22 +1682,10 @@ setBoundsOrigin: _needsLayout = YES; #if PLATFORM(DOM) - var UID = [[self class] UID], - hasCustomLayoutSubviews = CustomLayoutSubviewsViews[UID]; - - if (hasCustomLayoutSubviews === undefined) - { - hasCustomLayoutSubviews = [self methodForSelector:@selector(layoutSubviews)] != [CPView instanceMethodForSelector:@selector(layoutSubviews)]; - CustomLayoutSubviewsViews[UID] = hasCustomLayoutSubviews; - } - - if (!hasCustomLayoutSubviews) + if (!(_viewClassFlags & CPViewHasCustomLayoutSubviews)) return; - if (_needsLayout) - { - CPDOMDisplayServerAddView(self); - } + CPDOMDisplayServerAddView(self); #endif } @@ -2320,6 +2325,8 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", [self setBackgroundColor:[aCoder decodeObjectForKey:CPViewBackgroundColorKey]]; + [self setupViewFlags]; + _theme = [CPTheme defaultTheme]; _themeState = CPThemeState([aCoder decodeIntForKey:CPViewThemeStateKey]); _themeAttributes = {}; diff --git a/AppKit/NEWCPTableColumn.j b/AppKit/NEWCPTableColumn.j index 7a6e8b8fc..e9f0018c5 100644 --- a/AppKit/NEWCPTableColumn.j +++ b/AppKit/NEWCPTableColumn.j @@ -215,20 +215,24 @@ CPTableColumnUserResizingMask = 2; var dataView = [self dataViewForRow:aRowIndex], dataViewUID = [dataView UID]; +var x = [self tableView]._cachedDataViews[dataViewUID]; +if (x && x.length) +return x.pop(); + // if we haven't cached an archive of the data view, do it now if (!_dataViewData[dataViewUID]) _dataViewData[dataViewUID] = [CPKeyedArchiver archivedDataWithRootObject:dataView]; // unarchive the data view cache var newDataView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[dataViewUID]]; - +newDataView.identifier = dataViewUID; return newDataView; } //Setting the Identifier /* - Sets the receiverÕs identifier to anIdentifier. + Sets the receiver identifier to anIdentifier. */ - (void)setIdentifier:(id)anIdentifier { diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index 09a3b7e3d..a26c940f9 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -59,10 +59,12 @@ CPTableViewSelectionHighlightStyleSourceList = 1; CPInteger _numberOfHiddenColumns; Object _objectValues; - CPArray _dataViews; CPRange _exposedRows; CPIndexSet _exposedColumns; + Object _dataViewsForTableColumns; + Object _cachedDataViews; + //Configuring Behavior BOOL _allowsColumnReordering; BOOL _allowsColumnResizing; @@ -103,11 +105,12 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _numberOfHiddenColumns = 0; _objectValues = { }; + _dataViewsForTableColumns = { }; _dataViews= []; _numberOfRows = 0; _exposedRows = [CPIndexSet indexSet]; _exposedColumns = [CPIndexSet indexSet]; - +_cachedDataViews = { }; _intercellSpacing = _CGSizeMake(0.0, 0.0); _rowHeight = 24.0; } @@ -315,6 +318,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; - (void)addTableColumn:(CPTableColumn)aTableColumn { [_tableColumns addObject:aTableColumn]; + [aTableColumn setTableView:self]; if (_dirtyTableColumnRangeIndex < 0) _dirtyTableColumnRangeIndex = NUMBER_OF_COLUMNS() - 1; @@ -326,8 +330,15 @@ CPTableViewSelectionHighlightStyleSourceList = 1; - (void)removeTableColumn:(CPTableColumn)aTableColumn { + if ([aTableColumn tableView] !== self) + return; + var index = [_tableColumns indeOfObjectIdenticalTo:aTableColumn]; + if (index === CPNotFound) + return; + + [aTableColumn setTableView:nil]; [_tableColumns removeObjectAtIndex:index]; var tableColumnUID = [aTableColumn UID]; @@ -594,7 +605,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; if (x < range.location) high = middle - 1; - else if (x > CPMaxRange(range)) + else if (x >= CPMaxRange(range)) low = middle + 1; else @@ -625,8 +636,14 @@ CPTableViewSelectionHighlightStyleSourceList = 1; return FLOOR(y / (_rowHeight + _intercellSpacing.height)); } +- (CGRect)frameOfDataViewAtColumn:(CPInteger)aColumnIndex row:(CPInteger)aRowIndex +{ + var tableColumnRange = _tableColumns[aColumnIndex], + rectOfRow = [self rectOfRow:aRowIndex]; + + return _CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow)); +} /* - * - frameOfCellAtColumn:row: * - columnAutoresizingStyle * - setColumnAutoresizingStyle: */ @@ -897,71 +914,133 @@ CPTableViewSelectionHighlightStyleSourceList = 1; // remove? return; } -console.profile("cell-load"); - // SLOWMO -/* var subviews = [self subviews], - count = [subviews count]; + if (window.console && window.console.profile) + console.profile("cell-load"); - while (count--) - [subviews[count] removeFromSuperview]; -*/ var exposedRect = [self _exposedRect], exposedRows = [CPIndexSet indexSetWithIndexesInRange:[self rowsInRect:exposedRect]], exposedColumns = [self columnIndexesInRect:exposedRect], - previouslyExposedRows = [_exposedRows copy], - previouslyExposedColumns = [_exposedColumns copy], - newlyExposedRows = [exposedRows copy], - newlyExposedColumns = [exposedColumns copy]; + obscuredRows = [_exposedRows copy], + obscuredColumns = [_exposedColumns copy]; -// console.log("exposed rows: " + exposedRows + " exposed columns: " + exposedColumns); -// console.log("but rows: " + _exposedRows + " exposed columns: " + _exposedColumns); + [obscuredRows removeIndexes:exposedRows]; + [obscuredColumns removeIndexes:exposedColumns]; + + var newlyExposedRows = [exposedRows copy], + newlyExposedColumns = [exposedColumns copy]; [newlyExposedRows removeIndexes:_exposedRows]; [newlyExposedColumns removeIndexes:_exposedColumns]; + + var previouslyExposedRows = [exposedRows copy], + previouslyExposedColumns = [exposedColumns copy]; + [previouslyExposedRows removeIndexes:newlyExposedRows]; [previouslyExposedColumns removeIndexes:newlyExposedColumns]; +// console.log("will remove:" + '\n\n' + +// previouslyExposedRows + "\n" + obscuredColumns + "\n\n" + +// obscuredRows + "\n" + previouslyExposedColumns + "\n\n" + +// obscuredRows + "\n" + obscuredColumns); + [self _unloadDataViewsInRows:previouslyExposedRows columns:obscuredColumns]; + [self _unloadDataViewsInRows:obscuredRows columns:previouslyExposedColumns]; + [self _unloadDataViewsInRows:obscuredRows columns:obscuredColumns]; + + [self _loadDataViewsInRows:previouslyExposedRows columns:newlyExposedColumns]; + [self _loadDataViewsInRows:newlyExposedRows columns:previouslyExposedColumns]; + [self _loadDataViewsInRows:newlyExposedRows columns:newlyExposedColumns]; + // console.log("newly exposed rows: " + newlyExposedRows + "\nnewly exposed columns: " + newlyExposedColumns); _exposedRows = exposedRows; _exposedColumns = exposedColumns; - [self r:previouslyExposedRows c:newlyExposedColumns]; - [self r:newlyExposedRows c:previouslyExposedColumns]; - [self r:newlyExposedRows c:newlyExposedColumns]; -console.profileEnd("cell-load"); + if (window.console && window.console.profile) + console.profileEnd("cell-load"); } -- (void)r:(CPIndexSet)rows c:(CPIndexSet)columns +- (void)_unloadDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns { - var columnIndex = [columns firstIndex]; + if (![rows count] || ![columns count]) + return; - while (columnIndex !== CPNotFound) + var rowArray = [], + columnArray = []; + + [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; + [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; + + var columnIndex = 0, + columnsCount = columnArray.length; + + for (; columnIndex < columnsCount; ++columnIndex) { - if (!_dataViews[columnIndex]) - _dataViews[columnIndex] = []; - - var tableColumn = _tableColumns[columnIndex], - tableColumnRange = _tableColumnRanges[columnIndex]; + var column = columnArray[columnIndex], + tableColumn = _tableColumns[column], + tableColumnUID = [tableColumn UID]; - var rowIndex = [rows firstIndex] + var rowIndex = 0, + rowsCount = rowArray.length; - while (rowIndex !== CPNotFound) + for (; rowIndex < rowsCount; ++rowIndex) { - var dataView = [tableColumn _newDataViewForRow:rowIndex], - rectOfRow = [self rectOfRow:rowIndex]; + var row = rowArray[rowIndex], + dataView = _dataViewsForTableColumns[tableColumnUID][row]; + + _dataViewsForTableColumns[tableColumnUID][row] = nil; +if (!_cachedDataViews[dataView.identifier]) +_cachedDataViews[dataView.identifier] = [dataView]; +else +_cachedDataViews[dataView.identifier].push(dataView); + } + } +} + +- (void)_loadDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns +{ + if (![rows count] || ![columns count]) + return; + + var rowArray = [], + rowRects = [], + columnArray = []; + + [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; + [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; + + var columnIndex = 0, + columnsCount = columnArray.length; + + for (; columnIndex < columnsCount; ++columnIndex) + { + var column = columnArray[columnIndex], + tableColumn = _tableColumns[column], + tableColumnUID = [tableColumn UID], + tableColumnRange = _tableColumnRanges[column]; + + if (!_dataViewsForTableColumns[tableColumnUID]) + _dataViewsForTableColumns[tableColumnUID] = []; + + var rowIndex = 0, + rowsCount = rowArray.length; + + for (; rowIndex < rowsCount; ++rowIndex) + { + var row = rowArray[rowIndex], + dataView = [tableColumn _newDataViewForRow:row], + rectOfRow = rowRects[row]; + + if (!rectOfRow) + rectOfRow = rowRects[row] = [self rectOfRow:row]; [dataView setBackgroundColor:[CPColor redColor]]; [dataView setFrame:_CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow))]; - [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:rowIndex]]; + [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:row]]; - [self addSubview:dataView]; - - _dataViews[columnIndex][rowIndex] = dataView; + if ([dataView superview] !== self) + [self addSubview:dataView]; - rowIndex = [rows indexGreaterThanIndex:rowIndex]; + _dataViewsForTableColumns[tableColumnUID][row] = dataView; } - - columnIndex = [columns indexGreaterThanIndex:columnIndex]; } } diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j index 040d32690..ab704a916 100644 --- a/Foundation/CPIndexSet.j +++ b/Foundation/CPIndexSet.j @@ -23,6 +23,9 @@ @import "CPRange.j" @import "CPObject.j" +#define _CPMaxRange(aRange) ((aRange).location + (aRange).length) +#define _CPMakeRange(aLocation, aLength) { location:(aLocation), length:aLength } +#define _CPMakeRangeCopy(aRange) { location:(aRange).location, length:(aRange).length } /*! @class CPIndexSet @@ -68,7 +71,7 @@ - (id)init { - return [self initWithIndexesInRange:CPMakeRange(0, 0)]; + return [self initWithIndexesInRange:_CPMakeRange(0, 0)]; } /*! @@ -77,7 +80,7 @@ */ - (id)initWithIndex:(CPInteger)anIndex { - return [self initWithIndexesInRange:CPMakeRange(anIndex, 1)]; + return [self initWithIndexesInRange:_CPMakeRange(anIndex, 1)]; } /*! @@ -120,7 +123,7 @@ otherRangesCount = otherRanges.length; while (otherRangesCount--) - _ranges[otherRangesCount] = CPCopyRange(otherRanges[otherRangesCount]); + _ranges[otherRangesCount] = _CPMakeRangeCopy(otherRanges[otherRangesCount]); } return self; @@ -232,7 +235,7 @@ if (FLOOR(lhsRangeIndex) === lhsRangeIndex) return YES; - var rhsRangeIndex = assumedPositionOfIndex(_ranges, CPMaxRange(aRange) - 1); + var rhsRangeIndex = assumedPositionOfIndex(_ranges, _CPMaxRange(aRange) - 1); if (FLOOR(rhsRangeIndex) === rhsRangeIndex) return YES; @@ -266,7 +269,7 @@ - (CPInteger)lastIndex { if (_count > 0) - return CPMaxRange(_ranges[_ranges.length - 1]) - 1; + return _CPMaxRange(_ranges[_ranges.length - 1]) - 1; return CPNotFound; } @@ -330,7 +333,7 @@ return anIndex; // If not, it must be the first element of this range. - return CPMaxRange(range) - 1; + return _CPMaxRange(range) - 1; } /*! @@ -360,48 +363,64 @@ @param aRangePointer the range of indices to add @return the number of elements added to the array */ -- (unsigned)getIndexes:(CPArray)anArray maxCount:(unsigned)aMaxCount inIndexRange:(CPRange)aRangePointer +- (CPInteger)getIndexes:(CPArray)anArray maxCount:(CPInteger)aMaxCount inIndexRange:(CPRange)aRange { - if (!_count || aMaxCount <= 0 || aRangePointer && !aRangePointer.length) - return 0; - - var i = SOERangeIndex(self, aRangePointer? aRangePointer.location : 0), - total = 0, - count = _ranges.length; - - for (; i < count; ++i) + if (!_count || aMaxCount === 0 || aRange && !aRange.length) { - // If aRangePointer is nil, all indexes are acceptable. - var intersection = aRangePointer ? CPIntersectionRange(_ranges[i], aRangePointer) : _ranges[i], - index = intersection.location, - maximum = CPMaxRange(intersection); + if (aRange) + aRange.length = 0; - for (; index < maximum; ++index) + return 0; + } + + var total = 0; + + if (aRange) + { + var firstIndex = aRange.location, + lastIndex = _CPMaxRange(aRange) - 1, + rangeIndex = CEIL(assumedPositionOfIndex(_ranges, firstIndex)), + lastRangeIndex = FLOOR(assumedPositionOfIndex(_ranges, lastIndex)); + } + else + { + var firstIndex = [self firstIndex], + lastIndex = [self lastIndex], + rangeIndex = 0, + lastRangeIndex = _ranges.length - 1; + } + + while (rangeIndex <= lastRangeIndex) + { + var range = _ranges[rangeIndex], + index = MAX(firstIndex, range.location), + maxRange = MIN(lastIndex + 1, _CPMaxRange(range)); + + for (; index < maxRange; ++index) { anArray[total++] = index; - if (total == aMaxCount) + if (total === aMaxCount) { - // Update aRangePointer if it exists... - if (aRangePointer) + // Update aRange if it exists... + if (aRange) { - var upper = CPMaxRange(aRangePointer); - - // Don't use CPMakeRange since the values need to persist. - aRangePointer.location = index + 1; - aRangePointer.length = upper - index - 1; + aRange.location = index + 1; + aRange.length = lastIndex + 1 - index - 1; } return aMaxCount; } } + + ++rangeIndex; } - // Update aRangePointer if it exists... - if (aRangePointer) + // Update aRange if it exists... + if (aRange) { - aRangePointer.location = CPNotFound; - aRangePointer.length = 0; + aRange.location = CPNotFound; + aRange.length = 0; } return total; @@ -456,7 +475,7 @@ */ - (void)addIndex:(CPInteger)anIndex { - [self addIndexesInRange:CPMakeRange(anIndex, 1)]; + [self addIndexesInRange:_CPMakeRange(anIndex, 1)]; } /*! @@ -532,7 +551,7 @@ for (; removal <= lastRemoval; ++removal) _count -= _ranges[removal].length; - [_ranges removeObjectsInRange:CPMakeRange(lhsRangeIndexCEIL, removalCount)]; + [_ranges removeObjectsInRange:_CPMakeRange(lhsRangeIndexCEIL, removalCount)]; } [_ranges insertObject:aRange atIndex:lhsRangeIndexCEIL]; @@ -548,7 +567,7 @@ */ - (void)removeIndex:(CPInteger)anIndex { - [self removeIndexesInRange:CPMakeRange(anIndex, 1)]; + [self removeIndexesInRange:_CPMakeRange(anIndex, 1)]; } /*! @@ -611,7 +630,7 @@ if (maxRange < existingMaxRange) { _count -= aRange.length; - [_ranges insertObject:CPMakeRange(maxRange, existingMaxRange - maxRange) atIndex:lhsRangeIndexCEIL + 1]; + [_ranges insertObject:_CPMakeRange(maxRange, existingMaxRange - maxRange) atIndex:lhsRangeIndexCEIL + 1]; return; } @@ -652,7 +671,7 @@ for (; removal <= lastRemoval; ++removal) _count -= _ranges[removal].length; - [_ranges removeObjectsInRange:CPMakeRange(lhsRangeIndexCEIL, removalCount)]; + [_ranges removeObjectsInRange:_CPMakeRange(lhsRangeIndexCEIL, removalCount)]; } } diff --git a/Tests/Foundation/CPIndexSetTest.j b/Tests/Foundation/CPIndexSetTest.j index 1d1b68fee..c659fff42 100644 --- a/Tests/Foundation/CPIndexSetTest.j +++ b/Tests/Foundation/CPIndexSetTest.j @@ -147,6 +147,31 @@ function descriptionWithoutEntity(aString) [self assert:@"[number of indexes: 1 (in 1 range), indexes: (0)]" equals:descriptionWithoutEntity(indexSet)]; } +- (void)testGetIndexes +{ + var indexSet = [CPIndexSet indexSet]; + + // Test no indexes + [self assert:descriptionWithoutEntity(indexSet) equals:@"(no indexes)"]; + + // Test adding initial range + [indexSet addIndexesInRange:CPMakeRange(0, 10)]; + + [indexSet addIndexesInRange:CPMakeRange(15, 1)]; + + [indexSet addIndexesInRange:CPMakeRange(20, 10)]; + + [indexSet addIndexesInRange:CPMakeRange(50, 10)]; + + [self assert:@"[number of indexes: 31 (in 4 ranges), indexes: (0-9 15 20-29 50-59)]" equals:descriptionWithoutEntity(indexSet)]; + + var array = []; + + [indexSet getIndexes:array maxCount:1000 inIndexRange:nil]; + + [self assert:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59] equals:array]; +} + - (void)setUp { _set = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 10)]; From 202d59475b85c16139651b1ac1d63d34908dfee6 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 23 Jun 2009 20:46:17 -0700 Subject: [PATCH 053/244] Slight movement of debug code. Reviewed by me. --- AppKit/NEWCPTableView.j | 1 - TableTest/AppController.j | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index a26c940f9..a946f2882 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -1032,7 +1032,6 @@ _cachedDataViews[dataView.identifier].push(dataView); if (!rectOfRow) rectOfRow = rowRects[row] = [self rectOfRow:row]; - [dataView setBackgroundColor:[CPColor redColor]]; [dataView setFrame:_CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow))]; [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:row]]; diff --git a/TableTest/AppController.j b/TableTest/AppController.j index cc6d96473..fc10019f2 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -38,6 +38,10 @@ CPLogRegister(CPLogConsole); iconImage = [[CPImage alloc] initWithContentsOfFile:"http://cappuccino.org/images/favicon.png" size:CGSizeMake(16,16)]; + var textDataView = [CPTextField new]; + + [textDataView setBackgroundColor:[CPColor redColor]]; + for (var i = 1; i <= 10; i++) { var column = [[NEWCPTableColumn alloc] initWithIdentifier:String(i)]; @@ -47,6 +51,7 @@ CPLogRegister(CPLogConsole); // [column setWidth:[[column headerView] frame].size.width]; [column setWidth:200.0]; + [column setDataView:textDataView]; [tableView addTableColumn:column]; } From dd4db720effb69ce45b4dbfd7fe17690596eb2f5 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 23 Jun 2009 21:26:41 -0700 Subject: [PATCH 054/244] Added selection methods. Reviewed by me. --- AppKit/NEWCPTableView.j | 80 ++++++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 13 deletions(-) diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index a946f2882..248054b7e 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -79,6 +79,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; unsigned _currentHighlightedTableColumn; unsigned _numberOfRows; + + CPIndexSet _selectedColumnIndexes; + CPIndexSet _selectedRowIndexes; } - (id)initWithFrame:(CGRect)aFrame @@ -113,6 +116,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _cachedDataViews = { }; _intercellSpacing = _CGSizeMake(0.0, 0.0); _rowHeight = 24.0; + + _selectedColumnIndexes = [CPIndexSet indexSet]; + _selectedRowIndexes = [CPIndexSet indexSet]; } return self; @@ -399,27 +405,75 @@ _cachedDataViews = { }; { var index = [self columnWithIdentifier:anIdentifier]; - if (index < 0) + if (index === CPNotFound) return nil; return _tableColumns[index]; } //Selecting Columns and Rows +- (void)selectColumnIndexes:(CPIndexSet)columns byExtendingSelection:(BOOL)shouldExtendSelection +{ + if (shouldExtendSelection) + [_selectedColumnIndexes addIndexes:columns]; + else + _selectedColumnIndexes = [columns copy]; +} + +- (void)selectRowIndexes:(CPIndexSet)rows byExtendingSelection:(BOOL)shouldExtendSelection +{ + if (shouldExtendSelection) + [_selectedRowIndexes addIndexes:rows]; + else + _selectedRowIndexes = [rows copy]; +} + +- (CPIndexSet)selectedColumnIndexes +{ + return _selectedColumnIndexes; +} + +- (void)selectedRowIndexes +{ + return _selectedRowIndexes; +} + +- (void)deselectColumn:(CPInteger)aColumn +{ + [_selectedColumnIndexes removeIndex:aColumn]; +} + +- (void)deselectRow:(CPInteger)aRow +{ + [_selectedRowIndexes removeIndex:aRow]; +} + +- (CPInteger)numberOfSelectedColumns +{ + return [_selectedColumnIndexes count]; +} + +- (CPInteger)numberOfSelectedRows +{ + return [_selectedRowIndexes count]; +} + /* - * - selectColumnIndexes:byExtendingSelection: - * - selectRowIndexes:byExtendingSelection: - * - selectedColumnIndexes - * - selectedRowIndexes - * - deselectColumn: - * - deselectRow: - * - numberOfSelectedColumns - * - numberOfSelectedRows - * - selectedColumn +- (CPInteger)selectedColumn * - selectedRow - * - isColumnSelected: - * - isRowSelected: - * - selectAll: +*/ + +- (BOOL)isColumnSelected:(CPInteger)aColumn +{ + return [_selectedColumnIndexes containsIndex:aColumn]; +} + +- (BOOL)isRowSelected:(CPInteger)aRow +{ + return [_selectedRowIndexes containsIndex:aRow]; +} +/* +- (void)selectAll: * - deselectAll: * - allowsTypeSelect * - setAllowsTypeSelect: From d57e7050dbe4ae5c4adbe7545ea9098b8b35e49e Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 24 Jun 2009 14:41:37 -0700 Subject: [PATCH 055/244] Added CPWindowList and CPWindowObjectList functions for grabbing the currently visible windows. Reviewed by me. --- AppKit/Platform/DOM/CPDOMWindowBridge.j | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index 2499c84f1..17d7da992 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -1018,3 +1018,43 @@ var CPDOMEventStop = function(aDOMEvent) CPSharedDOMWindowBridge._DOMFocusElement.blur(); } } + +function CPWindowObjectList() +{ + var bridge = [CPDOMWindowBridge sharedDOMWindowBridge], + levels = bridge._windowLevels, + layers = bridge._windowLayers, + levelCount = levels.length, + windowObjects = []; + + while (levelCount--) + { + var windows = [layers objectForKey:levels[levelCount]]._windows, + windowCount = windows.length; + + while (windowCount--) + windowObjects.push(windows[windowCount]); + } + + return windowObjects; +} + +function CPWindowList() +{ + var bridge = [CPDOMWindowBridge sharedDOMWindowBridge], + levels = bridge._windowLevels, + layers = bridge._windowLayers, + levelCount = levels.length, + windowNumbers = []; + + while (levelCount--) + { + var windows = [layers objectForKey:levels[levelCount]]._windows, + windowCount = windows.length; + + while (windowCount--) + windowNumbers.push([windows[windowCount] windowNumber]); + } + + return windowNumbers; +} From 849dda0725ef7d48bc17db49c49cf495825d82ff Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Wed, 24 Jun 2009 15:12:26 -0700 Subject: [PATCH 056/244] Add support for header views in table view and scroll view --- AppKit/CPScrollView.j | 104 +++++++++++++++++++++++++++---------- AppKit/CPTableHeaderView.j | 102 ++++++++++++++++++++++++++++++++++-- AppKit/NEWCPTableColumn.j | 2 +- AppKit/NEWCPTableView.j | 19 +++++++ TableTest/AppController.j | 12 +++-- 5 files changed, 203 insertions(+), 36 deletions(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 9b92c6032..9aae4700f 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -38,7 +38,8 @@ @implementation CPScrollView : CPView { CPClipView _contentView; - + CPClipView _headerClipView; + BOOL _hasVerticalScroller; BOOL _hasHorizontalScroller; BOOL _autohidesScrollers; @@ -57,23 +58,27 @@ - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; - + if (self) { _verticalLineScroll = 10.0; _verticalPageScroll = 10.0; - + _horizontalLineScroll = 10.0; _horizontalPageScroll = 10.0; - _contentView = [[CPClipView alloc] initWithFrame:[self bounds]]; - + _contentView = [[CPClipView alloc] initWithFrame:[self clipViewFrame]]; + [self addSubview:_contentView]; - + + _headerClipView = [[CPClipView alloc] initWithFrame:[self headerClipViewFrame]]; + + [self addSubview:_headerClipView]; + [self setHasVerticalScroller:YES]; [self setHasHorizontalScroller:YES]; } - + return self; } @@ -114,7 +119,7 @@ _contentView = aContentView; - [_contentView setFrame:CGRectMake(0.0, 0.0, size.width, size.height)]; + [_contentView setFrame:[self clipViewFrame]]; [_contentView setDocumentView:documentView]; [self addSubview:_contentView]; @@ -134,8 +139,13 @@ */ - (void)setDocumentView:(CPView)aView { - [_contentView setDocumentView:aView]; - [self reflectScrolledClipView:_contentView]; + [_contentView setDocumentView:aView]; + [_headerClipView setDocumentView:[self _headerView]]; + + [_contentView setFrame:[self clipViewFrame]]; + [_headerClipView setFrame:[self headerClipViewFrame]]; + + [self reflectScrolledClipView:_contentView]; } /*! @@ -167,17 +177,19 @@ // [_horizontalScroller setEnabled:NO]; } - [_contentView setFrame:[self bounds]]; + [_contentView setFrame:[self clipViewFrame]]; --_recursionCount; return; } - var documentFrame = [documentView frame], - contentViewFrame = [self bounds], + var documentFrame = [documentView frame], // the size of the whole document + clipViewFrame = [self clipViewFrame], // the size of the visible document, within the scrollbars + headerViewFrame = [self headerClipViewFrame], + headerViewHeight = _CGRectGetHeight(headerViewFrame), scrollPoint = [_contentView bounds].origin, - difference = _CGSizeMake(CPRectGetWidth(documentFrame) - CPRectGetWidth(contentViewFrame), CPRectGetHeight(documentFrame) - CPRectGetHeight(contentViewFrame)), + difference = _CGSizeMake(CPRectGetWidth(documentFrame) - CPRectGetWidth(clipViewFrame), CPRectGetHeight(documentFrame) - CPRectGetHeight(clipViewFrame)), shouldShowVerticalScroller = (!_autohidesScrollers || difference.height > 0.0) && _hasVerticalScroller, shouldShowHorizontalScroller = (!_autohidesScrollers || difference.width > 0.0) && _hasHorizontalScroller, wasShowingVerticalScroller = ![_verticalScroller isHidden], @@ -203,17 +215,17 @@ if (shouldShowVerticalScroller) { - var verticalScrollerHeight = CPRectGetHeight(contentViewFrame); + var verticalScrollerHeight = CPRectGetHeight([self bounds]) - headerViewHeight; if (shouldShowHorizontalScroller) verticalScrollerHeight -= horizontalScrollerHeight; difference.width += verticalScrollerWidth; - contentViewFrame.size.width -= verticalScrollerWidth; + clipViewFrame.size.width -= verticalScrollerWidth; [_verticalScroller setFloatValue:(difference.height <= 0.0) ? 0.0 : scrollPoint.y / difference.height - knobProportion:CPRectGetHeight(contentViewFrame) / CPRectGetHeight(documentFrame)]; - [_verticalScroller setFrame:CPRectMake(CPRectGetMaxX(contentViewFrame), 0.0, verticalScrollerWidth, verticalScrollerHeight)]; + knobProportion:CPRectGetHeight(clipViewFrame) / CPRectGetHeight(documentFrame)]; + [_verticalScroller setFrame:CPRectMake(CPRectGetMaxX(clipViewFrame), headerViewHeight, verticalScrollerWidth, verticalScrollerHeight)]; } else if (wasShowingVerticalScroller) [_verticalScroller setFloatValue:0.0 knobProportion:1.0]; @@ -221,16 +233,17 @@ if (shouldShowHorizontalScroller) { difference.height += horizontalScrollerHeight; - contentViewFrame.size.height -= horizontalScrollerHeight; + clipViewFrame.size.height -= horizontalScrollerHeight; [_horizontalScroller setFloatValue:(difference.width <= 0.0) ? 0.0 : scrollPoint.x / difference.width - knobProportion:CPRectGetWidth(contentViewFrame) / CPRectGetWidth(documentFrame)]; - [_horizontalScroller setFrame:CPRectMake(0.0, CPRectGetMaxY(contentViewFrame), CPRectGetWidth(contentViewFrame), horizontalScrollerHeight)]; + knobProportion:CPRectGetWidth(clipViewFrame) / CPRectGetWidth(documentFrame)]; + [_horizontalScroller setFrame:CPRectMake(0.0, CPRectGetMaxY(clipViewFrame), CPRectGetWidth(clipViewFrame), horizontalScrollerHeight)]; } else if (wasShowingHorizontalScroller) [_horizontalScroller setFloatValue:0.0 knobProportion:1.0]; - [_contentView setFrame:contentViewFrame]; + [_contentView setFrame:clipViewFrame]; + [_headerClipView setFrame:headerViewFrame]; --_recursionCount; } @@ -384,13 +397,47 @@ { return _autohidesScrollers; } -/* -- (void)setFrameSize:(CPRect)aSize + + +- (CGRect)insetBounds { - [super setFrameSize:aSize]; + return [self bounds]; +} + +- (CPView)_headerView +{ + var documentView = [self documentView]; - [self reflectScrolledClipView:_contentView]; -}*/ + if ([documentView respondsToSelector:@selector(headerView)]) + return [documentView performSelector:@selector(headerView)]; + + return nil; +} + +- (CGRect)headerClipViewFrame +{ + var headerView = [self _headerView], + bounds = [self insetBounds]; + + if (!headerView) + return CGRectMakeZero(); + + bounds.size.height = [headerView bounds].size.height; + bounds.size.width -= _verticalScroller ? [_verticalScroller frame].size.width : [CPScroller scrollerWidth]; + + return bounds; +} + +- (CGRect)clipViewFrame +{ + var bounds = [self insetBounds], + headerViewFrame = [self headerClipViewFrame]; + + bounds.origin.y += headerViewFrame.size.height; + bounds.size.height -= headerViewFrame.size.height; + + return bounds; +} /* @ignore */ - (void)_verticalScrollerDidScroll:(CPScroller)aScroller @@ -448,6 +495,7 @@ } [_contentView scrollToPoint:contentBounds.origin]; + [_headerClipView scrollToPoint:CGPointMake(contentBounds.origin.x, 0.0)]; } /*! @@ -588,6 +636,7 @@ contentBounds.origin.y += [anEvent deltaY] * _verticalLineScroll; [_contentView scrollToPoint:contentBounds.origin]; + [_headerClipView scrollToPoint:CGPointMake(contentBounds.origin.x, 0.0)]; } - (void)keyDown:(CPEvent)anEvent @@ -627,6 +676,7 @@ } [_contentView scrollToPoint:contentBounds.origin]; + [_headerClipView scrollToPoint:CGPointMake(contentBounds.origin, 0)]; } @end diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index faa544189..ebefe4a84 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -1,9 +1,38 @@ +/* + * CPTableHeaderView.j + * AppKit + * + * Created by Ross Boucher. + * Copyright 2009 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 +@import "CPTableColumn.j" +@import "CPTableView.j" +@import "CPView.j" @implementation CPTableHeaderView : CPView { + int _resizedColumn @accessors(readonly, property=resizedColumn); + int _draggedColumn @accessors(readonly, property=draggedColumn); + + float _draggedDistance @accessors(readonly, property=draggedDistance); + + CPTableView _tableView @accessors(property=tableView); } - (void)initWithFrame:(CGRect)aFrame @@ -11,9 +40,76 @@ self = [super initWithFrame:aFrame]; if (self) - [self setBackgroundColor:[CPColor redColor]]; + { + _resizedColumn = CPNotFound; + _draggedColumn = CPNotFound; + _draggedDistance = 0.0; + } return self; } -@end \ No newline at end of file +- (int)columnAtPoint:(CGPoint)aPoint +{ + if (!CGRectContainsPoint([self bounds], aPoint)) + return CPNotFound; + + // at this point, we can essentially ignore height, because all columns have equal heights + // and that height is equal to the height of our own bounds, which we know we are inside of + + var index = 0, + count = [[_tableView tableColumns] count], + tableSpacing = [_tableView intercellSpacing], + tableColumns = [_tableView tableColumns], + leftOffset = 0, + pointX = aPoint.x; + + for (; index < count; index++) + { + var width = [tableColumns[index] width] + tableSpacing.width; + + if (pointX >= leftOffset && pointX < leftOffset + width) + return index; + + leftOffset += width; + } + + return CPNotFound; +} + +- (CGRect)headerRectOfColumn:(int)aColumnIndex +{ + var tableColumns = [_tableView tableColumns], + tableSpacing = [_tableView intercellSpacing], + bounds = [self bounds]; + + if (aColumnIndex < 0 || aColumnIndex > [tableColumns count]) + [CPException raise:"invalid" reason:"tried to get headerRectOfColumn: on invalid column"]; + + bounds.size.width = [tableColumns[aColumnIndex] width] + tableSpacing.width; + + while (--aColumnIndex >= 0) + bounds.origin.x += [tableColumns[aColumnIndex] width] + tableSpacing.width; + + return bounds; +} + +- (void)drawRect:(CGRect)aRect +{ + var tableColumns = [_tableView tableColumns]; + var count = [tableColumns count]; + var columnRect = [self bounds]; + var spacing = [_tableView intercellSpacing]; + + for (i = 0; i < count; ++i) { + var column = [tableColumns objectAtIndex:i]; + var headerView = [column headerView] ; + columnRect.size.width = [column width] + spacing.width; + // [headerView setHighlighted:[_tableView isColumnSelected:[[_tableView tableColumns] indexOfObject:column]]]; + [headerView setFrame:columnRect]; + columnRect.origin.x += [column width] + spacing.width; + [self addSubview:headerView] ; + } +} + +@end diff --git a/AppKit/NEWCPTableColumn.j b/AppKit/NEWCPTableColumn.j index e9f0018c5..50aa73f4b 100644 --- a/AppKit/NEWCPTableColumn.j +++ b/AppKit/NEWCPTableColumn.j @@ -54,7 +54,7 @@ CPTableColumnUserResizingMask = 2; _maxWidth = 1000000.0; [self setIdentifier:anIdentifier]; - [self setHeaderView:[CPTableHeaderView new]]; + [self setHeaderView:[CPTextField new]]; [self setDataView:[CPTextField new]]; } diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index a26c940f9..b7a3811e0 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -79,6 +79,8 @@ CPTableViewSelectionHighlightStyleSourceList = 1; unsigned _currentHighlightedTableColumn; unsigned _numberOfRows; + + CPTableHeaderView _headerView; } - (id)initWithFrame:(CGRect)aFrame @@ -113,6 +115,11 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _cachedDataViews = { }; _intercellSpacing = _CGSizeMake(0.0, 0.0); _rowHeight = 24.0; + + _headerView = [[CPTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, [self bounds].size.width, _rowHeight)]; + [_headerView setAutoresizingMask:CPViewWidthSizable]; + + [_headerView setTableView:self]; } return self; @@ -459,6 +466,18 @@ _cachedDataViews = { }; * - setCornerView: * - cornerView */ + +- (CPView)headerView +{ + return _headerView; +} + +- (void)setHeaderView:(CPView)aHeaderView +{ + _headerView = aHeaderView; + [_headerView setTableView:self]; +} + //Layout Support // Complexity: diff --git a/TableTest/AppController.j b/TableTest/AppController.j index cc6d96473..98d369aa8 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -38,15 +38,15 @@ CPLogRegister(CPLogConsole); iconImage = [[CPImage alloc] initWithContentsOfFile:"http://cappuccino.org/images/favicon.png" size:CGSizeMake(16,16)]; - for (var i = 1; i <= 10; i++) + for (var i = 1; i <= 20; i++) { var column = [[NEWCPTableColumn alloc] initWithIdentifier:String(i)]; -// [[column headerView] setStringValue:"Number"]; -// [[column headerView] sizeToFit]; -// [column setWidth:[[column headerView] frame].size.width]; + [[column headerView] setStringValue:"Number "+i]; + [[column headerView] sizeToFit]; + [column setWidth:[[column headerView] frame].size.width + 20]; - [column setWidth:200.0]; +// [column setWidth:200.0]; [tableView addTableColumn:column]; } @@ -58,6 +58,8 @@ CPLogRegister(CPLogConsole); [view addSubview:scrollView]; + [scrollView setAutohidesScrollers:YES]; + [tableView setDelegate:self]; [tableView setDataSource:self]; } From ac6c03f2c777d1bbad8515375513e6b97af596ff Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Wed, 24 Jun 2009 22:52:42 -0700 Subject: [PATCH 057/244] Fix for incorrectly sized header views --- AppKit/CPScrollView.j | 7 ++++--- AppKit/CPTableHeaderView.j | 24 ++++++++++++++---------- AppKit/NEWCPTableView.j | 7 ++++++- TableTest/AppController.j | 6 +++--- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 9aae4700f..bc34b879a 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -176,11 +176,12 @@ // [_verticalScroller setEnabled:NO]; // [_horizontalScroller setEnabled:NO]; } - + [_contentView setFrame:[self clipViewFrame]]; - + [_headerClipView setFrame:[self headerClipViewFrame]]; + --_recursionCount; - + return; } diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index ebefe4a84..ff3c24d8d 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -94,21 +94,25 @@ return bounds; } -- (void)drawRect:(CGRect)aRect +- (void)layoutSubviews { - var tableColumns = [_tableView tableColumns]; - var count = [tableColumns count]; - var columnRect = [self bounds]; - var spacing = [_tableView intercellSpacing]; + var tableColumns = [_tableView tableColumns], + count = [tableColumns count], + columnRect = [self bounds], + spacing = [_tableView intercellSpacing]; - for (i = 0; i < count; ++i) { - var column = [tableColumns objectAtIndex:i]; - var headerView = [column headerView] ; + for (i = 0; i < count; ++i) + { + var column = [tableColumns objectAtIndex:i], + headerView = [column headerView]; + columnRect.size.width = [column width] + spacing.width; - // [headerView setHighlighted:[_tableView isColumnSelected:[[_tableView tableColumns] indexOfObject:column]]]; + [headerView setFrame:columnRect]; + columnRect.origin.x += [column width] + spacing.width; - [self addSubview:headerView] ; + + [self addSubview:headerView]; } } diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index c943db812..ee72e68de 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -121,7 +121,6 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _rowHeight = 24.0; _headerView = [[CPTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, [self bounds].size.width, _rowHeight)]; - [_headerView setAutoresizingMask:CPViewWidthSizable]; [_headerView setTableView:self]; @@ -1117,6 +1116,12 @@ _cachedDataViews[dataView.identifier].push(dataView); } } +- (void)setFrameSize:(CGSize)aSize +{ + [super setFrameSize:aSize]; + [_headerView setFrameSize:CGSizeMake(aSize.width, [_headerView frame].size.height)]; +} + - (void)layoutSubviews { [self load]; diff --git a/TableTest/AppController.j b/TableTest/AppController.j index 913ca1ce4..3f1609808 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -48,15 +48,15 @@ CPLogRegister(CPLogConsole); [[column headerView] setStringValue:"Number "+i]; [[column headerView] sizeToFit]; - [column setWidth:[[column headerView] frame].size.width + 20]; + //[column setWidth:[[column headerView] frame].size.width + 20]; - //[column setWidth:200.0]; + [column setWidth:170.0]; [column setDataView:textDataView]; [tableView addTableColumn:column]; } - + var scrollView = [[CPScrollView alloc] initWithFrame:[view bounds]]; [scrollView setDocumentView:tableView]; From 8c171e5a40cd16b04e0bf80e3e7f7ee33897360b Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 25 Jun 2009 14:42:30 -0700 Subject: [PATCH 058/244] Add corner views to the table view stuff --- AppKit/CPScrollView.j | 44 +++++++++++++++++++++++++++++++++++++---- AppKit/NEWCPTableView.j | 15 ++++++++++++++ AppKit/_CPCornerView.j | 18 +++++++++++++++++ 3 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 AppKit/_CPCornerView.j diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index bc34b879a..04d4e0e87 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -145,6 +145,14 @@ [_contentView setFrame:[self clipViewFrame]]; [_headerClipView setFrame:[self headerClipViewFrame]]; + var cornerView = [self _cornerView]; + + if (cornerView) + { + [cornerView setFrame:[self cornerViewFrame]]; + [self addSubview:cornerView]; + } + [self reflectScrolledClipView:_contentView]; } @@ -189,6 +197,8 @@ clipViewFrame = [self clipViewFrame], // the size of the visible document, within the scrollbars headerViewFrame = [self headerClipViewFrame], headerViewHeight = _CGRectGetHeight(headerViewFrame), + cornerViewFrame = [self cornerViewFrame], + cornerViewHeight = _CGRectGetHeight(cornerViewFrame), scrollPoint = [_contentView bounds].origin, difference = _CGSizeMake(CPRectGetWidth(documentFrame) - CPRectGetWidth(clipViewFrame), CPRectGetHeight(documentFrame) - CPRectGetHeight(clipViewFrame)), shouldShowVerticalScroller = (!_autohidesScrollers || difference.height > 0.0) && _hasVerticalScroller, @@ -216,7 +226,7 @@ if (shouldShowVerticalScroller) { - var verticalScrollerHeight = CPRectGetHeight([self bounds]) - headerViewHeight; + var verticalScrollerHeight = CPRectGetHeight([self bounds]) - (cornerViewHeight ? cornerViewHeight : headerViewHeight); if (shouldShowHorizontalScroller) verticalScrollerHeight -= horizontalScrollerHeight; @@ -226,7 +236,7 @@ [_verticalScroller setFloatValue:(difference.height <= 0.0) ? 0.0 : scrollPoint.y / difference.height knobProportion:CPRectGetHeight(clipViewFrame) / CPRectGetHeight(documentFrame)]; - [_verticalScroller setFrame:CPRectMake(CPRectGetMaxX(clipViewFrame), headerViewHeight, verticalScrollerWidth, verticalScrollerHeight)]; + [_verticalScroller setFrame:CPRectMake(CPRectGetMaxX(clipViewFrame), (cornerViewHeight ? cornerViewHeight : headerViewHeight), verticalScrollerWidth, verticalScrollerHeight)]; } else if (wasShowingVerticalScroller) [_verticalScroller setFloatValue:0.0 knobProportion:1.0]; @@ -410,21 +420,47 @@ var documentView = [self documentView]; if ([documentView respondsToSelector:@selector(headerView)]) - return [documentView performSelector:@selector(headerView)]; + return [documentView headerView]; return nil; } +- (CPView)_cornerView +{ + var documentView = [self documentView]; + + if ([documentView respondsToSelector:@selector(cornerView)]) + return [documentView cornerView]; +} + +- (CGRect)cornerViewFrame +{ + var cornerView = [self _cornerView], + cornerBounds = [cornerView bounds], + bounds = [self insetBounds]; + + if (!cornerView) + return CGRectMakeZero(); + + cornerBounds.origin.x = CGRectGetMaxX(bounds) - CGRectGetWidth(cornerBounds); + cornerBounds.origin.y = 0; + + return cornerBounds; +} + - (CGRect)headerClipViewFrame { var headerView = [self _headerView], + cornerView = [self _cornerView], bounds = [self insetBounds]; if (!headerView) return CGRectMakeZero(); bounds.size.height = [headerView bounds].size.height; - bounds.size.width -= _verticalScroller ? [_verticalScroller frame].size.width : [CPScroller scrollerWidth]; + + if (cornerView) + bounds.size.width -= CGRectGetWidth([cornerView bounds]); return bounds; } diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index ee72e68de..dc26c92f9 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -3,6 +3,8 @@ @import "CPControl.j" @import "CPTableColumn.j" +@import "_CPCornerView.j" +@import "CPScroller.j" #include "CoreGraphics/CGGeometry.h" @@ -82,6 +84,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; CPTableHeaderView _headerView; + _CPCornerView _cornerView; CPIndexSet _selectedColumnIndexes; CPIndexSet _selectedRowIndexes; @@ -124,6 +127,8 @@ CPTableViewSelectionHighlightStyleSourceList = 1; [_headerView setTableView:self]; + _cornerView = [[_CPCornerView alloc] initWithFrame:CGRectMake(0, 0, [CPScroller scrollerWidth], CGRectGetHeight([_headerView frame]))]; + _selectedColumnIndexes = [CPIndexSet indexSet]; _selectedRowIndexes = [CPIndexSet indexSet]; } @@ -521,6 +526,16 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * - cornerView */ +- (CPView)cornerView +{ + return _cornerView; +} + +- (void)setCornerView:(CPView)aView +{ + _cornerView = aView; +} + - (CPView)headerView { return _headerView; diff --git a/AppKit/_CPCornerView.j b/AppKit/_CPCornerView.j new file mode 100644 index 000000000..5a30dfc90 --- /dev/null +++ b/AppKit/_CPCornerView.j @@ -0,0 +1,18 @@ + +@import "CPView.j" + +@implementation _CPCornerView : CPView +{ +} + +- (id)initWithFrame:(CGRect)aFrame +{ + if (self = [super initWithFrame:aFrame]) + { + [self setBackgroundColor:[CPColor purpleColor]]; + } + + return self; +} + +@end From ab2cb3836262350256060e5c9aca743eb1de0822 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 27 Jun 2009 23:43:49 -0700 Subject: [PATCH 059/244] Fixed incorrect variable in CPIndexSet. Reviewed by me. --- Foundation/CPIndexSet.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j index ab704a916..519ab04ed 100644 --- a/Foundation/CPIndexSet.j +++ b/Foundation/CPIndexSet.j @@ -152,8 +152,8 @@ if (rangesCount !== otherRanges.length || _count !== anIndexSet._count) return NO; - while (count--) - if (!CPEqualRanges(_ranges[count], otherRanges[count])) + while (rangesCount--) + if (!CPEqualRanges(_ranges[rangesCount], otherRanges[rangesCount])) return NO; return YES; From 7cc6e6af0a255cbfd1e38b28a1555b0cc33cdfe2 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 29 Jun 2009 05:35:44 -0700 Subject: [PATCH 060/244] Fix for having multiple copies of objective-j gem in the system. Reviewed by me. --- Tools/Install/install-tools | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/Install/install-tools b/Tools/Install/install-tools index ac2f0a62a..72834f843 100755 --- a/Tools/Install/install-tools +++ b/Tools/Install/install-tools @@ -37,5 +37,6 @@ done chmod +x $INSTALL_DIR/share/objj/bin/* gem install *.gem +gem cleanup objective-j echo "Cappuccino Tools Installed" From af062da99d221cd4ffdd96ea7750c25e4990a2dc Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Tue, 30 Jun 2009 20:48:32 +0800 Subject: [PATCH 061/244] Fix for selection being lost when changing the number of segments. Reviewed by tolmasky. Signed-off-by: Francisco Ryan Tolmasky I --- AppKit/CPSegmentedControl.j | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 611dc584c..90bf96be0 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -119,13 +119,13 @@ CPSegmentSwitchTrackingMomentary = 2; } else if (aCount < _segments.length) { - for (var index = aCount; index < _segments.length; ++index) - _segments[index] = nil; + _segments.length = aCount; + _themeStates.length = aCount; } - - if (_selectedSegment < _segments.length) + + if (_selectedSegment >= _segments.length) _selectedSegment = -1; - + [self tileWithChangedSegment:0]; } From b8046c479f4c6439a1ad6871c33887fedf437fad Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 4 Jul 2009 06:49:55 -0700 Subject: [PATCH 062/244] Fix for creating outlets and actions that don't exist in interface builder. Reviewed by me. --- AppKit/Cib/_CPCibConnector.j | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/AppKit/Cib/_CPCibConnector.j b/AppKit/Cib/_CPCibConnector.j index 6ddd6ce05..52b3a1a50 100644 --- a/AppKit/Cib/_CPCibConnector.j +++ b/AppKit/Cib/_CPCibConnector.j @@ -60,26 +60,38 @@ var _CPCibConnectorSourceKey = @"_CPCibConnectorSourceKey", - (void)establishConnection { - var selectorName = _label; - - if (![selectorName hasSuffix:@":"]) + var selectorName = _label, + selectorNameLength = [selectorName length]; + + if (selectorNameLength && selectorName[selectorNameLength - 1] !== ':') selectorName += ':'; var selector = CPSelectorFromString(selectorName); + // Not having a selector is a fatal error. if (!selector) [CPException raise:CPInvalidArgumentException reason:@"-[" + [self className] + ' ' + _cmd + @"] selector " + selectorName + @" does not exist."]; + // If the destination doesn't respond to this selector, warn but don't die. + if (_destination && ![_destination respondsToSelector:selector]) + { + CPLog.warn(@"Could not connect the action " + selector + @" to target of class " + [_destination className]); + + return; + } + + // Not being able to set the action is a fatal error. 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:"]; + // Not being able to set the target is a fatal error. if ([_source respondsToSelector:@selector(setTarget:)]) objj_msgSend(_source, @selector(setTarget:), _destination); @@ -97,7 +109,18 @@ var _CPCibConnectorSourceKey = @"_CPCibConnectorSourceKey", - (void)establishConnection { - [_source setValue:_destination forKey:_label]; + try + { + [_source setValue:_destination forKey:_label]; + } + catch (anException) + { + if ([anException name] === CPUndefinedKeyException) + CPLog.warn(@"Could not connect the outlet " + _label + @" of target of class " + [_source className]); + + else + throw anException; + } } @end From 714fc9d5bb1e2761e8b3342dc2a327714960444a Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 4 Jul 2009 10:22:20 -0700 Subject: [PATCH 063/244] Added beginnings of drawing selection. Reviewed by me. --- AppKit/CPCollectionView.j | 2 +- AppKit/CPTextField.j | 2 +- AppKit/NEWCPTableView.j | 212 +++++++++++++++++++++++++++++++++++++- TableTest/AppController.j | 12 ++- 4 files changed, 220 insertions(+), 8 deletions(-) diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 325175309..597d38e12 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -175,7 +175,7 @@ */ - (BOOL)isFirstResponder { - return [[self window] firstResponder] == self; + return [[self window] firstResponder] === self; } // Setting the Content diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 9c44c1f69..e2c3f57d0 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -683,7 +683,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); { var string = [self stringValue]; - if ((!string || [string length] === 0) && ![self hasThemeState:CPThemeStateEditing]) + if ((!string || string.length === 0) && ![self hasThemeState:CPThemeStateEditing]) [self setThemeState:CPTextFieldStatePlaceholder]; else [self unsetThemeState:CPTextFieldStatePlaceholder]; diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index dc26c92f9..be330f431 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -8,7 +8,6 @@ #include "CoreGraphics/CGGeometry.h" - var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2, CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_ = 1 << 3, @@ -47,6 +46,33 @@ CPTableViewSelectionHighlightStyleSourceList = 1; #define NUMBER_OF_COLUMNS() (_tableColumns.length) +@implementation _CPTableDrawView : CPView +{ + CPTableView _tableView; +} + +- (id)initWithTableView:(CPTableView)aTableView +{ + self = [super init]; + + if (self) + _tableView = aTableView; + + return self; +} + +- (void)drawRect:(CGRect)aRect +{ + var frame = [self frame], + context = [[CPGraphicsContext currentContext] graphicsPort]; + + CGContextTranslateCTM(context, -_CGRectGetMinX(frame), -_CGRectGetMinY(frame)); + + [_tableView _drawRect:aRect]; +} + +@end + @implementation NEWCPTableView : CPControl { id _dataSource; @@ -88,6 +114,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1; CPIndexSet _selectedColumnIndexes; CPIndexSet _selectedRowIndexes; + CPInteger _selectionStartRow; + + _CPTableDrawView _tableDrawView; } - (id)initWithFrame:(CGRect)aFrame @@ -131,6 +160,10 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _selectedColumnIndexes = [CPIndexSet indexSet]; _selectedRowIndexes = [CPIndexSet indexSet]; + + _tableDrawView = [[_CPTableDrawView alloc] initWithTableView:self]; + [_tableDrawView setBackgroundColor:[CPColor yellowColor]]; + [self addSubview:_tableDrawView]; } return self; @@ -426,18 +459,28 @@ CPTableViewSelectionHighlightStyleSourceList = 1; //Selecting Columns and Rows - (void)selectColumnIndexes:(CPIndexSet)columns byExtendingSelection:(BOOL)shouldExtendSelection { + // We deselect all columns when selecting rows. + _selectedRowIndexes = [CPIndexSet indexSet]; + if (shouldExtendSelection) [_selectedColumnIndexes addIndexes:columns]; else _selectedColumnIndexes = [columns copy]; + + [self setNeedsLayout]; } - (void)selectRowIndexes:(CPIndexSet)rows byExtendingSelection:(BOOL)shouldExtendSelection { + // We deselect all rows when selecting columns. + _selectedColumnIndexes = [CPIndexSet indexSet]; + if (shouldExtendSelection) [_selectedRowIndexes addIndexes:rows]; else _selectedRowIndexes = [rows copy]; + + [self setNeedsLayout]; } - (CPIndexSet)selectedColumnIndexes @@ -1002,6 +1045,10 @@ CPTableViewSelectionHighlightStyleSourceList = 1; // remove? return; } + +// if (!window.blah) +// return window.setTimeout(function() { window.blah = true; [self load]; window.blah = false}, 0.0); + if (window.console && window.console.profile) console.profile("cell-load"); @@ -1042,6 +1089,10 @@ CPTableViewSelectionHighlightStyleSourceList = 1; _exposedRows = exposedRows; _exposedColumns = exposedColumns; + [_tableDrawView setFrame:exposedRect]; +// [_tableDrawView setBounds:exposedRect]; + [_tableDrawView display]; + if (window.console && window.console.profile) console.profileEnd("cell-load"); } @@ -1137,6 +1188,37 @@ _cachedDataViews[dataView.identifier].push(dataView); [_headerView setFrameSize:CGSizeMake(aSize.width, [_headerView frame].size.height)]; } +- (void)_drawRect:(CGRect)aRect +{ + [self highlightSelectionInClipRect:[self _exposedRect]]; +} + +- (void)highlightSelectionInClipRect:(CGRect)aRect +{ + [[CPColor greenColor] set]; + + var context = [[CPGraphicsContext currentContext] graphicsPort]; + + if ([_selectedRowIndexes count] >= 1) + { + var exposedRows = [CPIndexSet indexSetWithIndexesInRange:[self rowsInRect:aRect]], + exposedRange = CPMakeRange([exposedRows firstIndex], [exposedRows lastIndex] - [exposedRows firstIndex] + 1), + rowArray = []; + + [_selectedRowIndexes getIndexes:rowArray maxCount:-1 inIndexRange:exposedRange]; + + var rowArrayIndex = 0, + rowArrayCount = rowArray.length; + + for (; rowArrayIndex < rowArrayCount; ++rowArrayIndex) + CGContextFillRect(context, [self rectOfRow:rowArray[rowArrayIndex]]); + } + else + { + + } +} + - (void)layoutSubviews { [self load]; @@ -1188,4 +1270,132 @@ _cachedDataViews[dataView.identifier].push(dataView); { } +// + +/* + var type = [anEvent type], + point = [self convertPoint:[anEvent locationInWindow] fromView:nil], + currentRow = MAX(0, MIN(_numberOfRows-1, [self _rowAtY:point.y])); + +*/ + +- (BOOL)startTrackingAt:(CGPoint)aPoint +{ + var row = [self rowAtPoint:aPoint]; + + if ([self mouseDownFlags] & CPShiftKeyMask) + _selectionAnchor = (ABS([_selectedRowIndexes firstIndex] - row) < ABS([_selectedRowIndexes lastIndex] - row)) ? + [_selectedRowIndexes firstIndex] : [_selectedRowIndexes lastIndex]; + else + _selectionAnchor = row; + + [self _updateSelectionWithMouseAtRow:row]; + + return YES; +} + +- (BOOL)continueTracking:(CGPoint)lastPoint at:(CGPoint)aPoint +{ + [self _updateSelectionWithMouseAtRow:[self rowAtPoint:aPoint]]; + + return YES; +} + +- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp +{/* + _clickedRow = [self rowAtPoint:point]; + _clickedColumn = [self columnAtPoint:point]; + + if ([anEvent clickCount] === 2) + { + CPLog.warn("edit?!"); + + [self sendAction:_doubleAction to:_target]; + } + else + { + if (![_previousSelectedRowIndexes isEqualToIndexSet:_selectedRowIndexes]) + { + [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]; + } + + [self sendAction:_action to:_target]; + } +*/ +} + +- (void)_updateSelectionWithMouseAtRow:(CPInteger)aRow +{ + // If cmd/ctrl was held down XOR the old selection with the proposed selection + if ([self mouseDownFlags] & (CPCommandKeyMask | CPControlKeyMask | CPAlternateKeyMask)) + { + if ([_selectedRowIndexes containsIndex:aRow]) + { + newSelection = [_selectedRowIndexes copy]; + + [newSelection removeIndex:aRow]; + } + + else if (_allowsMultipleSelection) + { + newSelection = [_selectedRowIndexes copy]; + + [newSelection addIndex:aRow]; + } + + else + newSelection = [CPIndexSet indexSetWithIndex:aRow]; + } + + else if (_allowsMultipleSelection) + newSelection = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(MIN(aRow, _selectionStartRow), ABS(aRow - _selectionStartRow) + 1)]; + + else if (aRow >= 0 && aRow < _numberOfRows) + newSelection = [CPIndexSet indexSetWithIndex:aRow]; + + else + newSelection = [CPIndexSet indexSet]; + + if ([newSelection isEqualToIndexSet:_selectedRowIndexes]) + return; + + if (_implementedDelegateMethods & CPTableViewDelegate_selectionShouldChangeInTableView_ && + ![_delegate selectionShouldChangeInTableView:self]) + return; + + if (_implementedDelegateMethods & CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_) + newSelection = [_delegate tableView:self selectionIndexesForProposedSelection:newSelection]; + + if (_implementedDelegateMethods & CPTableViewDelegate_tableView_shouldSelectRow_) + { + var indexArray = []; + + [newSelection getIndexes:indexArray maxCount:-1 inIndexRange:nil]; + + var indexCount = indexArray.length; + + while (indexCount--) + { + var index = indexArray[indexCount]; + + if (![_delegate tableView:self shouldSelectRow:index]) + [newSelection removeIndex:index]; + } + } + + // if empty selection is not allowed and the new selection has nothing selected, abort + if (!_allowsEmptySelection && [newSelection count] === 0) + return; + + if ([newSelection isEqualToIndexSet:_selectedRowIndexes]) + return; + + [self selectRowIndexes:newSelection byExtendingSelection:NO]; + + [[CPNotificationCenter defaultCenter] + postNotificationName:CPTableViewSelectionIsChangingNotification + object:self + userInfo:nil]; +} + @end diff --git a/TableTest/AppController.j b/TableTest/AppController.j index 3f1609808..b5687c015 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -23,7 +23,9 @@ CPLogRegister(CPLogConsole); tableView = [[NEWCPTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 500.0, 500.0)];//[view bounds]]; - [tableView setBackgroundColor:[CPColor blueColor]]; + [tableView setAllowsMultipleSelection:YES]; + +// [tableView setBackgroundColor:[CPColor blueColor]]; var iconView = [[CPImageView alloc] initWithFrame:CGRectMake(16,16,0,0)]; @@ -40,7 +42,7 @@ CPLogRegister(CPLogConsole); var textDataView = [CPTextField new]; - [textDataView setBackgroundColor:[CPColor redColor]]; + [textDataView setBackgroundColor:[[CPColor redColor] colorWithAlphaComponent:0.5]]; for (var i = 1; i <= 10; i++) { @@ -50,7 +52,7 @@ CPLogRegister(CPLogConsole); [[column headerView] sizeToFit]; //[column setWidth:[[column headerView] frame].size.width + 20]; - [column setWidth:170.0]; + [column setWidth:200.0]; [column setDataView:textDataView]; @@ -103,8 +105,8 @@ CPLogRegister(CPLogConsole); { //CPLog.debug(@"shouldSelectRow %d", rowIndex); for (var i = 2, sqrt = SQRT(rowIndex+1); i <= sqrt; i++) - if ((rowIndex+1) % i === 0) - return false; + if ((rowIndex+1) % i === 0){console.log("NO for " + rowIndex); + return false;} return true; } From b12017cd51778f2ba252b444079150aa53bf55d9 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 4 Jul 2009 10:43:59 -0700 Subject: [PATCH 064/244] Slight fix for comparing old tableview to new tableview. Reviewed by me. --- Tools/nib2cib/NSTableColumn.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/nib2cib/NSTableColumn.j b/Tools/nib2cib/NSTableColumn.j index 0fb2055d7..608ddbf34 100644 --- a/Tools/nib2cib/NSTableColumn.j +++ b/Tools/nib2cib/NSTableColumn.j @@ -38,7 +38,7 @@ //var dataViewCell = [aCoder decodeObjectForKey:@"NSDataCell"]; _dataView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; - [_dataView setValue:[CPColor whiteColor] forThemedAttributeName:"text-color" inControlState:CPThemeStateHighlighted]; + [_dataView setValue:[CPColor whiteColor] forThemeAttribute:"text-color" inState:CPThemeStateHighlighted]; //_headerView = [aCoder decodeObjectForKey:@"NSHeaderCell"]; _headerView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; From 528ef4394afc40b2dcf3ac0cbd92425c0fb61c30 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 5 Jul 2009 07:59:54 -0700 Subject: [PATCH 065/244] Beginnings of nib2cib support for new tableview. Reviewed by me. --- AppKit/CPTableColumn.j | 598 ++--- AppKit/CPTableView.j | 2471 +++++++++--------- AppKit/NEWCPTableColumn.j | 342 --- AppKit/NEWCPTableView.j | 1401 ---------- AppKit/OLDCPTableColumn.j | 471 ++++ AppKit/OLDCPTableView.j | 1302 ++++++++++ TableCibTest/AppController.j | 45 + TableCibTest/Info.plist | 12 + TableCibTest/Rakefile | 25 + TableCibTest/Resources/MainMenu.cib | 1 + TableCibTest/Resources/MainMenu.xib | 3665 +++++++++++++++++++++++++++ TableCibTest/Resources/spinner.gif | Bin 0 -> 1849 bytes TableCibTest/index-debug.html | 69 + TableCibTest/index.html | 68 + TableCibTest/main.j | 18 + TableTest/AppController.j | 10 +- Tools/nib2cib/NSTableColumn.j | 14 +- 17 files changed, 7260 insertions(+), 3252 deletions(-) delete mode 100644 AppKit/NEWCPTableColumn.j delete mode 100644 AppKit/NEWCPTableView.j create mode 100644 AppKit/OLDCPTableColumn.j create mode 100644 AppKit/OLDCPTableView.j create mode 100644 TableCibTest/AppController.j create mode 100644 TableCibTest/Info.plist create mode 100644 TableCibTest/Rakefile create mode 100644 TableCibTest/Resources/MainMenu.cib create mode 100644 TableCibTest/Resources/MainMenu.xib create mode 100644 TableCibTest/Resources/spinner.gif create mode 100644 TableCibTest/index-debug.html create mode 100644 TableCibTest/index.html create mode 100755 TableCibTest/main.j diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 6d37c1de9..ed3372bfc 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -1,31 +1,11 @@ -/* - * CPTableColumn.j - * AppKit - * - * 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 +@import +@import +@import +@import +@import "CPTableHeaderView.j" -/* -@ignore -*/ /* @global @@ -43,389 +23,290 @@ CPTableColumnAutoresizingMask = 1; */ CPTableColumnUserResizingMask = 2; -#define PurgableInfoMake(aView, aRow) { view:(aView), row:(aRow) } -#define PurgableInfoView(anInfo) ((anInfo).view) -#define PurgableInfoRow(anInfo) ((anInfo).row) - -/*! - @ingroup appkit - @class CPTableColumn - - An CPTableColumn object mainly keeps information about the width of the column, its minimum and maximum width; whether the column can be edited or resized; and the cells used to draw the column header and the data in the column. You can change all these attributes of the column by calling the appropriate methods. Please note that the table column does not hold nor has access to the data to be displayed in the column; this data is maintained in the table view's data source.

- -

Each CPTableColumn object is identified by a CPString, called the column identifier. The reason is that, after a column has been added to a table view, the user might move the columns around, so there is a need to identify the columns regardless of its position in the table. - - @ignore -*/ @implementation CPTableColumn : CPObject { - CPString _identifier; - CPView _headerView; - - CPTableView _tableView; - - float _width; - float _minWidth; - float _maxWidth; - - unsigned _resizingMask; + CPTableView _tableView; + CPView _headerView; + CPView _dataView; + Object _dataViewData; - CPView _dataView; // default data view for this column + float _width; + float _minWidth; + float _maxWidth; - Object _dataViewData; // cache of data view archives (key=data view UID, value=data view archive) - Object _dataViewForView; // mapping from view instances back to their data view prototype (key=view instance UID, value=data view) - Object _purgableInfosForDataView; // (key=data view UID, value=) + id _identifier; + BOOL _isEditable; + CPSortDescriptor _sortDescriptorPrototype; + BOOL _isHidden; + CPString _headerToolTip; } -/*! - Initializes the table column with the specified identifier. - @param anIdentifier the identifier - @return the initialized table column -*/ -- (id)initWithIdentifier:(CPString)anIdentifier +- (id)initWithIdentifier:(id)anIdentifier { self = [super init]; - + if (self) { - [self _init]; - - _identifier = anIdentifier; - - _width = 40.0; - _minWidth = 8.0; - _maxWidth = 1000.0; - - var dataView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; - [dataView setValue:[CPColor whiteColor] forThemeAttribute:"text-color" inState:CPThemeStateHighlighted]; - - [self setDataView:dataView]; - - _headerView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; - [_headerView setBackgroundColor:[CPColor greenColor]]; + _dataViewData = { }; + + _width = 100.0; + _minWidth = 10.0; + _maxWidth = 1000000.0; + + [self setIdentifier:anIdentifier]; + [self setHeaderView:[CPTextField new]]; + [self setDataView:[CPTextField new]]; } - + return self; } -- (void)_init -{ - _dataViewData = {}; - _dataViewForView = {}; - _purgableInfosForDataView = {}; -} - -/*! - Sets the table column's identifier - @param anIdentifier the new identifier -*/ -- (void)setIdentifier:(CPString)anIdentifier -{ - _identifier = anIdentifier; -} - -/*! - Returns the table column's identifier -*/ -- (CPString)identifier -{ - return _identifier; -} - -// Setting the CPTableView -/*! - Sets the table's view. This is called automatically by Cappuccino. - @param aTableView the new table view -*/ - (void)setTableView:(CPTableView)aTableView { _tableView = aTableView; } -/*! - Returns the column's table view. -*/ - (CPTableView)tableView { return _tableView; } -// Controlling size -/*! - Sets the column's width. - @param aWidth the new column width -*/ - (void)setWidth:(float)aWidth { - _width = aWidth; + aWidth = +aWidth; + + if (_width === aWidth) + return; + + var newWidth = MIN(MAX(aWidth, [self minWidth]), [self maxWidth]); + + if (_width === newWidth) + return; + + var oldWidth = _width; + + _width = newWidth; + + var tableView = [self tableView]; + + if (tableView) + [[CPNotificationCenter defaultCenter] + postNotificationName:CPTableViewColumnDidResizeNotification + object:tableView + userInfo:[CPDictionary dictionaryWithObjects:[self, oldWidth] forKeys:[@"CPTableColumn", "CPOldWidth"]]]; } -/*! - Returns the column's width -*/ - (float)width { return _width; } -/*! - Sets column's minimum width. - @param aWidth the new minimum column width -*/ -- (void)setMinWidth:(float)aWidth +- (void)setMinWidth:(float)aMinWidth { - if (_width < (_minWidth = aWidth)) - [self setWidth:_minWidth]; + aMinWidth = +aMinWidth; + + if (_minWidth === aMinWidth) + return; + + _minWidth = aMinWidth; + + var width = [self width], + newWidth = MAX(width, [self minWidth]); + + if (width !== newWidth) + [self setWidth:newWidth]; } -/*! - The column's minimum width -*/ - (float)minWidth { return _minWidth; } -/*! - Sets the column's maximum width. - @param aWidth the new maximum width -*/ -- (void)setMaxWidth:(float)aWidth +- (void)setMaxWidth:(float)aMaxWidth { - if (_width > (_maxmimumWidth = aWidth)) - [self setWidth:_maxWidth]; + aMaxWidth = +aMaxWidth; + + if (_maxWidth === aMaxWidth) + return; + + _maxWidth = aMaxWidth; + + var width = [self width], + newWidth = MAX(width, [self maxWidth]); + + if (width !== newWidth) + [self setWidth:newWidth]; } -/*! - Sets the resizing mask. The mask is one of: -

-CPTableColumnNoResizing;
-CPTableColumnAutoresizingMask;
-CPTableColumnUserResizingMask;
-
- @param aMask the new resizing mask -*/ -- (void)setResizingMask:(unsigned)aMask +- (float)maxWidth { - _resizingMask = aMask; + return _maxWidth; } -/*! - Returns the column's resizing mask. One of: -
-CPTableColumnNoResizing;
-CPTableColumnAutoresizingMask;
-CPTableColumnUserResizingMask;
-
-*/ -- (unsigned)resizingMask +- (void)setResizingMask:(unsigned)aResizingMask +{ + _resizingMask = aResizingMask; +} + +- (float)resizingMask { return _resizingMask; } -/*! - Resizes the column according to the min, max and set width. -*/ - (void)sizeToFit { - var width = CPRectGetWidth([_headerView frame]); - - if (width < _minWidth) + var width = _CGRectGetWidth([_headerView frame]); + + if (width < [self minWidth]) [self setMinWidth:width]; - else if (width > _maxWidth) + else if (width > [self maxWidth]) [self setMaxWidth:width] - if (_width != width) + if (_width !== width) [self setWidth:width]; } -/*! - Sets whether the column in this data is editable. - @param aFlag YES means the column data is editable -*/ -- (void)setEditable:(BOOL)aFlag +//Setting Component Cells +- (void)setHeaderView:(CPView)aView { - _isEditable = aFlag; + if (!aView) + [CPException raise:CPInvalidArgumentException reason:@"Attempt to set nil header view on " + [self description]]; + + _headerView = aView; } -/*! - Returns YES if the column data is editable. +- (CPView)headerView +{ + return _headerView; +} + +- (void)setDataView:(CPView)aView +{ + if (_dataView === aView) + return; + + if (_dataView) + _dataViewData[[_dataView UID]] = nil; + + _dataView = aView; + _dataViewData[[aView UID]] = [CPKeyedArchiver archivedDataWithRootObject:aView]; +} + +- (CPView)dataView +{ + return _dataView; +} + +/* + Returns the CPView object used by the CPTableView to draw values for the receiver. + + By default, this method just calls dataView. Subclassers can override if they need to + potentially use different cells for different rows. Subclasses should expect this method + to be invoked with row equal to -1 in cases where no actual row is involved but the table + view needs to get some generic cell info. +*/ +- (id)dataViewForRow:(int)aRowIndex +{ + return [self dataView]; +} + +- (id)_newDataViewForRow:(int)aRowIndex +{ + var dataView = [self dataViewForRow:aRowIndex], + dataViewUID = [dataView UID]; + +var x = [self tableView]._cachedDataViews[dataViewUID]; +if (x && x.length) +return x.pop(); + + // if we haven't cached an archive of the data view, do it now + if (!_dataViewData[dataViewUID]) + _dataViewData[dataViewUID] = [CPKeyedArchiver archivedDataWithRootObject:dataView]; + + // unarchive the data view cache + var newDataView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[dataViewUID]]; +newDataView.identifier = dataViewUID; + return newDataView; +} + +//Setting the Identifier + +/* + Sets the receiver identifier to anIdentifier. +*/ +- (void)setIdentifier:(id)anIdentifier +{ + _identifier = anIdentifier; +} + +/* + Returns the object used by the data source to identify the attribute corresponding to the receiver. +*/ +- (id)identifier +{ + return _identifier; +} + +//Controlling Editability + +/* + Controls whether the user can edit cells in the receiver by double-clicking them. +*/ +- (void)setEditable:(BOOL)shouldBeEditable +{ + _isEditable = shouldBeEditable; +} + +/* + Returns YES if the user can edit cells associated with the receiver by double-clicking the + column in the NSTableView, NO otherwise. */ - (BOOL)isEditable { return _isEditable; } -//Setting the column header view - -/*! - Sets the view that draws the column's header. - @param aHeaderView the view that will draws the column header -*/ - -- (void)setHeaderView:(CPView)aView +//Sorting +- (void)setSortDescriptorPrototype:(CPSortDescriptor)aSortDescriptor { - _headerView = aView; + _sortDescriptorPrototype = aSortDescriptor; } -/*! - Return the view that draws the column's header -*/ -- (CPView)headerView +- (CPSortDescriptor)sortDescriptorPrototype { - return _headerView; + return _sortDescriptorPrototype; } -/*! - Sets the data cell that draws rows in this column. -*/ -- (void)setDataCell:(CPView )aView +//Setting Column Visibility + +- (void)setHidden:(BOOL)shouldBeHidden { - [self setDataView:aView]; + _isHidden = shouldBeHidden; } +- (BOOL)isHidden +{ + return _isHidden; +} + +//Setting Tool Tips + /* - Sets the data view that draws rows in this column. + Sets the tooltip string that is displayed when the cursor pauses over the + header cell of the receiver. */ -- (void)setDataView:(CPView )aView +- (void)setHeaderToolTip:(CPString)aToolTip { - if (_dataView) - _dataViewData[[_dataView UID]] = nil; - - _dataView = aView; - _dataViewData[[aView UID]] = [CPKeyedArchiver archivedDataWithRootObject:aView]; + _headerToolTip = aToolTip; } -/*! - Returns the data cell that draws rows in this column -*/ -- (CPCell)dataCell +- (CPString)headerToolTip { - return _dataView; -} - -/* - Returns the data view that draws rows in this column -*/ -- (CPView)dataView -{ - return [self dataCell]; -} - -/*! - By default returns the value from dataCell. This can - be overridden by a subclass to return different cells for different - rows. - @param aRowIndex the index of the row to obtain the cell for -*/ -- (CPCell)dataCellForRow:(int)aRowIndex -{ - return [self dataView]; -} - -- (CPView)dataViewForRow:(int)aRowIndex -{ - return [self dataCellForRow:aRowIndex]; -} -/* -- (void)_markViewAsPurgable:(CPView)aView -{ - var viewUID = [aView UID], - dataViewUID = [_dataViewForView[viewUID] UID]; - - if (!_purgableInfosForDataView[dataViewUID]) - _purgableInfosForDataView[dataViewUID] = [CPDictionary dictionary]; - - [_purgableInfosForDataView[dataViewUID] setObject:aView forKey:viewUID]; -} -*/ -- (void)_markView:(CPView)aView inRow:(unsigned)aRow asPurgable:(BOOL)isPurgable -{ - var viewUID = [aView UID], - dataViewUID = [_dataViewForView[viewUID] UID]; - - if (!_purgableInfosForDataView[dataViewUID]) - { - if (!isPurgable) - return; - - _purgableInfosForDataView[dataViewUID] = {}; - } - - if (!isPurgable) { - if (_purgableInfosForDataView[dataViewUID][viewUID]) - CPLog.warn("removing unpurgable " + _purgableInfosForDataView[dataViewUID][viewUID]); - delete _purgableInfosForDataView[dataViewUID][viewUID]; - } - else - _purgableInfosForDataView[dataViewUID][viewUID] = PurgableInfoMake(aView, aRow); -} - -- (CPView)_newDataViewForRow:(int)aRowIndex avoidingRows:(CPRange)rows -{ - var view = [self dataViewForRow:aRowIndex], - viewUID = [view UID], - purgableInfos = _purgableInfosForDataView[viewUID]; - - if (purgableInfos) - { - for (var key in purgableInfos) - { - var info = purgableInfos[key]; - //if (!CPLocationInRange(PurgableInfoRow(info), rows)) - //{ - //CPLog.debug("yes, a purged view is usable, its called: " + PurgableInfoView(info)); - delete purgableInfos[key]; - return PurgableInfoView(info); - //} - //else - // CPLog.warn("avoiding"); - } - } - - // if we haven't cached an archive of the data view, do it now - if (!_dataViewData[viewUID]) - _dataViewData[viewUID] = [CPKeyedArchiver archivedDataWithRootObject:view]; - - // unarchive the data view cache - var newView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[viewUID]]; - - // map the new view's UID to it's data view prototype - _dataViewForView[[newView UID]] = view; - - CPLog.warn("creating cell: %s", newView); - - return newView; -} - -- (void)_purge -{ - for (var viewUID in _purgableInfosForDataView) - { - var purgableInfos = _purgableInfosForDataView[viewUID]; - - for (var key in purgableInfos) - { - var view = PurgableInfoView(purgableInfos[key]); - - if (!view) - CPLog.info("key="+key+" view=" + view + " purgableInfos[key]="+purgableInfos[key]) - else if (view._superview) { - //CPLog.error("PURGING: (removing)" + view); - //[view removeFromSuperview]; - [view setHidden:YES]; - } - //else - // CPLog.warn("PURGING: (already removed)" + view); - - //delete purgableInfos[key]; - } - } + return _headerToolTip; } @end - var CPTableColumnIdentifierKey = @"CPTableColumnIdentifierKey", CPTableColumnHeaderViewKey = @"CPTableColumnHeaderViewKey", CPTableColumnDataViewKey = @"CPTableColumnDataViewKey", @@ -438,18 +319,25 @@ var CPTableColumnIdentifierKey = @"CPTableColumnIdentifierKey", - (id)initWithCoder:(CPCoder)aCoder { - [self _init]; - - _identifier = [aCoder decodeObjectForKey:CPTableColumnIdentifierKey]; + self = [super init]; - [self setHeaderView:[aCoder decodeObjectForKey:CPTableColumnHeaderViewKey]]; - [self setDataView:[aCoder decodeObjectForKey:CPTableColumnDataViewKey]]; - - _width = [aCoder decodeFloatForKey:CPTableColumnWidthKey]; - _minWidth = [aCoder decodeFloatForKey:CPTableColumnMinWidthKey]; - _maxWidth = [aCoder decodeFloatForKey:CPTableColumnMaxWidthKey]; - - _resizingMask = [aCoder decodeBoolForKey:CPTableColumnResizingMaskKey]; + if (self) + { + _dataViewData = { }; + + [self setIdentifier:[aCoder decodeObjectForKey:CPTableColumnIdentifierKey]]; + // [self setHeaderView:[aCoder decodeObjectForKey:CPTableColumnHeaderViewKey]]; + // [self setDataView:[aCoder decodeObjectForKey:CPTableColumnDataViewKey]]; + + [self setHeaderView:[CPTextField new]]; + [self setDataView:[CPTextField new]]; + + _width = [aCoder decodeFloatForKey:CPTableColumnWidthKey]; + _minWidth = [aCoder decodeFloatForKey:CPTableColumnMinWidthKey]; + _maxWidth = [aCoder decodeFloatForKey:CPTableColumnMaxWidthKey]; + + // _resizingMask = [aCoder decodeBoolForKey:CPTableColumnResizingMaskKey]; + } return self; } @@ -457,15 +345,49 @@ var CPTableColumnIdentifierKey = @"CPTableColumnIdentifierKey", - (void)encodeWithCoder:(CPCoder)aCoder { [aCoder encodeObject:_identifier forKey:CPTableColumnIdentifierKey]; - - [aCoder encodeObject:_headerView forKey:CPTableColumnHeaderViewKey]; - [aCoder encodeObject:_dataView forKey:CPTableColumnDataViewKey]; - + +// [aCoder encodeObject:_headerView forKey:CPTableColumnHeaderViewKey]; +// [aCoder encodeObject:_dataView forKey:CPTableColumnDataViewKey]; + [aCoder encodeObject:_width forKey:CPTableColumnWidthKey]; [aCoder encodeObject:_minWidth forKey:CPTableColumnMinWidthKey]; [aCoder encodeObject:_maxWidth forKey:CPTableColumnMaxWidthKey]; - - [aCoder encodeObject:_resizingMask forKey:CPTableColumnResizingMaskKey]; + +// [aCoder encodeObject:_resizingMask forKey:CPTableColumnResizingMaskKey]; +} + +@end + +@implementation CPTableColumn (NSInCompatibility) + +- (void)setHeaderCell:(CPView)aView +{ + [CPException raise:CPUnsupportedMethodException + reason:@"setHeaderCell: is not supported. -setHeaderCell:aView instead."]; +} + +- (CPView)headerCell +{ + [CPException raise:CPUnsupportedMethodException + reason:@"headCell is not supported. -headerView instead."]; +} + +- (void)setDataCell:(CPView)aView +{ + [CPException raise:CPUnsupportedMethodException + reason:@"setDataCell: is not supported. Use -setHeaderCell:aView instead."]; +} + +- (CPView)dataCell +{ + [CPException raise:CPUnsupportedMethodException + reason:@"dataCell is not supported. Use -dataCell instead."]; +} + +- (id)dataCellForRow:(int)row +{ + [CPException raise:CPUnsupportedMethodException + reason:@"dataCellForRow: is not supported. Use -dataViewForRow:row instead."]; } @end diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 02b2e5cd9..5d87543ee 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -1,1238 +1,1405 @@ -/* - * CPTableView.j - * AppKit - * - * 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 @import "CPControl.j" @import "CPTableColumn.j" +@import "_CPCornerView.j" +@import "CPScroller.j" -@import "CPColor.j" -@import "CPTextField.j" +#include "CoreGraphics/CGGeometry.h" -#define ROW_HEIGHT(aRow) (_hasVariableHeightRows ? _rowHeights[aRow] : _rowHeight) -#define ROW_MIN_Y(aRow) (_hasVariableHeightRows ? _rowMinYs[aRow] : (aRow * (_rowHeight + _intercellSpacing.height))) +var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2, -CPTableViewColumnDidMoveNotification = "CPTableViewColumnDidMoveNotification"; -CPTableViewColumnDidResizeNotification = "CPTableViewColumnDidResizeNotification"; -CPTableViewSelectionDidChangeNotification = "CPTableViewSelectionDidChangeNotification"; -CPTableViewSelectionIsChangingNotification = "CPTableViewSelectionIsChangingNotification"; + CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_ = 1 << 3, + CPTableViewDataSource_tableView_namesOfPromisedFilesDroppedAtDestination_forDraggedRowsWithIndexes_ = 1 << 4, + CPTableViewDataSource_tableView_validateDrop_proposedRow_proposedDropOperation_ = 1 << 5, + CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_ = 1 << 6, -var _CPTableViewWillDisplayCellSelector = 1 << 0, - _CPTableViewShouldSelectRowSelector = 1 << 1, - _CPTableViewShouldSelectTableColumnSelector = 1 << 2, - _CPTableViewSelectionShouldChangeSelector = 1 << 3, - _CPTableViewShouldEditTableColumnSelector = 1 << 4, - _CPTableViewSelectionIndexesForProposedSelectionSelector = 1 << 5, - _CPTableViewHeightOfRowSelector = 1 << 6; - + CPTableViewDataSource_tableView_sortDescriptorsDidChange_ = 1 << 7; + +var CPTableViewDelegate_selectionShouldChangeInTableView_ = 1 << 0, + CPTableViewDelegate_tableView_dataViewForTableColumn_row_ = 1 << 1, + CPTableViewDelegate_tableView_didClickTableColumn_ = 1 << 2, + CPTableViewDelegate_tableView_didDragTableColumn_ = 1 << 3, + CPTableViewDelegate_tableView_heightOfRow_ = 1 << 4, + CPTableViewDelegate_tableView_isGroupRow_ = 1 << 5, + CPTableViewDelegate_tableView_mouseDownInHeaderOfTableColumn_ = 1 << 6, + CPTableViewDelegate_tableView_nextTypeSelectMatchFromRow_toRow_forString_ = 1 << 7, + CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_ = 1 << 8, + CPTableViewDelegate_tableView_shouldEditTableColumn_row_ = 1 << 9, + CPTableViewDelegate_tableView_shouldSelectRow_ = 1 << 10, + CPTableViewDelegate_tableView_shouldSelectTableColumn_ = 1 << 11, + CPTableViewDelegate_tableView_shouldShowViewExpansionForTableColumn_row_ = 1 << 12, + CPTableViewDelegate_tableView_shouldTrackView_forTableColumn_row_ = 1 << 13, + CPTableViewDelegate_tableView_shouldTypeSelectForEvent_withCurrentSearchString_ = 1 << 14, + CPTableViewDelegate_tableView_toolTipForView_rect_tableColumn_row_mouseLocation_ = 1 << 15, + CPTableViewDelegate_tableView_typeSelectStringForTableColumn_row_ = 1 << 16, + CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_ = 1 << 17, + CPTableViewDelegate_tableViewSelectionDidChange_ = 1 << 18, + CPTableViewDelegate_tableViewSelectionIsChanging_ = 1 << 19; + +// TODO: add docs /* - @ingroup appkit - - This class is not yet stable. - - CPTableView is located within the AppKit framework and is used to display tables. - It uses a delegate model for getting its data i.e. you give it an object that provides - it with the data it should display. - - @ignore +CPTableViewSelectionHighlightStyleRegular = 0; +CPTableViewSelectionHighlightStyleSourceList = 1; */ -@implementation CPTableView : CPControl + +#define NUMBER_OF_COLUMNS() (_tableColumns.length) + +@implementation _CPTableDrawView : CPView { - // Archived: - - id _dataSource; - id _delegate; - - //CPTableHeaderView _headerView; - //CPView _cornerView; - - CPArray _tableColumns; - - CPIndexSet _selectedRowIndexes; - //CPArray _selectedColumns; - - float _rowHeight; - CGSize _intercellSpacing; - - BOOL _allowsMultipleSelection; - BOOL _allowsEmptySelection; - //BOOL _allowsColumnReordering; - //BOOL _allowsColumnResizing; - //BOOL _allowsColumnSelection; - //BOOL _autoresizesAllColumnsToFit; - - //CPColor _gridColor; - //BOOL _drawsGrid; - - SEL _doubleAction; - - // Not archived: - - int _delegateSelectorsCache; - - //CPScrollView _scrollView; - - unsigned _numberOfRows; - //unsigned _numberOfColumns; - - BOOL _hasVariableHeightRows; - - // Heights - float _columnHeight; // calculated - - CPArray _rowHeights; - CPArray _rowMinYs; - - CPArray _tableCells; - CPArray _tableColumnViews; - - // Caching - Object _dataViewCache; - CPArray _objectValueCache; - - CPRange _visibleRows; - CPRange _visibleColumns; - - CPRange _populatedRows; - CPRange _populatedColumns; - - // Selection - CPIndexSet _previousSelectedRowIndexes; - int _selectionStartRow; - int _selectionModifier; - - CPIndexSet _currentlySelected; - CPArray _selectionViews; - CPArray _selectionViewsPool; - - CPDate _scrollTimer; + CPTableView _tableView; } -+ (void)initialize +- (id)initWithTableView:(CPTableView)aTableView { - + self = [super init]; + + if (self) + _tableView = aTableView; + + return self; +} + +- (void)drawRect:(CGRect)aRect +{ + var frame = [self frame], + context = [[CPGraphicsContext currentContext] graphicsPort]; + + CGContextTranslateCTM(context, -_CGRectGetMinX(frame), -_CGRectGetMinY(frame)); + + [_tableView _drawRect:aRect]; +} + +@end + +@implementation CPTableView : CPControl +{ + id _dataSource; + CPInteger _implementedDataSourceMethods; + + id _delegate; + CPInteger _implementedDelegateMethods; + + CPArray _tableColumns; + CPArray _tableColumnRanges; + CPInteger _dirtyTableColumnRangeIndex; + CPInteger _numberOfHiddenColumns; + + Object _objectValues; + CPRange _exposedRows; + CPIndexSet _exposedColumns; + + Object _dataViewsForTableColumns; + Object _cachedDataViews; + + //Configuring Behavior + BOOL _allowsColumnReordering; + BOOL _allowsColumnResizing; + BOOL _allowsMultipleSelection; + BOOL _allowsEmptySelection; + + //Setting Display Attributes + CGSize _intercellSpacing; + float _rowHeight; + BOOL _usesAlternatingRowBackgroundColors; + unsigned _selectionHighlightMask; + unsigned _currentHighlightedTableColumn; + + unsigned _numberOfRows; + + + CPTableHeaderView _headerView; + _CPCornerView _cornerView; + + CPIndexSet _selectedColumnIndexes; + CPIndexSet _selectedRowIndexes; + CPInteger _selectionStartRow; + + _CPTableDrawView _tableDrawView; } - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; - + if (self) { - [self _init]; + //Configuring Behavior + _allowsColumnReordering = YES; + _allowsColumnResizing = YES; + _allowsMultipleSelection = NO; + _allowsEmptySelection = YES; + _allowsColumnSelection = NO; + + _tableViewFlags = 0; + + //Setting Display Attributes +// _selectionHighlightMask = CPTableViewSelectionHighlightStyleRegular; + + _tableColumns = []; + _tableColumnRanges = []; + _dirtyTableColumnRangeIndex = CPNotFound; + _numberOfHiddenColumns = 0; + + _objectValues = { }; + _dataViewsForTableColumns = { }; + _dataViews= []; + _numberOfRows = 0; + _exposedRows = [CPIndexSet indexSet]; + _exposedColumns = [CPIndexSet indexSet]; + _cachedDataViews = { }; + _intercellSpacing = _CGSizeMake(0.0, 0.0); + _rowHeight = 24.0; + + _headerView = [[CPTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, [self bounds].size.width, _rowHeight)]; + + [_headerView setTableView:self]; + + _cornerView = [[_CPCornerView alloc] initWithFrame:CGRectMake(0, 0, [CPScroller scrollerWidth], CGRectGetHeight([_headerView frame]))]; + + _selectedColumnIndexes = [CPIndexSet indexSet]; + _selectedRowIndexes = [CPIndexSet indexSet]; + + _tableDrawView = [[_CPTableDrawView alloc] initWithTableView:self]; + [_tableDrawView setBackgroundColor:[CPColor yellowColor]]; + [self addSubview:_tableDrawView]; } - + return self; } -- (void)_init -{ - _tableColumns = []; - //_numberOfColumns = 0; - - _selectedRowIndexes = [CPIndexSet indexSet]; - - _rowHeight = 17.0; - _intercellSpacing = CPSizeMake(3.0, 2.0); - - _allowsMultipleSelection = YES; - _allowsEmptySelection = YES; - - - _tableCells = []; - _tableColumnViews = []; - - _dataViewCache = {}; - _objectValueCache = []; - - _visibleRows = CPMakeRange(0, 0); - _visibleColumns = CPMakeRange(0, 0); - - _rowHeights = []; - _rowMinYs = []; -} - -/* - Returns the table's column height -*/ -- (float)_columnHeight -{ - return _columnHeight;//_numberOfRows * (_rowHeight + _intercellSpacing.height); -} - -- (void)newCellForRow:(unsigned)aRowIndex column:(unsigned)aColumnIndex avoidingRows:(CPRange)rows -{ - var dataView = [_tableColumns[aColumnIndex] _newDataViewForRow:aRowIndex avoidingRows:rows]; - - [dataView setFrame:CGRectMake(0.0, ROW_MIN_Y(aRowIndex), [_tableColumns[aColumnIndex] width], ROW_HEIGHT(aRowIndex))]; - - if ([dataView respondsToSelector:@selector(highlight:)]) - [dataView highlight:[_selectedRowIndexes containsIndex:aRowIndex]]; - - if (!_objectValueCache[aColumnIndex]) - _objectValueCache[aColumnIndex] = []; - - // We may be storing 0 after all! - if (_objectValueCache[aColumnIndex][aRowIndex] === undefined) - _objectValueCache[aColumnIndex][aRowIndex] = [_dataSource tableView:self objectValueForTableColumn:_tableColumns[aColumnIndex] row:aRowIndex]; - - [dataView setObjectValue:_objectValueCache[aColumnIndex][aRowIndex]]; - - return dataView; -} - -- (void)clearCells -{ - var columnEnd = CPMaxRange(_visibleColumns), - rowEnd = CPMaxRange(_visibleRows); - - for (var column = _visibleColumns.location; column < columnEnd; column++) - { - var tableColumn = _tableColumns[column], - tableColumnCells = _tableCells[column]; - - for (var row = _visibleRows.location; row < rowEnd; row++) - { - var cell = tableColumnCells[row]; - if (cell) - { - tableColumnCells[row] = nil; - [tableColumn _markView:cell inRow:row asPurgable:YES]; - } - else - { - CPLog.warn("Missing cell? " + row + "," + column); - } - } - } - - _visibleColumns = CPMakeRange(0,0); - _visibleRows = CPMakeRange(0,0); -} - -- (void)loadTableCellsInRect:(CGRect)aRect -{ - if (!_dataSource) - return; - - // Determine new visible rows and columns. - - var rowStart = MAX(0, [self _rowAtY:CGRectGetMinY(aRect)] - 1), - rowEnd = MIN(_numberOfRows, [self _rowAtY:CGRectGetMaxY(aRect)] + 1), - - visibleRows = CPMakeRange(rowStart, rowEnd - rowStart), - - columnStart = MAX(0, [self _columnAtX:CGRectGetMinX(aRect)]), - columnEnd = MIN(_tableColumns.length, [self _columnAtX:CGRectGetMaxX(aRect)] + 1), - - visibleColumns = CPMakeRange(columnStart, columnEnd - columnStart); - - if (CPEqualRanges(_visibleRows, visibleRows) && CPEqualRanges(_visibleColumns, visibleColumns)) - return; - - var unionVisibleRows = CPUnionRange(_visibleRows, visibleRows), - unionVisibleColumns = CPUnionRange(_visibleColumns, visibleColumns); - - - // Determine whether to use 2 sweeps or one. If we have lots of overlap of cells, use just one. - if (unionVisibleRows.length * unionVisibleColumns.length <= - (_visibleRows.length * _visibleColumns.length) + (visibleRows.length * visibleColumns.length)) - { - //CPLog.info("single sweep"); - - var cEnd = CPMaxRange(unionVisibleColumns), - rEnd = CPMaxRange(unionVisibleRows), - cell; - - for (var column = unionVisibleColumns.location; column < cEnd; ++column) - { - var tableColumn = _tableColumns[column], - tableColumnCells = _tableCells[column], - columnIsVisible = CPLocationInRange(column, visibleColumns), - newCells = []; - - for (var row = unionVisibleRows.location; row < rEnd; ++row) - { - if (cell = tableColumnCells[row]) - { - if (!columnIsVisible || !CPLocationInRange(row, visibleRows)) - { - tableColumnCells[row] = nil; - [tableColumn _markView:cell inRow:row asPurgable:YES]; - } - } - else - { - newCells.push(row); - } - } - - while (newCells.length > 0) - { - var row = newCells.pop(); - - tableColumnCells[row] = [self newCellForRow:row column:column avoidingRows:visibleRows]; - - if (!tableColumnCells[row]._superview) - [_tableColumnViews[column] addSubview:tableColumnCells[row]]; - else if (tableColumnCells[row]._isHidden) - [tableColumnCells[row] setHidden:NO]; - } - - [tableColumn _purge]; - } - } - else { - //CPLog.info("double sweep"); - - // first sweep: remove old cells - - var cEnd = CPMaxRange(_visibleColumns), - rEnd = CPMaxRange(_visibleRows), - cell; - - for (var column = _visibleColumns.location; column < cEnd; ++column) - { - var tableColumn = _tableColumns[column], - tableColumnCells = _tableCells[column], - columnIsVisible = CPLocationInRange(column, visibleColumns); - - for (var row = _visibleRows.location; row < rEnd; ++row) - { - if (cell = tableColumnCells[row]) - { - if (!columnIsVisible || !CPLocationInRange(row, visibleRows)) - { - tableColumnCells[row] = nil; - [tableColumn _markView:cell inRow:row asPurgable:YES]; - } - } - } - } - - // second sweep: add new cells - - var cEnd = CPMaxRange(visibleColumns), - rEnd = CPMaxRange(visibleRows); - - for (var column = visibleColumns.location; column < cEnd; ++column) - { - var tableColumn = _tableColumns[column], - tableColumnCells = _tableCells[column]; - - for (var row = visibleRows.location; row < rEnd; ++row) - { - tableColumnCells[row] = [self newCellForRow:row column:column avoidingRows:visibleRows]; - - if (!tableColumnCells[row]._superview) - [_tableColumnViews[column] addSubview:tableColumnCells[row]]; - else if (tableColumnCells[row]._isHidden) - [tableColumnCells[row] setHidden:NO]; - } - - [tableColumn _purge]; - } - } - - - _visibleRows = visibleRows; - _visibleColumns = visibleColumns; - -} - -// Setting display attributes -/* - Sets the width and height between cell. The default is (3.0, 2.0) (width, height). - @param the width and height spacing -*/ -- (void)setIntercellSpacing:(CGSize)aSize -{ - if (_intercellSpacing.width != aSize.width) - { - var i = 1, - delta = aSize.width - _intercellSpacing.width; - total = delta; - - for (; i < _tableColumns.length; ++i, total += delta) - { - var origin = [_tableColumnViews[i] frame].origin; - [_tableColumnViews[i] setFrameOrigin:CGPointMake(origin.x + total, origin.y)]; - } - } - - if (_intercellSpacing.height != aSize.height) - { - var i = 0; - - for (; i < _tableColumns.length; ++i, total += delta) - { - [_tableColumnViews[i] setFrameSize:CGSizeMake([_tableColumnViews[i] width], _numberOfRows * (_rowHeight + _intercellSpacing.height))]; - - var j = 1, - y = _rowHeight + _intercellSpacing.height; - - for (; j < _numberOfRows; ++i, y += _rowHeight + _intercellSpacing.height) - { - if (!_tableCells[i][j]) - continue; - - [_tableCells[i][j] setFrameOrigin:CPPointMake(0.0, y)]; - } - } - - // FIXME: variable height rows - } - - _intercellSpacing = CPSizeCreateCopy(aSize); -} - -/* - Returns the width and height of the space between - cells. -*/ -- (CGSize)intercellSpacing -{ - return _intercellSpacing; -} - -/* - Sets the height of table rows - @param aRowHeight the new height of the table rows -*/ -- (void)setRowHeight:(unsigned)aRowHeight -{ - if (_rowHeight == aRowHeight) - return; - - _rowHeight = aRowHeight; - - // don't perform adjustments if we're using variable height rows - if (_hasVariableHeightRows) - return; - - for (var row = 0; row < _numberOfRows; ++row) - for (var column = 0; column < _tableColumns.length; ++column) - [_tableCells[column][row] setFrameOrigin:CPPointMake(0.0, row * (_rowHeight + _intercellSpacing.height))]; -} - -/* - Returns the height of a table row -*/ -- (unsigned)rowHeight -{ - return _rowHeight; -} - -/* - Adds a column to the table - @param aTableColumn the column to be added -*/ -- (void)addTableColumn:(CPTableColumn)aTableColumn -{ - var i = 0, - x = _tableColumns.length ? CPRectGetMaxX([self rectOfColumn:_tableColumns.length - 1]) + _intercellSpacing.width : 0.0, - tableColumnView = [[CPView alloc] initWithFrame:CPRectMake(x, 0.0, [aTableColumn width], [self _columnHeight])], - tableColumnCells = []; - - [_tableColumns addObject:aTableColumn]; - [_tableColumnViews addObject:tableColumnView]; - -// [tableColumnView setBackgroundColor:[CPColor greenColor]]; - - [self addSubview:tableColumnView]; - - [_tableCells addObject:tableColumnCells]; - - // TODO: do we really need to initialize this, or is undefined good enough? - for (; i < _numberOfRows; ++i) - _tableCells[_tableColumns.length-1][i] = nil; - - //++_numberOfColumns; -} - -/* - Removes a column from the table - @param aTableColumn the column to remove -*/ -- (void)removeTableColumn:(CPTableColumn)aTableColumn -{ - var frame = [self frame], - width = [aTableColumn width] + _intercellSpacing.width, - index = [_tableColumns indexOfObjectIdenticalTo:aTableColumn]; - - // Remove the column view and all the cell views from the view hierarchy. - [_tableColumnViews[i] removeFromSuperview]; - - [_tableCells removeObjectAtIndex:index]; - [_tableColumns removeObjectAtIndex:index]; - [_tableColumnViews removeObjectAtIndex:index]; - - // Shift remaining column views to the left. - for (; index < _tableColumns.length; ++ index) - [_tableColumnViews[index] setFrameOrigin:CPPointMake(CPRectGetMinX([_tableColumnViews[index] frame]) - width, 0.0)] - - // Resize ourself. - [self setFrameSize:CPSizeMake(CPRectGetWidth(frame) - width, CPRectGetHeight(frame))]; -} - -/* - Not yet implemented. Changes the position of the column in - the table. - @param fromIndex the original index of the column - @param toIndex the desired index of the column -*/ -- (void)moveColumn:(unsigned)fromIndex toColumn:(unsinged)toIndex -{ - if (fromIndex == toIndex) - return; -// FIXME: IMPLEMENT -} - -/* - Returns an array containing the table's CPTableColumns. -*/ -- (CPArray)tableColumns -{ - return _tableColumns; -} - -/* - Returns the first CPTableColumn equal to the given object (as determined by the "isEqual:" selector), or nil if none exists. - @param anObject the object to look for -*/ -- (CPTableColumn)tableColumnWithIdentifier:(id)anObject -{ - for (var i = 0; i < _tableColumns.length; i++) - if ([_tableColumns[i] isEqual:anObject]) - return _tableColumns[i]; - return nil; -} - -// Getting the dimensions of the table -/* - Returns the number of columns in the table -*/ -- (int)numberOfColumns -{ - return _tableColumns.length; -} - -/* - Returns the number of rows in the table -*/ -- (int)numberOfRows -{ - return _numberOfRows; -} - -/* - Adjusts the size of the table and it's header view. -*/ -- (void)tile -{ - var HEIGHT = 10.0; - -// [_headerView setFrame:CPRectMake(0.0, 0.0, CPRectGetWidth([self bounds]), HEIGHT)]; -// [_scrollView setFrame:CPRectMake(0.0, HEIGHT, CPRectGetWidth([self bounds]), CPRectGetHeight([self bounds]) - HEIGHT)]; -} - -/* - Sets the object that is used to obtain the table data. The data source must implement the following - methods: -
-- (int)numberOfRowsInTableView:(CPTableView)aTableView
-- (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aTableColumn row:(int)rowIndex
-
- @param aDataSource the object with the table data - @throws CPInternalInconsistencyException if aDataSource doesn't implement all the required methods -*/ - (void)setDataSource:(id)aDataSource { - if (![aDataSource respondsToSelector:@selector(numberOfRowsInTableView:)]) - [CPException raise:CPInternalInconsistencyException reason:"Data source doesn't support 'numberOfRowsInTableView:'"]; - if (![aDataSource respondsToSelector:@selector(tableView:objectValueForTableColumn:row:)]) - [CPException raise:CPInternalInconsistencyException reason:"Data source doesn't support 'tableView:objectValueForTableColumn:row:'"]; + if (_dataSource === aDataSource) + return; _dataSource = aDataSource; - + _implementedDataSourceMethods = 0; + + if (!_dataSource) + return; + + if (![_dataSource respondsToSelector:@selector(numberOfRowsInTableView:)]) + [CPException raise:CPInternalInconsistencyException + reason:[aDataSource description] + " does not implement numberOfRowsInTableView:."]; + + if (![_dataSource respondsToSelector:@selector(tableView:objectValueForTableColumn:row:)]) + [CPException raise:CPInternalInconsistencyException + reason:[aDataSource description] + " does not implement tableView:objectValueForTableColumn:row:"]; + + if ([_dataSource respondsToSelector:@selector(tableView:setObjectValue:forTableColumn:row:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_; + + if ([_dataSource respondsToSelector:@selector(tableView:setObjectValue:forTableColumn:row:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_; + + if ([_dataSource respondsToSelector:@selector(tableView:namesOfPromisedFilesDroppedAtDestination:forDraggedRowsWithIndexes:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_namesOfPromisedFilesDroppedAtDestination_forDraggedRowsWithIndexes_; + + if ([_dataSource respondsToSelector:@selector(tableView:validateDrop:proposedRow:proposedDropOperation:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_validateDrop_proposedRow_proposedDropOperation_; + + if ([_dataSource respondsToSelector:@selector(tableView:writeRowsWithIndexes:toPasteboard:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_; + [self reloadData]; } -/* - Returns the object that has access to the table data -*/ - (id)dataSource { return _dataSource; } +//Loading Data + +- (void)reloadData +{ + if (!_dataSource) + return; + + _objectValues = { }; + [self noteNumberOfRowsChanged]; +[self _sizeToParent]; + [self layoutSubviews]; +} + +//Target-action Behavior + +- (void)setDoubleAction:(SEL)anAction +{ + _doubleAction = anAction; +} + +- (SEL)doubleAction +{ + return _doubleAction; +} + +/* + * - clickedColumn + * - clickedRow +*/ +//Configuring Behavior + +- (void)setAllowsColumnReordering:(BOOL)shouldAllowColumnReordering +{ + _allowsColumnReordering = !!shouldAllowColumnReordering; +} + +- (BOOL)allowsColumnReordering +{ + return _allowsColumnReordering; +} + +- (void)setAllowsColumnResizing:(BOOL)shouldAllowColumnResizing +{ + _allowsColumnResizing = !!shouldAllowColumnResizing; +} + +- (BOOL)allowsColumnResizing +{ + return _allowsColumnResizing; +} + +- (void)setAllowsMultipleSelection:(BOOL)shouldAllowMultipleSelection +{ + _allowsMultipleSelection = !!shouldAllowMultipleSelection; +} + +- (BOOL)allowsMultipleSelection +{ + return _allowsMultipleSelection; +} + +- (void)setAllowsEmptySelection:(BOOL)shouldAllowEmptySelection +{ + _allowsEmptySelection = !!shouldAllowEmptySelection; +} + +- (BOOL)allowsEmptySelection +{ + return _allowsEmptySelection; +} + +- (void)setAllowsColumnSelection:(BOOL)shouldAllowColumnSelection +{ + _allowsColumnSelection = !!shouldAllowColumnSelection; +} + +- (BOOL)allowsColumnSelection +{ + return _allowsColumnSelection; +} + +//Setting Display Attributes + +- (void)setIntercellSpacing:(CGSize)aSize +{ + if (_CGSizeEqualToSize(_intercellSpacing, aSize)) + return; + + _intercellSpacing = _CGSizeMakeCopy(aSize); + + [self setNeedsLayout]; +} + +- (void)setThemeState:(int)astae +{ +} + +- (CGSize)intercellSpacing +{ + return _CGSizeMakeCopy(_intercellSpacing); +} + +- (void)setRowHeight:(unsigned)aRowHeight +{ + aRowHeight = +aRowHeight; + + if (_rowHeight === aRowHeight) + return; + + _rowHeight = aRowHeight; + + [self setNeedsLayout]; +} + +- (unsigned)rowHeight +{ + return _rowHeight; +} +/* +- (void)setUsesAlternatingRowBackgroundColors:(BOOL)shouldUseAlternatingRowBackgroundColors +{ + // TODO:need to look at how one actually sets the alternating row, a tip at: + // http://forums.macnn.com/79/developer-center/228347/nstableview-alternating-row-colors/ + // otherwise this may not be feasible or may introduce an additional change req'd in CP + // we'd probably need to iterate through rowId % 2 == 0 and setBackgroundColor with + // whatever the alternating row color is. + _usesAlternatingRowBackgroundColors = shouldUseAlternatingRowBackgroundColors; +} + +- (BOOL)usesAlternatingRowBackgroundColors +{ + return _usesAlternatingRowBackgroundColors; +} + +- (unsigned)selectionHighlightStyle +{ + return _selectionHighlightMask; +} + +- (void)setSelectionHighlightStyle:(unsigned)aSelectionHighlightStyle +{ + _selectionHighlightMask = aSelectionHighlightStyle; +} + +- setGridColor: + + + * - gridColor + * - setGridStyleMask: + * - gridStyleMask + * - indicatorImageInTableColumn: + * - setIndicatorImage:inTableColumn: +*/ +//Column Management + +- (void)addTableColumn:(CPTableColumn)aTableColumn +{ + [_tableColumns addObject:aTableColumn]; + [aTableColumn setTableView:self]; + + if (_dirtyTableColumnRangeIndex < 0) + _dirtyTableColumnRangeIndex = NUMBER_OF_COLUMNS() - 1; + else + _dirtyTableColumnRangeIndex = MIN(NUMBER_OF_COLUMNS() - 1, _dirtyTableColumnRangeIndex); + + [self setNeedsLayout]; +} + +- (void)removeTableColumn:(CPTableColumn)aTableColumn +{ + if ([aTableColumn tableView] !== self) + return; + + var index = [_tableColumns indeOfObjectIdenticalTo:aTableColumn]; + + if (index === CPNotFound) + return; + + [aTableColumn setTableView:nil]; + [_tableColumns removeObjectAtIndex:index]; + + var tableColumnUID = [aTableColumn UID]; + + if (_objectValues[tableColumnUID]) + _objectValues[tableColumnUID] = nil; + + if (_dirtyTableColumnRangeIndex < 0) + _dirtyTableColumnRangeIndex = index; + else + _dirtyTableColumnRangeIndex = MIN(index, _dirtyTableColumnRangeIndex); + + [self setNeedsLayout]; +} + +- (void)moveColumn:(unsigned)fromIndex toColumn:(unsigned)toIndex +{ + fromIndex = +fromIndex; + toIndex = +toIndex; + + if (fromIndex === toIndex) + return; + + if (_dirtyTableColumnRangeIndex < 0) + _dirtyTableColumnRangeIndex = MIN(fromIndex, toIndex); + else + _dirtyTableColumnRangeIndex = MIN(fromIndex, toIndex, _dirtyTableColumnRangeIndex); + + if (toIndex > fromIndex) + --toIndex; + + var tableColumn = _tableColumns[fromIndex]; + + [_tableColumns removeObjectAtIndex:fromIndex]; + [_tableColumns insertObject:tableColumn atIndex:toIndex]; + + [self setNeedsLayout]; +} + +- (CPArray)tableColumns +{ + return _tableColumns; +} + +- (CPInteger)columnWithIdentifier:(CPString)anIdentifier +{ + var index = 0, + count = NUMBER_OF_COLUMNS(); + + for (; index < count; ++index) + if ([_tableColumns identifier] === anIdentifier) + return index; + + return CPNotFound; +} + +- (CPTableColumn)tableColumnWithIdentifier:(CPString)anIdentifier +{ + var index = [self columnWithIdentifier:anIdentifier]; + + if (index === CPNotFound) + return nil; + + return _tableColumns[index]; +} + +//Selecting Columns and Rows +- (void)selectColumnIndexes:(CPIndexSet)columns byExtendingSelection:(BOOL)shouldExtendSelection +{ + // We deselect all columns when selecting rows. + _selectedRowIndexes = [CPIndexSet indexSet]; + + if (shouldExtendSelection) + [_selectedColumnIndexes addIndexes:columns]; + else + _selectedColumnIndexes = [columns copy]; + + [self setNeedsLayout]; +} + +- (void)selectRowIndexes:(CPIndexSet)rows byExtendingSelection:(BOOL)shouldExtendSelection +{ + // We deselect all rows when selecting columns. + _selectedColumnIndexes = [CPIndexSet indexSet]; + + if (shouldExtendSelection) + [_selectedRowIndexes addIndexes:rows]; + else + _selectedRowIndexes = [rows copy]; + + [self setNeedsLayout]; +} + +- (CPIndexSet)selectedColumnIndexes +{ + return _selectedColumnIndexes; +} + +- (void)selectedRowIndexes +{ + return _selectedRowIndexes; +} + +- (void)deselectColumn:(CPInteger)aColumn +{ + [_selectedColumnIndexes removeIndex:aColumn]; +} + +- (void)deselectRow:(CPInteger)aRow +{ + [_selectedRowIndexes removeIndex:aRow]; +} + +- (CPInteger)numberOfSelectedColumns +{ + return [_selectedColumnIndexes count]; +} + +- (CPInteger)numberOfSelectedRows +{ + return [_selectedRowIndexes count]; +} + +/* +- (CPInteger)selectedColumn + * - selectedRow +*/ + +- (BOOL)isColumnSelected:(CPInteger)aColumn +{ + return [_selectedColumnIndexes containsIndex:aColumn]; +} + +- (BOOL)isRowSelected:(CPInteger)aRow +{ + return [_selectedRowIndexes containsIndex:aRow]; +} +/* +- (void)selectAll: + * - deselectAll: + * - allowsTypeSelect + * - setAllowsTypeSelect: +*/ +//Table Dimensions + +- (int)numberOfColumns +{ + return NUMBER_OF_COLUMNS(); +} + +/* + Returns the number of rows in the receiver. +*/ +- (int)numberOfRows +{ + if (!_dataSource) + return 0; + + return [_dataSource numberOfRowsInTableView:self]; +} + +//Displaying Cell +/* + * - preparedCellAtColumn:row: +*/ +//Editing Cells +/* + * - editColumn:row:withEvent:select: + * - editedColumn + * - editedRow +*/ +//Setting Auxiliary Views +/* + * - setHeaderView: + * - headerView + * - setCornerView: + * - cornerView +*/ + +- (CPView)cornerView +{ + return _cornerView; +} + +- (void)setCornerView:(CPView)aView +{ + _cornerView = aView; +} + +- (CPView)headerView +{ + return _headerView; +} + +- (void)setHeaderView:(CPView)aHeaderView +{ + _headerView = aHeaderView; + [_headerView setTableView:self]; +} + +//Layout Support + +// Complexity: +// O(Columns) +- (void)_recalculateTableColumnRanges +{ + if (_dirtyTableColumnRangeIndex < 0) + return; + + var index = _dirtyTableColumnRangeIndex, + count = NUMBER_OF_COLUMNS(), + x = index === 0 ? 0.0 : CPMaxRange(_tableColumnRanges[index - 1]); + + for (; index < count; ++index) + { + var tableColumn = _tableColumns[index]; + + if ([tableColumn isHidden]) + _tableColumnRanges[index] = CPMakeRange(x, 0.0); + + else + { + var width = [_tableColumns[index] width]; + + _tableColumnRanges[index] = CPMakeRange(x, width); + + x += width; + } + } + + _tableColumnRanges.length = count; + _dirtyTableColumnRangeIndex = CPNotFound; +} + +// Complexity: +// O(1) +- (CGRect)rectOfColumn:(CPInteger)aColumnIndex +{ + aColumnIndex = +aColumnIndex; + + if (aColumnIndex < 0 || aColumnIndex >= NUMBER_OF_COLUMNS()) + return _CGRectMakeZero(); + + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; + + var range = _tableColumnRanges[aColumnIndex]; + + return _CGRectMake(range.location, 0.0, range.length, CGRectGetHeight([self bounds])); +} + +- (CGRect)rectOfRow:(CPInteger)aRowIndex +{ + if (NO) + return NULL; + + // FIXME: WRONG: ASK TABLE COLUMN RANGE + return _CGRectMake(0.0, (aRowIndex * (_rowHeight + _intercellSpacing.height)), _CGRectGetWidth([self bounds]), _rowHeight); +} + +// Complexity: +// O(1) +- (CPRange)rowsInRect:(CGRect)aRect +{ + var bounds = nil, + firstRow = [self rowAtPoint:aRect.origin], + lastRow = [self rowAtPoint:_CGPointMake(0.0, _CGRectGetMaxY(aRect))]; + + if (firstRow < 0) + { + bounds = [self bounds]; + + if (_CGRectGetMinY(aRect) < _CGRectGetMinY(bounds)) + firstRow = 0; + else + firstRow = _numberOfRows - 1; + } + + if (lastRow < 0) + { + if (!bounds) + bounds = [self bounds]; + + if (_CGRectGetMaxY(aRect) < _CGRectGetMinY(bounds)) + lastRow = 0; + else + lastRow = _numberOfRows - 1; + } + + return CPMakeRange(firstRow, lastRow - firstRow + 1); +} + +// Complexity: +// O(lg Columns) if table view contains no hidden columns +// O(Columns) if table view contains hidden columns +- (CPIndexSet)columnIndexesInRect:(CGRect)aRect +{ + var column = MAX(0, [self columnAtPoint:_CGPointMake(aRect.origin.x, 0.0)]), + lastColumn = [self columnAtPoint:_CGPointMake(_CGRectGetMaxX(aRect), 0.0)]; + + if (lastColumn === CPNotFound) + lastColumn = NUMBER_OF_COLUMNS() - 1; + + // Don't bother doing the expensive removal of hidden indexes if we have no hidden columns. + if (_numberOfHiddenColumns <= 0) + return [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(column, lastColumn - column + 1)]; + + // + var indexSet = [CPIndexSet indexSet]; + + for (; column <= lastColumn; ++column) + { + var tableColumn = _tableColumns[column]; + + if (![tableColumn isHidden]) + [indexSet addIndex:column]; + } + + return indexSet; +} + +// Complexity: +// O(lg Columns) if table view contains now hidden columns +// O(Columns) if table view contains hidden columns +- (CPInteger)columnAtPoint:(CGPoint)aPoint +{ + var bounds = [self bounds]; + + if (!_CGRectContainsPoint(bounds, aPoint)) + return CPNotFound; + + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; + + var x = aPoint.x, + low = 0, + high = _tableColumnRanges.length - 1; + + while (low <= high) + { + var middle = FLOOR(low + (high - low) / 2), + range = _tableColumnRanges[middle]; + + if (x < range.location) + high = middle - 1; + + else if (x >= CPMaxRange(range)) + low = middle + 1; + + else + { + var numberOfColumns = _tableColumnRanges.length; + + while (middle < numberOfColumns && [_tableColumns[middle] isHidden]) + ++middle; + + if (middle < numberOfColumns) + return middle; + + return CPNotFound; + } + } + + return CPNotFound; +} + +- (CPInteger)rowAtPoint:(CGPoint)aPoint +{ + var y = aPoint.y; + + if (NO) + { + } + + return FLOOR(y / (_rowHeight + _intercellSpacing.height)); +} + +- (CGRect)frameOfDataViewAtColumn:(CPInteger)aColumnIndex row:(CPInteger)aRowIndex +{ + var tableColumnRange = _tableColumns[aColumnIndex], + rectOfRow = [self rectOfRow:aRowIndex]; + + return _CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow)); +} +/* + * - columnAutoresizingStyle + * - setColumnAutoresizingStyle: +*/ +- (void)sizeLastColumnToFit +{ + var superview = [self superview]; + + if (!superview) + return; + + var superviewSize = [superview bounds].size; + + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; + + var count = NUMBER_OF_COLUMNS(); + + while (count-- && [_tableColumns[count] isHidden]) ; + + if (count >= 0) + { + var difference = superviewSize.width - CPMaxRange(_tableColumnRanges[count]), + tableColumn = _tableColumns[count]; + + [tableColumn setWidth:MAX(0.0, [tableColumn width] + difference)]; + } + + [self setNeedsLayout]; +} + +- (void)noteNumberOfRowsChanged +{ + _numberOfRows = [_dataSource numberOfRowsInTableView:self]; + + [self setNeedsLayout]; +} +/* + * - tile + * - sizeToFit + * - noteHeightOfRowsWithIndexesChanged: +*/ +//Scrolling +/* + * - scrollRowToVisible: + * - scrollColumnToVisible: +*/ +//Persistence +/* + * - autosaveName + * - autosaveTableColumns + * - setAutosaveName: + * - setAutosaveTableColumns: +*/ + +- (void)_sizeToParent +{ + var superviewSize = [[self superview] bounds].size; + + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; + + if (_tableColumnRanges.length > 0) + var naturalWidth = CPMaxRange([_tableColumnRanges lastObject]); + + else + var naturalWidth = 0.0; + + [self setFrameSize:_CGSizeMake( MAX(superviewSize.width, naturalWidth), + MAX(superviewSize.height, (_rowHeight + _intercellSpacing.height) * _numberOfRows))]; +} + +//Setting the Delegate:(id)aDelegate + +- (void)setDelegate:(id)aDelegate +{ + if (_delegate === aDelegate) + return; + + var defaultCenter = [CPNotificationCenter defaultCenter]; + + if (_delegate) + { + if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) + [defaultCenter + removeObserver:_delegate + name:CPTableViewColumnDidMoveNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) + [defaultCenter + removeObserver:_delegate + name:CPTableViewColumnDidResizeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) + [defaultCenter + removeObserver:_delegate + name:CPTableViewSelectionDidChangeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) + [defaultCenter + removeObserver:_delegate + name:CPTableViewSelectionIsChangingNotification + object:self]; + } + + _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(selectionShouldChangeInTableView:)]) + _implementedDelegateMethods |= CPTableViewDelegate_selectionShouldChangeInTableView_; + + if ([_delegate respondsToSelector:@selector(tableView:dataViewForTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_dataViewForTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:didClickTableColumn:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_didClickTableColumn_; + + if ([_delegate respondsToSelector:@selector(tableView:didDragTableColumn:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_didDragTableColumn_; + + if ([_delegate respondsToSelector:@selector(tableView:heightOfRow:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_heightOfRow_; + + if ([_delegate respondsToSelector:@selector(tableView:isGroupRow:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_isGroupRow_; + + if ([_delegate respondsToSelector:@selector(tableView:mouseDownInHeaderOfTableColumn:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_mouseDownInHeaderOfTableColumn_; + + if ([_delegate respondsToSelector:@selector(tableView:nextTypeSelectMatchFromRow:toRow:forString:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_nextTypeSelectMatchFromRow_toRow_forString_; + + if ([_delegate respondsToSelector:@selector(tableView:selectionIndexesForProposedSelection:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldEditTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldEditTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldSelectRow:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldSelectRow_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldSelectTableColumn:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldSelectTableColumn_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldShowViewExpansionForTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldShowViewExpansionForTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldTrackView:forTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldTrackView_forTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:shouldTypeSelectForEvent:withCurrentSearchString:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldTypeSelectForEvent_withCurrentSearchString_; + + if ([_delegate respondsToSelector:@selector(tableView:toolTipForView:rect:tableColumn:row:mouseLocation:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_toolTipForView_rect_tableColumn_row_mouseLocation_; + + if ([_delegate respondsToSelector:@selector(tableView:typeSelectStringForTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_typeSelectStringForTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableView:willDisplayView:forTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_; + + if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(tableViewColumnDidMove:) + name:CPTableViewColumnDidMoveNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(tableViewColumnDidMove:) + name:CPTableViewColumnDidResizeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(tableViewSelectionDidChange:) + name:CPTableViewSelectionDidChangeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(tableViewSelectionIsChanging:) + name:CPTableViewSelectionIsChangingNotification + object:self]; +} - (id)delegate { return _delegate; } - -/*! - Sets the delegate for the tableview. -*/ -- (void)setDelegate:(id)aDelegate +//Highlightable Column Headers +/* +- (CPTableColumn)highlightedTableColumn { - if (_delegate === aDelegate) - return; - - var notificationCenter = [CPNotificationCenter defaultCenter]; - - if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) - [notificationCenter removeObserver:_delegate name:CPTableViewColumnDidMoveNotification object:self]; - if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) - [notificationCenter removeObserver:_delegate name:CPTableViewColumnDidResizeNotification object:self]; - if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) - [notificationCenter removeObserver:_delegate name:CPTableViewSelectionDidChangeNotification object:self]; - if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) - [notificationCenter removeObserver:_delegate name:CPTableViewSelectionIsChangingNotification object:self]; - - _delegate = aDelegate; - - if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) - [notificationCenter addObserver:_delegate selector:@selector(tableViewColumnDidMove:) name:CPTableViewColumnDidMoveNotification object:self]; - if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) - [notificationCenter addObserver:_delegate selector:@selector(tableViewColumnDidResize:) name:CPTableViewColumnDidResizeNotification object:self]; - if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) - [notificationCenter addObserver:_delegate selector:@selector(tableViewSelectionDidChange:) name:CPTableViewSelectionDidChangeNotification object:self]; - if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) - [notificationCenter addObserver:_delegate selector:@selector(tableViewSelectionIsChanging:) name:CPTableViewSelectionIsChangingNotification object:self]; - _delegateSelectorsCache = 0; +} - if ([_delegate respondsToSelector:@selector(tableView:willDisplayCell:forTableColumn:row:)]) - _delegateSelectorsCache |= _CPTableViewWillDisplayCellSelector; - if ([_delegate respondsToSelector:@selector(tableView:shouldSelectRow:)]) - _delegateSelectorsCache |= _CPTableViewShouldSelectRowSelector; - if ([_delegate respondsToSelector:@selector(tableView:shouldSelectTableColumn:)]) - _delegateSelectorsCache |= _CPTableViewShouldSelectTableColumnSelector; - if ([_delegate respondsToSelector:@selector(selectionShouldChangeInTableView:)]) - _delegateSelectorsCache |= _CPTableViewSelectionShouldChangeSelector; - if ([_delegate respondsToSelector:@selector(tableView:shouldEditTableColumn:row:)]) - _delegateSelectorsCache |= _CPTableViewShouldEditTableColumnSelector; - if ([_delegate respondsToSelector:@selector(tableView:selectionIndexesForProposedSelection:)]) - _delegateSelectorsCache |= _CPTableViewSelectionIndexesForProposedSelectionSelector; - if ([_delegate respondsToSelector:@selector(tableView:heightOfRow:)]) + * - setHighlightedTableColumn: +*/ +//Dragging +/* + * - dragImageForRowsWithIndexes:tableColumns:event:offset: + * - canDragRowsWithIndexes:atPoint: + * - setDraggingSourceOperationMask:forLocal: + * - setDropRow:dropOperation: + * - setVerticalMotionCanBeginDrag: + * - verticalMotionCanBeginDrag +*/ +//Sorting +/* + * - setSortDescriptors: + * - sortDescriptors +*/ + +//Text Delegate Methods +/* + * - textShouldBeginEditing: + * - textDidBeginEditing: + * - textDidChange: + * - textShouldEndEditing: + * - textDidEndEditing: +*/ + +- (id)_objectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex +{ + var tableColumnUID = [aTableColumn UID], + tableColumnObjectValues = _objectValues[tableColumnUID]; + + if (!tableColumnObjectValues) { - _delegateSelectorsCache |= _CPTableViewHeightOfRowSelector; - _hasVariableHeightRows = YES; + tableColumnObjectValues = []; + _objectValues[tableColumnUID] = tableColumnObjectValues; } - else - _hasVariableHeightRows = NO; -} + var objectValue = tableColumnObjectValues[aRowIndex]; -/* - Tells the table view that the number of rows in the table - has changed. -*/ -- (void)noteNumberOfRowsChanged -{ - var numberOfRows = [_dataSource numberOfRowsInTableView:self]; - - if (_numberOfRows != numberOfRows) + if (objectValue === undefined) { - _numberOfRows = numberOfRows; - - [self _recalculateColumnHeight]; + objectValue = [_dataSource tableView:self objectValueForTableColumn:aTableColumn row:aRowIndex]; + tableColumnObjectValues[aRowIndex] = objectValue; } + + return objectValue; } -- (void)noteHeightOfRowsWithIndexesChanged:(CPIndexSet)indexSet -{ - // FIXME: more efficient version is possible since we know which indexes changes - [self _recalculateColumnHeight]; -} - -/* - Returns the rectangle bounding the specified row. - @param aRowIndex the row to obtain a rectangle for - @return the bounding rectangle -*/ -- (CGRect)rectOfRow:(int)aRowIndex -{ - return CPRectMake(0.0, ROW_MIN_Y(aRowIndex), CPRectGetWidth([self bounds]), ROW_HEIGHT(aRowIndex)); -} - -/* - Returns the rectangle bounding the specified column - @param aColumnIndex the column to obtain a rectangle for - @return the bounding column -*/ -- (CGRect)rectOfColumn:(int)aColumnIndex -{ - return [_tableColumnViews[aColumnIndex] frame]; -} - -/* - Adjusts column widths to make them all visible at once. Same as tile. -*/ -- (void)sizeToFit -{ -// [self tile]; -} - -- (void)_recalculateColumnHeight -{ - var oldColumnHeight = _columnHeight; - - if (_hasVariableHeightRows) - { - _rowMinYs[0] = 0; - for (var row = 0; row < _numberOfRows; row++) - { - _rowHeights[row] = [_delegate tableView:self heightOfRow:row]; - _rowMinYs[row+1] = _rowMinYs[row] + _rowHeights[row] + _intercellSpacing.height; - } - _columnHeight = _rowMinYs[_numberOfRows]; // last index is one more than last row, and is the total column height - } - else - _columnHeight = _numberOfRows * (_rowHeight + _intercellSpacing.height); - - var count = _tableColumnViews.length; - - while (count--) - [_tableColumnViews[count] setFrameSize:CGSizeMake([_tableColumns[count] width], _columnHeight)]; - - [self setFrameSize:CGSizeMake(CGRectGetWidth([self frame]), _columnHeight)]; -} - -- (CGRect)visibleRectInParent +- (CGRect)_exposedRect { var superview = [self superview]; - - if (!superview) + + if (![superview isKindOfClass:[CPClipView class]]) return [self bounds]; - + return [self convertRect:CGRectIntersection([superview bounds], [self frame]) fromView:superview]; } -/* - Reloads the data from the dataSource. This is an - expensive method, so use it lightly. -*/ -- (void)reloadData +- (void)load { - var oldNumberOfRows = _numberOfRows; - - _numberOfRows = [_dataSource numberOfRowsInTableView:self]; - - if (oldNumberOfRows != _numberOfRows) + if (!_dataSource) { - [self _recalculateColumnHeight]; - [self setFrameSize:CGSizeMake(CGRectGetWidth([self frame]), [self _columnHeight])]; + // remove? + return; + } + +// if (!window.blah) +// return window.setTimeout(function() { window.blah = true; [self load]; window.blah = false}, 0.0); + + if (window.console && window.console.profile) + console.profile("cell-load"); + + var exposedRect = [self _exposedRect], + exposedRows = [CPIndexSet indexSetWithIndexesInRange:[self rowsInRect:exposedRect]], + exposedColumns = [self columnIndexesInRect:exposedRect], + obscuredRows = [_exposedRows copy], + obscuredColumns = [_exposedColumns copy]; + + [obscuredRows removeIndexes:exposedRows]; + [obscuredColumns removeIndexes:exposedColumns]; + + var newlyExposedRows = [exposedRows copy], + newlyExposedColumns = [exposedColumns copy]; + + [newlyExposedRows removeIndexes:_exposedRows]; + [newlyExposedColumns removeIndexes:_exposedColumns]; + + var previouslyExposedRows = [exposedRows copy], + previouslyExposedColumns = [exposedColumns copy]; + + [previouslyExposedRows removeIndexes:newlyExposedRows]; + [previouslyExposedColumns removeIndexes:newlyExposedColumns]; + +// console.log("will remove:" + '\n\n' + +// previouslyExposedRows + "\n" + obscuredColumns + "\n\n" + +// obscuredRows + "\n" + previouslyExposedColumns + "\n\n" + +// obscuredRows + "\n" + obscuredColumns); + [self _unloadDataViewsInRows:previouslyExposedRows columns:obscuredColumns]; + [self _unloadDataViewsInRows:obscuredRows columns:previouslyExposedColumns]; + [self _unloadDataViewsInRows:obscuredRows columns:obscuredColumns]; + + [self _loadDataViewsInRows:previouslyExposedRows columns:newlyExposedColumns]; + [self _loadDataViewsInRows:newlyExposedRows columns:previouslyExposedColumns]; + [self _loadDataViewsInRows:newlyExposedRows columns:newlyExposedColumns]; + +// console.log("newly exposed rows: " + newlyExposedRows + "\nnewly exposed columns: " + newlyExposedColumns); + _exposedRows = exposedRows; + _exposedColumns = exposedColumns; + + [_tableDrawView setFrame:exposedRect]; +// [_tableDrawView setBounds:exposedRect]; + [_tableDrawView display]; + + if (window.console && window.console.profile) + console.profileEnd("cell-load"); +} + +- (void)_unloadDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns +{ + if (![rows count] || ![columns count]) + return; + + var rowArray = [], + columnArray = []; + + [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; + [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; + + var columnIndex = 0, + columnsCount = columnArray.length; + + for (; columnIndex < columnsCount; ++columnIndex) + { + var column = columnArray[columnIndex], + tableColumn = _tableColumns[column], + tableColumnUID = [tableColumn UID]; + + var rowIndex = 0, + rowsCount = rowArray.length; + + for (; rowIndex < rowsCount; ++rowIndex) + { + var row = rowArray[rowIndex], + dataView = _dataViewsForTableColumns[tableColumnUID][row]; + + _dataViewsForTableColumns[tableColumnUID][row] = nil; +if (!_cachedDataViews[dataView.identifier]) +_cachedDataViews[dataView.identifier] = [dataView]; +else +_cachedDataViews[dataView.identifier].push(dataView); + } + } +} + +- (void)_loadDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns +{ + if (![rows count] || ![columns count]) + return; + + var rowArray = [], + rowRects = [], + columnArray = []; + + [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; + [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; + + var columnIndex = 0, + columnsCount = columnArray.length; + + for (; columnIndex < columnsCount; ++columnIndex) + { + var column = columnArray[columnIndex], + tableColumn = _tableColumns[column], + tableColumnUID = [tableColumn UID], + tableColumnRange = _tableColumnRanges[column]; + + if (!_dataViewsForTableColumns[tableColumnUID]) + _dataViewsForTableColumns[tableColumnUID] = []; + + var rowIndex = 0, + rowsCount = rowArray.length; + + for (; rowIndex < rowsCount; ++rowIndex) + { + var row = rowArray[rowIndex], + dataView = [tableColumn _newDataViewForRow:row], + rectOfRow = rowRects[row]; + + if (!rectOfRow) + rectOfRow = rowRects[row] = [self rectOfRow:row]; + + [dataView setFrame:_CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow))]; + [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:row]]; + + if ([dataView superview] !== self) + [self addSubview:dataView]; + + _dataViewsForTableColumns[tableColumnUID][row] = dataView; + } + } +} + +- (void)setFrameSize:(CGSize)aSize +{ + [super setFrameSize:aSize]; + [_headerView setFrameSize:CGSizeMake(aSize.width, [_headerView frame].size.height)]; +} + +- (void)_drawRect:(CGRect)aRect +{ + [self highlightSelectionInClipRect:[self _exposedRect]]; +} + +- (void)highlightSelectionInClipRect:(CGRect)aRect +{ + [[CPColor greenColor] set]; + + var context = [[CPGraphicsContext currentContext] graphicsPort]; + + if ([_selectedRowIndexes count] >= 1) + { + var exposedRows = [CPIndexSet indexSetWithIndexesInRange:[self rowsInRect:aRect]], + exposedRange = CPMakeRange([exposedRows firstIndex], [exposedRows lastIndex] - [exposedRows firstIndex] + 1), + rowArray = []; + + [_selectedRowIndexes getIndexes:rowArray maxCount:-1 inIndexRange:exposedRange]; + + var rowArrayIndex = 0, + rowArrayCount = rowArray.length; + + for (; rowArrayIndex < rowArrayCount; ++rowArrayIndex) + CGContextFillRect(context, [self rectOfRow:rowArray[rowArrayIndex]]); + } + else + { + } - - _objectValueCache = []; - - [self clearCells]; - - [self setNeedsLayout]; } - (void)layoutSubviews { - [self loadTableCellsInRect:[self visibleRectInParent]]; + [self load]; } -- (void)displaySoon +- (void)viewWillMoveToSuperview:(CPView)aView { - [_scrollTimer invalidate]; - _scrollTimer = [CPTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(displayNow) userInfo:nil repeats:NO]; + var superview = [self superview], + defaultCenter = [CPNotificationCenter defaultCenter]; + + if (superview) + { + [defaultCenter + removeObserver:self + name:CPViewFrameDidChangeNotification + object:superview]; + + [defaultCenter + removeObserver:self + name:CPViewBoundsDidChangeNotification + object:superview]; + } + + if (aView) + { + [aView setPostsFrameChangedNotifications:YES]; + [aView setPostsBoundsChangedNotifications:YES]; + + [defaultCenter + addObserver:self + selector:@selector(superviewFrameChanged:) + name:CPViewFrameDidChangeNotification + object:aView]; + + [defaultCenter + addObserver:self + selector:@selector(superviewBoundsChanged:) + name:CPViewBoundsDidChangeNotification + object:aView]; + } } -- (void)displayNow +- (void)superviewBoundsChanged:(CPNotification)aNotification { [self setNeedsLayout]; } -- (void)viewDidMoveToSuperview +- (void)superviewFrameChanged:(CPNotification)aNotification { - [[[self enclosingScrollView] contentView] setPostsBoundsChangedNotifications:YES]; - - [[CPNotificationCenter defaultCenter] - addObserver:self - selector:@selector(viewBoundsChanged:) - name:CPViewBoundsDidChangeNotification - object:[[self enclosingScrollView] contentView]]; } -- (void)viewBoundsChanged:(CPNotification)aNotification -{ - //CPLog.info(_cmd + CPStringFromRect([[[self enclosingScrollView] contentView] bounds])); - //objj_debug_print_backtrace(); - //[self setNeedsLayout]; - [self displayNow]; -} +// /* -- (void)setAllowsColumnReordering:(BOOL)allowsColumnReordering -{ - if (_allowsColumnReordering === _allowsColumnReordering) - return; - - _allowsColumnReordering = allowsColumnReordering; -} -- (void)allowsColumnReordering -{ - return _allowsColumnReordering; -} - -- (void)setAllowsColumnResizing:(BOOL)allowsColumnResizing -{ - if (_allowsColumnResizing === allowsColumnResizing) - return; - - _allowsColumnResizing = allowsColumnResizing; -} -- (void)allowsColumnResizing -{ - return _allowsColumnResizing; -} - -- (void)setAllowsColumnSelection:(BOOL)allowsColumnSelection -{ - if (_allowsColumnSelection === allowsColumnSelection) - return; - - _allowsColumnSelection = allowsColumnSelection; -} -- (void)allowsColumnSelection -{ - return _allowsColumnSelection; -} -*/ - -- (void)setAllowsMultipleSelection:(BOOL)allowsMultipleSelection -{ - if (_allowsMultipleSelection === allowsMultipleSelection) - return; - - _allowsMultipleSelection = allowsMultipleSelection; - - // TODO: more stuff? -} -- (void)allowsMultipleSelection -{ - return _allowsMultipleSelection; -} - -- (void)setAllowsEmptySelection:(BOOL)allowsEmptySelection -{ - if (_allowsEmptySelection === allowsEmptySelection) - return; - - _allowsEmptySelection = allowsEmptySelection; -} -- (void)allowsEmptySelection -{ - return _allowsEmptySelection; -} - - -/* - Returns the index of the row at the given point, or CPNotFound (-1) if it is out of range. - @param aPoint the point - @return the index of the row at aPoint -*/ -- (int)rowAtPoint:(CGPoint)aPoint -{ - var index = [self _rowAtY:aPoint.y] - - if (index >= 0 && index < _numberOfRows) - return index; - else - return CPNotFound; -} - -- (int)columnAtPoint:(CGPoint)aPoint -{ - var index = [self _columnAtX:aPoint.x] - - if (index >= 0 && index < _tableColumns.length) - return index; - else - return CPNotFound; -} - -/* - @ignore - - Internal version takes a Y value, returns an index, or -1 if its beyond the min, or numberOfRows if it's beyond the max -*/ -- (int)_rowAtY:(float)y -{ - if (_hasVariableHeightRows) - { - var a = 0, - b = _numberOfRows; - - if (y < _rowMinYs[0]) - return -1; - if (y >= _rowMinYs[_rowMinYs.length-1]) - return _numberOfRows; - - // binary search - while (true) - { - var half = a + Math.floor((b - a) / 2); - - if (y < _rowMinYs[half]) - b = half; - else if (half < _numberOfRows-1 && y >= _rowMinYs[half+1]) - a = half; - else - return half; - } - } - else - return FLOOR(y / (_rowHeight + _intercellSpacing.height)); -} - -/* - @ignore - - Internal version takes a X value, returns an index, or -1 if its beyond the min, or numberOfColumns if it's beyond the max -*/ -- (int)_columnAtX:(float)x -{ - var a = 0, - b = _tableColumns.length; - - var last = [_tableColumnViews[_tableColumns.length-1] frame]; - if (x < [_tableColumnViews[0] frame].origin.x) - return -1; - if (x >= last.origin.x + last.size.width) - return _tableColumns.length; - - // binary search - while (true) - { - var half = a + Math.floor((b - a) / 2); - - if (x < [_tableColumnViews[half] frame].origin.x) - b = half; - else if (half < _tableColumns.length-1 && x >= [_tableColumnViews[half+1] frame].origin.x) - a = half; - else - return half; - } -} - -/* - Selects the specified row indexes, optionally adding to existing selection - @param indexes the indexes to select - @param extend whether or not to add to the existing selection -*/ -- (void)selectRowIndexes:(CPIndexSet)indexes byExtendingSelection:(BOOL)extend -{ - // FIXME: should this be subject to the delegate filters, etc? - - if (extend) - _selectedRowIndexes = [[_selectedRowIndexes copy] addIndexes:indexes]; - else if ([indexes count] > 0 || _allowsEmptySelection) - _selectedRowIndexes = [indexes copy]; - - [self _drawSelection]; -} - -/* - Returns a CPIndexSet of the selected rows - @return indexes of the selected rows -*/ -- (CPIndexSet)selectedRowIndexes -{ - return _selectedRowIndexes; -} - -/* - Returns the number of selected rows - @return number of selected rows -*/ -- (int)numberOfSelectedRows -{ - return [_selectedRowIndexes count]; -} - - -/* - Deselects all rows if allowsEmptySelection is true. If delegate responds to "selectionShouldChangeInTableView:", asks if it should chnage. - Sends the CPTableViewSelectionDidChangeNotification on deselection. - @param the sender in a target/action -*/ -- (void)deselectAll:(id)sender -{ - if (!_allowsEmptySelection || [_selectedRowIndexes count] === 0 || - ((_delegateSelectorsCache & _CPTableViewSelectionShouldChangeSelector) && ![_delegate selectionShouldChangeInTableView:self])) - return; - - [self selectRowIndexes:[CPIndexSet indexSet] byExtendingSelection:NO]; - [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]; -} - -- (void)editColumn:(int)columnIndex row:(int)rowIndex withEvent:(CPEvent)theEvent select:(BOOL)flag -{ - -} - -/* - @ignore -*/ -- (void)_updateSelectionWithMouseAtRow:(int)aRow -{ - // Make a preliminary new selection - var newSelection; - if (_allowsMultipleSelection) - newSelection = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(MIN(aRow, _selectionStartRow), ABS(aRow-_selectionStartRow)+1)]; - else if (aRow >= 0 && aRow < _numberOfRows) - newSelection = [CPIndexSet indexSetWithIndex:aRow]; - else - newSelection = [CPIndexSet indexSet]; - - // If cmd/ctrl was held down XOR the old selection with the proposed selection - if (_allowsMultipleSelection && _selectionModifier & (CPCommandKeyMask | CPControlKeyMask | CPAlternateKeyMask)) - { - // A = newSelection, B = _previousSelectedRowIndexes - // (A intersection B) = (A - (A - B)) - var intersection = [newSelection copy], - difference = [newSelection copy]; - [difference removeIndexes:_previousSelectedRowIndexes]; - [intersection removeIndexes:difference] - - // (A xor B) = (A + B) - (A intersection B) - [newSelection addIndexes:_previousSelectedRowIndexes]; - [newSelection removeIndexes:intersection]; - - // FIXME: if multiple selection is off, and we cmd/ctrl click the previously selected row, then deselect it. - } - - // if the new selection is different than the old selection - if (![newSelection isEqualToIndexSet:_selectedRowIndexes]) - { - // ask the delegate if we should change the selection - if ((_delegateSelectorsCache & _CPTableViewSelectionShouldChangeSelector) && ![_delegate selectionShouldChangeInTableView:self]) - return; - - // ask the delegate which indexes can be selected. selectionIndexesForProposedSelection is faster than shouldSelectRow - if (_delegateSelectorsCache & _CPTableViewSelectionIndexesForProposedSelectionSelector) - newSelection = [_delegate tableView:self selectionIndexesForProposedSelection:newSelection]; - else if (_delegateSelectorsCache & _CPTableViewShouldSelectRowSelector) - { - var indexes = []; - [newSelection getIndexes:indexes maxCount:Number.MAX_VALUE inIndexRange:nil]; - for (var i = 0; i < indexes.length; i++) - if (![_delegate tableView:self shouldSelectRow:indexes[i]]) - [newSelection removeIndex:indexes[i]]; - } - } - - // if empty selection is not allowed and the new selection has nothing selected, abort - if (!_allowsEmptySelection && [newSelection count] === 0) - return; - - // if the new selection is *still* different, and update the selection and send a notification - if (![newSelection isEqualToIndexSet:_selectedRowIndexes]) - { - [self selectRowIndexes:newSelection byExtendingSelection:NO]; - [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionIsChangingNotification object:self userInfo:nil]; - } -} - -/* - @ignore -*/ -- (void)mouseDown:(CPEvent)anEvent -{ - [self trackSelection:anEvent]; -} - -/* - Sets the message to be sent to the target when a cell is double clicked - @param aSelector the selector to be performed -*/ -- (void)setDoubleAction:(SEL)aSelector -{ - _doubleAction = aSelector; -} -- (SEL)doubleAction -{ - return _doubleAction; -} - -- (int)clickedColumn -{ - return _clickedColumn; -} -- (int)clickedRow -{ - return _clickedRow; -} - -/* - @ignore -*/ -- (void)trackSelection:(CPEvent)anEvent -{ var type = [anEvent type], point = [self convertPoint:[anEvent locationInWindow] fromView:nil], currentRow = MAX(0, MIN(_numberOfRows-1, [self _rowAtY:point.y])); - - if (type == CPLeftMouseUp) - { - _clickedRow = [self rowAtPoint:point]; - _clickedColumn = [self columnAtPoint:point]; - - if ([anEvent clickCount] === 2) - { - CPLog.warn("edit?!"); - - [self sendAction:_doubleAction to:_target]; - } - else - { - if (![_previousSelectedRowIndexes isEqualToIndexSet:_selectedRowIndexes]) - { - [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]; - } - - [self sendAction:_action to:_target]; - } - - return; - } - - if (type == CPLeftMouseDown) - { - _previousSelectedRowIndexes = _selectedRowIndexes; - _selectionModifier = [anEvent modifierFlags]; - - if (_selectionModifier & CPShiftKeyMask) - _selectionStartRow = (ABS([_previousSelectedRowIndexes firstIndex] - currentRow) < ABS([_previousSelectedRowIndexes lastIndex] - currentRow)) ? - [_previousSelectedRowIndexes firstIndex] : [_previousSelectedRowIndexes lastIndex]; - else - _selectionStartRow = currentRow; - - [self _updateSelectionWithMouseAtRow:currentRow]; - } - else if (type == CPLeftMouseDragged) - { - [self _updateSelectionWithMouseAtRow:currentRow]; - } - - [CPApp setTarget:self selector:@selector(trackSelection:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES]; + +*/ + +- (BOOL)startTrackingAt:(CGPoint)aPoint +{ + var row = [self rowAtPoint:aPoint]; + + if ([self mouseDownFlags] & CPShiftKeyMask) + _selectionAnchor = (ABS([_selectedRowIndexes firstIndex] - row) < ABS([_selectedRowIndexes lastIndex] - row)) ? + [_selectedRowIndexes firstIndex] : [_selectedRowIndexes lastIndex]; + else + _selectionAnchor = row; + + [self _updateSelectionWithMouseAtRow:row]; + + return YES; } -/* - @ignore -*/ -- (void)_drawSelection +- (BOOL)continueTracking:(CGPoint)lastPoint at:(CGPoint)aPoint { - if (!_currentlySelected) { - _currentlySelected = [CPIndexSet indexSet]; - _selectionViews = []; - _selectionViewsPool = []; - } + [self _updateSelectionWithMouseAtRow:[self rowAtPoint:aPoint]]; - // TODO: we could also remove selections that aren't visible, but then we'll need to run this on every scroll/resize? - - // get array of indexes we can remove - var removeSet = [_currentlySelected copy], - indexesToRemove = []; - [removeSet removeIndexes:_selectedRowIndexes]; - [removeSet getIndexes:indexesToRemove maxCount:Number.MAX_VALUE inIndexRange:nil]; - - // get array of indexes we need to add - var addSet = [_selectedRowIndexes copy], - indexesToAdd = []; - [addSet removeIndexes:_currentlySelected]; - [addSet getIndexes:indexesToAdd maxCount:Number.MAX_VALUE inIndexRange:nil]; - - for (var i = 0; i < indexesToRemove.length; i++) - { - var row = indexesToRemove[i]; - for (var column = 0; column < _tableColumns.length; column++) - if ([_tableCells[column][row] respondsToSelector:@selector(highlight:)]) - [_tableCells[column][row] highlight:NO]; - } - for (var i = 0; i < indexesToAdd.length; i++) - { - var row = indexesToAdd[i]; - for (var column = 0; column < _tableColumns.length; column++) - if ([_tableCells[column][row] respondsToSelector:@selector(highlight:)]) - [_tableCells[column][row] highlight:YES]; - } + return YES; +} - // add each one we need to add, taking the selection views from removed seelctions, the pool, or new - for (var i = 0; i < indexesToAdd.length; i++) +- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp +{/* + _clickedRow = [self rowAtPoint:point]; + _clickedColumn = [self columnAtPoint:point]; + + if ([anEvent clickCount] === 2) { - var index = indexesToAdd[i], - view; - - if (indexesToRemove.length > 0) + CPLog.warn("edit?!"); + + [self sendAction:_doubleAction to:_target]; + } + else + { + if (![_previousSelectedRowIndexes isEqualToIndexSet:_selectedRowIndexes]) { - view = _selectionViews[indexesToRemove.pop()]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]; } - else if (_selectionViewsPool.length > 0) + + [self sendAction:_action to:_target]; + } +*/ +} + +- (void)_updateSelectionWithMouseAtRow:(CPInteger)aRow +{ + // If cmd/ctrl was held down XOR the old selection with the proposed selection + if ([self mouseDownFlags] & (CPCommandKeyMask | CPControlKeyMask | CPAlternateKeyMask)) + { + if ([_selectedRowIndexes containsIndex:aRow]) { - view = _selectionViewsPool.pop(); - [self addSubview:view positioned:CPWindowBelow relativeTo:nil]; + newSelection = [_selectedRowIndexes copy]; + + [newSelection removeIndex:aRow]; } + + else if (_allowsMultipleSelection) + { + newSelection = [_selectedRowIndexes copy]; + + [newSelection addIndex:aRow]; + } + else - { - view = [[CPView alloc] init]; - [view setBackgroundColor:[CPColor alternateSelectedControlColor]]; - - [self addSubview:view positioned:CPWindowBelow relativeTo:nil]; - } - - _selectionViews[index] = view; - - var frame = [self rectOfRow:index]; - frame.size.height += _intercellSpacing.height - 1; - //frame.size.width += 500; - - [view setFrame:frame]; + newSelection = [CPIndexSet indexSetWithIndex:aRow]; } - - // remove any selections that weren't already reused - for (var i = 0; i < indexesToRemove.length; i++) + + else if (_allowsMultipleSelection) + newSelection = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(MIN(aRow, _selectionStartRow), ABS(aRow - _selectionStartRow) + 1)]; + + else if (aRow >= 0 && aRow < _numberOfRows) + newSelection = [CPIndexSet indexSetWithIndex:aRow]; + + else + newSelection = [CPIndexSet indexSet]; + + if ([newSelection isEqualToIndexSet:_selectedRowIndexes]) + return; + + if (_implementedDelegateMethods & CPTableViewDelegate_selectionShouldChangeInTableView_ && + ![_delegate selectionShouldChangeInTableView:self]) + return; + + if (_implementedDelegateMethods & CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_) + newSelection = [_delegate tableView:self selectionIndexesForProposedSelection:newSelection]; + + if (_implementedDelegateMethods & CPTableViewDelegate_tableView_shouldSelectRow_) { - var row = indexesToRemove[i], - view = _selectionViews[row]; - - [view removeFromSuperview]; - _selectionViewsPool.push(view); + var indexArray = []; + + [newSelection getIndexes:indexArray maxCount:-1 inIndexRange:nil]; + + var indexCount = indexArray.length; + + while (indexCount--) + { + var index = indexArray[indexCount]; + + if (![_delegate tableView:self shouldSelectRow:index]) + [newSelection removeIndex:index]; + } } - - // update the currently selected index set - _currentlySelected = [_selectedRowIndexes copy]; + + // if empty selection is not allowed and the new selection has nothing selected, abort + if (!_allowsEmptySelection && [newSelection count] === 0) + return; + + if ([newSelection isEqualToIndexSet:_selectedRowIndexes]) + return; + + [self selectRowIndexes:newSelection byExtendingSelection:NO]; + + [[CPNotificationCenter defaultCenter] + postNotificationName:CPTableViewSelectionIsChangingNotification + object:self + userInfo:nil]; } @end - var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", CPTableViewDelegateKey = @"CPTableViewDelegateKey", CPTableViewHeaderViewKey = @"CPTableViewHeaderViewKey", @@ -1246,10 +1413,13 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", - (id)initWithCoder:(CPCoder)aCoder { - if (self = [super initWithCoder:aCoder]) + //FIXME:!!!! + [self init]; + + self = [super initWithCoder:aCoder]; + + if (self) { - [self _init]; - _dataSource = [aCoder decodeObjectForKey:CPTableViewDataSourceKey]; _delegate = [aCoder decodeObjectForKey:CPTableViewDelegateKey]; @@ -1259,9 +1429,10 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", _allowsMultipleSelection = [aCoder decodeBoolForKey:CPTableViewMultipleSelectionKey]; _allowsEmptySelection = [aCoder decodeBoolForKey:CPTableViewEmptySelectionKey]; - var tableColumns = [aCoder decodeObjectForKey:CPTableViewTableColumnsKey]; - for (var i = 0; i < tableColumns.length; i++) - [self addTableColumn:tableColumns[i]]; + _tableColumns = [aCoder decodeObjectForKey:CPTableViewTableColumnsKey]; + + [_tableColumns makeObjectsPerformSelector:@selector(setTableView:) withObject:self]; + _dirtyTableColumnRangeIndex = 0; } return self; @@ -1274,29 +1445,13 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", [aCoder encodeObject:_dataSource forKey:CPTableViewDataSourceKey]; [aCoder encodeObject:_delegate forKey:CPTableViewDelegateKey]; - [aCoder encodeObject:_tableColumns forKey:CPTableViewTableColumnsKey]; - [aCoder encodeFloat:_rowHeight forKey:CPTableViewRowHeightKey]; [aCoder encodeSize:_intercellSpacing forKey:CPTableViewIntercellSpacingKey]; [aCoder encodeBool:_allowsMultipleSelection forKey:CPTableViewMultipleSelectionKey]; [aCoder encodeBool:_allowsEmptySelection forKey:CPTableViewEmptySelectionKey]; -} - -@end - - - -@implementation CPColor (TableView) - -+ (CPColor)alternateSelectedControlColor -{ - return [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]; -} - -+ (CPColor)secondarySelectedControlColor -{ - return [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]; + + [aCoder encodeObject:_tableColumns forKey:CPTableViewTableColumnsKey]; } @end diff --git a/AppKit/NEWCPTableColumn.j b/AppKit/NEWCPTableColumn.j deleted file mode 100644 index 50aa73f4b..000000000 --- a/AppKit/NEWCPTableColumn.j +++ /dev/null @@ -1,342 +0,0 @@ - -@import -@import -@import -@import - -@import "CPTableHeaderView.j" - - -/* - @global - @class CPTableColumn -*/ -CPTableColumnNoResizing = 0; -/* - @global - @class CPTableColumn -*/ -CPTableColumnAutoresizingMask = 1; -/* - @global - @class CPTableColumn -*/ -CPTableColumnUserResizingMask = 2; - -@implementation NEWCPTableColumn : CPObject -{ - CPTableView _tableView; - CPView _headerView; - CPView _dataView; - Object _dataViewData; - - float _width; - float _minWidth; - float _maxWidth; - - id _identifier; - BOOL _isEditable; - CPSortDescriptor _sortDescriptorPrototype; - BOOL _isHidden; - CPString _headerToolTip; -} - -- (id)initWithIdentifier:(id)anIdentifier -{ - self = [super init]; - - if (self) - { - _dataViewData = { }; - - _width = 100.0; - _minWidth = 10.0; - _maxWidth = 1000000.0; - - [self setIdentifier:anIdentifier]; - [self setHeaderView:[CPTextField new]]; - [self setDataView:[CPTextField new]]; - } - - return self -} - -- (void)setTableView:(CPTableView)aTableView -{ - _tableView = aTableView; -} - -- (CPTableView)tableView -{ - return _tableView; -} - -- (void)setWidth:(float)aWidth -{ - aWidth = +aWidth; - - if (_width === aWidth) - return; - - var newWidth = MIN(MAX(aWidth, [self minWidth]), [self maxWidth]); - - if (_width === newWidth) - return; - - var oldWidth = _width; - - _width = newWidth; - - var tableView = [self tableView]; - - if (tableView) - [[CPNotificationCenter defaultCenter] - postNotificationName:CPTableViewColumnDidResizeNotification - object:tableView - userInfo:[CPDictionary dictionaryWithObjects:[self, oldWidth] forKeys:[@"CPTableColumn", "CPOldWidth"]]]; -} - -- (float)width -{ - return _width; -} - -- (void)setMinWidth:(float)aMinWidth -{ - aMinWidth = +aMinWidth; - - if (_minWidth === aMinWidth) - return; - - _minWidth = aMinWidth; - - var width = [self width], - newWidth = MAX(width, [self minWidth]); - - if (width !== newWidth) - [self setWidth:newWidth]; -} - -- (float)minWidth -{ - return _minWidth; -} - -- (void)setMaxWidth:(float)aMaxWidth -{ - aMaxWidth = +aMaxWidth; - - if (_maxWidth === aMaxWidth) - return; - - _maxWidth = aMaxWidth; - - var width = [self width], - newWidth = MAX(width, [self maxWidth]); - - if (width !== newWidth) - [self setWidth:newWidth]; -} - -- (float)maxWidth -{ - return _maxWidth; -} - -- (void)setResizingMask:(unsigned)aResizingMask -{ - _resizingMask = aResizingMask; -} - -- (float)resizingMask -{ - return _resizingMask; -} - -- (void)sizeToFit -{ - var width = _CGRectGetWidth([_headerView frame]); - - if (width < [self minWidth]) - [self setMinWidth:width]; - else if (width > [self maxWidth]) - [self setMaxWidth:width] - - if (_width !== width) - [self setWidth:width]; -} - -//Setting Component Cells -- (void)setHeaderView:(CPView)aView -{ - if (!aView) - [CPException raise:CPInvalidArgumentException reason:@"Attempt to set nil header view on " + [self description]]; - - _headerView = aView; -} - -- (CPView)headerView -{ - return _headerView; -} - -- (void)setDataView:(CPView)aView -{ - if (_dataView === aView) - return; - - if (_dataView) - _dataViewData[[_dataView UID]] = nil; - - _dataView = aView; - _dataViewData[[aView UID]] = [CPKeyedArchiver archivedDataWithRootObject:aView]; -} - -- (CPView)dataView -{ - return _dataView; -} - -/* - Returns the CPView object used by the CPTableView to draw values for the receiver. - - By default, this method just calls dataView. Subclassers can override if they need to - potentially use different cells for different rows. Subclasses should expect this method - to be invoked with row equal to -1 in cases where no actual row is involved but the table - view needs to get some generic cell info. -*/ -- (id)dataViewForRow:(int)aRowIndex -{ - return [self dataView]; -} - -- (id)_newDataViewForRow:(int)aRowIndex -{ - var dataView = [self dataViewForRow:aRowIndex], - dataViewUID = [dataView UID]; - -var x = [self tableView]._cachedDataViews[dataViewUID]; -if (x && x.length) -return x.pop(); - - // if we haven't cached an archive of the data view, do it now - if (!_dataViewData[dataViewUID]) - _dataViewData[dataViewUID] = [CPKeyedArchiver archivedDataWithRootObject:dataView]; - - // unarchive the data view cache - var newDataView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[dataViewUID]]; -newDataView.identifier = dataViewUID; - return newDataView; -} - -//Setting the Identifier - -/* - Sets the receiver identifier to anIdentifier. -*/ -- (void)setIdentifier:(id)anIdentifier -{ - _identifier = anIdentifier; -} - -/* - Returns the object used by the data source to identify the attribute corresponding to the receiver. -*/ -- (id)identifier -{ - return _identifier; -} - -//Controlling Editability - -/* - Controls whether the user can edit cells in the receiver by double-clicking them. -*/ -- (void)setEditable:(BOOL)shouldBeEditable -{ - _isEditable = shouldBeEditable; -} - -/* - Returns YES if the user can edit cells associated with the receiver by double-clicking the - column in the NSTableView, NO otherwise. -*/ -- (BOOL)isEditable -{ - return _isEditable; -} - -//Sorting -- (void)setSortDescriptorPrototype:(CPSortDescriptor)aSortDescriptor -{ - _sortDescriptorPrototype = aSortDescriptor; -} - -- (CPSortDescriptor)sortDescriptorPrototype -{ - return _sortDescriptorPrototype; -} - -//Setting Column Visibility - -- (void)setHidden:(BOOL)shouldBeHidden -{ - _isHidden = shouldBeHidden; -} - -- (BOOL)isHidden -{ - return _isHidden; -} - -//Setting Tool Tips - -/* - Sets the tooltip string that is displayed when the cursor pauses over the - header cell of the receiver. -*/ -- (void)setHeaderToolTip:(CPString)aToolTip -{ - _headerToolTip = aToolTip; -} - -- (CPString)headerToolTip -{ - return _headerToolTip; -} - -@end - -@implementation NEWCPTableColumn (NSInCompatibility) - -- (void)setHeaderCell:(CPView)aView -{ - [CPException raise:CPUnsupportedMethodException - reason:@"setHeaderCell: is not supported. -setHeaderCell:aView instead."]; -} - -- (CPView)headerCell -{ - [CPException raise:CPUnsupportedMethodException - reason:@"headCell is not supported. -headerView instead."]; -} - -- (void)setDataCell:(CPView)aView -{ - [CPException raise:CPUnsupportedMethodException - reason:@"setDataCell: is not supported. Use -setHeaderCell:aView instead."]; -} - -- (CPView)dataCell -{ - [CPException raise:CPUnsupportedMethodException - reason:@"dataCell is not supported. Use -dataCell instead."]; -} - -- (id)dataCellForRow:(int)row -{ - [CPException raise:CPUnsupportedMethodException - reason:@"dataCellForRow: is not supported. Use -dataViewForRow:row instead."]; -} - -@end diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j deleted file mode 100644 index be330f431..000000000 --- a/AppKit/NEWCPTableView.j +++ /dev/null @@ -1,1401 +0,0 @@ - -@import - -@import "CPControl.j" -@import "CPTableColumn.j" -@import "_CPCornerView.j" -@import "CPScroller.j" - -#include "CoreGraphics/CGGeometry.h" - -var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2, - - CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_ = 1 << 3, - CPTableViewDataSource_tableView_namesOfPromisedFilesDroppedAtDestination_forDraggedRowsWithIndexes_ = 1 << 4, - CPTableViewDataSource_tableView_validateDrop_proposedRow_proposedDropOperation_ = 1 << 5, - CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_ = 1 << 6, - - CPTableViewDataSource_tableView_sortDescriptorsDidChange_ = 1 << 7; - -var CPTableViewDelegate_selectionShouldChangeInTableView_ = 1 << 0, - CPTableViewDelegate_tableView_dataViewForTableColumn_row_ = 1 << 1, - CPTableViewDelegate_tableView_didClickTableColumn_ = 1 << 2, - CPTableViewDelegate_tableView_didDragTableColumn_ = 1 << 3, - CPTableViewDelegate_tableView_heightOfRow_ = 1 << 4, - CPTableViewDelegate_tableView_isGroupRow_ = 1 << 5, - CPTableViewDelegate_tableView_mouseDownInHeaderOfTableColumn_ = 1 << 6, - CPTableViewDelegate_tableView_nextTypeSelectMatchFromRow_toRow_forString_ = 1 << 7, - CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_ = 1 << 8, - CPTableViewDelegate_tableView_shouldEditTableColumn_row_ = 1 << 9, - CPTableViewDelegate_tableView_shouldSelectRow_ = 1 << 10, - CPTableViewDelegate_tableView_shouldSelectTableColumn_ = 1 << 11, - CPTableViewDelegate_tableView_shouldShowViewExpansionForTableColumn_row_ = 1 << 12, - CPTableViewDelegate_tableView_shouldTrackView_forTableColumn_row_ = 1 << 13, - CPTableViewDelegate_tableView_shouldTypeSelectForEvent_withCurrentSearchString_ = 1 << 14, - CPTableViewDelegate_tableView_toolTipForView_rect_tableColumn_row_mouseLocation_ = 1 << 15, - CPTableViewDelegate_tableView_typeSelectStringForTableColumn_row_ = 1 << 16, - CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_ = 1 << 17, - CPTableViewDelegate_tableViewSelectionDidChange_ = 1 << 18, - CPTableViewDelegate_tableViewSelectionIsChanging_ = 1 << 19; - -// TODO: add docs -/* -CPTableViewSelectionHighlightStyleRegular = 0; -CPTableViewSelectionHighlightStyleSourceList = 1; -*/ - -#define NUMBER_OF_COLUMNS() (_tableColumns.length) - -@implementation _CPTableDrawView : CPView -{ - CPTableView _tableView; -} - -- (id)initWithTableView:(CPTableView)aTableView -{ - self = [super init]; - - if (self) - _tableView = aTableView; - - return self; -} - -- (void)drawRect:(CGRect)aRect -{ - var frame = [self frame], - context = [[CPGraphicsContext currentContext] graphicsPort]; - - CGContextTranslateCTM(context, -_CGRectGetMinX(frame), -_CGRectGetMinY(frame)); - - [_tableView _drawRect:aRect]; -} - -@end - -@implementation NEWCPTableView : CPControl -{ - id _dataSource; - CPInteger _implementedDataSourceMethods; - - id _delegate; - CPInteger _implementedDelegateMethods; - - CPArray _tableColumns; - CPArray _tableColumnRanges; - CPInteger _dirtyTableColumnRangeIndex; - CPInteger _numberOfHiddenColumns; - - Object _objectValues; - CPRange _exposedRows; - CPIndexSet _exposedColumns; - - Object _dataViewsForTableColumns; - Object _cachedDataViews; - - //Configuring Behavior - BOOL _allowsColumnReordering; - BOOL _allowsColumnResizing; - BOOL _allowsMultipleSelection; - BOOL _allowsEmptySelection; - - //Setting Display Attributes - CGSize _intercellSpacing; - float _rowHeight; - BOOL _usesAlternatingRowBackgroundColors; - unsigned _selectionHighlightMask; - unsigned _currentHighlightedTableColumn; - - unsigned _numberOfRows; - - - CPTableHeaderView _headerView; - _CPCornerView _cornerView; - - CPIndexSet _selectedColumnIndexes; - CPIndexSet _selectedRowIndexes; - CPInteger _selectionStartRow; - - _CPTableDrawView _tableDrawView; -} - -- (id)initWithFrame:(CGRect)aFrame -{ - self = [super initWithFrame:aFrame]; - - if (self) - { - //Configuring Behavior - _allowsColumnReordering = YES; - _allowsColumnResizing = YES; - _allowsMultipleSelection = NO; - _allowsEmptySelection = YES; - _allowsColumnSelection = NO; - - _tableViewFlags = 0; - - //Setting Display Attributes -// _selectionHighlightMask = CPTableViewSelectionHighlightStyleRegular; - - _tableColumns = []; - _tableColumnRanges = []; - _dirtyTableColumnRangeIndex = CPNotFound; - _numberOfHiddenColumns = 0; - - _objectValues = { }; - _dataViewsForTableColumns = { }; - _dataViews= []; - _numberOfRows = 0; - _exposedRows = [CPIndexSet indexSet]; - _exposedColumns = [CPIndexSet indexSet]; - _cachedDataViews = { }; - _intercellSpacing = _CGSizeMake(0.0, 0.0); - _rowHeight = 24.0; - - _headerView = [[CPTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, [self bounds].size.width, _rowHeight)]; - - [_headerView setTableView:self]; - - _cornerView = [[_CPCornerView alloc] initWithFrame:CGRectMake(0, 0, [CPScroller scrollerWidth], CGRectGetHeight([_headerView frame]))]; - - _selectedColumnIndexes = [CPIndexSet indexSet]; - _selectedRowIndexes = [CPIndexSet indexSet]; - - _tableDrawView = [[_CPTableDrawView alloc] initWithTableView:self]; - [_tableDrawView setBackgroundColor:[CPColor yellowColor]]; - [self addSubview:_tableDrawView]; - } - - return self; -} - -- (void)setDataSource:(id)aDataSource -{ - if (_dataSource === aDataSource) - return; - - _dataSource = aDataSource; - _implementedDataSourceMethods = 0; - - if (!_dataSource) - return; - - if (![_dataSource respondsToSelector:@selector(numberOfRowsInTableView:)]) - [CPException raise:CPInternalInconsistencyException - reason:[aDataSource description] + " does not implement numberOfRowsInTableView:."]; - - if (![_dataSource respondsToSelector:@selector(tableView:objectValueForTableColumn:row:)]) - [CPException raise:CPInternalInconsistencyException - reason:[aDataSource description] + " does not implement tableView:objectValueForTableColumn:row:"]; - - if ([_dataSource respondsToSelector:@selector(tableView:setObjectValue:forTableColumn:row:)]) - _implementedDataSourceMethods |= CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_; - - if ([_dataSource respondsToSelector:@selector(tableView:setObjectValue:forTableColumn:row:)]) - _implementedDataSourceMethods |= CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_; - - if ([_dataSource respondsToSelector:@selector(tableView:namesOfPromisedFilesDroppedAtDestination:forDraggedRowsWithIndexes:)]) - _implementedDataSourceMethods |= CPTableViewDataSource_tableView_namesOfPromisedFilesDroppedAtDestination_forDraggedRowsWithIndexes_; - - if ([_dataSource respondsToSelector:@selector(tableView:validateDrop:proposedRow:proposedDropOperation:)]) - _implementedDataSourceMethods |= CPTableViewDataSource_tableView_validateDrop_proposedRow_proposedDropOperation_; - - if ([_dataSource respondsToSelector:@selector(tableView:writeRowsWithIndexes:toPasteboard:)]) - _implementedDataSourceMethods |= CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_; - - [self reloadData]; -} - -- (id)dataSource -{ - return _dataSource; -} - -//Loading Data - -- (void)reloadData -{ - if (!_dataSource) - return; - - _objectValues = { }; - [self noteNumberOfRowsChanged]; -[self _sizeToParent]; - [self layoutSubviews]; -} - -//Target-action Behavior - -- (void)setDoubleAction:(SEL)anAction -{ - _doubleAction = anAction; -} - -- (SEL)doubleAction -{ - return _doubleAction; -} - -/* - * - clickedColumn - * - clickedRow -*/ -//Configuring Behavior - -- (void)setAllowsColumnReordering:(BOOL)shouldAllowColumnReordering -{ - _allowsColumnReordering = !!shouldAllowColumnReordering; -} - -- (BOOL)allowsColumnReordering -{ - return _allowsColumnReordering; -} - -- (void)setAllowsColumnResizing:(BOOL)shouldAllowColumnResizing -{ - _allowsColumnResizing = !!shouldAllowColumnResizing; -} - -- (BOOL)allowsColumnResizing -{ - return _allowsColumnResizing; -} - -- (void)setAllowsMultipleSelection:(BOOL)shouldAllowMultipleSelection -{ - _allowsMultipleSelection = !!shouldAllowMultipleSelection; -} - -- (BOOL)allowsMultipleSelection -{ - return _allowsMultipleSelection; -} - -- (void)setAllowsEmptySelection:(BOOL)shouldAllowEmptySelection -{ - _allowsEmptySelection = !!shouldAllowEmptySelection; -} - -- (BOOL)allowsEmptySelection -{ - return _allowsEmptySelection; -} - -- (void)setAllowsColumnSelection:(BOOL)shouldAllowColumnSelection -{ - _allowsColumnSelection = !!shouldAllowColumnSelection; -} - -- (BOOL)allowsColumnSelection -{ - return _allowsColumnSelection; -} - -//Setting Display Attributes - -- (void)setIntercellSpacing:(CGSize)aSize -{ - if (_CGSizeEqualToSize(_intercellSpacing, aSize)) - return; - - _intercellSpacing = _CGSizeMakeCopy(aSize); - - [self setNeedsLayout]; -} - -- (void)setThemeState:(int)astae -{ -} - -- (CGSize)intercellSpacing -{ - return _CGSizeMakeCopy(_intercellSpacing); -} - -- (void)setRowHeight:(unsigned)aRowHeight -{ - aRowHeight = +aRowHeight; - - if (_rowHeight === aRowHeight) - return; - - _rowHeight = aRowHeight; - - [self setNeedsLayout]; -} - -- (unsigned)rowHeight -{ - return _rowHeight; -} -/* -- (void)setUsesAlternatingRowBackgroundColors:(BOOL)shouldUseAlternatingRowBackgroundColors -{ - // TODO:need to look at how one actually sets the alternating row, a tip at: - // http://forums.macnn.com/79/developer-center/228347/nstableview-alternating-row-colors/ - // otherwise this may not be feasible or may introduce an additional change req'd in CP - // we'd probably need to iterate through rowId % 2 == 0 and setBackgroundColor with - // whatever the alternating row color is. - _usesAlternatingRowBackgroundColors = shouldUseAlternatingRowBackgroundColors; -} - -- (BOOL)usesAlternatingRowBackgroundColors -{ - return _usesAlternatingRowBackgroundColors; -} - -- (unsigned)selectionHighlightStyle -{ - return _selectionHighlightMask; -} - -- (void)setSelectionHighlightStyle:(unsigned)aSelectionHighlightStyle -{ - _selectionHighlightMask = aSelectionHighlightStyle; -} - -- setGridColor: - - - * - gridColor - * - setGridStyleMask: - * - gridStyleMask - * - indicatorImageInTableColumn: - * - setIndicatorImage:inTableColumn: -*/ -//Column Management - -- (void)addTableColumn:(CPTableColumn)aTableColumn -{ - [_tableColumns addObject:aTableColumn]; - [aTableColumn setTableView:self]; - - if (_dirtyTableColumnRangeIndex < 0) - _dirtyTableColumnRangeIndex = NUMBER_OF_COLUMNS() - 1; - else - _dirtyTableColumnRangeIndex = MIN(NUMBER_OF_COLUMNS() - 1, _dirtyTableColumnRangeIndex); - - [self setNeedsLayout]; -} - -- (void)removeTableColumn:(CPTableColumn)aTableColumn -{ - if ([aTableColumn tableView] !== self) - return; - - var index = [_tableColumns indeOfObjectIdenticalTo:aTableColumn]; - - if (index === CPNotFound) - return; - - [aTableColumn setTableView:nil]; - [_tableColumns removeObjectAtIndex:index]; - - var tableColumnUID = [aTableColumn UID]; - - if (_objectValues[tableColumnUID]) - _objectValues[tableColumnUID] = nil; - - if (_dirtyTableColumnRangeIndex < 0) - _dirtyTableColumnRangeIndex = index; - else - _dirtyTableColumnRangeIndex = MIN(index, _dirtyTableColumnRangeIndex); - - [self setNeedsLayout]; -} - -- (void)moveColumn:(unsigned)fromIndex toColumn:(unsigned)toIndex -{ - fromIndex = +fromIndex; - toIndex = +toIndex; - - if (fromIndex === toIndex) - return; - - if (_dirtyTableColumnRangeIndex < 0) - _dirtyTableColumnRangeIndex = MIN(fromIndex, toIndex); - else - _dirtyTableColumnRangeIndex = MIN(fromIndex, toIndex, _dirtyTableColumnRangeIndex); - - if (toIndex > fromIndex) - --toIndex; - - var tableColumn = _tableColumns[fromIndex]; - - [_tableColumns removeObjectAtIndex:fromIndex]; - [_tableColumns insertObject:tableColumn atIndex:toIndex]; - - [self setNeedsLayout]; -} - -- (CPArray)tableColumns -{ - return _tableColumns; -} - -- (CPInteger)columnWithIdentifier:(CPString)anIdentifier -{ - var index = 0, - count = NUMBER_OF_COLUMNS(); - - for (; index < count; ++index) - if ([_tableColumns identifier] === anIdentifier) - return index; - - return CPNotFound; -} - -- (CPTableColumn)tableColumnWithIdentifier:(CPString)anIdentifier -{ - var index = [self columnWithIdentifier:anIdentifier]; - - if (index === CPNotFound) - return nil; - - return _tableColumns[index]; -} - -//Selecting Columns and Rows -- (void)selectColumnIndexes:(CPIndexSet)columns byExtendingSelection:(BOOL)shouldExtendSelection -{ - // We deselect all columns when selecting rows. - _selectedRowIndexes = [CPIndexSet indexSet]; - - if (shouldExtendSelection) - [_selectedColumnIndexes addIndexes:columns]; - else - _selectedColumnIndexes = [columns copy]; - - [self setNeedsLayout]; -} - -- (void)selectRowIndexes:(CPIndexSet)rows byExtendingSelection:(BOOL)shouldExtendSelection -{ - // We deselect all rows when selecting columns. - _selectedColumnIndexes = [CPIndexSet indexSet]; - - if (shouldExtendSelection) - [_selectedRowIndexes addIndexes:rows]; - else - _selectedRowIndexes = [rows copy]; - - [self setNeedsLayout]; -} - -- (CPIndexSet)selectedColumnIndexes -{ - return _selectedColumnIndexes; -} - -- (void)selectedRowIndexes -{ - return _selectedRowIndexes; -} - -- (void)deselectColumn:(CPInteger)aColumn -{ - [_selectedColumnIndexes removeIndex:aColumn]; -} - -- (void)deselectRow:(CPInteger)aRow -{ - [_selectedRowIndexes removeIndex:aRow]; -} - -- (CPInteger)numberOfSelectedColumns -{ - return [_selectedColumnIndexes count]; -} - -- (CPInteger)numberOfSelectedRows -{ - return [_selectedRowIndexes count]; -} - -/* -- (CPInteger)selectedColumn - * - selectedRow -*/ - -- (BOOL)isColumnSelected:(CPInteger)aColumn -{ - return [_selectedColumnIndexes containsIndex:aColumn]; -} - -- (BOOL)isRowSelected:(CPInteger)aRow -{ - return [_selectedRowIndexes containsIndex:aRow]; -} -/* -- (void)selectAll: - * - deselectAll: - * - allowsTypeSelect - * - setAllowsTypeSelect: -*/ -//Table Dimensions - -- (int)numberOfColumns -{ - return NUMBER_OF_COLUMNS(); -} - -/* - Returns the number of rows in the receiver. -*/ -- (int)numberOfRows -{ - if (!_dataSource) - return 0; - - return [_dataSource numberOfRowsInTableView:self]; -} - -//Displaying Cell -/* - * - preparedCellAtColumn:row: -*/ -//Editing Cells -/* - * - editColumn:row:withEvent:select: - * - editedColumn - * - editedRow -*/ -//Setting Auxiliary Views -/* - * - setHeaderView: - * - headerView - * - setCornerView: - * - cornerView -*/ - -- (CPView)cornerView -{ - return _cornerView; -} - -- (void)setCornerView:(CPView)aView -{ - _cornerView = aView; -} - -- (CPView)headerView -{ - return _headerView; -} - -- (void)setHeaderView:(CPView)aHeaderView -{ - _headerView = aHeaderView; - [_headerView setTableView:self]; -} - -//Layout Support - -// Complexity: -// O(Columns) -- (void)_recalculateTableColumnRanges -{ - if (_dirtyTableColumnRangeIndex < 0) - return; - - var index = _dirtyTableColumnRangeIndex, - count = NUMBER_OF_COLUMNS(), - x = index === 0 ? 0.0 : CPMaxRange(_tableColumnRanges[index - 1]); - - for (; index < count; ++index) - { - var tableColumn = _tableColumns[index]; - - if ([tableColumn isHidden]) - _tableColumnRanges[index] = CPMakeRange(x, 0.0); - - else - { - var width = [_tableColumns[index] width]; - - _tableColumnRanges[index] = CPMakeRange(x, width); - - x += width; - } - } - - _tableColumnRanges.length = count; - _dirtyTableColumnRangeIndex = CPNotFound; -} - -// Complexity: -// O(1) -- (CGRect)rectOfColumn:(CPInteger)aColumnIndex -{ - aColumnIndex = +aColumnIndex; - - if (aColumnIndex < 0 || aColumnIndex >= NUMBER_OF_COLUMNS()) - return _CGRectMakeZero(); - - if (_dirtyTableColumnRangeIndex !== CPNotFound) - [self _recalculateTableColumnRanges]; - - var range = _tableColumnRanges[aColumnIndex]; - - return _CGRectMake(range.location, 0.0, range.length, CGRectGetHeight([self bounds])); -} - -- (CGRect)rectOfRow:(CPInteger)aRowIndex -{ - if (NO) - return NULL; - - // FIXME: WRONG: ASK TABLE COLUMN RANGE - return _CGRectMake(0.0, (aRowIndex * (_rowHeight + _intercellSpacing.height)), _CGRectGetWidth([self bounds]), _rowHeight); -} - -// Complexity: -// O(1) -- (CPRange)rowsInRect:(CGRect)aRect -{ - var bounds = nil, - firstRow = [self rowAtPoint:aRect.origin], - lastRow = [self rowAtPoint:_CGPointMake(0.0, _CGRectGetMaxY(aRect))]; - - if (firstRow < 0) - { - bounds = [self bounds]; - - if (_CGRectGetMinY(aRect) < _CGRectGetMinY(bounds)) - firstRow = 0; - else - firstRow = _numberOfRows - 1; - } - - if (lastRow < 0) - { - if (!bounds) - bounds = [self bounds]; - - if (_CGRectGetMaxY(aRect) < _CGRectGetMinY(bounds)) - lastRow = 0; - else - lastRow = _numberOfRows - 1; - } - - return CPMakeRange(firstRow, lastRow - firstRow + 1); -} - -// Complexity: -// O(lg Columns) if table view contains no hidden columns -// O(Columns) if table view contains hidden columns -- (CPIndexSet)columnIndexesInRect:(CGRect)aRect -{ - var column = MAX(0, [self columnAtPoint:_CGPointMake(aRect.origin.x, 0.0)]), - lastColumn = [self columnAtPoint:_CGPointMake(_CGRectGetMaxX(aRect), 0.0)]; - - if (lastColumn === CPNotFound) - lastColumn = NUMBER_OF_COLUMNS() - 1; - - // Don't bother doing the expensive removal of hidden indexes if we have no hidden columns. - if (_numberOfHiddenColumns <= 0) - return [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(column, lastColumn - column + 1)]; - - // - var indexSet = [CPIndexSet indexSet]; - - for (; column <= lastColumn; ++column) - { - var tableColumn = _tableColumns[column]; - - if (![tableColumn isHidden]) - [indexSet addIndex:column]; - } - - return indexSet; -} - -// Complexity: -// O(lg Columns) if table view contains now hidden columns -// O(Columns) if table view contains hidden columns -- (CPInteger)columnAtPoint:(CGPoint)aPoint -{ - var bounds = [self bounds]; - - if (!_CGRectContainsPoint(bounds, aPoint)) - return CPNotFound; - - if (_dirtyTableColumnRangeIndex !== CPNotFound) - [self _recalculateTableColumnRanges]; - - var x = aPoint.x, - low = 0, - high = _tableColumnRanges.length - 1; - - while (low <= high) - { - var middle = FLOOR(low + (high - low) / 2), - range = _tableColumnRanges[middle]; - - if (x < range.location) - high = middle - 1; - - else if (x >= CPMaxRange(range)) - low = middle + 1; - - else - { - var numberOfColumns = _tableColumnRanges.length; - - while (middle < numberOfColumns && [_tableColumns[middle] isHidden]) - ++middle; - - if (middle < numberOfColumns) - return middle; - - return CPNotFound; - } - } - - return CPNotFound; -} - -- (CPInteger)rowAtPoint:(CGPoint)aPoint -{ - var y = aPoint.y; - - if (NO) - { - } - - return FLOOR(y / (_rowHeight + _intercellSpacing.height)); -} - -- (CGRect)frameOfDataViewAtColumn:(CPInteger)aColumnIndex row:(CPInteger)aRowIndex -{ - var tableColumnRange = _tableColumns[aColumnIndex], - rectOfRow = [self rectOfRow:aRowIndex]; - - return _CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow)); -} -/* - * - columnAutoresizingStyle - * - setColumnAutoresizingStyle: -*/ -- (void)sizeLastColumnToFit -{ - var superview = [self superview]; - - if (!superview) - return; - - var superviewSize = [superview bounds].size; - - if (_dirtyTableColumnRangeIndex !== CPNotFound) - [self _recalculateTableColumnRanges]; - - var count = NUMBER_OF_COLUMNS(); - - while (count-- && [_tableColumns[count] isHidden]) ; - - if (count >= 0) - { - var difference = superviewSize.width - CPMaxRange(_tableColumnRanges[count]), - tableColumn = _tableColumns[count]; - - [tableColumn setWidth:MAX(0.0, [tableColumn width] + difference)]; - } - - [self setNeedsLayout]; -} - -- (void)noteNumberOfRowsChanged -{ - _numberOfRows = [_dataSource numberOfRowsInTableView:self]; - - [self setNeedsLayout]; -} -/* - * - tile - * - sizeToFit - * - noteHeightOfRowsWithIndexesChanged: -*/ -//Scrolling -/* - * - scrollRowToVisible: - * - scrollColumnToVisible: -*/ -//Persistence -/* - * - autosaveName - * - autosaveTableColumns - * - setAutosaveName: - * - setAutosaveTableColumns: -*/ - -- (void)_sizeToParent -{ - var superviewSize = [[self superview] bounds].size; - - if (_dirtyTableColumnRangeIndex !== CPNotFound) - [self _recalculateTableColumnRanges]; - - if (_tableColumnRanges.length > 0) - var naturalWidth = CPMaxRange([_tableColumnRanges lastObject]); - - else - var naturalWidth = 0.0; - - [self setFrameSize:_CGSizeMake( MAX(superviewSize.width, naturalWidth), - MAX(superviewSize.height, (_rowHeight + _intercellSpacing.height) * _numberOfRows))]; -} - -//Setting the Delegate:(id)aDelegate - -- (void)setDelegate:(id)aDelegate -{ - if (_delegate === aDelegate) - return; - - var defaultCenter = [CPNotificationCenter defaultCenter]; - - if (_delegate) - { - if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) - [defaultCenter - removeObserver:_delegate - name:CPTableViewColumnDidMoveNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) - [defaultCenter - removeObserver:_delegate - name:CPTableViewColumnDidResizeNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) - [defaultCenter - removeObserver:_delegate - name:CPTableViewSelectionDidChangeNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) - [defaultCenter - removeObserver:_delegate - name:CPTableViewSelectionIsChangingNotification - object:self]; - } - - _delegate = aDelegate; - _implementedDelegateMethods = 0; - - if ([_delegate respondsToSelector:@selector(selectionShouldChangeInTableView:)]) - _implementedDelegateMethods |= CPTableViewDelegate_selectionShouldChangeInTableView_; - - if ([_delegate respondsToSelector:@selector(tableView:dataViewForTableColumn:row:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_dataViewForTableColumn_row_; - - if ([_delegate respondsToSelector:@selector(tableView:didClickTableColumn:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_didClickTableColumn_; - - if ([_delegate respondsToSelector:@selector(tableView:didDragTableColumn:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_didDragTableColumn_; - - if ([_delegate respondsToSelector:@selector(tableView:heightOfRow:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_heightOfRow_; - - if ([_delegate respondsToSelector:@selector(tableView:isGroupRow:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_isGroupRow_; - - if ([_delegate respondsToSelector:@selector(tableView:mouseDownInHeaderOfTableColumn:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_mouseDownInHeaderOfTableColumn_; - - if ([_delegate respondsToSelector:@selector(tableView:nextTypeSelectMatchFromRow:toRow:forString:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_nextTypeSelectMatchFromRow_toRow_forString_; - - if ([_delegate respondsToSelector:@selector(tableView:selectionIndexesForProposedSelection:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_; - - if ([_delegate respondsToSelector:@selector(tableView:shouldEditTableColumn:row:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldEditTableColumn_row_; - - if ([_delegate respondsToSelector:@selector(tableView:shouldSelectRow:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldSelectRow_; - - if ([_delegate respondsToSelector:@selector(tableView:shouldSelectTableColumn:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldSelectTableColumn_; - - if ([_delegate respondsToSelector:@selector(tableView:shouldShowViewExpansionForTableColumn:row:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldShowViewExpansionForTableColumn_row_; - - if ([_delegate respondsToSelector:@selector(tableView:shouldTrackView:forTableColumn:row:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldTrackView_forTableColumn_row_; - - if ([_delegate respondsToSelector:@selector(tableView:shouldTypeSelectForEvent:withCurrentSearchString:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldTypeSelectForEvent_withCurrentSearchString_; - - if ([_delegate respondsToSelector:@selector(tableView:toolTipForView:rect:tableColumn:row:mouseLocation:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_toolTipForView_rect_tableColumn_row_mouseLocation_; - - if ([_delegate respondsToSelector:@selector(tableView:typeSelectStringForTableColumn:row:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_typeSelectStringForTableColumn_row_; - - if ([_delegate respondsToSelector:@selector(tableView:willDisplayView:forTableColumn:row:)]) - _implementedDelegateMethods |= CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_; - - if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(tableViewColumnDidMove:) - name:CPTableViewColumnDidMoveNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(tableViewColumnDidMove:) - name:CPTableViewColumnDidResizeNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(tableViewSelectionDidChange:) - name:CPTableViewSelectionDidChangeNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(tableViewSelectionIsChanging:) - name:CPTableViewSelectionIsChangingNotification - object:self]; -} - -- (id)delegate -{ - return _delegate; -} - -//Highlightable Column Headers -/* -- (CPTableColumn)highlightedTableColumn -{ - -} - - * - setHighlightedTableColumn: -*/ -//Dragging -/* - * - dragImageForRowsWithIndexes:tableColumns:event:offset: - * - canDragRowsWithIndexes:atPoint: - * - setDraggingSourceOperationMask:forLocal: - * - setDropRow:dropOperation: - * - setVerticalMotionCanBeginDrag: - * - verticalMotionCanBeginDrag -*/ -//Sorting -/* - * - setSortDescriptors: - * - sortDescriptors -*/ - -//Text Delegate Methods -/* - * - textShouldBeginEditing: - * - textDidBeginEditing: - * - textDidChange: - * - textShouldEndEditing: - * - textDidEndEditing: -*/ - -- (id)_objectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex -{ - var tableColumnUID = [aTableColumn UID], - tableColumnObjectValues = _objectValues[tableColumnUID]; - - if (!tableColumnObjectValues) - { - tableColumnObjectValues = []; - _objectValues[tableColumnUID] = tableColumnObjectValues; - } - - var objectValue = tableColumnObjectValues[aRowIndex]; - - if (objectValue === undefined) - { - objectValue = [_dataSource tableView:self objectValueForTableColumn:aTableColumn row:aRowIndex]; - tableColumnObjectValues[aRowIndex] = objectValue; - } - - return objectValue; -} - -- (CGRect)_exposedRect -{ - var superview = [self superview]; - - if (![superview isKindOfClass:[CPClipView class]]) - return [self bounds]; - - return [self convertRect:CGRectIntersection([superview bounds], [self frame]) fromView:superview]; -} - -- (void)load -{ - if (!_dataSource) - { - // remove? - return; - } - -// if (!window.blah) -// return window.setTimeout(function() { window.blah = true; [self load]; window.blah = false}, 0.0); - - if (window.console && window.console.profile) - console.profile("cell-load"); - - var exposedRect = [self _exposedRect], - exposedRows = [CPIndexSet indexSetWithIndexesInRange:[self rowsInRect:exposedRect]], - exposedColumns = [self columnIndexesInRect:exposedRect], - obscuredRows = [_exposedRows copy], - obscuredColumns = [_exposedColumns copy]; - - [obscuredRows removeIndexes:exposedRows]; - [obscuredColumns removeIndexes:exposedColumns]; - - var newlyExposedRows = [exposedRows copy], - newlyExposedColumns = [exposedColumns copy]; - - [newlyExposedRows removeIndexes:_exposedRows]; - [newlyExposedColumns removeIndexes:_exposedColumns]; - - var previouslyExposedRows = [exposedRows copy], - previouslyExposedColumns = [exposedColumns copy]; - - [previouslyExposedRows removeIndexes:newlyExposedRows]; - [previouslyExposedColumns removeIndexes:newlyExposedColumns]; - -// console.log("will remove:" + '\n\n' + -// previouslyExposedRows + "\n" + obscuredColumns + "\n\n" + -// obscuredRows + "\n" + previouslyExposedColumns + "\n\n" + -// obscuredRows + "\n" + obscuredColumns); - [self _unloadDataViewsInRows:previouslyExposedRows columns:obscuredColumns]; - [self _unloadDataViewsInRows:obscuredRows columns:previouslyExposedColumns]; - [self _unloadDataViewsInRows:obscuredRows columns:obscuredColumns]; - - [self _loadDataViewsInRows:previouslyExposedRows columns:newlyExposedColumns]; - [self _loadDataViewsInRows:newlyExposedRows columns:previouslyExposedColumns]; - [self _loadDataViewsInRows:newlyExposedRows columns:newlyExposedColumns]; - -// console.log("newly exposed rows: " + newlyExposedRows + "\nnewly exposed columns: " + newlyExposedColumns); - _exposedRows = exposedRows; - _exposedColumns = exposedColumns; - - [_tableDrawView setFrame:exposedRect]; -// [_tableDrawView setBounds:exposedRect]; - [_tableDrawView display]; - - if (window.console && window.console.profile) - console.profileEnd("cell-load"); -} - -- (void)_unloadDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns -{ - if (![rows count] || ![columns count]) - return; - - var rowArray = [], - columnArray = []; - - [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; - [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; - - var columnIndex = 0, - columnsCount = columnArray.length; - - for (; columnIndex < columnsCount; ++columnIndex) - { - var column = columnArray[columnIndex], - tableColumn = _tableColumns[column], - tableColumnUID = [tableColumn UID]; - - var rowIndex = 0, - rowsCount = rowArray.length; - - for (; rowIndex < rowsCount; ++rowIndex) - { - var row = rowArray[rowIndex], - dataView = _dataViewsForTableColumns[tableColumnUID][row]; - - _dataViewsForTableColumns[tableColumnUID][row] = nil; -if (!_cachedDataViews[dataView.identifier]) -_cachedDataViews[dataView.identifier] = [dataView]; -else -_cachedDataViews[dataView.identifier].push(dataView); - } - } -} - -- (void)_loadDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns -{ - if (![rows count] || ![columns count]) - return; - - var rowArray = [], - rowRects = [], - columnArray = []; - - [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; - [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; - - var columnIndex = 0, - columnsCount = columnArray.length; - - for (; columnIndex < columnsCount; ++columnIndex) - { - var column = columnArray[columnIndex], - tableColumn = _tableColumns[column], - tableColumnUID = [tableColumn UID], - tableColumnRange = _tableColumnRanges[column]; - - if (!_dataViewsForTableColumns[tableColumnUID]) - _dataViewsForTableColumns[tableColumnUID] = []; - - var rowIndex = 0, - rowsCount = rowArray.length; - - for (; rowIndex < rowsCount; ++rowIndex) - { - var row = rowArray[rowIndex], - dataView = [tableColumn _newDataViewForRow:row], - rectOfRow = rowRects[row]; - - if (!rectOfRow) - rectOfRow = rowRects[row] = [self rectOfRow:row]; - - [dataView setFrame:_CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow))]; - [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:row]]; - - if ([dataView superview] !== self) - [self addSubview:dataView]; - - _dataViewsForTableColumns[tableColumnUID][row] = dataView; - } - } -} - -- (void)setFrameSize:(CGSize)aSize -{ - [super setFrameSize:aSize]; - [_headerView setFrameSize:CGSizeMake(aSize.width, [_headerView frame].size.height)]; -} - -- (void)_drawRect:(CGRect)aRect -{ - [self highlightSelectionInClipRect:[self _exposedRect]]; -} - -- (void)highlightSelectionInClipRect:(CGRect)aRect -{ - [[CPColor greenColor] set]; - - var context = [[CPGraphicsContext currentContext] graphicsPort]; - - if ([_selectedRowIndexes count] >= 1) - { - var exposedRows = [CPIndexSet indexSetWithIndexesInRange:[self rowsInRect:aRect]], - exposedRange = CPMakeRange([exposedRows firstIndex], [exposedRows lastIndex] - [exposedRows firstIndex] + 1), - rowArray = []; - - [_selectedRowIndexes getIndexes:rowArray maxCount:-1 inIndexRange:exposedRange]; - - var rowArrayIndex = 0, - rowArrayCount = rowArray.length; - - for (; rowArrayIndex < rowArrayCount; ++rowArrayIndex) - CGContextFillRect(context, [self rectOfRow:rowArray[rowArrayIndex]]); - } - else - { - - } -} - -- (void)layoutSubviews -{ - [self load]; -} - -- (void)viewWillMoveToSuperview:(CPView)aView -{ - var superview = [self superview], - defaultCenter = [CPNotificationCenter defaultCenter]; - - if (superview) - { - [defaultCenter - removeObserver:self - name:CPViewFrameDidChangeNotification - object:superview]; - - [defaultCenter - removeObserver:self - name:CPViewBoundsDidChangeNotification - object:superview]; - } - - if (aView) - { - [aView setPostsFrameChangedNotifications:YES]; - [aView setPostsBoundsChangedNotifications:YES]; - - [defaultCenter - addObserver:self - selector:@selector(superviewFrameChanged:) - name:CPViewFrameDidChangeNotification - object:aView]; - - [defaultCenter - addObserver:self - selector:@selector(superviewBoundsChanged:) - name:CPViewBoundsDidChangeNotification - object:aView]; - } -} - -- (void)superviewBoundsChanged:(CPNotification)aNotification -{ - [self setNeedsLayout]; -} - -- (void)superviewFrameChanged:(CPNotification)aNotification -{ -} - -// - -/* - var type = [anEvent type], - point = [self convertPoint:[anEvent locationInWindow] fromView:nil], - currentRow = MAX(0, MIN(_numberOfRows-1, [self _rowAtY:point.y])); - -*/ - -- (BOOL)startTrackingAt:(CGPoint)aPoint -{ - var row = [self rowAtPoint:aPoint]; - - if ([self mouseDownFlags] & CPShiftKeyMask) - _selectionAnchor = (ABS([_selectedRowIndexes firstIndex] - row) < ABS([_selectedRowIndexes lastIndex] - row)) ? - [_selectedRowIndexes firstIndex] : [_selectedRowIndexes lastIndex]; - else - _selectionAnchor = row; - - [self _updateSelectionWithMouseAtRow:row]; - - return YES; -} - -- (BOOL)continueTracking:(CGPoint)lastPoint at:(CGPoint)aPoint -{ - [self _updateSelectionWithMouseAtRow:[self rowAtPoint:aPoint]]; - - return YES; -} - -- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp -{/* - _clickedRow = [self rowAtPoint:point]; - _clickedColumn = [self columnAtPoint:point]; - - if ([anEvent clickCount] === 2) - { - CPLog.warn("edit?!"); - - [self sendAction:_doubleAction to:_target]; - } - else - { - if (![_previousSelectedRowIndexes isEqualToIndexSet:_selectedRowIndexes]) - { - [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]; - } - - [self sendAction:_action to:_target]; - } -*/ -} - -- (void)_updateSelectionWithMouseAtRow:(CPInteger)aRow -{ - // If cmd/ctrl was held down XOR the old selection with the proposed selection - if ([self mouseDownFlags] & (CPCommandKeyMask | CPControlKeyMask | CPAlternateKeyMask)) - { - if ([_selectedRowIndexes containsIndex:aRow]) - { - newSelection = [_selectedRowIndexes copy]; - - [newSelection removeIndex:aRow]; - } - - else if (_allowsMultipleSelection) - { - newSelection = [_selectedRowIndexes copy]; - - [newSelection addIndex:aRow]; - } - - else - newSelection = [CPIndexSet indexSetWithIndex:aRow]; - } - - else if (_allowsMultipleSelection) - newSelection = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(MIN(aRow, _selectionStartRow), ABS(aRow - _selectionStartRow) + 1)]; - - else if (aRow >= 0 && aRow < _numberOfRows) - newSelection = [CPIndexSet indexSetWithIndex:aRow]; - - else - newSelection = [CPIndexSet indexSet]; - - if ([newSelection isEqualToIndexSet:_selectedRowIndexes]) - return; - - if (_implementedDelegateMethods & CPTableViewDelegate_selectionShouldChangeInTableView_ && - ![_delegate selectionShouldChangeInTableView:self]) - return; - - if (_implementedDelegateMethods & CPTableViewDelegate_tableView_selectionIndexesForProposedSelection_) - newSelection = [_delegate tableView:self selectionIndexesForProposedSelection:newSelection]; - - if (_implementedDelegateMethods & CPTableViewDelegate_tableView_shouldSelectRow_) - { - var indexArray = []; - - [newSelection getIndexes:indexArray maxCount:-1 inIndexRange:nil]; - - var indexCount = indexArray.length; - - while (indexCount--) - { - var index = indexArray[indexCount]; - - if (![_delegate tableView:self shouldSelectRow:index]) - [newSelection removeIndex:index]; - } - } - - // if empty selection is not allowed and the new selection has nothing selected, abort - if (!_allowsEmptySelection && [newSelection count] === 0) - return; - - if ([newSelection isEqualToIndexSet:_selectedRowIndexes]) - return; - - [self selectRowIndexes:newSelection byExtendingSelection:NO]; - - [[CPNotificationCenter defaultCenter] - postNotificationName:CPTableViewSelectionIsChangingNotification - object:self - userInfo:nil]; -} - -@end diff --git a/AppKit/OLDCPTableColumn.j b/AppKit/OLDCPTableColumn.j new file mode 100644 index 000000000..6d37c1de9 --- /dev/null +++ b/AppKit/OLDCPTableColumn.j @@ -0,0 +1,471 @@ +/* + * CPTableColumn.j + * AppKit + * + * 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 + + +/* +@ignore +*/ + +/* + @global + @class CPTableColumn +*/ +CPTableColumnNoResizing = 0; +/* + @global + @class CPTableColumn +*/ +CPTableColumnAutoresizingMask = 1; +/* + @global + @class CPTableColumn +*/ +CPTableColumnUserResizingMask = 2; + +#define PurgableInfoMake(aView, aRow) { view:(aView), row:(aRow) } +#define PurgableInfoView(anInfo) ((anInfo).view) +#define PurgableInfoRow(anInfo) ((anInfo).row) + +/*! + @ingroup appkit + @class CPTableColumn + + An CPTableColumn object mainly keeps information about the width of the column, its minimum and maximum width; whether the column can be edited or resized; and the cells used to draw the column header and the data in the column. You can change all these attributes of the column by calling the appropriate methods. Please note that the table column does not hold nor has access to the data to be displayed in the column; this data is maintained in the table view's data source.

+ +

Each CPTableColumn object is identified by a CPString, called the column identifier. The reason is that, after a column has been added to a table view, the user might move the columns around, so there is a need to identify the columns regardless of its position in the table. + + @ignore +*/ +@implementation CPTableColumn : CPObject +{ + CPString _identifier; + CPView _headerView; + + CPTableView _tableView; + + float _width; + float _minWidth; + float _maxWidth; + + unsigned _resizingMask; + + CPView _dataView; // default data view for this column + + Object _dataViewData; // cache of data view archives (key=data view UID, value=data view archive) + Object _dataViewForView; // mapping from view instances back to their data view prototype (key=view instance UID, value=data view) + Object _purgableInfosForDataView; // (key=data view UID, value=) +} + +/*! + Initializes the table column with the specified identifier. + @param anIdentifier the identifier + @return the initialized table column +*/ +- (id)initWithIdentifier:(CPString)anIdentifier +{ + self = [super init]; + + if (self) + { + [self _init]; + + _identifier = anIdentifier; + + _width = 40.0; + _minWidth = 8.0; + _maxWidth = 1000.0; + + var dataView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; + [dataView setValue:[CPColor whiteColor] forThemeAttribute:"text-color" inState:CPThemeStateHighlighted]; + + [self setDataView:dataView]; + + _headerView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; + [_headerView setBackgroundColor:[CPColor greenColor]]; + } + + return self; +} + +- (void)_init +{ + _dataViewData = {}; + _dataViewForView = {}; + _purgableInfosForDataView = {}; +} + +/*! + Sets the table column's identifier + @param anIdentifier the new identifier +*/ +- (void)setIdentifier:(CPString)anIdentifier +{ + _identifier = anIdentifier; +} + +/*! + Returns the table column's identifier +*/ +- (CPString)identifier +{ + return _identifier; +} + +// Setting the CPTableView +/*! + Sets the table's view. This is called automatically by Cappuccino. + @param aTableView the new table view +*/ +- (void)setTableView:(CPTableView)aTableView +{ + _tableView = aTableView; +} + +/*! + Returns the column's table view. +*/ +- (CPTableView)tableView +{ + return _tableView; +} + +// Controlling size +/*! + Sets the column's width. + @param aWidth the new column width +*/ +- (void)setWidth:(float)aWidth +{ + _width = aWidth; +} + +/*! + Returns the column's width +*/ +- (float)width +{ + return _width; +} + +/*! + Sets column's minimum width. + @param aWidth the new minimum column width +*/ +- (void)setMinWidth:(float)aWidth +{ + if (_width < (_minWidth = aWidth)) + [self setWidth:_minWidth]; +} + +/*! + The column's minimum width +*/ +- (float)minWidth +{ + return _minWidth; +} + +/*! + Sets the column's maximum width. + @param aWidth the new maximum width +*/ +- (void)setMaxWidth:(float)aWidth +{ + if (_width > (_maxmimumWidth = aWidth)) + [self setWidth:_maxWidth]; +} + +/*! + Sets the resizing mask. The mask is one of: +

+CPTableColumnNoResizing;
+CPTableColumnAutoresizingMask;
+CPTableColumnUserResizingMask;
+
+ @param aMask the new resizing mask +*/ +- (void)setResizingMask:(unsigned)aMask +{ + _resizingMask = aMask; +} + +/*! + Returns the column's resizing mask. One of: +
+CPTableColumnNoResizing;
+CPTableColumnAutoresizingMask;
+CPTableColumnUserResizingMask;
+
+*/ +- (unsigned)resizingMask +{ + return _resizingMask; +} + +/*! + Resizes the column according to the min, max and set width. +*/ +- (void)sizeToFit +{ + var width = CPRectGetWidth([_headerView frame]); + + if (width < _minWidth) + [self setMinWidth:width]; + else if (width > _maxWidth) + [self setMaxWidth:width] + + if (_width != width) + [self setWidth:width]; +} + +/*! + Sets whether the column in this data is editable. + @param aFlag YES means the column data is editable +*/ +- (void)setEditable:(BOOL)aFlag +{ + _isEditable = aFlag; +} + +/*! + Returns YES if the column data is editable. +*/ +- (BOOL)isEditable +{ + return _isEditable; +} + +//Setting the column header view + +/*! + Sets the view that draws the column's header. + @param aHeaderView the view that will draws the column header +*/ + +- (void)setHeaderView:(CPView)aView +{ + _headerView = aView; +} + +/*! + Return the view that draws the column's header +*/ +- (CPView)headerView +{ + return _headerView; +} + +/*! + Sets the data cell that draws rows in this column. +*/ +- (void)setDataCell:(CPView )aView +{ + [self setDataView:aView]; +} + +/* + Sets the data view that draws rows in this column. +*/ +- (void)setDataView:(CPView )aView +{ + if (_dataView) + _dataViewData[[_dataView UID]] = nil; + + _dataView = aView; + _dataViewData[[aView UID]] = [CPKeyedArchiver archivedDataWithRootObject:aView]; +} + +/*! + Returns the data cell that draws rows in this column +*/ +- (CPCell)dataCell +{ + return _dataView; +} + +/* + Returns the data view that draws rows in this column +*/ +- (CPView)dataView +{ + return [self dataCell]; +} + +/*! + By default returns the value from dataCell. This can + be overridden by a subclass to return different cells for different + rows. + @param aRowIndex the index of the row to obtain the cell for +*/ +- (CPCell)dataCellForRow:(int)aRowIndex +{ + return [self dataView]; +} + +- (CPView)dataViewForRow:(int)aRowIndex +{ + return [self dataCellForRow:aRowIndex]; +} +/* +- (void)_markViewAsPurgable:(CPView)aView +{ + var viewUID = [aView UID], + dataViewUID = [_dataViewForView[viewUID] UID]; + + if (!_purgableInfosForDataView[dataViewUID]) + _purgableInfosForDataView[dataViewUID] = [CPDictionary dictionary]; + + [_purgableInfosForDataView[dataViewUID] setObject:aView forKey:viewUID]; +} +*/ +- (void)_markView:(CPView)aView inRow:(unsigned)aRow asPurgable:(BOOL)isPurgable +{ + var viewUID = [aView UID], + dataViewUID = [_dataViewForView[viewUID] UID]; + + if (!_purgableInfosForDataView[dataViewUID]) + { + if (!isPurgable) + return; + + _purgableInfosForDataView[dataViewUID] = {}; + } + + if (!isPurgable) { + if (_purgableInfosForDataView[dataViewUID][viewUID]) + CPLog.warn("removing unpurgable " + _purgableInfosForDataView[dataViewUID][viewUID]); + delete _purgableInfosForDataView[dataViewUID][viewUID]; + } + else + _purgableInfosForDataView[dataViewUID][viewUID] = PurgableInfoMake(aView, aRow); +} + +- (CPView)_newDataViewForRow:(int)aRowIndex avoidingRows:(CPRange)rows +{ + var view = [self dataViewForRow:aRowIndex], + viewUID = [view UID], + purgableInfos = _purgableInfosForDataView[viewUID]; + + if (purgableInfos) + { + for (var key in purgableInfos) + { + var info = purgableInfos[key]; + //if (!CPLocationInRange(PurgableInfoRow(info), rows)) + //{ + //CPLog.debug("yes, a purged view is usable, its called: " + PurgableInfoView(info)); + delete purgableInfos[key]; + return PurgableInfoView(info); + //} + //else + // CPLog.warn("avoiding"); + } + } + + // if we haven't cached an archive of the data view, do it now + if (!_dataViewData[viewUID]) + _dataViewData[viewUID] = [CPKeyedArchiver archivedDataWithRootObject:view]; + + // unarchive the data view cache + var newView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[viewUID]]; + + // map the new view's UID to it's data view prototype + _dataViewForView[[newView UID]] = view; + + CPLog.warn("creating cell: %s", newView); + + return newView; +} + +- (void)_purge +{ + for (var viewUID in _purgableInfosForDataView) + { + var purgableInfos = _purgableInfosForDataView[viewUID]; + + for (var key in purgableInfos) + { + var view = PurgableInfoView(purgableInfos[key]); + + if (!view) + CPLog.info("key="+key+" view=" + view + " purgableInfos[key]="+purgableInfos[key]) + else if (view._superview) { + //CPLog.error("PURGING: (removing)" + view); + //[view removeFromSuperview]; + [view setHidden:YES]; + } + //else + // CPLog.warn("PURGING: (already removed)" + view); + + //delete purgableInfos[key]; + } + } +} + +@end + + +var CPTableColumnIdentifierKey = @"CPTableColumnIdentifierKey", + CPTableColumnHeaderViewKey = @"CPTableColumnHeaderViewKey", + CPTableColumnDataViewKey = @"CPTableColumnDataViewKey", + CPTableColumnWidthKey = @"CPTableColumnWidthKey", + CPTableColumnMinWidthKey = @"CPTableColumnMinWidthKey", + CPTableColumnMaxWidthKey = @"CPTableColumnMaxWidthKey", + CPTableColumnResizingMaskKey = @"CPTableColumnResizingMaskKey"; + +@implementation CPTableColumn (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + [self _init]; + + _identifier = [aCoder decodeObjectForKey:CPTableColumnIdentifierKey]; + + [self setHeaderView:[aCoder decodeObjectForKey:CPTableColumnHeaderViewKey]]; + [self setDataView:[aCoder decodeObjectForKey:CPTableColumnDataViewKey]]; + + _width = [aCoder decodeFloatForKey:CPTableColumnWidthKey]; + _minWidth = [aCoder decodeFloatForKey:CPTableColumnMinWidthKey]; + _maxWidth = [aCoder decodeFloatForKey:CPTableColumnMaxWidthKey]; + + _resizingMask = [aCoder decodeBoolForKey:CPTableColumnResizingMaskKey]; + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_identifier forKey:CPTableColumnIdentifierKey]; + + [aCoder encodeObject:_headerView forKey:CPTableColumnHeaderViewKey]; + [aCoder encodeObject:_dataView forKey:CPTableColumnDataViewKey]; + + [aCoder encodeObject:_width forKey:CPTableColumnWidthKey]; + [aCoder encodeObject:_minWidth forKey:CPTableColumnMinWidthKey]; + [aCoder encodeObject:_maxWidth forKey:CPTableColumnMaxWidthKey]; + + [aCoder encodeObject:_resizingMask forKey:CPTableColumnResizingMaskKey]; +} + +@end diff --git a/AppKit/OLDCPTableView.j b/AppKit/OLDCPTableView.j new file mode 100644 index 000000000..02b2e5cd9 --- /dev/null +++ b/AppKit/OLDCPTableView.j @@ -0,0 +1,1302 @@ +/* + * CPTableView.j + * AppKit + * + * 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 "CPControl.j" +@import "CPTableColumn.j" + +@import "CPColor.j" +@import "CPTextField.j" + +#define ROW_HEIGHT(aRow) (_hasVariableHeightRows ? _rowHeights[aRow] : _rowHeight) +#define ROW_MIN_Y(aRow) (_hasVariableHeightRows ? _rowMinYs[aRow] : (aRow * (_rowHeight + _intercellSpacing.height))) + +CPTableViewColumnDidMoveNotification = "CPTableViewColumnDidMoveNotification"; +CPTableViewColumnDidResizeNotification = "CPTableViewColumnDidResizeNotification"; +CPTableViewSelectionDidChangeNotification = "CPTableViewSelectionDidChangeNotification"; +CPTableViewSelectionIsChangingNotification = "CPTableViewSelectionIsChangingNotification"; + +var _CPTableViewWillDisplayCellSelector = 1 << 0, + _CPTableViewShouldSelectRowSelector = 1 << 1, + _CPTableViewShouldSelectTableColumnSelector = 1 << 2, + _CPTableViewSelectionShouldChangeSelector = 1 << 3, + _CPTableViewShouldEditTableColumnSelector = 1 << 4, + _CPTableViewSelectionIndexesForProposedSelectionSelector = 1 << 5, + _CPTableViewHeightOfRowSelector = 1 << 6; + +/* + @ingroup appkit + + This class is not yet stable. + + CPTableView is located within the AppKit framework and is used to display tables. + It uses a delegate model for getting its data i.e. you give it an object that provides + it with the data it should display. + + @ignore +*/ +@implementation CPTableView : CPControl +{ + // Archived: + + id _dataSource; + id _delegate; + + //CPTableHeaderView _headerView; + //CPView _cornerView; + + CPArray _tableColumns; + + CPIndexSet _selectedRowIndexes; + //CPArray _selectedColumns; + + float _rowHeight; + CGSize _intercellSpacing; + + BOOL _allowsMultipleSelection; + BOOL _allowsEmptySelection; + //BOOL _allowsColumnReordering; + //BOOL _allowsColumnResizing; + //BOOL _allowsColumnSelection; + //BOOL _autoresizesAllColumnsToFit; + + //CPColor _gridColor; + //BOOL _drawsGrid; + + SEL _doubleAction; + + // Not archived: + + int _delegateSelectorsCache; + + //CPScrollView _scrollView; + + unsigned _numberOfRows; + //unsigned _numberOfColumns; + + BOOL _hasVariableHeightRows; + + // Heights + float _columnHeight; // calculated + + CPArray _rowHeights; + CPArray _rowMinYs; + + CPArray _tableCells; + CPArray _tableColumnViews; + + // Caching + Object _dataViewCache; + CPArray _objectValueCache; + + CPRange _visibleRows; + CPRange _visibleColumns; + + CPRange _populatedRows; + CPRange _populatedColumns; + + // Selection + CPIndexSet _previousSelectedRowIndexes; + int _selectionStartRow; + int _selectionModifier; + + CPIndexSet _currentlySelected; + CPArray _selectionViews; + CPArray _selectionViewsPool; + + CPDate _scrollTimer; +} + ++ (void)initialize +{ + +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + + if (self) + { + [self _init]; + } + + return self; +} + +- (void)_init +{ + _tableColumns = []; + //_numberOfColumns = 0; + + _selectedRowIndexes = [CPIndexSet indexSet]; + + _rowHeight = 17.0; + _intercellSpacing = CPSizeMake(3.0, 2.0); + + _allowsMultipleSelection = YES; + _allowsEmptySelection = YES; + + + _tableCells = []; + _tableColumnViews = []; + + _dataViewCache = {}; + _objectValueCache = []; + + _visibleRows = CPMakeRange(0, 0); + _visibleColumns = CPMakeRange(0, 0); + + _rowHeights = []; + _rowMinYs = []; +} + +/* + Returns the table's column height +*/ +- (float)_columnHeight +{ + return _columnHeight;//_numberOfRows * (_rowHeight + _intercellSpacing.height); +} + +- (void)newCellForRow:(unsigned)aRowIndex column:(unsigned)aColumnIndex avoidingRows:(CPRange)rows +{ + var dataView = [_tableColumns[aColumnIndex] _newDataViewForRow:aRowIndex avoidingRows:rows]; + + [dataView setFrame:CGRectMake(0.0, ROW_MIN_Y(aRowIndex), [_tableColumns[aColumnIndex] width], ROW_HEIGHT(aRowIndex))]; + + if ([dataView respondsToSelector:@selector(highlight:)]) + [dataView highlight:[_selectedRowIndexes containsIndex:aRowIndex]]; + + if (!_objectValueCache[aColumnIndex]) + _objectValueCache[aColumnIndex] = []; + + // We may be storing 0 after all! + if (_objectValueCache[aColumnIndex][aRowIndex] === undefined) + _objectValueCache[aColumnIndex][aRowIndex] = [_dataSource tableView:self objectValueForTableColumn:_tableColumns[aColumnIndex] row:aRowIndex]; + + [dataView setObjectValue:_objectValueCache[aColumnIndex][aRowIndex]]; + + return dataView; +} + +- (void)clearCells +{ + var columnEnd = CPMaxRange(_visibleColumns), + rowEnd = CPMaxRange(_visibleRows); + + for (var column = _visibleColumns.location; column < columnEnd; column++) + { + var tableColumn = _tableColumns[column], + tableColumnCells = _tableCells[column]; + + for (var row = _visibleRows.location; row < rowEnd; row++) + { + var cell = tableColumnCells[row]; + if (cell) + { + tableColumnCells[row] = nil; + [tableColumn _markView:cell inRow:row asPurgable:YES]; + } + else + { + CPLog.warn("Missing cell? " + row + "," + column); + } + } + } + + _visibleColumns = CPMakeRange(0,0); + _visibleRows = CPMakeRange(0,0); +} + +- (void)loadTableCellsInRect:(CGRect)aRect +{ + if (!_dataSource) + return; + + // Determine new visible rows and columns. + + var rowStart = MAX(0, [self _rowAtY:CGRectGetMinY(aRect)] - 1), + rowEnd = MIN(_numberOfRows, [self _rowAtY:CGRectGetMaxY(aRect)] + 1), + + visibleRows = CPMakeRange(rowStart, rowEnd - rowStart), + + columnStart = MAX(0, [self _columnAtX:CGRectGetMinX(aRect)]), + columnEnd = MIN(_tableColumns.length, [self _columnAtX:CGRectGetMaxX(aRect)] + 1), + + visibleColumns = CPMakeRange(columnStart, columnEnd - columnStart); + + if (CPEqualRanges(_visibleRows, visibleRows) && CPEqualRanges(_visibleColumns, visibleColumns)) + return; + + var unionVisibleRows = CPUnionRange(_visibleRows, visibleRows), + unionVisibleColumns = CPUnionRange(_visibleColumns, visibleColumns); + + + // Determine whether to use 2 sweeps or one. If we have lots of overlap of cells, use just one. + if (unionVisibleRows.length * unionVisibleColumns.length <= + (_visibleRows.length * _visibleColumns.length) + (visibleRows.length * visibleColumns.length)) + { + //CPLog.info("single sweep"); + + var cEnd = CPMaxRange(unionVisibleColumns), + rEnd = CPMaxRange(unionVisibleRows), + cell; + + for (var column = unionVisibleColumns.location; column < cEnd; ++column) + { + var tableColumn = _tableColumns[column], + tableColumnCells = _tableCells[column], + columnIsVisible = CPLocationInRange(column, visibleColumns), + newCells = []; + + for (var row = unionVisibleRows.location; row < rEnd; ++row) + { + if (cell = tableColumnCells[row]) + { + if (!columnIsVisible || !CPLocationInRange(row, visibleRows)) + { + tableColumnCells[row] = nil; + [tableColumn _markView:cell inRow:row asPurgable:YES]; + } + } + else + { + newCells.push(row); + } + } + + while (newCells.length > 0) + { + var row = newCells.pop(); + + tableColumnCells[row] = [self newCellForRow:row column:column avoidingRows:visibleRows]; + + if (!tableColumnCells[row]._superview) + [_tableColumnViews[column] addSubview:tableColumnCells[row]]; + else if (tableColumnCells[row]._isHidden) + [tableColumnCells[row] setHidden:NO]; + } + + [tableColumn _purge]; + } + } + else { + //CPLog.info("double sweep"); + + // first sweep: remove old cells + + var cEnd = CPMaxRange(_visibleColumns), + rEnd = CPMaxRange(_visibleRows), + cell; + + for (var column = _visibleColumns.location; column < cEnd; ++column) + { + var tableColumn = _tableColumns[column], + tableColumnCells = _tableCells[column], + columnIsVisible = CPLocationInRange(column, visibleColumns); + + for (var row = _visibleRows.location; row < rEnd; ++row) + { + if (cell = tableColumnCells[row]) + { + if (!columnIsVisible || !CPLocationInRange(row, visibleRows)) + { + tableColumnCells[row] = nil; + [tableColumn _markView:cell inRow:row asPurgable:YES]; + } + } + } + } + + // second sweep: add new cells + + var cEnd = CPMaxRange(visibleColumns), + rEnd = CPMaxRange(visibleRows); + + for (var column = visibleColumns.location; column < cEnd; ++column) + { + var tableColumn = _tableColumns[column], + tableColumnCells = _tableCells[column]; + + for (var row = visibleRows.location; row < rEnd; ++row) + { + tableColumnCells[row] = [self newCellForRow:row column:column avoidingRows:visibleRows]; + + if (!tableColumnCells[row]._superview) + [_tableColumnViews[column] addSubview:tableColumnCells[row]]; + else if (tableColumnCells[row]._isHidden) + [tableColumnCells[row] setHidden:NO]; + } + + [tableColumn _purge]; + } + } + + + _visibleRows = visibleRows; + _visibleColumns = visibleColumns; + +} + +// Setting display attributes +/* + Sets the width and height between cell. The default is (3.0, 2.0) (width, height). + @param the width and height spacing +*/ +- (void)setIntercellSpacing:(CGSize)aSize +{ + if (_intercellSpacing.width != aSize.width) + { + var i = 1, + delta = aSize.width - _intercellSpacing.width; + total = delta; + + for (; i < _tableColumns.length; ++i, total += delta) + { + var origin = [_tableColumnViews[i] frame].origin; + [_tableColumnViews[i] setFrameOrigin:CGPointMake(origin.x + total, origin.y)]; + } + } + + if (_intercellSpacing.height != aSize.height) + { + var i = 0; + + for (; i < _tableColumns.length; ++i, total += delta) + { + [_tableColumnViews[i] setFrameSize:CGSizeMake([_tableColumnViews[i] width], _numberOfRows * (_rowHeight + _intercellSpacing.height))]; + + var j = 1, + y = _rowHeight + _intercellSpacing.height; + + for (; j < _numberOfRows; ++i, y += _rowHeight + _intercellSpacing.height) + { + if (!_tableCells[i][j]) + continue; + + [_tableCells[i][j] setFrameOrigin:CPPointMake(0.0, y)]; + } + } + + // FIXME: variable height rows + } + + _intercellSpacing = CPSizeCreateCopy(aSize); +} + +/* + Returns the width and height of the space between + cells. +*/ +- (CGSize)intercellSpacing +{ + return _intercellSpacing; +} + +/* + Sets the height of table rows + @param aRowHeight the new height of the table rows +*/ +- (void)setRowHeight:(unsigned)aRowHeight +{ + if (_rowHeight == aRowHeight) + return; + + _rowHeight = aRowHeight; + + // don't perform adjustments if we're using variable height rows + if (_hasVariableHeightRows) + return; + + for (var row = 0; row < _numberOfRows; ++row) + for (var column = 0; column < _tableColumns.length; ++column) + [_tableCells[column][row] setFrameOrigin:CPPointMake(0.0, row * (_rowHeight + _intercellSpacing.height))]; +} + +/* + Returns the height of a table row +*/ +- (unsigned)rowHeight +{ + return _rowHeight; +} + +/* + Adds a column to the table + @param aTableColumn the column to be added +*/ +- (void)addTableColumn:(CPTableColumn)aTableColumn +{ + var i = 0, + x = _tableColumns.length ? CPRectGetMaxX([self rectOfColumn:_tableColumns.length - 1]) + _intercellSpacing.width : 0.0, + tableColumnView = [[CPView alloc] initWithFrame:CPRectMake(x, 0.0, [aTableColumn width], [self _columnHeight])], + tableColumnCells = []; + + [_tableColumns addObject:aTableColumn]; + [_tableColumnViews addObject:tableColumnView]; + +// [tableColumnView setBackgroundColor:[CPColor greenColor]]; + + [self addSubview:tableColumnView]; + + [_tableCells addObject:tableColumnCells]; + + // TODO: do we really need to initialize this, or is undefined good enough? + for (; i < _numberOfRows; ++i) + _tableCells[_tableColumns.length-1][i] = nil; + + //++_numberOfColumns; +} + +/* + Removes a column from the table + @param aTableColumn the column to remove +*/ +- (void)removeTableColumn:(CPTableColumn)aTableColumn +{ + var frame = [self frame], + width = [aTableColumn width] + _intercellSpacing.width, + index = [_tableColumns indexOfObjectIdenticalTo:aTableColumn]; + + // Remove the column view and all the cell views from the view hierarchy. + [_tableColumnViews[i] removeFromSuperview]; + + [_tableCells removeObjectAtIndex:index]; + [_tableColumns removeObjectAtIndex:index]; + [_tableColumnViews removeObjectAtIndex:index]; + + // Shift remaining column views to the left. + for (; index < _tableColumns.length; ++ index) + [_tableColumnViews[index] setFrameOrigin:CPPointMake(CPRectGetMinX([_tableColumnViews[index] frame]) - width, 0.0)] + + // Resize ourself. + [self setFrameSize:CPSizeMake(CPRectGetWidth(frame) - width, CPRectGetHeight(frame))]; +} + +/* + Not yet implemented. Changes the position of the column in + the table. + @param fromIndex the original index of the column + @param toIndex the desired index of the column +*/ +- (void)moveColumn:(unsigned)fromIndex toColumn:(unsinged)toIndex +{ + if (fromIndex == toIndex) + return; +// FIXME: IMPLEMENT +} + +/* + Returns an array containing the table's CPTableColumns. +*/ +- (CPArray)tableColumns +{ + return _tableColumns; +} + +/* + Returns the first CPTableColumn equal to the given object (as determined by the "isEqual:" selector), or nil if none exists. + @param anObject the object to look for +*/ +- (CPTableColumn)tableColumnWithIdentifier:(id)anObject +{ + for (var i = 0; i < _tableColumns.length; i++) + if ([_tableColumns[i] isEqual:anObject]) + return _tableColumns[i]; + return nil; +} + +// Getting the dimensions of the table +/* + Returns the number of columns in the table +*/ +- (int)numberOfColumns +{ + return _tableColumns.length; +} + +/* + Returns the number of rows in the table +*/ +- (int)numberOfRows +{ + return _numberOfRows; +} + +/* + Adjusts the size of the table and it's header view. +*/ +- (void)tile +{ + var HEIGHT = 10.0; + +// [_headerView setFrame:CPRectMake(0.0, 0.0, CPRectGetWidth([self bounds]), HEIGHT)]; +// [_scrollView setFrame:CPRectMake(0.0, HEIGHT, CPRectGetWidth([self bounds]), CPRectGetHeight([self bounds]) - HEIGHT)]; +} + +/* + Sets the object that is used to obtain the table data. The data source must implement the following + methods: +
+- (int)numberOfRowsInTableView:(CPTableView)aTableView
+- (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aTableColumn row:(int)rowIndex
+
+ @param aDataSource the object with the table data + @throws CPInternalInconsistencyException if aDataSource doesn't implement all the required methods +*/ +- (void)setDataSource:(id)aDataSource +{ + if (![aDataSource respondsToSelector:@selector(numberOfRowsInTableView:)]) + [CPException raise:CPInternalInconsistencyException reason:"Data source doesn't support 'numberOfRowsInTableView:'"]; + if (![aDataSource respondsToSelector:@selector(tableView:objectValueForTableColumn:row:)]) + [CPException raise:CPInternalInconsistencyException reason:"Data source doesn't support 'tableView:objectValueForTableColumn:row:'"]; + + _dataSource = aDataSource; + + [self reloadData]; +} + +/* + Returns the object that has access to the table data +*/ +- (id)dataSource +{ + return _dataSource; +} + + +- (id)delegate +{ + return _delegate; +} + + +/*! + Sets the delegate for the tableview. +*/ +- (void)setDelegate:(id)aDelegate +{ + if (_delegate === aDelegate) + return; + + var notificationCenter = [CPNotificationCenter defaultCenter]; + + if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) + [notificationCenter removeObserver:_delegate name:CPTableViewColumnDidMoveNotification object:self]; + if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) + [notificationCenter removeObserver:_delegate name:CPTableViewColumnDidResizeNotification object:self]; + if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) + [notificationCenter removeObserver:_delegate name:CPTableViewSelectionDidChangeNotification object:self]; + if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) + [notificationCenter removeObserver:_delegate name:CPTableViewSelectionIsChangingNotification object:self]; + + _delegate = aDelegate; + + if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) + [notificationCenter addObserver:_delegate selector:@selector(tableViewColumnDidMove:) name:CPTableViewColumnDidMoveNotification object:self]; + if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) + [notificationCenter addObserver:_delegate selector:@selector(tableViewColumnDidResize:) name:CPTableViewColumnDidResizeNotification object:self]; + if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) + [notificationCenter addObserver:_delegate selector:@selector(tableViewSelectionDidChange:) name:CPTableViewSelectionDidChangeNotification object:self]; + if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) + [notificationCenter addObserver:_delegate selector:@selector(tableViewSelectionIsChanging:) name:CPTableViewSelectionIsChangingNotification object:self]; + + _delegateSelectorsCache = 0; + + if ([_delegate respondsToSelector:@selector(tableView:willDisplayCell:forTableColumn:row:)]) + _delegateSelectorsCache |= _CPTableViewWillDisplayCellSelector; + if ([_delegate respondsToSelector:@selector(tableView:shouldSelectRow:)]) + _delegateSelectorsCache |= _CPTableViewShouldSelectRowSelector; + if ([_delegate respondsToSelector:@selector(tableView:shouldSelectTableColumn:)]) + _delegateSelectorsCache |= _CPTableViewShouldSelectTableColumnSelector; + if ([_delegate respondsToSelector:@selector(selectionShouldChangeInTableView:)]) + _delegateSelectorsCache |= _CPTableViewSelectionShouldChangeSelector; + if ([_delegate respondsToSelector:@selector(tableView:shouldEditTableColumn:row:)]) + _delegateSelectorsCache |= _CPTableViewShouldEditTableColumnSelector; + if ([_delegate respondsToSelector:@selector(tableView:selectionIndexesForProposedSelection:)]) + _delegateSelectorsCache |= _CPTableViewSelectionIndexesForProposedSelectionSelector; + if ([_delegate respondsToSelector:@selector(tableView:heightOfRow:)]) + { + _delegateSelectorsCache |= _CPTableViewHeightOfRowSelector; + _hasVariableHeightRows = YES; + } + else + _hasVariableHeightRows = NO; +} + + +/* + Tells the table view that the number of rows in the table + has changed. +*/ +- (void)noteNumberOfRowsChanged +{ + var numberOfRows = [_dataSource numberOfRowsInTableView:self]; + + if (_numberOfRows != numberOfRows) + { + _numberOfRows = numberOfRows; + + [self _recalculateColumnHeight]; + } +} + +- (void)noteHeightOfRowsWithIndexesChanged:(CPIndexSet)indexSet +{ + // FIXME: more efficient version is possible since we know which indexes changes + [self _recalculateColumnHeight]; +} + +/* + Returns the rectangle bounding the specified row. + @param aRowIndex the row to obtain a rectangle for + @return the bounding rectangle +*/ +- (CGRect)rectOfRow:(int)aRowIndex +{ + return CPRectMake(0.0, ROW_MIN_Y(aRowIndex), CPRectGetWidth([self bounds]), ROW_HEIGHT(aRowIndex)); +} + +/* + Returns the rectangle bounding the specified column + @param aColumnIndex the column to obtain a rectangle for + @return the bounding column +*/ +- (CGRect)rectOfColumn:(int)aColumnIndex +{ + return [_tableColumnViews[aColumnIndex] frame]; +} + +/* + Adjusts column widths to make them all visible at once. Same as tile. +*/ +- (void)sizeToFit +{ +// [self tile]; +} + +- (void)_recalculateColumnHeight +{ + var oldColumnHeight = _columnHeight; + + if (_hasVariableHeightRows) + { + _rowMinYs[0] = 0; + for (var row = 0; row < _numberOfRows; row++) + { + _rowHeights[row] = [_delegate tableView:self heightOfRow:row]; + _rowMinYs[row+1] = _rowMinYs[row] + _rowHeights[row] + _intercellSpacing.height; + } + _columnHeight = _rowMinYs[_numberOfRows]; // last index is one more than last row, and is the total column height + } + else + _columnHeight = _numberOfRows * (_rowHeight + _intercellSpacing.height); + + var count = _tableColumnViews.length; + + while (count--) + [_tableColumnViews[count] setFrameSize:CGSizeMake([_tableColumns[count] width], _columnHeight)]; + + [self setFrameSize:CGSizeMake(CGRectGetWidth([self frame]), _columnHeight)]; +} + +- (CGRect)visibleRectInParent +{ + var superview = [self superview]; + + if (!superview) + return [self bounds]; + + return [self convertRect:CGRectIntersection([superview bounds], [self frame]) fromView:superview]; +} + +/* + Reloads the data from the dataSource. This is an + expensive method, so use it lightly. +*/ +- (void)reloadData +{ + var oldNumberOfRows = _numberOfRows; + + _numberOfRows = [_dataSource numberOfRowsInTableView:self]; + + if (oldNumberOfRows != _numberOfRows) + { + [self _recalculateColumnHeight]; + [self setFrameSize:CGSizeMake(CGRectGetWidth([self frame]), [self _columnHeight])]; + } + + _objectValueCache = []; + + [self clearCells]; + + [self setNeedsLayout]; +} + +- (void)layoutSubviews +{ + [self loadTableCellsInRect:[self visibleRectInParent]]; +} + +- (void)displaySoon +{ + [_scrollTimer invalidate]; + _scrollTimer = [CPTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(displayNow) userInfo:nil repeats:NO]; +} + +- (void)displayNow +{ + [self setNeedsLayout]; +} + +- (void)viewDidMoveToSuperview +{ + [[[self enclosingScrollView] contentView] setPostsBoundsChangedNotifications:YES]; + + [[CPNotificationCenter defaultCenter] + addObserver:self + selector:@selector(viewBoundsChanged:) + name:CPViewBoundsDidChangeNotification + object:[[self enclosingScrollView] contentView]]; +} + +- (void)viewBoundsChanged:(CPNotification)aNotification +{ + //CPLog.info(_cmd + CPStringFromRect([[[self enclosingScrollView] contentView] bounds])); + //objj_debug_print_backtrace(); + //[self setNeedsLayout]; + [self displayNow]; +} + +/* +- (void)setAllowsColumnReordering:(BOOL)allowsColumnReordering +{ + if (_allowsColumnReordering === _allowsColumnReordering) + return; + + _allowsColumnReordering = allowsColumnReordering; +} +- (void)allowsColumnReordering +{ + return _allowsColumnReordering; +} + +- (void)setAllowsColumnResizing:(BOOL)allowsColumnResizing +{ + if (_allowsColumnResizing === allowsColumnResizing) + return; + + _allowsColumnResizing = allowsColumnResizing; +} +- (void)allowsColumnResizing +{ + return _allowsColumnResizing; +} + +- (void)setAllowsColumnSelection:(BOOL)allowsColumnSelection +{ + if (_allowsColumnSelection === allowsColumnSelection) + return; + + _allowsColumnSelection = allowsColumnSelection; +} +- (void)allowsColumnSelection +{ + return _allowsColumnSelection; +} +*/ + +- (void)setAllowsMultipleSelection:(BOOL)allowsMultipleSelection +{ + if (_allowsMultipleSelection === allowsMultipleSelection) + return; + + _allowsMultipleSelection = allowsMultipleSelection; + + // TODO: more stuff? +} +- (void)allowsMultipleSelection +{ + return _allowsMultipleSelection; +} + +- (void)setAllowsEmptySelection:(BOOL)allowsEmptySelection +{ + if (_allowsEmptySelection === allowsEmptySelection) + return; + + _allowsEmptySelection = allowsEmptySelection; +} +- (void)allowsEmptySelection +{ + return _allowsEmptySelection; +} + + +/* + Returns the index of the row at the given point, or CPNotFound (-1) if it is out of range. + @param aPoint the point + @return the index of the row at aPoint +*/ +- (int)rowAtPoint:(CGPoint)aPoint +{ + var index = [self _rowAtY:aPoint.y] + + if (index >= 0 && index < _numberOfRows) + return index; + else + return CPNotFound; +} + +- (int)columnAtPoint:(CGPoint)aPoint +{ + var index = [self _columnAtX:aPoint.x] + + if (index >= 0 && index < _tableColumns.length) + return index; + else + return CPNotFound; +} + +/* + @ignore + + Internal version takes a Y value, returns an index, or -1 if its beyond the min, or numberOfRows if it's beyond the max +*/ +- (int)_rowAtY:(float)y +{ + if (_hasVariableHeightRows) + { + var a = 0, + b = _numberOfRows; + + if (y < _rowMinYs[0]) + return -1; + if (y >= _rowMinYs[_rowMinYs.length-1]) + return _numberOfRows; + + // binary search + while (true) + { + var half = a + Math.floor((b - a) / 2); + + if (y < _rowMinYs[half]) + b = half; + else if (half < _numberOfRows-1 && y >= _rowMinYs[half+1]) + a = half; + else + return half; + } + } + else + return FLOOR(y / (_rowHeight + _intercellSpacing.height)); +} + +/* + @ignore + + Internal version takes a X value, returns an index, or -1 if its beyond the min, or numberOfColumns if it's beyond the max +*/ +- (int)_columnAtX:(float)x +{ + var a = 0, + b = _tableColumns.length; + + var last = [_tableColumnViews[_tableColumns.length-1] frame]; + if (x < [_tableColumnViews[0] frame].origin.x) + return -1; + if (x >= last.origin.x + last.size.width) + return _tableColumns.length; + + // binary search + while (true) + { + var half = a + Math.floor((b - a) / 2); + + if (x < [_tableColumnViews[half] frame].origin.x) + b = half; + else if (half < _tableColumns.length-1 && x >= [_tableColumnViews[half+1] frame].origin.x) + a = half; + else + return half; + } +} + +/* + Selects the specified row indexes, optionally adding to existing selection + @param indexes the indexes to select + @param extend whether or not to add to the existing selection +*/ +- (void)selectRowIndexes:(CPIndexSet)indexes byExtendingSelection:(BOOL)extend +{ + // FIXME: should this be subject to the delegate filters, etc? + + if (extend) + _selectedRowIndexes = [[_selectedRowIndexes copy] addIndexes:indexes]; + else if ([indexes count] > 0 || _allowsEmptySelection) + _selectedRowIndexes = [indexes copy]; + + [self _drawSelection]; +} + +/* + Returns a CPIndexSet of the selected rows + @return indexes of the selected rows +*/ +- (CPIndexSet)selectedRowIndexes +{ + return _selectedRowIndexes; +} + +/* + Returns the number of selected rows + @return number of selected rows +*/ +- (int)numberOfSelectedRows +{ + return [_selectedRowIndexes count]; +} + + +/* + Deselects all rows if allowsEmptySelection is true. If delegate responds to "selectionShouldChangeInTableView:", asks if it should chnage. + Sends the CPTableViewSelectionDidChangeNotification on deselection. + @param the sender in a target/action +*/ +- (void)deselectAll:(id)sender +{ + if (!_allowsEmptySelection || [_selectedRowIndexes count] === 0 || + ((_delegateSelectorsCache & _CPTableViewSelectionShouldChangeSelector) && ![_delegate selectionShouldChangeInTableView:self])) + return; + + [self selectRowIndexes:[CPIndexSet indexSet] byExtendingSelection:NO]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]; +} + +- (void)editColumn:(int)columnIndex row:(int)rowIndex withEvent:(CPEvent)theEvent select:(BOOL)flag +{ + +} + +/* + @ignore +*/ +- (void)_updateSelectionWithMouseAtRow:(int)aRow +{ + // Make a preliminary new selection + var newSelection; + if (_allowsMultipleSelection) + newSelection = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(MIN(aRow, _selectionStartRow), ABS(aRow-_selectionStartRow)+1)]; + else if (aRow >= 0 && aRow < _numberOfRows) + newSelection = [CPIndexSet indexSetWithIndex:aRow]; + else + newSelection = [CPIndexSet indexSet]; + + // If cmd/ctrl was held down XOR the old selection with the proposed selection + if (_allowsMultipleSelection && _selectionModifier & (CPCommandKeyMask | CPControlKeyMask | CPAlternateKeyMask)) + { + // A = newSelection, B = _previousSelectedRowIndexes + // (A intersection B) = (A - (A - B)) + var intersection = [newSelection copy], + difference = [newSelection copy]; + [difference removeIndexes:_previousSelectedRowIndexes]; + [intersection removeIndexes:difference] + + // (A xor B) = (A + B) - (A intersection B) + [newSelection addIndexes:_previousSelectedRowIndexes]; + [newSelection removeIndexes:intersection]; + + // FIXME: if multiple selection is off, and we cmd/ctrl click the previously selected row, then deselect it. + } + + // if the new selection is different than the old selection + if (![newSelection isEqualToIndexSet:_selectedRowIndexes]) + { + // ask the delegate if we should change the selection + if ((_delegateSelectorsCache & _CPTableViewSelectionShouldChangeSelector) && ![_delegate selectionShouldChangeInTableView:self]) + return; + + // ask the delegate which indexes can be selected. selectionIndexesForProposedSelection is faster than shouldSelectRow + if (_delegateSelectorsCache & _CPTableViewSelectionIndexesForProposedSelectionSelector) + newSelection = [_delegate tableView:self selectionIndexesForProposedSelection:newSelection]; + else if (_delegateSelectorsCache & _CPTableViewShouldSelectRowSelector) + { + var indexes = []; + [newSelection getIndexes:indexes maxCount:Number.MAX_VALUE inIndexRange:nil]; + for (var i = 0; i < indexes.length; i++) + if (![_delegate tableView:self shouldSelectRow:indexes[i]]) + [newSelection removeIndex:indexes[i]]; + } + } + + // if empty selection is not allowed and the new selection has nothing selected, abort + if (!_allowsEmptySelection && [newSelection count] === 0) + return; + + // if the new selection is *still* different, and update the selection and send a notification + if (![newSelection isEqualToIndexSet:_selectedRowIndexes]) + { + [self selectRowIndexes:newSelection byExtendingSelection:NO]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionIsChangingNotification object:self userInfo:nil]; + } +} + +/* + @ignore +*/ +- (void)mouseDown:(CPEvent)anEvent +{ + [self trackSelection:anEvent]; +} + +/* + Sets the message to be sent to the target when a cell is double clicked + @param aSelector the selector to be performed +*/ +- (void)setDoubleAction:(SEL)aSelector +{ + _doubleAction = aSelector; +} +- (SEL)doubleAction +{ + return _doubleAction; +} + +- (int)clickedColumn +{ + return _clickedColumn; +} +- (int)clickedRow +{ + return _clickedRow; +} + +/* + @ignore +*/ +- (void)trackSelection:(CPEvent)anEvent +{ + var type = [anEvent type], + point = [self convertPoint:[anEvent locationInWindow] fromView:nil], + currentRow = MAX(0, MIN(_numberOfRows-1, [self _rowAtY:point.y])); + + if (type == CPLeftMouseUp) + { + _clickedRow = [self rowAtPoint:point]; + _clickedColumn = [self columnAtPoint:point]; + + if ([anEvent clickCount] === 2) + { + CPLog.warn("edit?!"); + + [self sendAction:_doubleAction to:_target]; + } + else + { + if (![_previousSelectedRowIndexes isEqualToIndexSet:_selectedRowIndexes]) + { + [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]; + } + + [self sendAction:_action to:_target]; + } + + return; + } + + if (type == CPLeftMouseDown) + { + _previousSelectedRowIndexes = _selectedRowIndexes; + _selectionModifier = [anEvent modifierFlags]; + + if (_selectionModifier & CPShiftKeyMask) + _selectionStartRow = (ABS([_previousSelectedRowIndexes firstIndex] - currentRow) < ABS([_previousSelectedRowIndexes lastIndex] - currentRow)) ? + [_previousSelectedRowIndexes firstIndex] : [_previousSelectedRowIndexes lastIndex]; + else + _selectionStartRow = currentRow; + + [self _updateSelectionWithMouseAtRow:currentRow]; + } + else if (type == CPLeftMouseDragged) + { + [self _updateSelectionWithMouseAtRow:currentRow]; + } + + [CPApp setTarget:self selector:@selector(trackSelection:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES]; +} + +/* + @ignore +*/ +- (void)_drawSelection +{ + if (!_currentlySelected) { + _currentlySelected = [CPIndexSet indexSet]; + _selectionViews = []; + _selectionViewsPool = []; + } + + // TODO: we could also remove selections that aren't visible, but then we'll need to run this on every scroll/resize? + + // get array of indexes we can remove + var removeSet = [_currentlySelected copy], + indexesToRemove = []; + [removeSet removeIndexes:_selectedRowIndexes]; + [removeSet getIndexes:indexesToRemove maxCount:Number.MAX_VALUE inIndexRange:nil]; + + // get array of indexes we need to add + var addSet = [_selectedRowIndexes copy], + indexesToAdd = []; + [addSet removeIndexes:_currentlySelected]; + [addSet getIndexes:indexesToAdd maxCount:Number.MAX_VALUE inIndexRange:nil]; + + for (var i = 0; i < indexesToRemove.length; i++) + { + var row = indexesToRemove[i]; + for (var column = 0; column < _tableColumns.length; column++) + if ([_tableCells[column][row] respondsToSelector:@selector(highlight:)]) + [_tableCells[column][row] highlight:NO]; + } + for (var i = 0; i < indexesToAdd.length; i++) + { + var row = indexesToAdd[i]; + for (var column = 0; column < _tableColumns.length; column++) + if ([_tableCells[column][row] respondsToSelector:@selector(highlight:)]) + [_tableCells[column][row] highlight:YES]; + } + + // add each one we need to add, taking the selection views from removed seelctions, the pool, or new + for (var i = 0; i < indexesToAdd.length; i++) + { + var index = indexesToAdd[i], + view; + + if (indexesToRemove.length > 0) + { + view = _selectionViews[indexesToRemove.pop()]; + } + else if (_selectionViewsPool.length > 0) + { + view = _selectionViewsPool.pop(); + [self addSubview:view positioned:CPWindowBelow relativeTo:nil]; + } + else + { + view = [[CPView alloc] init]; + [view setBackgroundColor:[CPColor alternateSelectedControlColor]]; + + [self addSubview:view positioned:CPWindowBelow relativeTo:nil]; + } + + _selectionViews[index] = view; + + var frame = [self rectOfRow:index]; + frame.size.height += _intercellSpacing.height - 1; + //frame.size.width += 500; + + [view setFrame:frame]; + } + + // remove any selections that weren't already reused + for (var i = 0; i < indexesToRemove.length; i++) + { + var row = indexesToRemove[i], + view = _selectionViews[row]; + + [view removeFromSuperview]; + _selectionViewsPool.push(view); + } + + // update the currently selected index set + _currentlySelected = [_selectedRowIndexes copy]; +} + +@end + + +var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", + CPTableViewDelegateKey = @"CPTableViewDelegateKey", + CPTableViewHeaderViewKey = @"CPTableViewHeaderViewKey", + CPTableViewTableColumnsKey = @"CPTableViewTableColumnsKey", + CPTableViewRowHeightKey = @"CPTableViewRowHeightKey", + CPTableViewIntercellSpacingKey = @"CPTableViewIntercellSpacingKey", + CPTableViewMultipleSelectionKey = @"CPTableViewMultipleSelectionKey", + CPTableViewEmptySelectionKey = @"CPTableViewEmptySelectionKey"; + +@implementation CPTableView (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super initWithCoder:aCoder]) + { + [self _init]; + + _dataSource = [aCoder decodeObjectForKey:CPTableViewDataSourceKey]; + _delegate = [aCoder decodeObjectForKey:CPTableViewDelegateKey]; + + _rowHeight = [aCoder decodeFloatForKey:CPTableViewRowHeightKey]; + _intercellSpacing = [aCoder decodeSizeForKey:CPTableViewIntercellSpacingKey]; + + _allowsMultipleSelection = [aCoder decodeBoolForKey:CPTableViewMultipleSelectionKey]; + _allowsEmptySelection = [aCoder decodeBoolForKey:CPTableViewEmptySelectionKey]; + + var tableColumns = [aCoder decodeObjectForKey:CPTableViewTableColumnsKey]; + for (var i = 0; i < tableColumns.length; i++) + [self addTableColumn:tableColumns[i]]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + + [aCoder encodeObject:_dataSource forKey:CPTableViewDataSourceKey]; + [aCoder encodeObject:_delegate forKey:CPTableViewDelegateKey]; + + [aCoder encodeObject:_tableColumns forKey:CPTableViewTableColumnsKey]; + + [aCoder encodeFloat:_rowHeight forKey:CPTableViewRowHeightKey]; + [aCoder encodeSize:_intercellSpacing forKey:CPTableViewIntercellSpacingKey]; + + [aCoder encodeBool:_allowsMultipleSelection forKey:CPTableViewMultipleSelectionKey]; + [aCoder encodeBool:_allowsEmptySelection forKey:CPTableViewEmptySelectionKey]; +} + +@end + + + +@implementation CPColor (TableView) + ++ (CPColor)alternateSelectedControlColor +{ + return [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]; +} + ++ (CPColor)secondarySelectedControlColor +{ + return [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]; +} + +@end diff --git a/TableCibTest/AppController.j b/TableCibTest/AppController.j new file mode 100644 index 000000000..a079fb6e1 --- /dev/null +++ b/TableCibTest/AppController.j @@ -0,0 +1,45 @@ +/* + * AppController.j + * TableCibTest + * + * Created by Francisco Tolmasky on July 5, 2009. + * Copyright 2009, 280 North, Inc. All rights reserved. + */ + +@import + + +@implementation AppController : CPObject +{ + CPWindow theWindow; //this "outlet" is connected automatically by the Cib +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. +} + +- (void)awakeFromCib +{ + // This is called when the cib is done loading. + // You can implement this method on any object instantiated from a Cib. + // It's a useful hook for setting up current UI values, and other things. + + // In this case, we want the window from Cib to become our full browser window + [theWindow setFullBridge:YES]; +} + +- (int)numberOfRowsInTableView:(CPTableView)tableView +{ + return 700000; +} + +- (id)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row +{ + if ([tableColumn identifier] === "icons") + return iconImage; + else + return String((row + 1) * [[tableColumn identifier] intValue]); +} + +@end diff --git a/TableCibTest/Info.plist b/TableCibTest/Info.plist new file mode 100644 index 000000000..f2ebe529d --- /dev/null +++ b/TableCibTest/Info.plist @@ -0,0 +1,12 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + TableCibTest + CPPrincipalClass + CPApplication + + diff --git a/TableCibTest/Rakefile b/TableCibTest/Rakefile new file mode 100644 index 000000000..ead2456ce --- /dev/null +++ b/TableCibTest/Rakefile @@ -0,0 +1,25 @@ + +require 'objective-j' +require 'objective-j/bundletask' + +if !ENV['CONFIG'] + ENV['CONFIG'] = 'Debug' +end + +ObjectiveJ::BundleTask.new(:TableCibTest) do |t| + t.name = 'TableCibTest' + t.identifier = 'com.280n.TableCibTest' + t.version = '1.0' + t.author = '280 North, Inc.' + t.email = 'feedback @nospam@ 280north.com' + t.summary = 'TableCibTest' + t.sources = FileList['*.j'] + t.resources = FileList['Resources/*'] + t.index_file = 'index.html' + t.info_plist = 'Info.plist' + t.build_path = File.join('Build', ENV['CONFIG'], 'TableCibTest') + t.flag = '-DDEBUG' if ENV['CONFIG'] == 'Debug' + t.flag = '-O' if ENV['CONFIG'] == 'Release' +end + +task :default => [:TableCibTest] diff --git a/TableCibTest/Resources/MainMenu.cib b/TableCibTest/Resources/MainMenu.cib new file mode 100644 index 000000000..5a70d0b85 --- /dev/null +++ b/TableCibTest/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;335E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;E;E;S;16;IBCocoaFrameworkd;3;490D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;335E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;D;K;6;CP$UIDd;3;390E;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;D;K;6;CP$UIDd;3;452E;D;K;6;CP$UIDd;3;453E;D;K;6;CP$UIDd;3;454E;D;K;6;CP$UIDd;3;455E;D;K;6;CP$UIDd;3;456E;D;K;6;CP$UIDd;3;457E;D;K;6;CP$UIDd;3;458E;D;K;6;CP$UIDd;3;459E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;462E;D;K;6;CP$UIDd;3;463E;D;K;6;CP$UIDd;3;464E;D;K;6;CP$UIDd;3;465E;D;K;6;CP$UIDd;3;466E;D;K;6;CP$UIDd;3;467E;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;478E;D;K;6;CP$UIDd;3;479E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;481E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;483E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;485E;D;K;6;CP$UIDd;3;486E;D;K;6;CP$UIDd;3;487E;D;K;6;CP$UIDd;3;488E;D;K;6;CP$UIDd;3;489E;D;K;6;CP$UIDd;3;490E;D;K;6;CP$UIDd;3;491E;D;K;6;CP$UIDd;3;492E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;494E;D;K;6;CP$UIDd;3;495E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;497E;D;K;6;CP$UIDd;3;498E;D;K;6;CP$UIDd;3;499E;D;K;6;CP$UIDd;3;500E;D;K;6;CP$UIDd;3;501E;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;D;K;6;CP$UIDd;3;505E;D;K;6;CP$UIDd;3;506E;D;K;6;CP$UIDd;3;507E;D;K;6;CP$UIDd;3;508E;D;K;6;CP$UIDd;3;509E;D;K;6;CP$UIDd;3;510E;D;K;6;CP$UIDd;3;511E;D;K;6;CP$UIDd;3;512E;D;K;6;CP$UIDd;3;513E;D;K;6;CP$UIDd;3;514E;D;K;6;CP$UIDd;3;515E;D;K;6;CP$UIDd;3;516E;D;K;6;CP$UIDd;3;517E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;519E;D;K;6;CP$UIDd;3;520E;D;K;6;CP$UIDd;3;521E;D;K;6;CP$UIDd;3;522E;D;K;6;CP$UIDd;3;523E;D;K;6;CP$UIDd;3;524E;D;K;6;CP$UIDd;3;525E;D;K;6;CP$UIDd;3;526E;D;K;6;CP$UIDd;3;527E;D;K;6;CP$UIDd;3;528E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;530E;D;K;6;CP$UIDd;3;531E;D;K;6;CP$UIDd;3;532E;D;K;6;CP$UIDd;3;533E;D;K;6;CP$UIDd;3;534E;D;K;6;CP$UIDd;3;535E;D;K;6;CP$UIDd;3;536E;D;K;6;CP$UIDd;3;537E;D;K;6;CP$UIDd;3;538E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;540E;D;K;6;CP$UIDd;3;541E;D;K;6;CP$UIDd;3;542E;D;K;6;CP$UIDd;3;543E;D;K;6;CP$UIDd;3;544E;D;K;6;CP$UIDd;3;545E;D;K;6;CP$UIDd;3;546E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;548E;D;K;6;CP$UIDd;3;549E;D;K;6;CP$UIDd;3;550E;D;K;6;CP$UIDd;3;551E;D;K;6;CP$UIDd;3;552E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;554E;D;K;6;CP$UIDd;3;555E;D;K;6;CP$UIDd;3;556E;D;K;6;CP$UIDd;3;557E;D;K;6;CP$UIDd;3;558E;D;K;6;CP$UIDd;3;559E;D;K;6;CP$UIDd;3;560E;D;K;6;CP$UIDd;3;561E;D;K;6;CP$UIDd;3;562E;D;K;6;CP$UIDd;3;563E;D;K;6;CP$UIDd;3;564E;D;K;6;CP$UIDd;3;565E;D;K;6;CP$UIDd;3;566E;D;K;6;CP$UIDd;3;567E;D;K;6;CP$UIDd;3;568E;D;K;6;CP$UIDd;3;569E;D;K;6;CP$UIDd;3;570E;D;K;6;CP$UIDd;3;571E;D;K;6;CP$UIDd;3;572E;D;K;6;CP$UIDd;3;573E;D;K;6;CP$UIDd;3;574E;D;K;6;CP$UIDd;3;575E;D;K;6;CP$UIDd;3;576E;D;K;6;CP$UIDd;3;577E;D;K;6;CP$UIDd;3;578E;D;K;6;CP$UIDd;3;579E;D;K;6;CP$UIDd;3;580E;D;K;6;CP$UIDd;3;581E;D;K;6;CP$UIDd;3;582E;D;K;6;CP$UIDd;3;583E;D;K;6;CP$UIDd;3;584E;D;K;6;CP$UIDd;3;585E;D;K;6;CP$UIDd;3;586E;D;K;6;CP$UIDd;3;587E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;589E;D;K;6;CP$UIDd;3;590E;D;K;6;CP$UIDd;3;591E;D;K;6;CP$UIDd;3;592E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;595E;D;K;6;CP$UIDd;3;596E;D;K;6;CP$UIDd;3;597E;D;K;6;CP$UIDd;3;598E;D;K;6;CP$UIDd;3;599E;D;K;6;CP$UIDd;3;600E;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;602E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;603E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;604E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;607E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;71E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;608E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;609E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;607E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;610E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;611E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;612E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;616E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;53E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;618E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;620E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;621E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;622E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;623E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;624E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;625E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;626E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;627E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;628E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;629E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;630E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;634E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;635E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;636E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;47E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;637E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;636E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;639E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;98E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;640E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;641E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;616E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;642E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;643E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;644E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;645E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;647E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;648E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;95E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;649E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;650E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;118E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;651E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;654E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;152E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;655E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;70E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;656E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;657E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;658E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;659E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;661E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;101E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;20E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;632E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;632E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;632E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;632E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;613E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;613E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;662E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;663E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;665E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;666E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;667E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;86E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;668E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;669E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;670E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;671E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;672E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;673E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;674E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;675E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;676E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;667E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;677E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;678E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;679E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;680E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;681E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;682E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;130E;K;41;_CPCibWindowTemplateWindowIsFullBridgeKeyD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;683E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;162E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;682E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;684E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;685E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;686E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;687E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;648E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;689E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;690E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;691E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;639E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;692E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;694E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;695E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;696E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;607E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;71E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;608E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;609E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;607E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;697E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;698E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;699E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;700E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;701E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;702E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;703E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;672E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;704E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;621E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;705E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;690E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;706E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;707E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;665E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;666E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;708E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;650E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;709E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;710E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;711E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;712E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;630E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;714E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;622E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;31E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;125E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;661E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;715E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;715E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;661E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;609E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;716E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;717E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;615E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;613E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;718E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;719E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;720E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;721E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;721E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;722E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;723E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;724E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;725E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;682E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;90E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;726E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;685E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;91E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;670E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;727E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;728E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;22E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;729E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;626E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;34E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;730E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;731E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;732E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;733E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;734E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;647E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;735E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;654E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;736E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;737E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;738E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;739E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;740E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;741E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;742E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;683E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;744E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;745E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;746E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;747E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;S;19;Horizontal ScrollerS;13;Menu (Format)S;11;Separator-8S;25;Menu Item (Substitutions)S;22;Menu Item (Align Left)S;1;5S;31;Menu Item (NewApplication Help)S;16;Menu Item (File)S;9;SeparatorS;21;Menu (NewApplication)S;23;Menu Item (Hide Others)S;18;Menu Item (Delete)S;15;Menu (Baseline)S;17;Menu Item (Find…)S;1;3S;12;File's OwnerS;18;Menu Item (Speech)S;12;Table ColumnS;14;Table Column-1S;31;Menu Item (Hide NewApplication)S;30;Menu Item (Bring All to Front)S;11;Separator-1S;3;2-1S;16;Menu Item (View)S;23;Menu Item (Paste Style)S;29;Text Field Cell (Text Cell)-7S;11;Menu (View)S;16;Menu Item (Kern)S;18;Menu Item (Italic)S;11;Separator-9S;14;Table Column-2S;25;Menu Item (Stop Speaking)S;20;Menu (Substitutions)S;4;1111S;16;Menu Item (Undo)S;11;ApplicationS;19;Menu Item (Justify)S;2;10S;29;Text Field Cell (Text Cell)-8S;22;Menu Item (Use None)-1S;16;Menu Item (Text)S;24;Menu Item (Show Toolbar)S;29;Text Field Cell (Text Cell)-4S;20;Menu Item (Ligature)S;29;Text Field Cell (Text Cell)-5S;19;Menu Item (Tighten)S;11;Separator-2S;25;Menu Item (Use Default)-2S;23;Menu Item (Smart Links)S;23;Menu Item (Use Default)S;16;Menu Item (Font)S;18;Menu Item (Center)S;33;Bordered Scroll View (Table View)S;30;Menu Item (Customize Toolbar…)S;17;Menu Item (Open…)S;14;Table Column-4S;14;Table Column-3S;1;1S;15;Menu Item (Cut)S;17;Menu Item (Lower)S;16;Menu Item (Find)S;16;Menu Item (Copy)S;32;Menu Item (Spelling and Grammar)S;1;9S;14;Table Column-5S;8;MainMenuS;32;Menu Item (About NewApplication)S;1;2S;15;Window (Window)S;20;Menu Item (Services)S;13;Menu (Window)S;11;Menu (Edit)S;14;Table Column-6S;11;Separator-3S;26;Menu Item (Start Speaking)S;11;Menu (Text)S;29;Text Field Cell (Text Cell)-1S;1;8S;18;Menu (Open Recent)S;11;Menu (Kern)S;11;Separator-5S;20;Menu Item (Minimize)S;17;Vertical ScrollerS;14;Table Column-7S;28;Menu Item (Smart Copy/Paste)S;18;Menu Item (Bigger)S;22;Menu Item (Show Ruler)S;29;Text Field Cell (Text Cell)-9S;18;Menu Item (Loosen)S;22;Menu Item (Select All)S;19;Menu Item (Use All)S;25;Menu Item (Use Default)-1S;27;Menu (Spelling and Grammar)S;29;Text Field Cell (Text Cell)-2S;11;Menu (File)S;23;Menu Item (Open Recent)S;19;Menu Item (Smaller)S;11;Separator-4S;14;Table Column-8S;14;Table Column-9S;34;Menu Item (Use Selection for Find)S;15;Menu (Ligature)S;29;Text Field Cell (Text Cell)-3S;14;App ControllerS;23;Menu Item (Superscript)S;16;Menu Item (Redo)S;30;Text Field Cell (Text Cell)-10S;13;Menu (Speech)S;24;Menu Item (Smart Quotes)S;26;Menu Item (NewApplication)S;10;Table ViewS;16;Menu Item (Zoom)S;22;Menu Item (Copy Style)S;12;Content ViewS;26;Menu Item (Show Spelling…)S;23;Menu Item (Align Right)S;21;Menu Item (Underline)S;18;Menu Item (Window)S;17;Menu Item (Raise)S;16;Menu Item (Edit)S;11;Menu (Find)S;20;Menu Item (Show All)S;1;7S;15;Table Column-10S;18;Menu Item (Format)S;29;Menu Item (Jump to Selection)S;20;Menu Item (Baseline)S;39;Menu Item (Check Spelling While Typing)S;39;Menu Item (Check Grammar With Spelling)S;26;Menu Item (Check Spelling)S;3;1-1S;29;Text Field Cell (Text Cell)-6S;12;Separator-10S;21;Menu Item (Find Next)S;20;Menu Item (Use None)S;22;Menu Item (Copy Ruler)S;11;Menu (Font)S;22;Menu Item (Show Fonts)S;25;Menu Item (Find Previous)S;16;Menu Item (Bold)S;11;Separator-7S;27;Text Field Cell (Text Cell)S;21;Menu Item (Subscript)S;23;Menu Item (Show Colors)S;23;Menu Item (Paste Ruler)S;1;6S;12;Separator-11S;15;Menu (Services)S;3;121S;22;Menu Item (Clear Menu)S;17;Menu Item (Paste)S;11;Separator-6D;K;10;$classnameS;22;_CPCibControlConnectorK;8;$classesA;S;22;_CPCibControlConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;55E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;748E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;749E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;750E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;751E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;752E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;96E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;755E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;756E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;757E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;758E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;759E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;760E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;761E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;762E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;763E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;764E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;765E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;767E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;769E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;27E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;770E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;771E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;773E;E;D;K;10;$classnameS;21;_CPCibOutletConnectorK;8;$classesA;S;21;_CPCibOutletConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;346E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;119E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;774E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;777E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;778E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;780E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;781E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;783E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;784E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;785E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;786E;E;D;K;6;$classD;K;6;CP$UIDd;3;346E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;119E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;787E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;788E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;790E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;791E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;58E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;792E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;793E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;794E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;795E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;796E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;797E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;28E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;798E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;26E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;54E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;346E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;88E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;d;3;370d;3;439d;3;396d;3;348d;3;145d;3;202d;3;405d;3;489d;3;211d;3;483d;3;479d;3;355d;3;443d;3;347d;3;391d;3;393d;3;475d;3;349d;3;356d;3;382d;2;-3d;3;440d;3;225d;3;112d;3;478d;3;486d;3;297d;3;418d;3;472d;3;142d;3;362d;3;354d;3;227d;3;377d;3;381d;3;460d;3;298d;2;72d;3;485d;3;218d;3;197d;3;471d;3;127d;2;29d;3;131d;2;58d;3;371d;2;24d;3;205d;3;235d;3;480d;3;379d;3;364d;2;80d;3;125d;3;366d;3;214d;3;350d;3;461d;3;467d;3;419d;3;198d;3;445d;3;363d;3;476d;3;395d;3;477d;3;466d;3;221d;3;411d;3;468d;3;407d;3;450d;3;470d;3;212d;3;449d;3;427d;3;367d;3;239d;3;228d;3;403d;3;204d;3;372d;3;383d;3;392d;2;19d;3;217d;3;437d;3;210d;3;375d;3;433d;3;346d;3;201d;3;474d;3;208d;3;388d;3;389d;3;213d;3;401d;3;374d;3;448d;3;444d;2;78d;3;400d;3;368d;3;126d;3;429d;3;462d;3;376d;3;380d;2;77d;3;111d;3;144d;2;83d;2;57d;3;209d;2;75d;2;86d;3;441d;2;39d;2;87d;3;134d;1;5d;3;149d;3;447d;2;74d;3;295d;3;404d;3;482d;3;430d;3;296d;3;397d;3;195d;3;373d;3;136d;3;207d;3;431d;3;413d;3;378d;3;398d;3;226d;3;143d;3;245d;3;406d;3;416d;3;410d;3;465d;3;103d;3;199d;3;488d;3;216d;3;240d;2;82d;3;106d;3;223d;3;473d;3;236d;3;196d;3;241d;3;415d;2;23d;3;481d;3;394d;3;232d;3;385d;3;426d;3;224d;3;442d;3;434d;3;414d;3;412d;3;200d;3;357d;2;81d;3;124d;3;428d;2;92d;3;360d;3;436d;3;215d;3;222d;3;351d;2;56d;3;463d;3;193d;2;37d;3;409d;3;432d;3;220d;3;459d;3;230d;3;150d;2;79d;3;399d;3;469d;3;219d;3;365d;3;446d;2;73d;3;402d;3;233d;3;417d;3;386d;3;484d;3;390d;3;451d;3;408d;3;384d;3;387d;3;438d;3;130d;3;231d;3;129d;3;435d;3;203d;3;206S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;88E;E;E;S;19;{{1, 1}, {476, 17}}S;19;{{0, 0}, {476, 17}}d;1;8S;6;normald;1;0S;29;_horizontalScrollerDidScroll:d;1;4f;18;0.6888567209243774S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;60E;E;E;T;S;0;F;S;13;SubstitutionsS;14;submenuAction:S;10;Align LeftS;13;Page Setup...S;19;NewApplication HelpS;4;FileS;14;NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;54E;E;E;S;11;Hide OthersS;6;DeleteS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;78E;E;E;S;5;Find…S;4;SaveS;6;Speechd;2;64d;2;10d;22;3.4028230607370965e+38S;19;Hide NewApplicationS;18;Bring All to FrontS;4;ViewS;11;Paste StyleD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;72E;E;E;S;4;KernS;6;ItalicS;13;Stop SpeakingD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;66E;E;E;S;19;Quit NewApplicationS;4;UndoS;7;JustifyS;15;Revert to SavedS;8;Use NoneS;4;TextS;12;Show ToolbarS;8;LigatureS;7;TightenS;11;Use DefaultS;11;Smart LinksS;4;FontS;6;CenterS;22;{{-1, -1}, {493, 365}}S;20;{{0, 0}, {493, 365}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;661E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;20E;E;E;d;2;18D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;660E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;812E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;813E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;814E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;816E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;126E;E;S;18;Customize Toolbar…S;5;Open…d;2;69d;2;40d;4;1000S;4;HelpS;3;CutS;5;LowerS;4;FindS;4;CopyS;20;Spelling and GrammarS;3;NewS;9;AMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;76E;E;E;S;20;About NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;24;{{335, 128}, {491, 363}}d;1;7S;6;WindowS;8;ServicesD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;42E;E;E;S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;37E;E;E;S;14;Start SpeakingD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;159E;E;E;S;8;Save As…S;11;Open RecentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;164E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;3;106E;E;E;S;8;MinimizeS;22;{{477, 347}, {15, 17}}S;18;{{0, 0}, {15, 17}}S;17;disabled+verticalf;18;0.9971429109573364S;16;Smart Copy/PasteS;6;BiggerS;10;Show RulerS;6;LoosenS;10;Select AllS;7;Use AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;3;160E;E;E;S;7;Smallerd;2;67S;22;Use Selection for FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;3;108E;E;E;S;13;AppControllerS;11;SuperscriptS;4;RedoD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;52E;E;E;S;12;Smart QuotesS;20;{{0, 0}, {691, 348}}d;2;17S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;74E;E;E;S;4;ZoomS;10;Copy StyleS;20;{{0, 0}, {491, 363}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;E;E;S;14;Show Spelling…S;11;Align RightS;9;UnderlineS;5;RaiseD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;142E;E;E;S;8;Show AllS;17;Jump to SelectionS;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;14;Check SpellingS;5;CloseS;9;Find NextS;10;Copy RulerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;46E;E;E;S;10;Show FontsS;13;Find PreviousS;4;BoldS;9;SubscriptS;11;Show ColorsS;11;Paste RulerS;6;Print…D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;12;Preferences…S;10;Clear MenuS;5;PasteS;5;undo:S;29;centerSelectionInVisibleArea:S;24;toggleSmartInsertDelete:S;22;hideOtherApplications:S;13;stopSpeaking:S;15;saveDocumentAs:S;23;performFindPanelAction:S;15;showGuessPanel:S;15;arrangeInFront:S;15;tightenKerning:S;12;superscript:S;13;performClose:S;19;useStandardKerning:S;5;copy:S;21;orderFrontColorPanel:S;10;selectAll:S;14;lowerBaseline:S;30;toggleContinuousSpellChecking:S;7;delete:S;17;turnOffLigatures:S;9;copyFont:S;22;unhideAllApplications:S;14;runPageLayout:S;22;toggleGrammarChecking:S;12;performZoom:S;14;checkSpelling:S;8;delegateS;29;toggleAutomaticLinkDetection:S;5;hide:S;19;toggleToolbarShown:S;10;underline:S;12;alignCenter:S;6;paste:S;15;alignJustified:S;15;turnOffKerning:S;4;cut:S;33;toggleAutomaticQuoteSubstitution:S;14;loosenKerning:S;21;useStandardLigatures:S;10;dataSourceS;9;unscript:S;13;openDocument:S;10;pasteFont:S;5;redo:S;22;revertDocumentToSaved:S;13;saveDocument:S;14;raiseBaseline:S;6;print:S;21;clearRecentDocuments:S;31;runToolbarCustomizationPalette:S;9;showHelp:S;11;pasteRuler:S;10;alignLeft:S;10;terminate:S;14;startSpeaking:S;11;alignRight:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;12;newDocument:S;10;subscript:S;16;useAllLigatures:S;9;theWindowS;10;copyRuler:S;12;toggleRuler:S;21;{{1, 16}, {476, 348}}S;20;{{0, 0}, {476, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;126E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;815E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;817E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;818E;D;K;6;CP$UIDd;3;818E;D;K;6;CP$UIDd;3;818E;D;K;6;CP$UIDd;3;819E;E;E;f;10;0.66666669d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/TableCibTest/Resources/MainMenu.xib b/TableCibTest/Resources/MainMenu.xib new file mode 100644 index 000000000..671d22a13 --- /dev/null +++ b/TableCibTest/Resources/MainMenu.xib @@ -0,0 +1,3665 @@ + + + + 1050 + 9J61 + 677 + 949.46 + 353.00 + + YES + + + + YES + com.apple.InterfaceBuilderKit + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + UHJlZmVyZW5jZXPigKY + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + T3BlbuKApg + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + U2F2ZSBBc+KApg + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + UHJpbnTigKY + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + RmluZOKApg + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + U2hvdyBTcGVsbGluZ+KApg + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Q3VzdG9taXplIFRvb2xiYXLigKY + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 7 + 2 + {{335, 387}, {491, 363}} + 1946157056 + Window + NSWindow + + {3.40282e+38, 3.40282e+38} + + + 256 + + YES + + + 274 + + YES + + + 2304 + + YES + + + 256 + {691, 349} + + YES + + + 256 + {{477, 0}, {16, 17}} + + + YES + + 6.900000e+01 + 4.000000e+01 + 1.000000e+03 + + 75628032 + 0 + + + LucidaGrande + 1.100000e+01 + 3100 + + + 3 + MC4zMzMzMzI5OQA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 337772096 + 2048 + Text Cell + + LucidaGrande + 1.300000e+01 + 1044 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2OQA + + + + 6 + System + controlTextColor + + + + 3 + YES + YES + + + + 6.700000e+01 + 4.000000e+01 + 1.000000e+03 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 6.400000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 6.400000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 6.400000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 6.400000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 6.400000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 6.400000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 6.400000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 6.400000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 1.000000e+01 + 1.000000e+01 + 3.402823e+38 + + 75628032 + 0 + + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3.000000e+00 + 2.000000e+00 + + + 6 + System + gridColor + + 3 + MC41AA + + + 1.700000e+01 + -698351616 + 4 + 15 + 0 + YES + + + {{1, 0}, {476, 349}} + + + + + 4 + + + + 256 + {{477, 0}, {15, 349}} + + + _doScroller: + 9.971429e-01 + + + + 256 + {{1, 349}, {476, 15}} + + YES + 1 + + _doScroller: + 6.888567e-01 + + + {{-1, -1}, {493, 365}} + + + 178 + + + + QSAAAEEgAABBmAAAQZgAAA + + + {491, 363} + + + {{0, 0}, {1440, 878}} + {3.40282e+38, 3.40282e+38} + + + AppController + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + terminate: + + + + 449 + + + + delegate + + + + 451 + + + + theWindow + + + + 459 + + + + dataSource + + + + 488 + + + + + YES + + 0 + + YES + + + + + + -2 + + + RmlsZSdzIE93bmVyA + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + YES + + + + + + 77 + + + 5 + + + 73 + + + 1 + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + 2 + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + YES + + + + + + 372 + + + YES + + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 378 + + + YES + + + + + + 379 + + + YES + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + 460 + + + YES + + + + + + + + 461 + + + + + 462 + + + + + 463 + + + YES + + + + + + + + + + + + + + + + 465 + + + YES + + + + + + 466 + + + YES + + + + + + 467 + + + + + 468 + + + + + 469 + + + YES + + + + + + 470 + + + + + 471 + + + YES + + + + + + 472 + + + + + 473 + + + YES + + + + + + 474 + + + + + 475 + + + YES + + + + + + 476 + + + + + 477 + + + YES + + + + + + 478 + + + + + 479 + + + YES + + + + + + 480 + + + + + 481 + + + YES + + + + + + 482 + + + + + 483 + + + YES + + + + + + 484 + + + + + 485 + + + YES + + + + + + 486 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 103.ImportedFromIB2 + 106.IBPluginDependency + 106.ImportedFromIB2 + 106.editorWindowContentRectSynchronizationRect + 111.IBPluginDependency + 111.ImportedFromIB2 + 112.IBPluginDependency + 112.ImportedFromIB2 + 124.IBPluginDependency + 124.ImportedFromIB2 + 125.IBPluginDependency + 125.ImportedFromIB2 + 125.editorWindowContentRectSynchronizationRect + 126.IBPluginDependency + 126.ImportedFromIB2 + 129.IBPluginDependency + 129.ImportedFromIB2 + 130.IBPluginDependency + 130.ImportedFromIB2 + 130.editorWindowContentRectSynchronizationRect + 131.IBPluginDependency + 131.ImportedFromIB2 + 134.IBPluginDependency + 134.ImportedFromIB2 + 136.IBPluginDependency + 136.ImportedFromIB2 + 143.IBPluginDependency + 143.ImportedFromIB2 + 144.IBPluginDependency + 144.ImportedFromIB2 + 145.IBPluginDependency + 145.ImportedFromIB2 + 149.IBPluginDependency + 149.ImportedFromIB2 + 150.IBPluginDependency + 150.ImportedFromIB2 + 19.IBPluginDependency + 19.ImportedFromIB2 + 195.IBPluginDependency + 195.ImportedFromIB2 + 196.IBPluginDependency + 196.ImportedFromIB2 + 197.IBPluginDependency + 197.ImportedFromIB2 + 198.IBPluginDependency + 198.ImportedFromIB2 + 199.IBPluginDependency + 199.ImportedFromIB2 + 200.IBPluginDependency + 200.ImportedFromIB2 + 200.editorWindowContentRectSynchronizationRect + 201.IBPluginDependency + 201.ImportedFromIB2 + 202.IBPluginDependency + 202.ImportedFromIB2 + 203.IBPluginDependency + 203.ImportedFromIB2 + 204.IBPluginDependency + 204.ImportedFromIB2 + 205.IBPluginDependency + 205.ImportedFromIB2 + 205.editorWindowContentRectSynchronizationRect + 206.IBPluginDependency + 206.ImportedFromIB2 + 207.IBPluginDependency + 207.ImportedFromIB2 + 208.IBPluginDependency + 208.ImportedFromIB2 + 209.IBPluginDependency + 209.ImportedFromIB2 + 210.IBPluginDependency + 210.ImportedFromIB2 + 211.IBPluginDependency + 211.ImportedFromIB2 + 212.IBPluginDependency + 212.ImportedFromIB2 + 212.editorWindowContentRectSynchronizationRect + 213.IBPluginDependency + 213.ImportedFromIB2 + 214.IBPluginDependency + 214.ImportedFromIB2 + 215.IBPluginDependency + 215.ImportedFromIB2 + 216.IBPluginDependency + 216.ImportedFromIB2 + 217.IBPluginDependency + 217.ImportedFromIB2 + 218.IBPluginDependency + 218.ImportedFromIB2 + 219.IBPluginDependency + 219.ImportedFromIB2 + 220.IBPluginDependency + 220.ImportedFromIB2 + 220.editorWindowContentRectSynchronizationRect + 221.IBPluginDependency + 221.ImportedFromIB2 + 23.IBPluginDependency + 23.ImportedFromIB2 + 236.IBPluginDependency + 236.ImportedFromIB2 + 239.IBPluginDependency + 239.ImportedFromIB2 + 24.IBPluginDependency + 24.ImportedFromIB2 + 24.editorWindowContentRectSynchronizationRect + 29.IBEditorWindowLastContentRect + 29.IBPluginDependency + 29.ImportedFromIB2 + 29.WindowOrigin + 29.editorWindowContentRectSynchronizationRect + 295.IBPluginDependency + 296.IBPluginDependency + 296.editorWindowContentRectSynchronizationRect + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 346.ImportedFromIB2 + 348.IBPluginDependency + 348.ImportedFromIB2 + 349.IBPluginDependency + 349.ImportedFromIB2 + 349.editorWindowContentRectSynchronizationRect + 350.IBPluginDependency + 350.ImportedFromIB2 + 351.IBPluginDependency + 351.ImportedFromIB2 + 354.IBPluginDependency + 354.ImportedFromIB2 + 371.IBEditorWindowLastContentRect + 371.IBWindowTemplateEditedContentRect + 371.NSWindowTemplate.visibleAtLaunch + 371.editorWindowContentRectSynchronizationRect + 371.windowTemplate.maxSize + 372.IBPluginDependency + 375.IBPluginDependency + 376.IBEditorWindowLastContentRect + 376.IBPluginDependency + 377.IBPluginDependency + 378.IBPluginDependency + 379.IBPluginDependency + 380.IBPluginDependency + 381.IBPluginDependency + 382.IBPluginDependency + 383.IBPluginDependency + 384.IBPluginDependency + 385.IBPluginDependency + 386.IBPluginDependency + 387.IBPluginDependency + 388.IBEditorWindowLastContentRect + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 450.IBPluginDependency + 460.IBPluginDependency + 461.IBPluginDependency + 462.IBPluginDependency + 463.IBPluginDependency + 465.IBPluginDependency + 466.IBPluginDependency + 467.IBPluginDependency + 468.IBPluginDependency + 5.IBPluginDependency + 5.ImportedFromIB2 + 56.IBPluginDependency + 56.ImportedFromIB2 + 57.IBEditorWindowLastContentRect + 57.IBPluginDependency + 57.ImportedFromIB2 + 57.editorWindowContentRectSynchronizationRect + 58.IBPluginDependency + 58.ImportedFromIB2 + 72.IBPluginDependency + 72.ImportedFromIB2 + 73.IBPluginDependency + 73.ImportedFromIB2 + 74.IBPluginDependency + 74.ImportedFromIB2 + 75.IBPluginDependency + 75.ImportedFromIB2 + 77.IBPluginDependency + 77.ImportedFromIB2 + 78.IBPluginDependency + 78.ImportedFromIB2 + 79.IBPluginDependency + 79.ImportedFromIB2 + 80.IBPluginDependency + 80.ImportedFromIB2 + 81.IBPluginDependency + 81.ImportedFromIB2 + 81.editorWindowContentRectSynchronizationRect + 82.IBPluginDependency + 82.ImportedFromIB2 + 83.IBPluginDependency + 83.ImportedFromIB2 + 92.IBPluginDependency + 92.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilderKit + com.apple.InterfaceBuilderKit + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{596, 852}, {216, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{522, 812}, {146, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{436, 809}, {64, 6}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {275, 83}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{187, 434}, {243, 243}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {167, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {241, 103}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{525, 802}, {197, 73}} + {{143, 285}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + + {74, 862} + {{6, 978}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{475, 832}, {234, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {215, 63}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{83, 84}, {491, 363}} + {{83, 84}, {491, 363}} + + {{33, 99}, {480, 360}} + {3.40282e+38, 3.40282e+38} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{437, 242}, {86, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{523, 2}, {178, 283}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{155, 102}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{23, 794}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{145, 474}, {199, 203}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + YES + + YES + + + YES + + + + + YES + + YES + + + YES + + + + 488 + + + + YES + + AppController + + theWindow + NSWindow + + + IBUserSource + + + + + + 0 + ../adsfsdf.xcodeproj + 3 + + diff --git a/TableCibTest/Resources/spinner.gif b/TableCibTest/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/TableCibTest/index-debug.html b/TableCibTest/index-debug.html new file mode 100644 index 000000000..218ae015c --- /dev/null +++ b/TableCibTest/index-debug.html @@ -0,0 +1,69 @@ + + + + + + + + TableCibTest + + + + + + + + + + + + +
+ + + +
+ + + diff --git a/TableCibTest/index.html b/TableCibTest/index.html new file mode 100644 index 000000000..41eca60ef --- /dev/null +++ b/TableCibTest/index.html @@ -0,0 +1,68 @@ + + + + + + + + TableCibTest + + + + + + + + + + + + +
+ + + +
+ + + diff --git a/TableCibTest/main.j b/TableCibTest/main.j new file mode 100755 index 000000000..af6279da3 --- /dev/null +++ b/TableCibTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * TableCibTest + * + * Created by Francisco Tolmasky on July 5, 2009. + * Copyright 2009, 280 North, Inc. All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/TableTest/AppController.j b/TableTest/AppController.j index b5687c015..1030e9403 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -2,8 +2,8 @@ @import @import -@import -@import +@import +@import CPLogRegister(CPLogConsole); @@ -21,7 +21,7 @@ CPLogRegister(CPLogConsole); [view setBackgroundColor:[CPColor whiteColor]]; [view enterFullScreenMode:nil withOptions:nil]; - tableView = [[NEWCPTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 500.0, 500.0)];//[view bounds]]; + tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 500.0, 500.0)];//[view bounds]]; [tableView setAllowsMultipleSelection:YES]; @@ -31,7 +31,7 @@ CPLogRegister(CPLogConsole); [iconView setImageScaling:CPScaleNone]; - var iconColumn = [[NEWCPTableColumn alloc] initWithIdentifier:"icons"]; + var iconColumn = [[CPTableColumn alloc] initWithIdentifier:"icons"]; [iconColumn setWidth:32.0]; [iconColumn setDataView:iconView]; @@ -46,7 +46,7 @@ CPLogRegister(CPLogConsole); for (var i = 1; i <= 10; i++) { - var column = [[NEWCPTableColumn alloc] initWithIdentifier:String(i)]; + var column = [[CPTableColumn alloc] initWithIdentifier:String(i)]; [[column headerView] setStringValue:"Number "+i]; [[column headerView] sizeToFit]; diff --git a/Tools/nib2cib/NSTableColumn.j b/Tools/nib2cib/NSTableColumn.j index 608ddbf34..2e67fd7c9 100644 --- a/Tools/nib2cib/NSTableColumn.j +++ b/Tools/nib2cib/NSTableColumn.j @@ -28,25 +28,23 @@ - (id)NS_initWithCoder:(CPCoder)aCoder { self = [self init]; - + if (self) { _identifier = [aCoder decodeObjectForKey:@"NSIdentifier"]; - - var template = [[CPTableColumn alloc] ] - + //var dataViewCell = [aCoder decodeObjectForKey:@"NSDataCell"]; - + _dataView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; [_dataView setValue:[CPColor whiteColor] forThemeAttribute:"text-color" inState:CPThemeStateHighlighted]; - + //_headerView = [aCoder decodeObjectForKey:@"NSHeaderCell"]; _headerView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; - + _width = [aCoder decodeFloatForKey:@"NSWidth"]; _minWidth = [aCoder decodeFloatForKey:@"NSMinWidth"]; _maxWidth = [aCoder decodeFloatForKey:@"NSMaxWidth"]; - + _resizingMask = [aCoder decodeBoolForKey:@"NSIsResizable"]; } From 0ef7f532506266f9d284584946b1d373cc6142ab Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 5 Jul 2009 08:35:44 -0700 Subject: [PATCH 066/244] Fix for throwing a proper exception when class isn't defined in an archive. Reviewed by me. --- Foundation/CPKeyedUnarchiver.j | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Foundation/CPKeyedUnarchiver.j b/Foundation/CPKeyedUnarchiver.j index 0bf92f2f6..b646db995 100644 --- a/Foundation/CPKeyedUnarchiver.j +++ b/Foundation/CPKeyedUnarchiver.j @@ -24,11 +24,14 @@ @import "CPCoder.j" -var _CPKeyedUnarchiverCannotDecodeObjectOfClassNameOriginalClassesSelector = 1, - _CPKeyedUnarchiverDidDecodeObjectSelector = 1 << 1, - _CPKeyedUnarchiverWillReplaceObjectWithObjectSelector = 1 << 2, - _CPKeyedUnarchiverWillFinishSelector = 1 << 3, - _CPKeyedUnarchiverDidFinishSelector = 1 << 4; +CPInvalidUnarchiveOperationException = @"CPInvalidUnarchiveOperationException"; + +var _CPKeyedUnarchiverCannotDecodeObjectOfClassNameOriginalClassesSelector = 1 << 0, + _CPKeyedUnarchiverDidDecodeObjectSelector = 1 << 1, + _CPKeyedUnarchiverWillReplaceObjectWithObjectSelector = 1 << 2, + _CPKeyedUnarchiverWillFinishSelector = 1 << 3, + _CPKeyedUnarchiverDidFinishSelector = 1 << 4, + CPKeyedUnarchiverDelegate_unarchiver_cannotDecodeObjectOfClassName_originalClasses_ = 1 << 5; var _CPKeyedArchiverNullString = "$null" @@ -384,6 +387,9 @@ var _CPKeyedUnarchiverArrayClass = Ni if ([_delegate respondsToSelector:@selector(unarchiverDidFinish:)]) _delegateSelectors |= _CPKeyedUnarchiverDidFinishSelector; + + if ([_delegate respondsToSelector:@selector(unarchiver:cannotDecodeObjectOfClassName:originalClasses:)]) + _delegateSelectors |= CPKeyedUnarchiverDelegate_unarchiver_cannotDecodeObjectOfClassName_originalClasses_; } - (void)setClass:(Class)aClass forClassName:(CPString)aClassName @@ -426,6 +432,12 @@ var _CPKeyedUnarchiverDecodeObjectAtIndex = function(self, anIndex) if (!theClass) theClass = CPClassFromString(className); + if (!theClass && (self._delegateSelectors & CPKeyedUnarchiverDelegate_unarchiver_cannotDecodeObjectOfClassName_originalClasses_)) + theClass = [_delegate unarchiver:self cannotDecodeObjectOfClassName:className originalClasses:classes]; + + if (!theClass) + [CPException raise:CPInvalidUnarchiveOperationException reason:@"-[CPKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (" + className + @")"]; + var savedPlistObject = self._plistObject; self._plistObject = plistObject; From 9d64526f266d2184ab6b063f002cde3dcb1c1205 Mon Sep 17 00:00:00 2001 From: Geoffrey Grosenbach Date: Sun, 5 Jul 2009 14:59:41 -0700 Subject: [PATCH 067/244] Emacs mode for editing Objective-J files. --- Tools/Editors/Emacs/README.txt | 32 ++++ Tools/Editors/Emacs/objc-c-mode.el | 284 +++++++++++++++++++++++++++++ Tools/Editors/Emacs/objj-mode.el | 31 ++++ 3 files changed, 347 insertions(+) create mode 100644 Tools/Editors/Emacs/README.txt create mode 100644 Tools/Editors/Emacs/objc-c-mode.el create mode 100644 Tools/Editors/Emacs/objj-mode.el diff --git a/Tools/Editors/Emacs/README.txt b/Tools/Editors/Emacs/README.txt new file mode 100644 index 000000000..2e4d9e506 --- /dev/null +++ b/Tools/Editors/Emacs/README.txt @@ -0,0 +1,32 @@ +Description +=========== +A simple Emacs mode for editing Objective-J (Cappuccino) files. + +Author +====== +Geoffrey Grosenbach, PeepCode Screencasts +http://peepcode.com + +Features +======== +* Syntax highlighting thanks to objc-c-mode.el. +* Some adherence to Objective-J coding style guidelines (indentation). +* Automatic loading of objj-mode when .j files are opened. + +Installation +============ +Add objc-c-mode.el and objj-mode.el to your load path and require +objj-mode. + + (add-to-list 'load-path "/path/to/objc-c-mode.el") + (add-to-list 'load-path "/path/to/objj-mode.el") + (require 'objj-mode) + +Other +===== +If you use yasnippet (http://code.google.com/p/yasnippet/), you can define +tab-triggered snippet templates specifically for Objective-J. + +Put your snippets in the "snippets/text-mode/objj-mode" directory where +you keep your other yasnippets. + diff --git a/Tools/Editors/Emacs/objc-c-mode.el b/Tools/Editors/Emacs/objc-c-mode.el new file mode 100644 index 000000000..8fc07871a --- /dev/null +++ b/Tools/Editors/Emacs/objc-c-mode.el @@ -0,0 +1,284 @@ +;;; objc-c-mode.el --- improvements for the XEmacs Objective-C mode + +;; Author: Michael Weber +;; Version: 20020527 +;; Keywords: Objective-C, ObjC +;; Depends: cc-mode, font-lock +;; Tested with: XEmacs 21.4 (patch 6) "Common Lisp" [Lucid] + +;;; Documentation: +;;; ============== +;;; To use this style for your Objective-C buffers, just add +;;; (require 'objc-c-mode) +;;; +;;; to your XEmacs dot-file. It creates a new style `objc', +;;; which is set as default for all objc-mode buffers. +;;; +;;; To further customize, try this: + +;;; (defconst my-c-style +;;; '("objc" +;;; (c-indent-comments-syntactically-p . t) +;;; (c-comment-only-line-offset . 0) +;;; ;;; whatever else here... +;;; +;;; (c-cleanup-list . (brace-else-brace +;;; brace-elseif-brace +;;; empty-defun-braces +;;; defun-close-semi +;;; compact-empty-funcall +;;; ))) +;;; "My C Programming style") +;;; +;;; (defun my-c-mode-common-hook () +;;; (c-add-style "PERSONAL" my-c-style t) +;;; (setq comment-column 40 +;;; tab-width 4 +;;; c-basic-offset tab-width) +;;; +;;; (c-toggle-auto-state 1)) +;;; +;;; ;; activate customizations for all cc-mode derived modes +;;; (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) + +;;; If you want to specifically change the "objc" style, +;;; probably use something like: + +;;; (defconst my-objc-style +;;; '(("objc" +;;; (...) +;;; "My ObjC style"))) +;;; (defun my-objc-mode-hook () +;;; (c-add-style "objc" my-objc-style)) +;;; (add-hook 'objc-mode-hook 'my-objc-mode-hook) + + +;;; Code: +;;; ===== + +(require 'cc-mode) + +;;; Default values. Do not change them here, instead change them like +;;; any other style variable in your customized style. +;;; NOTE: These numbers are ignored anyway, below they are set based on +;;; `c-basic-offset' which is usually what one wants anyway... +(defcustom-c-stylevar objc-method-arg-min-delta-to-bracket 2 + "*Minimun number of chars to the opening bracket. + +Consider this ObjC snippet: + + [foo blahBlah: fred + |<-x->|barBaz: barney + +If `x' is less than this number then `c-lineup-ObjC-method-call-colons' +will defer the indentation decision to the next function. By default +this is `c-lineup-ObjC-method-call', which would align it like: + + [foo blahBlahBlah: fred + thisIsTooDamnLong: barney + +This behaviour can be overridden by customizing the indentation of +`objc-method-call-cont' in the \"objc\" style." + :group 'c) + +(defcustom-c-stylevar objc-method-arg-unfinished-offset 4 + "*Offset relative to bracket if first selector is on a new line. + + [aaaaaaaaa + |<-x->|bbbbbbb: cccccc + ddddd: eeee];" + :group 'c) + +(defcustom-c-stylevar objc-method-parameter-offset 4 + "*Offset for selector parameter on a new line (relative to first selector. + + [aaaaaaa bbbbbbbbbb: + |<-x->|cccccccc + ddd: eeee + ffff: ggg];" + :group 'c) + +;; These are the real defaults (set here, because otherwise the +;; indentation whines about them not being defined... *shrug* +(setq c-style-variables (append + '(objc-method-arg-min-delta-to-bracket + objc-method-arg-unfinished-offset + objc-method-parameter-offset) + c-style-variables) + + c-offsets-alist (append + '((objc-method-arg-min-delta-to-bracket . *) + (objc-method-arg-unfinished-offset . +) + (objc-method-parameter-offset . +)) + c-offsets-alist)) + + +(defun c-lineup-ObjC-method-call-colons (langelem) + "Line up the colons of selector args with the first selector. + +If no decision can be made return NIL, so that other lineup methods can be +tried. This is typically chained with `c-lineup-ObjC-method-call'." + + (save-excursion + (catch 'no-idea + (let* ((method-arg-len (progn + (back-to-indentation) + (if (search-forward ":" (c-point 'eol) 'move) + (- (point) (c-point 'boi)) + ; no complete argument to indent yet + (throw 'no-idea nil)))) + + (extra (save-excursion + ; indent parameter to argument if needed + (back-to-indentation) + (c-backward-syntactic-ws (cdr langelem)) + (if (eq ?: (char-before)) + (c-get-offset '(objc-method-parameter-offset . nil)) + 0))) + + (open-bracket-col (c-langelem-col langelem)) + + (arg-ralign-colon-ofs (progn + (forward-char) ; skip over '[' + ; skip over object/class name + ; and first argument + (c-forward-sexp 2) + (if (search-forward ":" (c-point 'eol) 'move) + (- (current-column) open-bracket-col + method-arg-len extra) + ; previous arg has no param + (c-get-offset '(objc-method-arg-unfinished-offset . nil)))))) + + (if (>= arg-ralign-colon-ofs + (c-get-offset '(objc-method-arg-min-delta-to-bracket . nil))) + (+ arg-ralign-colon-ofs extra) + (throw 'no-idea nil) + ))))) + + +;;; create and add style +(c-add-style "objc" + '("gnu" + (c-offsets-alist . ((objc-method-call-cont . + (c-lineup-ObjC-method-call-colons + c-lineup-ObjC-method-call + +)) + )) + )) + +(setq c-default-style (cons '(objc-mode . "objc") + c-default-style)) + + +;; +;; Now for the font-locking part... :) +;; +(require 'font-lock) + +(put 'objc-mode 'font-lock-defaults + '((objc-font-lock-keywords + objc-font-lock-keywords-1 + objc-font-lock-keywords-2 + objc-font-lock-keywords-3) + ;; TODO: ?_ is not a good idea in ObjC specifiers... + nil nil ((?_ . "w")) beginning-of-defun)) + +(let* ((ctoken "\\(?:\\sw\\|\\s_\\|[:~*&]\\)+") + (objc-keywords "YES\\|NO\\|[Nn]il\\|self\\|super") + (objc-type-types "id\\|Class\\|SEL\\|IMP\\|BOOL") + (addon-objc-font-lock-keywords-1 + (list ;; nothing to do here... + )) + (addon-objc-font-lock-keywords-2 + (append addon-objc-font-lock-keywords-1 + (list + ;; first part of selector (in a declaration) + (list (concat "^[+-][ \t]*" + "\\((" ctoken "[ \t]*[*]*)\\)?[ \t]*" + "\\(\\sw+\\)" + ) + '(2 font-lock-function-name-face)) + ;; part of a selector + '("\\sw*:" 0 font-lock-function-name-face t) + ;; Fontify all type specifiers. + (cons (concat "\\<\\(" objc-type-types "\\)\\>") + 'font-lock-type-face) + ;; Fontify all builtin keywords + (cons (concat "\\<\\(" objc-keywords "\\)\\>") + 'font-lock-keyword-face) + ;; Fontify specific keywords + (cons (concat "^" (regexp-opt (list + "@implementation" "@interface" + "@protocol" "@end" "@public" + "@private" "@protected" + ) t)) + 'font-lock-keyword-face) + + (list (concat "\\(" + (regexp-opt (list + "@class" "@defs" "@encode" "@selector" + "@protocol" + )) + "\\)[ \t]*(") + 1 'font-lock-keyword-face) + + '("^#[ \t]*import[ \t]+\\(<[^>\"\n]+>\\)" + 1 font-lock-string-face) + ) + )) + (addon-objc-font-lock-keywords-3 + (append addon-objc-font-lock-keywords-2 + (list + ;; get argument-less selectors' highlighting right + ;; [[foo _bar_] _baz_] -> bar, baz are highlighted + (cons (concat "\\(\\sw+\\)" "[ \t]*" "[]]") + '(1 (let ((non-ws-before-match (char-before + (save-excursion + (goto-char (match-beginning 1)) + ;; expensive! + (c-backward-syntactic-ws (c-point 'bol)) + )))) + (unless (or (eq ?: non-ws-before-match) + (eq ?\[ non-ws-before-match)) + 'font-lock-function-name-face)))) + + (cons (concat "\\<\\(" objc-type-types "\\)\\>" + "\\([ \t*&]+\\sw+\\>\\)*") + ;; taken verbatim from font-lock.el + '(font-lock-match-c++-style-declaration-item-and-skip-to-next + (goto-char (or (match-beginning 8) (match-end 1))) + (goto-char (match-end 1)) + (1 (if (match-beginning 4) + font-lock-function-name-face + font-lock-variable-name-face)))) + (cons (concat "\\<" + (regexp-opt (list + "NS_DURING" "NS_HANDLER" "NS_ENDHANDLER" + "RECREATE_AUTORELEASE_POOL" + "CREATE_AUTORELEASE_POOL" + "ASSIGNCOPY" "ASSIGN" "RETAIN" + "DESTROY" "AUTORELEASE" "RELEASE" + ) t) + "\\>") + 'font-lock-preprocessor-face) + ))) + ) + + (setq objc-font-lock-keywords-1 (append c-font-lock-keywords-1 + addon-objc-font-lock-keywords-1) + + objc-font-lock-keywords-2 (append c-font-lock-keywords-2 + addon-objc-font-lock-keywords-2) + + objc-font-lock-keywords-3 (append c-font-lock-keywords-3 + addon-objc-font-lock-keywords-3) + )) + + +(defvar objc-font-lock-keywords objc-font-lock-keywords-1 + "Default expressions to highlight in ObjC mode.") + + +(provide 'objc-c-mode) + +;;; objc-c-mode.el ends here diff --git a/Tools/Editors/Emacs/objj-mode.el b/Tools/Editors/Emacs/objj-mode.el new file mode 100644 index 000000000..6ffea6da0 --- /dev/null +++ b/Tools/Editors/Emacs/objj-mode.el @@ -0,0 +1,31 @@ +;;; objj-mode.el --- Major mode for editing Objective-J (Cappuccino) files +;;; Written by Geoffrey Grosenbach http://peepcode.com + +;;; Builds on the excellent objc-mode from http://www.foldr.org/~michaelw/objective-c/objc-c-mode.el + +;;; To install, save this somewhere and add the following to your .emacs file: +;;; +;;; (add-to-list 'load-path "/path/to/objc-c-mode.el") +;;; (add-to-list 'load-path "/path/to/objj-mode.el") +;;; (require 'objj-mode) +;;; +;;; Features: +;;; * Syntax highlighting +;;; * Indentation (minimal adherence to Obj-J coding style guidelines) + +(require 'objc-c-mode) + +(define-derived-mode objj-mode objc-mode + "Objective-J" + "Major mode for editing Objective-J files." + (setq c-basic-offset 4) ;; 4 spaces for tab + (setq indent-tabs-mode nil) ;; Spaces, not tabs + (c-set-offset 'substatement-open 0) ;; Curly brace on next line + ) + +;; TODO: Define more syntax settings to comply with http://cappuccino.org/contribute/coding-style.php + +(add-to-list 'auto-mode-alist '("\\.j$" . objj-mode)) + +(provide 'objj-mode) + From 1f356053db04a0ec5e09690d83e062e28eb6081e Mon Sep 17 00:00:00 2001 From: Marc Nijdam Date: Sat, 4 Jul 2009 12:25:43 -0700 Subject: [PATCH 068/244] Expanding zip file to full bundle and adding Objective-C symbol lists --- .../JavaScript Objective-J.tmbundle.zip | Bin 16643 -> 0 bytes .../Symbol List: Method.tmPreferences | 23 + .../Snippets/Accessors.tmSnippet | 24 + .../Snippets/Class.tmSnippet | 29 + .../Snippets/_Accessors.tmSnippet | 24 + .../Syntaxes/Objective-J.tmLanguage | 642 ++++++++++++++++++ .../info.plist | 23 + 7 files changed, 765 insertions(+) delete mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle.zip create mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Preferences/Symbol List: Method.tmPreferences create mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/Accessors.tmSnippet create mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/Class.tmSnippet create mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/_Accessors.tmSnippet create mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Syntaxes/Objective-J.tmLanguage create mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/info.plist diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle.zip b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle.zip deleted file mode 100644 index e26fd961cde85439a195afd9899ca78a3f82a26b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16643 zcmbunbC4}vgXLYeUAJ6y%C>FmmT}9rZR?h8+_G)kwryMUJU!Dh?>k?2&)f0ki9C_# zpS5!5TDfCqME;I~G$0pjEBzKh<(Yxb#BOa{V_K51kx#PLM3Xy>hjojSzp>^$B zVSN27okK}Flkf}dT)8X)ml+CW(Qa*vPZ&ag~RU%eHs#Z?zyj%{Wo6^Va z2d{(Sot!L*hq-j)(9)@94tnSsoF3bVuA$+57oXE{UXEz>U@nc4qw1b z&*}@DrVwv<6}X{k!J*%erSNp>)MM%&Z0k7N0<4dO9(py$tP4_C;#C*>KR+>*TMW2e zzSGfd&bK>e4TfhI87Wo9kMI3Wq-xzAXP_mq51>b5kJ}JncyjU!2@$9wf;?ixH^PPp zej;k4p!=YJGs1ij3JKzJQIy6*1rLO0jlr5p7F4&;z;0x!f(4`7E5-(66YERHiHB#j zR$&eUz9UHVuLcAY3!>VB-RYl^M^O#eX(ZLbMK9)lpWb@TEpy5wnEfU{QEmMd!Y2sG z9SYxf8%bq`HXw)V1l${(eW}UZu7Atjo?rjU`~X*whJ>oKUMa)^0Rl<{1^T!C{l{&l z{1^JCY-4U`XYAzo->5b3e@FJ0prN6$qob{Z<6n2s|1$f(n{FJZW7)@m7E(P~Jt9Q^ zkRR>L)wm?3MGaMlt_m6GzrbRqV=WbbCi1qOBBx)`4xQP5?*phc{WT1iO@T={UOd9m z1~r#i1DJGGZivBngPO$E3`I#tek}#(t^cIWOTpmZ^>%l-J<-WJ9}<3 zS*pBp2(k+t_H{#dW(J#>VgyaA9{2|^l}3uZT^T`8zoDtjLr}@2p_*WR3&Sv+YTK2- z3tDQ6H4iw*sU7c3p_!ML+5^SB3Au)Len61aXz)c}{E2jX!$BkA0+&?ebi-FEcaKAX#Zu79RHmhg{|}*|BL%kCr;5e;O`7it53oZ?|~yCDBxz{85kK8 zj9zMJJOxUs;9$(hGa0|0lg#U)hCQ$U%COn_c-t7bn_<5&pV>JVhiZVOl1T`W*%^nv zv6SoC&lA(?5bo>&t5``>Q6l??FEdwVekaS zPH@V@03|sTqM{mCd=B$CJ0JfTnvfU*YZp$rLGa98a3J`tgbH~ILhMjvWeVKhzY&5G>&|9cr9+aK9Z&{ zA6;8lYow3w04V?8k><`zRO|c|DaHSa^#8~7?QY|w?`Hg8P2UvVjQ_MM;r~~f^6#?$ zyaJNZw=s3rH#PqE34G%He=dP8y(0yS$21d|M=xcy%z^-tNE=POa3FiF`iJ z#>?nR*L`1J$1$H$T<`?s${G^==?W_MK#LM|D z?~ymPcfV@ksL?W0PMbO5v!s}%eOg(qW=r3f&Xr}Y3EOVc9gk!B#x%O2vzbrvIIP#- z69}aIkg*MUylA_C7+A?4s@45r_T9Dd_96ZQR<`&pz~()`2R!2%+GWArc&c7+xES(O z9u31;*+t~QRsHIvrTyTSR?eSa?)#-@9dPuIF0x>4pN@@L(>_09v@uVO3(AD1$l-1-BGG~Wubo@s;-?vf1jXERet#r)^QD5>Fc($VE>MDpA zQ`cLDC)f8|)7f`h!Bzd29Ia9Y9@qU__pb@t_bc|V{AukD2B#H#SDgjVAymY#-J1?y zL+p0SfFia?_%@`6gXJOrO1SYZ8*2LI%!<~}#qz#OwQRR_h5|{9BH0dmrSHkk3-Xd? z?&M2G>$%t?_Ya=vPY(>$x0u7r0T0h7Mv$)Rp{wLG?q33h+hnufYVqI75_j8Q{i4SS zqB6gqz62eP{I9*lfR)j?r1~C;%WGu%G+hzmkJ$Os zv)SjiL+oe0zex-7pZPpwGBgI*UY5zoueM|ELq;A~-HeczX1(T5rluEPTVIJXPa`WT zs=uZ~x%txxbZxxv_T4|4zu(XJClPaOK4W~YQ!@x8He=`fhhAl82+lWAC5TJQ`YX0# zj`Xp`7A~!I;ygUU6ubvGnh55L0qrpJfGxSXpT9y*T@pIS@6N5x{qZ~z|M29L0x+V# z&}n9NMtR^-=4>#4O^x02DFwXdB06XG7&Yl(Ul&STsgkXuP>aOKGtTc z*#q}G`#+UGHu$&d#edIaI(cQK+_Is0N+vWw6)`XDnfszF;HW%aS(0nVrIvk-*Zl0~vPlDXSPhuT^TEN4%oCz4NmsT1!H%ly!{ohj*^fgr0CEJE{omH)c5%a_qIW>sTd0G% zlu)MR$dg76=u3MR#jW0nUS1Nva)3y>wsTVVQ5`c2$)xe?2WWTX`Y-APr?ZQM`)_k8 z@ENIP6%UL%FJ-Q+iF5PA^8w?{^mk;D?vvZi(q}*OXdA^(yweF-&9l%-`C75&YsedV zjw)81eh5jxOXoLI$Uv6To!h6L{>(aK5s@%W@0P7gWf+RVHpX;s-I>~QJ(P79z(?qx;?f5S?jqpX5m?PxQJj5ti8frOmGu5QfJnsqVyoUIDLmFGYZH4`AvK#@I?nvOqOnH z08g5w*>nJtQxLBrR@tJWp!jkA#U}0yFCO~LNEp=7>*L$`EPV^}wfZrSMcF*q>=tQ@r0xYP ze)6mr?$Ui=$A+|2SNe%X;^iUi4=?o8^BRTrQBn_urTGt8U48t`YTl>8mB2t2#LeJ- zp7x(xwy)ujAsP9%y<24fG{0kqd~N9Cpx=vKga*WmC7KF z2pwSPj~AJd0Q*rGgIf+U;qK6DV3$e{lb=&Tw&BxX=gM!15gYE#iI5Nb~1bJq%l!$&WBLo%9TvQOf*KxvM_yg3L6BqVeHx7-j8qam2Q<_!T?FC z=wlqL7Ceg6*X!Hws7SLIXP^ktsEYmGVrUXi4Nz?x(j-e60N+dK$VAgW7|jqxPHwvl zeYO(S0lW8*QL%`Bx$G?SK9_q=^o`$+VpZ~k-PgcRW~|;&AjVK}g}G;3Y_Ky{r_&l^ zBvC2NOU)g4j9=7$!W8X15apt1jM8C|}Tus&Znb zbiT(jeQqOwiP@Ae@LlLbC9@jzR$gBpFoQhF&+=y@b~#8g?MF+$rf5VV(=J>tfg$iz zyht^T9CP`u1*wZ4odnVE&{nEsb$!w4l#`_ruBr20#{0@{~4ym?W=|nsm@GLINO&B!BmrWiwO~ppvQrSP<_SOtQoi zY8?`4j}d?BO0D~uC@A@7u{-hM8*><2VN$;<=ncU<6w&b9&L-03eOX_Jo7UG{ytIpU zzXP`SlHId_z+$b^mboSO!hO%8cbucGK<}3!3QOG{8BUXW2+H576+}pbE|k@J>{1Rn zZ#Qv}A7dZ>NX|1iXBW*iKNtcx0kT6D+%pEi!j>6sVrq9VqCS!d31*S{&41OUW0l*b zQVR~TjKVF^Ehd>?LZWnoq9c3%9Ho&=@PHNuEPA#@j0Md?Tei)1iSU%pGL$~pU?Gl; zi@l8HW92VKDcI`9|G=I~NNgLP&Ne!Y|9z^#Qa)-xJj*(AQWRA_RHzZ=KYEbp^W(P7 zO@}aoPRTRr4-L`0KLry5LQ|xs{v2ULj!WOiI)k-Yqr`&>z7J|!#RONeXHWOx+YTc} zLnAu<4xHcX_G-km9w8eQ_r!gGoqlP>+6&w4GVs260HhyVda0mS4*C^&yFIfxt$NV=}5N zbBvYwAQ=&PqIly!z<(BnaLJy|xHOa9lVl^UhTc%7#U6-_Jg4!qrYr1~R!Q`Bkd5l5 z`g@WpA2txdN-~g}*R`&ZCP|IsVcdxY;@1Q_pf+%sG~`xg#g8U#V-Z6@X;I*0B}Wba#$Qfxra_RZ4EN%QwYOBCC@O* z^7ab`j+=2mksU~B&3{FMP~^xBFF1Y0s1G@iZVm(?AS=Xu&6wMZoZX@5@T-o(=_woU znGI^4Fw~P(aXJP&XusR_Nd36!6Fzl%`U1+mh0qkIeF|x;?-1+ zsjn1L-ly;D(_jf|bG*{v!Fm~ohk%0xA(a9wj9D{m$U-UiSJIQ>+7&CX8r-1b7Q~8$uwFl*wT3y=DC2!FCP$htvNkU} zaw2BK(*gtmu$GcjPk6Fs>uCnMMCX9$9R~IGvZlO1;8#XAWb;HaPaxS7j*3(zL+8du zjD0*3(PbxPtUZik%!3z5N}#x0qfy;U&a!sJwiH5XE44}ms9H3Po`Aj`f4et9r#ri# zPBPczbP>VNj^Qi#>&c(R)oJ$(frTS!I?u7hxp1rsME7yB(Fz|~U<|1({g!A#shLnz zQX$mB>z*8MVN%Bkc0O(E0PPRc6|c@5i3}TQg!8)~eSA~kR2=bP=-a`>yto3!1a~P( z9yR4JCj!H{MT3RDf`wyJhk_`X$pDdo(b8reebfZ2t^4tN5RRJTFpzqDenQsYe6fi2 zkP8t6IjZDt>wV>MU8))?IU`laLT$Rg96+ycS^t!qA=%*OBp0CTZWCo6!0B4JCy9m% zqEC@(o02ln5ye?SBoY!Jd;3VSQtP~!^TW|Y!Z9z%Icg&O5?6a3#DvH_YlMi2RBo2> z4h#CJc@AB-@|=crK(YTtXe$i&_xFIOrh|nBmhs6Z6 z?xaMkpi|CusI@@jB)O$FQgwfXXvxCOSu4u9u++0oV_~=N{jPNb}d? zn#+XVjq7CUFxgdap6Gefr_KqYm|REEWx-g~An)LsFgQ+9)leuw4)F&r0jh1oHg+tT zZgGFDLh0iHWMWb-Me^81Ly3#nMPQ5kI&H{$!3fmr)RJK&43m*Q0TyMCBbINmEx&2Y zJ7R$}7~%xZIvo(UHQJyweMb(wv4bDBXPW>S^0XHOY0`mQ5oSd$$nxpCrDnQ=hR6ia z@|QnCtacDEYomToS`Mlvi>x3aB$%7jhl?Q#m(}3J$^79V>%x2^Jql9sdxsi`c-^?bSh3L{jDF|?E)ndGjK|pLH#1%60#+Xr>49&3ya`T#=+$;(0wqxTgHaZ= zw@62uznKG?%o~=0_LNj9+>I}VBx;`+iWP%|RA^IuVyr3{-9cy;lxpd^kWd<;^)%LX z>L0>Rn@}17o1#1uAQV2DLT@ECu%AG^I8~6BhGc^qDeL0JcG3k^iXXt*U_Xll0y}5p zkmw&D>jOD0Jw_n0+wq#3xF;MRYr_zgR4m@ziKCF)TBeiY(Bleij3v^I8bnzDwstgL zMGDBKeNNB-4}?r4dfE2_e==%KJv2v&(-vw8_{I$ea~jMN)sqhJWJvX-x8mHTHvQx&a3c%z>OqFmMU1Bgb@?eIr;$VIBUd6XKSySL^m6}*WpCV=GQf5;;s?Gm z_oo7y{&w|~CR=kVcv;@!|i7(^m+`aVU1}|0>dpf zoV{y1gdbp?B!1VRQeHEQsq6)%+QJnFLTJAn0~+!X`X^*>dJb$J5?+7%RJadd-m$jW z-Czw}KFNhez*ah&ELFObn7%guNl6I6iLF+6ttP7eqYC z`G>HPgW{;q@7R-etW@P#T!45=j;f33R<5R-pDB>{#}|K&DXRJMDs z>U19(S#G7YI~l3KgvZF{Ru+^|9PfB|3dpg{`}oxTd18fs;(pTRjtdbb4;iN)$bF2b z>-;%_1fpDnimg5M+h!O#{OjBhD^lTK&*aHH1ru1%3AN<~UU}`FH2M-PQoUG%UC=Dx z9=p6$_B2>BwFgrhXe_Y)S@E*Ad5v-0?p+}Am>LhKT;6Gn<~H^ zLz%{~T^z|L_&ud5Z|Gg~s-5oBD^qex@TRGr__Lb{k&*DtkrsjAIYEnwerl}K^DC2` z)vH&y5$=H$b^PODgfuMrS!0={Rx#r|oef@yNXX;e6B35Me98b_6aG= zHSab9dR*^1LPN$nOtP21+&jy25!H>P`*6OET%qZZ+C+D>v>hS@c3Iu>J%)#7NNKZq zi5t`!_=_Xv^}{??gJ(k<&>?4CSMU4@>SGJx7*!Cg!eUy(mFa;kUAYs?*eAC1Ygt7c zJYCYct>8!SkW*NSuBsxd!#vD}D2FK}q002tM^JyE5;w*|x@Vjy`5yqC7l7!>)rqNH zru9Z)6t@TVD^tA|MY=QfEHwULyWw?A?=|mN6oRCQ=2rm8gR(na!9k8PQGqwV9R#bF zgJJA{Ud^kMZwf7B^E3sOtP2t{Kjxq6Y)GS3?*rb@%JbK%H9 zq&q7U>;X*kd13S&a1^nDhoweq9R9Fo+_rN~R>wVx_Gc(|qZ5RxH=t(gTkPV2363q@ zMS)kPe&C)Eq`XlP&54^i^qhhpp@eHa`3mz)jXK>4ax^mz|Wy$>` z0M9e7lfXP#RbR4x$qE zSpNBD101^*-N{DQFWSeQw{!>Ppt*B!rA5P5;}9Mfq~e@(UDZFB{mTtR4tY0}(E_Lh zeCi&}5AStYf=c++)l$FwdSR9*$Ah_%Urfme%gGcfX;@m6d9oO5Xw37Xl5G|~@|xDK z7T>)t;q~Y=`vZ?U=DU1Z8H|h&Dd@4(n@83{`gTa>s-uM8Q$&G6(auT)5PXUHX_eAov16P|k;CyE$ZIX?ddQ&wrAn5%m4p29?I_VTv5Wo1X1e z@4L~>IUKp#(qf8&RJZ}J9G`eeNzC>>KHImp0T=V6);3F`%SsGoqy_9Jb1zMO89DGt zmZyB3gS)bAv^GcwK@|4Y6~nAkXMdUFT00=+b_E|UpVi7a7*NG0uz;o;fGiozFcNEG z21HQ|ugq!Wp=SFqIfGN=tDPZjju~$XP}2-K7_BcPi9s*F^gW^!<+f9)bR7fhS2NP$!%MC9c}^e~OTzT|QWV*IrPOepLy zjgVo|y`8-URLs4lL>X7!Sps(T85dqko_8=RZsFD1VoiO%gmLn2CthmRO@9!>td}Sf zia!uk__#}ABVR&tHtr19qW1Xlng=S1$Bol~x3|CW8Q&+U{0i4##2p%1Z9|${DaAed zjAJr1^F44wr2}N$+nmxV1jsT*b?My?;>%?!h;a2%MzEbq=d8C^7_O*>IT{SCov_9*hHV##* zKi986oL#V_lqNNj3Ag1^7*;ifC+*4%Oj$Mvb4N|MJ~AD@^@Va0&Vv#YY(aVxgPjke z)N~bH7}gEduNU|}R*xXwNjc{+V%^fOn<%{zChod~50%0#g=kQiZK&!54xTCMO(FpC z>+>7=Q$M;LiQ=#8xvGz>6SW|`nK&m$Au=C8Tv#|~aW#%`qJT(Ttgte0xX*dI2_trK z&UcB@hUrWO$bS#%Xvgo^cBO{YXE$aKF>JXN*=3^mxz z2pB`<9L}D7SNZ2&?)a+v#WyK88JKhsAa54}Q? zlmq|hwnml!yp{>3L?%@n6w9l{6Zj;1&_@p}+MGbO6hw~1l}HC19b_1iFc8OEEZQMW zN~yxEa+p>h%UjB1d2ngsG^^#iJ!5yv3x7~Dy__O5zDn$cUvf?&hAGx^TI<40NT(Q( zNejGl9LKU@b1AXpBe5Eh$G|!!{A|0NW7ptQPGAwILdq#y8Eiw8^r}ZZ9q_JMl|t2# z<_NSBtW+jPj7?p1lr_)NI5x%!Kd4ykxFL_aH`@J%0O1{dFv?!GQ*dU5zX&3`lxAu` z{$*7}JqJ9p!86C=tvDESCcI}rLo0Tadmx#H#4O+!1dAgrvWv7Weg?1WY>8bPy7?zr z-HilUN&tJwEOSZF<7Zw))ftuTs@4qtTC0$y9-mSC;KlF|3Olh7=jt&aBE9Zljkyqt zTK!>+(?vZk2}(p=>0Q*(-}xAe$u#(wR49Py#Y@y6jf^|3B0B+owXLKMsxVtfU?ni5 zlq<%%eg?h{x~Tgsl^L}19g-|e+F_?lHD1Y0bp(+HWTj&mG+vx$Z8-Q%;!<5j9{>be z=Qo7_cAV5kj{T}pF1VAKc9doKRj6>mp}2h>u`~$Rb89U*nR`Zj8)8-H6zD1E{Kbii zk(6)=rffcUP?;@qQ_jG9y>8?>IG$Mk2XGJ%>=4^3Hs9S$Y1?DPgOl2Ia?#ET{>D4%rTGhl&@)fd2LAyx#B1U(4|V9&nCHQQTJtcHijzXu$eSgTd|+2= zsyLT)#}nbcOcQ~uf7VO|MoU(!oUXV-8qN;8;7m4q$Rt&HxeSUGz!fa*(V!mtrzo!o zuqlBjOuUl8!LatlGioJATFfIPRL%Pvrofy}LI+0W@RbQWNS)w>b}UOdTQkQw#X#sK zA3TKadCFbWi7J7av^@BTmVQNNolH?JVGA^5=l9+1w7re5pX8xw5B4-~X2^|Y4e^0` zSmcl$AZWmw^8L_fG#8`rI$lEKg#lq-HDy}Bj}1@lj7d_r7;{XNjj)fgFUawAb2X5~ zlzOr9Y?!{?$uqr2qyseW0U3LdJX-cUw^x%9STb8w8b=p7B{JBFLRQ}wIuybH2b0i& zSi{|Lv&ugRT2(H>WT(wb3#Rnrj@5M7{w?$#WA+ER%DF_~HazyuRF4csI-JXKonCW- zGsNhX=aLI#c`O=%F-?ybZwJVL&<}iz zP6gCyYThPj0@?71sf@MADEo(TNj-ZQlgtJDA@Y^AQFJC8tA5}B`;|g!rN`;~Ftjzd z-^s;Y%z5`%c&-;0M6 ziy1;3Sd!z>M1-B8N0KX*40Llq!78}?U`8v(Nip0-i+^%T=9k;^b4#ozR6TD@=5(;A z(gUBM3`4bYd3%c}4dYE3{V*6k`i!$%NnnxJBLO2f?eUgXwKf6zms*{XVgPT4QO12*Vhhs> ztr|HBcDX{JB=S1q52&%b)ap%hLLk!EwB9KkducFjTal6lI*c)h#38T>Pn0)&^9-9xQDI}Mamy*E1r+=yL9@6* zOeF_WR%GV$EZ`^dd|RtlN>RvV!9pq-|OAvcwn-HD^y@xu|lSBzS)2FiCx7r?BiQXl_u5 z)c#n?y+0(ua{=iYkKCNwzcS6TIH-*S%cMYmxlOK+7rW1Hp68;^cA}9vemUc=%aD0M(%K{y zTkqEC8H`#6)$Dorj#DMw-Xr3z0nmil851vxvYnVF3(}mwVl}@&B{(Hhu?kZN<6i^( zA?i{Kl3@KSMIN?Kn`J`m;7UZ>Ol0S7^EW%IW?BKPBk}&i#FM)nDG?t)gostq_%N`h z*{He4F9rUKE~s$$pIygDN7hqjqrC_?bZrxo`BT}E(|Ay-JAD~fL6ep|!Ka$YQiS$H zqYiV4zRfhV=S<qV?yQ^Zdj*;F{k#QoGqkNo-)w*3CkB?>Hc2M;?-W?84ixHDkW|)k{B)yEZt80~v zD;Z;+(a$65V+QEbn9&bBG3Zce`;%O6y26z2tXY=R>52o9M6~?+%s7EOoUuI(wCNIa zXyGeho_6Hpe5!)NhXD8pj>W5ZUfI2zTGbNAp_>>3o!$t8$31Qn(aB5-VmuPJ7yz~@ zknPI5xB@gkU-q%{)S+|dY!g`#PFX!!V3MGxA=y-GN!$%M(WMiup^PU`670Nmgu7(s z^YlGI2I!D*t)FT&^q+)CSnd#~(=pQlS6L%gSMWK+siBA2v@~3=jw==wZN$&FAZbTu z@6?GJ⪼kPGfq6@FD>#DSIKfR+{B^T1lV%Kwy`$G}e`N!EE88aOL{FJmwWSDU}ZF zJY;qbUQTHG299Y^lB|cE<9sO`T9Pox*Mjbiw$jN^Eie*esw0rPX>D zc`|n)7YJ@MB~L4MoqcPcpY^FLyzsT~D0{{1V~?rjza=OQdTK~YzP%jRXyL9~BrFmD zENs8YWCL+q-BRXprBlWi{z#5g8M;b|{UA>`Vo(0-l^jExr+bCG%v+GPjRW^H9*2%s zf_ET}2O+(}|jlc`bh1 z<>2P@1go81pjE>m<*@d?(YKQS@g#a*12 zb1$$NE+?$}wU|ow(Q}Y&&p_RR2VA+qs(>4MhzE~JJAFLSfqbqta-S!b=zO_%KB3ij zsew&+H+_otejVWa3j4XD3s$m}MgAD38nhzscP&OwX{K4l{hPwERxiCnl)ecrURo1P znl|~8j%LB~EsW5qdog0iVuLh)Y>Gd5RfN|6o!ST*V4i}}B zcQL!gKXA#jPBhZWQ-4LC9=(|DQ(aXL#@0VcydxOep>Y8$7Uze63+Co{Ehu@@#0GLP zn=nb^7?*)uLpH;{dR#MAi!#>q-GbxtqE)PC0w?c_mGK)4IAZ4JqN6k06)NU0YNajc zY4>SNaWYP#l@$7Qw74l^^4qkysa1ZQGW;kF&{`HqK$HdB25I&Xi5vIwDwOe2;HaL= zSmq2cBN&W&TzIFnGz5@9vdfSGW}as$4Vc`snx61aAl0HqLU zJz^}aBWtfwps-sgv#~rN@vGAYGNvM1@rZj}o~iJyp(MI9tpxITHmf%?3$P@;@f-@W z=z@uSRahFKdBCPBf;GTx#fl?XJppYX?r7ZUdB`|hpxfGZlH+Ht322KydWrZjYA#WE zWW(DoVklKmd`6TYTw$)E;9z2$bT^gYPTvEieBTcFO!A)J|doW8(dqM4NlYZQtf#NPGm>67mk?ZdiQ zIkEWNZJ$>4xd%|8c&0T5^hQcCiq{G1Vk-RvG$OFlqBTKp%hpu??sRTYXK_&$Zuc)= z_Y8wVqy#DVUr&O0-JF3?CJU|!8LtLHf6?g0UkJgUP6)CLv&HT(T zC0QrtWPpkmu!XMw;$OT0u`9w zQ#PJ7#p~ZJq&k@bYkDMyjH^GGFDM|Q;fWw%Qx6~+g?Mf0+XzbZRSC*}d!IgXfA1vu z-lX~7g!|sK`refK-mI^C+0cImexHmE>LS*FSAiJ^OJyplfwtNCCF(2X7gRLHzHp;h ziRgK|Y!%3-2@)%5ToUR6!i>&a{1NPYl)W-!`W9vCcnYb4Orgy%?*#$ad@^j4_w9Y!JPamV9@D#x(3kg&Q1z~;fD z_r0-UP+>EJ1Nu}cMR%bV1yRwUxmLd*;uq|3!Q|Le28Ci&3|4?=N~8b#WG1C#acy<* zgw~F-c$0CSUVDAzh4#FOgoNNP>}GQmh{5KUHC;!}>+NxZn-c^scGq<*J;1s;HNCxl zp6v2kW<}CH1a3w%XWQ_<{;2!M38*j z&Q`q5`Vhf(oj6*nqiU6hjRS4@M271=6&uhV+14XNI!r2~&mpg}CE`48h}`bTCP;6W z2L8o}IqUgFzEkGcaxIP5+YOwJ-Y>)OJdHr%F7$c!h_(#`Nvj0-08vLIr8-2eKuQ%O zslIGI7IK1_QWtj;_Q<_TXfKUbubU+|SX(Qt?oOS%4i&oK5$S<=ZwV@A9v$Ze#9@N& zw@dF{;``CD+hXcrdbP`lY2R{HX<1bVt@n(a75hBDKjS{Gj0A25nX-gaKRh3fd46$Z zEiKUIxU>%K&{XYPU)o7`+BBoCdV{`L47?kN?4-Ig?f-nDvzQFJe(BW|4omZYj~`Ka zf=`r9FT!+G_l}75lik_<-GW`H9&cX7@m;mIDcbsibIPj|s4cogh^~6>N;Sk6%D2Ez zX?WoE;OO-(PBeN|w#fq&kgEAi5|w$fcS%lWUt~VTi9f8K#Bg|n5)G`j6K`LA!scrH z4!=IvbZV;`-dpkf zifL7W^T$)yIx^m1z;r8Vcdy%s9Nop=P&yKS^MI8+)ZjPr!ZyQFy|a*4p16X>#CFxy z>i|T%C1=3^XPgwuO)AGhuItlu2=8J&N|axu8)a`sBT#s4#)Tc(2JWxgn(+&l(S0wx zQnyi)r{?s#sTi)KF+SCu6-hWP<&apg5o?P>;p|^_atLF=<}f>xmI7X3bcDl9SHWGe zI(nUzu~B%-`l~byas^AzmnNsrs0*=jX8&~-ndQHrboh`-JK^$%*7tP8M~$vOFyBey`ivUq+r^J};Sei1Wk^%EuXPcm482KmKL= zt!-`f=iQ3CS?LTUZJnjLD({Ka%UgK+;$5|kx&O-shwbD|-`nT)8jF!pGrBwGT%( z-#6pS%`hT}v(G0^<9+ZOF+r20Q6~@`8x}HgMkCj^wyqQ1z)*X~C1nm#8|& z`-QsVgZWh%pTC{6QJh0fNiM;>KR(nboqm@!dpCex4P7u;u;G>)7@--Vd48^hx$!2=B*z-H>JbKeD z2;=?RsLR(o`;y1FZx?$jX4Pu5tcHKKo;sczz~CP{{`P!)e7q=ryjpO0W73E`x>V%w zrmx(g5x+@CCbGnjvi2ovop!$s#l6PeXWVHDrYCr$hL={{ze1U%X_Ewe(}dchod=r{3ht_(Y#YJu^o+5OWNW$W7E!i z)O)MOH|KD>q`~*6WGjCh+K{ zhpm2R4t&ZsFkOftrKH{VIIj{NzZRc#MZH)TjM4MDIe$ndHD!?<0liq0P2JbzUhex5 z(sk;N_cxlq)+>bVbM0oHmy}1Lolo7@;rdpnExXTIa`%Pz^st%Y)t}Dk9+zMKqPd*4 z1hz?IdC@sG)|P<>BxRQ=s+*=mFU;j1w+gL3<7z6G;wphIsBiCG`{vA$YQoab3f1?5 zM`1mUfG423PBp4ZnB&R2(<4l(SB~aVb4MsxT_ZmhMW= zcGkW&_B6!w-ccM6!S*K_?cQ*u0W6IXHnkS*8yK9gcyrj^Jgjn_z)PISk_$a4ME zAnw5_}JTUAMVtvv+wZ3Lt&&{`w;Ln}JfPYjk8_0RoDx_#00I20;h?k0~fZ zAh>@gv;{5&|33VG1KLpk8_@or%Krz?{zq_@>K~K~{pJ1z<$r{=q5e0l{a>9u0dDpS%7eEywXsu5A$i4cGq<^!R@}{>T0M=LDmn{sqT>hv!t(|KkMzCi4EV{`~(m msDuBG#ec@<{m-%e&F3jdga37vfd1_d3bg+!M;!0pzy1ey!7D%j diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Preferences/Symbol List: Method.tmPreferences b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Preferences/Symbol List: Method.tmPreferences new file mode 100644 index 000000000..d8722d73d --- /dev/null +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Preferences/Symbol List: Method.tmPreferences @@ -0,0 +1,23 @@ + + + + + name + Symbol List: Method + scope + meta.function.js.objj + settings + + showInSymbolList + 1 + symbolTransformation + + s/^([-+])\s*\(.*?\)\s*/ $1 /; # strip result type + s/:\s*\(.*?\)\s*\w+\s*/:/g; # strip argument variables + s/\s*;?$//g; # strip terminating ws + semi-colon + + + uuid + 85A46AFC-5552-4CE5-BDA0-ED34F0398399 + + diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/Accessors.tmSnippet b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/Accessors.tmSnippet new file mode 100644 index 000000000..428214f6b --- /dev/null +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/Accessors.tmSnippet @@ -0,0 +1,24 @@ + + + + + content + - (${1:id})${2:thing} +{ + return $2; +} + +- (void)set${2/./\u$0/}:($1)aValue +{ + $2 = aValue; +} + name + Accessors + scope + source.js.objj + tabTrigger + acc + uuid + AA41BEF8-5F81-4A5A-85DE-2E81A112778B + + diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/Class.tmSnippet b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/Class.tmSnippet new file mode 100644 index 000000000..d2adc60a5 --- /dev/null +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/Class.tmSnippet @@ -0,0 +1,29 @@ + + + + + content + @implementation ${1:class} : ${2:CPObject} +{ +} + +- (id)init +{ + if(self = [super init]) + {$0 + } + return self; +} + +@end + + name + Class + scope + source.js.objj + tabTrigger + cla + uuid + 96C39647-4346-4750-9F96-58070F24EDE6 + + diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/_Accessors.tmSnippet b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/_Accessors.tmSnippet new file mode 100644 index 000000000..55665bd64 --- /dev/null +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Snippets/_Accessors.tmSnippet @@ -0,0 +1,24 @@ + + + + + content + - (${1:id})${2:thing} +{ + return _$2; +} + +- (void)set${2/./\u$0/}:($1)aValue +{ + _$2 = aValue; +} + name + _Accessors + scope + source.js.objj + tabTrigger + _acc + uuid + 85B0746B-AE1C-47B3-8B9A-2B9A95F4C71E + + diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Syntaxes/Objective-J.tmLanguage b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Syntaxes/Objective-J.tmLanguage new file mode 100644 index 000000000..a1ced269f --- /dev/null +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Syntaxes/Objective-J.tmLanguage @@ -0,0 +1,642 @@ + + + + + fileTypes + + j + J + + foldingStartMarker + (?x) + /\*\*(?!\*) + |^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S)) + |^@(interface|protocol|implementation)\b + + foldingStopMarker + (?<!\*)\*\*/|^\s*\}|^@end\b + name + Objective-J + patterns + + + begin + ((@)(interface|protocol))(?!.+;)\s+([A-Za-z][A-Za-z0-9]*)\s*((:)(?:\s*)([A-Za-z][A-Za-z0-9]*))?(\s|\n)? + captures + + 1 + + name + storage.type.js.objj + + 2 + + name + punctuation.definition.storage.type.js.objj + + 4 + + name + entity.name.type.js.objj + + 6 + + name + punctuation.definition.entity.other.inherited-class.js.objj + + 7 + + name + entity.other.inherited-class.js.objj + + 8 + + name + meta.divider.js.objj + + 9 + + name + meta.inherited-class.js.objj + + + contentName + meta.scope.interface.js.objj + end + ((@)end)\b + name + meta.interface-or-protocol.js.objj + patterns + + + include + #protocol_list + + + include + #method + + + include + $base + + + + + begin + ((@)(implementation))\s+([A-Za-z][A-Za-z0-9]*)\s*(?::\s*([A-Za-z][A-Za-z0-9]*))? + captures + + 1 + + name + storage.type.js.objj + + 2 + + name + punctuation.definition.storage.type.js.objj + + 4 + + name + entity.name.type.js.objj + + 5 + + name + entity.other.inherited-class.js.objj + + + contentName + meta.scope.implementation.js.objj + end + ((@)end)\b + name + meta.implementation.js.objj + patterns + + + include + #special_variables + + + include + #method + + + include + $base + + + + + begin + @" + beginCaptures + + 0 + + name + punctuation.definition.string.begin.js.objj + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.js.objj + + + name + string.quoted.double.js.objj + patterns + + + match + \\(\\|[abefnrtv'"?]|[0-3]\d{,2}|[4-7]\d?|x[a-zA-Z0-9]+) + name + constant.character.escape.js.objj + + + match + \\. + name + invalid.illegal.unknown-escape.js.objj + + + + + begin + \b(id)\s*(?=<) + beginCaptures + + 1 + + name + storage.type.js.objj + + + end + (?<=>) + name + meta.id-with-protocol.js.objj + patterns + + + include + #protocol_list + + + + + match + \b(CP_DURING|CP_HANDLER|CP_ENDHANDLER)\b + name + keyword.control.macro.js.objj + + + captures + + 1 + + name + punctuation.definition.keyword.js.objj + + + match + (@)(try|catch|finally|throw)\b + name + keyword.control.exception.js.objj + + + captures + + 1 + + name + punctuation.definition.keyword.js.objj + + + match + (@)(synchronized)\b + name + keyword.control.synchronize.js.objj + + + captures + + 1 + + name + punctuation.definition.keyword.js.objj + + + match + (@)(defs|encode)\b + name + keyword.other.js.objj + + + captures + + 2 + + name + meta.id-type.js.objj + + + match + \b(IBOutlet|IBAction|BOOL|SEL|id(?!\s?<)|unichar|IMP|Class)\b + name + storage.type.js.objj + + + captures + + 1 + + name + punctuation.definition.storage.type.js.objj + + + match + (@)(class|selector|protocol)\b + name + storage.type.js.objj + + + captures + + 1 + + name + punctuation.definition.storage.modifier.js.objj + + + match + (@)(synchronized|public|private|protected)\b + name + storage.modifier.js.objj + + + match + \b(YES|NO|Nil|nil)\b + name + constant.language.js.objj + + + match + \bCPApp\b + name + support.variable.cappuccino.foundation + + + match + \bCP(R(ound(DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(CriticalAlertPanel(RelativeToWindow)?|InformationalAlertPanel(RelativeToWindow)?|AlertPanel(RelativeToWindow)?)|e(set(MapTable|HashTable)|c(ycleZone|t(Clip(List)?|F(ill(UsingOperation|List(UsingOperation|With(Grays|Colors(UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(dPixel|l(MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(s)?|WindowServerMemory|AlertPanel)|M(i(n(X|Y)|d(X|Y))|ouseInRect|a(p(Remove|Get|Member|Insert(IfAbsent|KnownAbsent)?)|ke(R(ect|ange)|Size|Point)|x(Range|X|Y)))|B(itsPer(SampleFromDepth|PixelFromDepth)|e(stDepth|ep|gin(CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(ho(uldRetainWithZone|w(sServicesMenuItem|AnimationEffect))|tringFrom(R(ect|ange)|MapTable|S(ize|elector)|HashTable|Class|Point)|izeFromString|e(t(ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(Big(ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(ToHost|LongToHost))|Short|Host(ShortTo(Big|Little)|IntTo(Big|Little)|DoubleTo(Big|Little)|FloatTo(Big|Little)|Long(To(Big|Little)|LongTo(Big|Little)))|Int|Double|Float|L(ittle(ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(ToHost|LongToHost))|ong(Long)?)))|H(ighlightRect|o(stByteOrder|meDirectory(ForUser)?)|eight|ash(Remove|Get|Insert(IfAbsent|KnownAbsent)?)|FSType(CodeFromFileType|OfFile))|N(umberOfColorComponents|ext(MapEnumeratorPair|HashEnumeratorItem))|C(o(n(tainsRect|vert(GlyphsToPackedGlyphs|Swapped(DoubleToHost|FloatToHost)|Host(DoubleToSwapped|FloatToSwapped)))|unt(MapTable|HashTable|Frames|Windows(ForContext)?)|py(M(emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(MapTables|HashTables))|lassFromString|reate(MapTable(WithZone)?|HashTable(WithZone)?|Zone|File(namePboardType|ContentsPboardType)))|TemporaryDirectory|I(s(ControllerMarker|EmptyRect|FreedObject)|n(setRect|crementExtraRefCount|te(r(sect(sRect|ionR(ect|ange))|faceStyleForKey)|gralRect)))|Zone(Realloc|Malloc|Name|Calloc|Fr(omPointer|ee))|O(penStepRootDirectory|ffsetRect)|D(i(sableScreenUpdates|videRect)|ottedFrameRect|e(c(imal(Round|Multiply|S(tring|ubtract)|Normalize|Co(py|mpa(ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(MemoryPages|Object))|raw(Gr(oove|ayBezel)|B(itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(hiteBezel|indowBackground)|LightBezel))|U(serName|n(ionR(ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(Bundle(Setup|Cleanup)|Setup(VirtualMachine)?|Needs(ToLoadClasses|VirtualMachine)|ClassesF(orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(oint(InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(n(d(MapTableEnumeration|HashTableEnumeration)|umerate(MapTable|HashTable)|ableScreenUpdates)|qual(R(ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(ileTypeForHFSTypeCode|ullUserName|r(ee(MapTable|HashTable)|ame(Rect(WithWidth(UsingOperation)?)?|Address)))|Wi(ndowList(ForContext)?|dth)|Lo(cationInRange|g(v|PageSize)?)|A(ccessibility(R(oleDescription(ForUIElement)?|aiseBadArgumentException)|Unignored(Children(ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(Main|Load)|vailableWindowDepths|ll(MapTable(Values|Keys)|HashTableObjects|ocate(MemoryPages|Collectable|Object))))\b + name + support.function.cappuccino + + + match + \bCP(R(u(nLoop|ler(Marker|View))|e(sponder|cursiveLock|lativeSpecifier)|an(domSpecifier|geSpecifier))|G(etCommand|lyph(Generator|Storage|Info)|raphicsContext)|XML(Node|D(ocument|TD(Node)?)|Parser|Element)|M(iddleSpecifier|ov(ie(View)?|eCommand)|utable(S(tring|et)|C(haracterSet|opying)|IndexSet|D(ictionary|ata)|URLRequest|ParagraphStyle|A(ttributedString|rray))|e(ssagePort(NameServer)?|nu(Item(Cell)?|View)?|t(hodSignature|adata(Item|Query(ResultGroup|AttributeValueTuple)?)))|a(ch(BootstrapServer|Port)|trix))|B(itmapImageRep|ox|u(ndle|tton(Cell)?)|ezierPath|rowser(Cell)?)|S(hadow|c(anner|r(ipt(SuiteRegistry|C(o(ercionHandler|mmand(Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(er|View)|een))|t(epper(Cell)?|atus(Bar|Item)|r(ing|eam))|imple(HorizontalTypesetter|CString)|o(cketPort(NameServer)?|und|rtDescriptor)|p(e(cifierTest|ech(Recognizer|Synthesizer)|ll(Server|Checker))|litView)|e(cureTextField(Cell)?|t(Command)?|archField(Cell)?|rializer|gmentedC(ontrol|ell))|lider(Cell)?|avePanel)|H(ost|TTP(Cookie(Storage)?|URLResponse)|elpManager)|N(ib(Con(nector|trolConnector)|OutletConnector)?|otification(Center|Queue)?|u(ll|mber(Formatter)?)|etService(Browser)?|ameSpecifier)|C(ha(ngeSpelling|racterSet)|o(n(stantString|nection|trol(ler)?|ditionLock)|d(ing|er)|unt(Command|edSet)|pying|lor(Space|P(ick(ing(Custom|Default)|er)|anel)|Well|List)?|m(p(oundPredicate|arisonPredicate)|boBox(Cell)?))|u(stomImageRep|rsor)|IImageRep|ell|l(ipView|o(seCommand|neCommand)|assDescription)|a(ched(ImageRep|URLResponse)|lendar(Date)?)|reateCommand)|T(hread|ypesetter|ime(Zone|r)|o(olbar(Item(Validations)?)?|kenField(Cell)?)|ext(Block|Storage|Container|Tab(le(Block)?)?|Input|View|Field(Cell)?|List|Attachment(Cell)?)?|a(sk|b(le(Header(Cell|View)|Column|View)|View(Item)?))|reeController)|I(n(dex(S(pecifier|et)|Path)|put(Manager|S(tream|erv(iceProvider|er(MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(Rep|Cell|View)?)|O(ut(putStream|lineView)|pen(GL(Context|Pixel(Buffer|Format)|View)|Panel)|bj(CTypeSerializationCallBack|ect(Controller)?))|D(i(st(antObject(Request)?|ributed(NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(Controller)?|e(serializer|cimalNumber(Behaviors|Handler)?|leteCommand)|at(e(Components|Picker(Cell)?|Formatter)?|a)|ra(wer|ggingInfo))|U(ser(InterfaceValidations|Defaults(Controller)?)|RL(Re(sponse|quest)|Handle(Client)?|C(onnection|ache|redential(Storage)?)|Download(Delegate)?|Prot(ocol(Client)?|ectionSpace)|AuthenticationChallenge(Sender)?)?|n(iqueIDSpecifier|doManager|archiver))|P(ipe|o(sitionalSpecifier|pUpButton(Cell)?|rt(Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(steboard|nel|ragraphStyle|geLayout)|r(int(Info|er|Operation|Panel)|o(cessInfo|tocolChecker|perty(Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(numerator|vent|PSImageRep|rror|x(ception|istsCommand|pression))|V(iew(Animation)?|al(idated(ToobarItem|UserInterfaceItem)|ue(Transformer)?))|Keyed(Unarchiver|Archiver)|Qui(ckDrawView|tCommand)|F(ile(Manager|Handle|Wrapper)|o(nt(Manager|Descriptor|Panel)?|rm(Cell|atter)))|W(hoseSpecifier|indow(Controller)?|orkspace)|L(o(c(k(ing)?|ale)|gicalTest)|evelIndicator(Cell)?|ayoutManager)|A(ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(ication|e(Script|Event(Manager|Descriptor)))|ffineTransform|lert|r(chiver|ray(Controller)?)))\b + name + support.class.cappuccino + + + match + \bCP(R(ect(Edge)?|ange)|G(lyph(Relation|LayoutMode)?|radientType)|M(odalSession|a(trixMode|p(Table|Enumerator)))|B(itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(cr(oll(er(Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(Granularity|Direction|Affinity)|wapped(Double|Float)|aveOperationType)|Ha(sh(Table|Enumerator)|ndler(2)?)|C(o(ntrol(Size|Tint)|mp(ositingOperation|arisonResult))|ell(State|Type|ImagePosition|Attribute))|T(hreadPrivate|ypesetterGlyphInfo|i(ckMarkPosition|tlePosition|meInterval)|o(ol(TipTag|bar(SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(TabType|Alignment)|ab(State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(ContextAuxiliary|PixelFormatAuxiliary)|D(ocumentChangeType|atePickerElementFlags|ra(werState|gOperation))|UsableScrollerParts|P(oint|r(intingPageOrder|ogressIndicator(Style|Th(ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(nt(SymbolicTraits|TraitMask|Action)|cusRingType)|W(indow(OrderingMode|Depth)|orkspace(IconCreationOptions|LaunchOptions)|ritingDirection)|L(ineBreakMode|ayout(Status|Direction))|A(nimation(Progress|Effect)|ppl(ication(TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle))\b + name + support.type.cappuccino + + + match + \bCP(NotFound|Ordered(Ascending|Descending|Same))\b + name + support.constant.cappuccino + + + match + \bCP(Menu(Did(RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(ystemColorsDidChange|plitView(DidResizeSubviews|WillResizeSubviews))|C(o(nt(extHelpModeDid(Deactivate|Activate)|rolT(intDidChange|extDid(BeginEditing|Change|EndEditing)))|lor(PanelColorDidChange|ListDidChange)|mboBox(Selection(IsChanging|DidChange)|Will(Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(oolbar(DidRemoveItem|WillAddItem)|ext(Storage(DidProcessEditing|WillProcessEditing)|Did(BeginEditing|Change|EndEditing)|View(DidChange(Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(Selection(IsChanging|DidChange)|ColumnDid(Resize|Move)))|ImageRepRegistryDidChange|OutlineView(Selection(IsChanging|DidChange)|ColumnDid(Resize|Move)|Item(Did(Collapse|Expand)|Will(Collapse|Expand)))|Drawer(Did(Close|Open)|Will(Close|Open))|PopUpButton(CellWillPopUp|WillPopUp)|View(GlobalFrameDidChange|BoundsDidChange|F(ocusDidChange|rameDidChange))|FontSetChanged|W(indow(Did(Resi(ze|gn(Main|Key))|M(iniaturize|ove)|Become(Main|Key)|ChangeScreen(|Profile)|Deminiaturize|Update|E(ndSheet|xpose))|Will(M(iniaturize|ove)|BeginSheet|Close))|orkspace(SessionDid(ResignActive|BecomeActive)|Did(Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(Sleep|Unmount|PowerOff|LaunchApplication)))|A(ntialiasThresholdChanged|ppl(ication(Did(ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(nhide|pdate)|FinishLaunching)|Will(ResignActive|BecomeActive|Hide|Terminate|U(nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification\b + name + support.constant.notification.cappuccino + + + match + \bCP(R(GB(ModeColorPanel|ColorSpaceModel)|ight(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|T(ext(Movement|Alignment)|ab(sBezelBorder|StopType))|ArrowFunctionKey)|ound(RectBezelStyle|Bankers|ed(BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(CapStyle|JoinStyle))|un(StoppedResponse|ContinuesResponse|AbortedResponse)|e(s(izableWindowMask|et(CursorRectsRunLoopOrdering|FunctionKey))|ce(ssedBezelStyle|iver(sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(evancyLevelIndicatorStyle|ative(Before|After))|gular(SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(n(domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(ModeMatrix|Button)))|G(IFFileType|lyph(Below|Inscribe(B(elow|ase)|Over(strike|Below)|Above)|Layout(WithPrevious|A(tAPoint|gainstAPoint))|A(ttribute(BidiLevel|Soft|Inscribe|Elastic)|bove))|r(ooveBorder|eaterThan(Comparison|OrEqualTo(Comparison|PredicateOperatorType)|PredicateOperatorType)|a(y(ModeColorPanel|ColorSpaceModel)|dient(None|Con(cave(Strong|Weak)|vex(Strong|Weak)))|phiteControlTint)))|XML(N(o(tationDeclarationKind|de(CompactEmptyElement|IsCDATA|OptionsNone|Use(SingleQuotes|DoubleQuotes)|Pre(serve(NamespaceOrder|C(haracterReferences|DATA)|DTD|Prefixes|E(ntities|mptyElements)|Quotes|Whitespace|A(ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(ocument(X(MLKind|HTMLKind|Include)|HTMLKind|T(idy(XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(arser(GTRequiredError|XMLDeclNot(StartedError|FinishedError)|Mi(splaced(XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(StartedError|FinishedError))|S(t(andaloneValueError|ringNot(StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(MTOKENRequiredError|o(t(ationNot(StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(haracterRef(In(DTDError|PrologError|EpilogError)|AtEOFError)|o(nditionalSectionNot(StartedError|FinishedError)|mment(NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(ternalError|valid(HexCharacterRefError|C(haracter(RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(NameError|Error)))|OutOfMemoryError|D(ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(RI(RequiredError|FragmentError)|n(declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(MissingSemiError|NoNameError|In(Internal(SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(ocessingInstructionNot(StartedError|FinishedError)|ematureDocumentEndError))|E(n(codingNotSupportedError|tity(Ref(In(DTDError|PrologError|EpilogError)|erence(MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(StartedError|FinishedError)|Is(ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(StartedError|FinishedError)|xt(ernalS(tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(iteralNot(StartedError|FinishedError)|T(RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(RedefinedError|HasNoValueError|Not(StartedError|FinishedError)|ListNot(StartedError|FinishedError)))|rocessingInstructionKind)|E(ntity(GeneralKind|DeclarationKind|UnparsedKind|P(ar(sedKind|ameterKind)|redefined))|lement(Declaration(MixedKind|UndefinedKind|E(lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(N(MToken(sKind|Kind)|otationKind)|CDATAKind|ID(Ref(sKind|Kind)|Kind)|DeclarationKind|En(tit(yKind|iesKind)|umerationKind)|Kind))|M(i(n(XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(nthCalendarUnit|deSwitchFunctionKey|use(Moved(Mask)?|E(ntered(Mask)?|ventSubtype|xited(Mask)?))|veToBezierPathElement|mentary(ChangeButton|Push(Button|InButton)|Light(Button)?))|enuFunctionKey|a(c(intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(XEdge|YEdge))|ACHOperatingSystem)|B(MPFileType|o(ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(Se(condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(zelBorder|velLineJoinStyle|low(Bottom|Top)|gin(sWith(Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(spaceCharacter|tabTextMovement|ingStore(Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(owser(NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(h(ift(JISStringEncoding|KeyMask)|ow(ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(s(ReqFunctionKey|tem(D(omainMask|efined(Mask)?)|FunctionKey))|mbolStringEncoding)|c(a(nnedOption|le(None|ToFit|Proportionally))|r(oll(er(NoPart|Increment(Page|Line|Arrow)|Decrement(Page|Line|Arrow)|Knob(Slot)?|Arrows(M(inEnd|axEnd)|None|DefaultSetting))|Wheel(Mask)?|LockFunctionKey)|eenChangedEventType))|t(opFunctionKey|r(ingDrawing(OneShot|DisableScreenFontSubstitution|Uses(DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(Status(Reading|NotOpen|Closed|Open(ing)?|Error|Writing|AtEnd)|Event(Has(BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(ndEncountered|rrorOccurred)))))|i(ngle(DateMode|UnderlineStyle)|ze(DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(condCalendarUnit|lect(By(Character|Paragraph|Word)|i(ng(Next|Previous)|onAffinity(Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(Momentary|Select(One|Any)))|quareLineCapStyle|witchButton|ave(ToOperation|Op(tions(Yes|No|Ask)|eration)|AsOperation)|mall(SquareBezelStyle|C(ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(ighlightModeMatrix|SBModeColorPanel|o(ur(Minute(SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(Never|OnlyFromMainDocumentDomain|Always)|e(lp(ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(MonthDa(yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(o(n(StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(ification(SuspensionBehavior(Hold|Coalesce|D(eliverImmediately|rop))|NoCoalescing|CoalescingOn(Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(cr(iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(itle|opLevelContainersSpecifierError|abs(BezelBorder|NoBorder|LineBorder))|I(nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(ll(Glyph|CellType)|m(eric(Search|PadKeyMask)|berFormatter(Round(Half(Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(10|Default)|S(cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(ercentStyle|ad(Before(Suffix|Prefix)|After(Suffix|Prefix))))))|e(t(Services(BadArgumentError|NotFoundError|C(ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(t(iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(hange(ReadOtherContents|GrayCell(Mask)?|BackgroundCell(Mask)?|Cleared|Done|Undone|Autosaved)|MYK(ModeColorPanel|ColorSpaceModel)|ircular(BezelStyle|Slider)|o(n(stantValueExpressionType|t(inuousCapacityLevelIndicatorStyle|entsCellMask|ain(sComparison|erSpecifierError)|rol(Glyph|KeyMask))|densedFontMask)|lor(Panel(RGBModeMask|GrayModeMask|HSBModeMask|C(MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(p(osite(XOR|Source(In|O(ut|ver)|Atop)|Highlight|C(opy|lear)|Destination(In|O(ut|ver)|Atop)|Plus(Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(stom(SelectorPredicateOperatorType|PaletteModeColorPanel)|r(sor(Update(Mask)?|PointingDevice)|veToBezierPathElement))|e(nterT(extAlignment|abStopType)|ll(State|H(ighlighted|as(Image(Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(Bordered|InsetButton)|Disabled|Editable|LightsBy(Gray|Background|Contents)|AllowsMixedState))|l(ipPagination|o(s(ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(ControlTint|DisplayFunctionKey|LineFunctionKey))|a(seInsensitive(Search|PredicateOption)|n(notCreateScriptCommandError|cel(Button|TextMovement))|chesDirectory|lculation(NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(itical(Request|AlertStyle)|ayonModeColorPanel))|T(hick(SquareBezelStyle|erSquareBezelStyle)|ypesetter(Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(ineBreakAction|atestBehavior))|i(ckMark(Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(olbarItemVisibilityPriority(Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(Compression(N(one|EXT)|CCITTFAX(3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(rminate(Now|Cancel|Later)|xt(Read(InapplicableDocumentTypeError|WriteErrorM(inimum|aximum))|Block(M(i(nimum(Height|Width)|ddleAlignment)|a(rgin|ximum(Height|Width)))|B(o(ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(Characters|Attributes)|CellType|ured(RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(Character|TextMovement|le(tP(oint(Mask|EventSubtype)?|roximity(Mask|EventSubtype)?)|Column(NoResizing|UserResizingMask|AutoresizingMask)|View(ReverseSequentialColumnAutoresizingStyle|GridNone|S(olid(HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(n(sert(CharFunctionKey|FunctionKey|LineFunctionKey)|t(Type|ernalS(criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(2022JPStringEncoding|Latin(1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(R(ight|ep(MatchesDevice|LoadStatus(ReadingHeader|Completed|InvalidData|Un(expectedEOF|knownType)|WillNeedAllData)))|Below|C(ellType|ache(BySize|Never|Default|Always))|Interpolation(High|None|Default|Low)|O(nly|verlaps)|Frame(Gr(oove|ayBezel)|Button|None|Photo)|L(oadStatus(ReadError|C(ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(lign(Right|Bottom(Right|Left)?|Center|Top(Right|Left)?|Left)|bove)))|O(n(State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|TextMovement)|SF1OperatingSystem|pe(n(GL(GO(Re(setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(R(obust|endererID)|M(inimumPolicy|ulti(sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(creenMask|te(ncilSize|reo)|ingleRenderer|upersample|ample(s|Buffers|Alpha))|NoRecovery|C(o(lor(Size|Float)|mpliant)|losestPolicy)|OffScreen|D(oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(cc(umSize|elerated)|ux(Buffers|DepthStencil)|l(phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(B(itfield|oolType)|S(hortType|tr(ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(Type|longType)|ArrayType))|D(i(s(c(losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(Selection|PredicateModifier))|o(c(ModalWindowMask|ument(Directory|ationDirectory))|ubleType|wn(TextMovement|ArrowFunctionKey))|e(s(cendingPageOrder|ktopDirectory)|cimalTabStopType|v(ice(NColorSpaceModel|IndependentModifierFlagsMask)|eloper(Directory|ApplicationDirectory))|fault(ControlTint|TokenStyle)|lete(Char(acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(yCalendarUnit|teFormatter(MediumStyle|Behavior(10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(wer(Clos(ingState|edState)|Open(ingState|State))|gOperation(Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(ser(CancelledError|D(irectory|omainMask)|FunctionKey)|RL(Handle(NotLoaded|Load(Succeeded|InProgress|Failed))|CredentialPersistence(None|Permanent|ForSession))|n(scaledWindowMask|cachedRead|i(codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(o(CloseGroupingRunLoopOrdering|FunctionKey)|e(finedDateComponent|rline(Style(Single|None|Thick|Double)|Pattern(Solid|D(ot|ash(Dot(Dot)?)?)))))|known(ColorSpaceModel|P(ointingDevice|ageOrder)|KeyS(criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(ustifiedTextAlignment|PEG(2000FileType|FileType)|apaneseEUC(GlyphPacking|StringEncoding))|P(o(s(t(Now|erFontMask|WhenIdle|ASAP)|iti(on(Replace|Be(fore|ginning)|End|After)|ve(IntType|DoubleType|FloatType)))|pUp(NoArrow|ArrowAt(Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(InCell(Mask)?|OnPushOffButton)|e(n(TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(Mask)?)|P(S(caleField|tatus(Title|Field)|aveButton)|N(ote(Title|Field)|ame(Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(a(perFeedButton|ge(Range(To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(useFunctionKey|ragraphSeparatorCharacter|ge(DownFunctionKey|UpFunctionKey))|r(int(ing(ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(NotFound|OK|Error)|FunctionKey)|o(p(ertyList(XMLFormat|MutableContainers(AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(BarStyle|SpinningStyle|Preferred(SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(ssedTab|vFunctionKey))|L(HeightForm|CancelButton|TitleField|ImageButton|O(KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(n(terCharacter|d(sWith(Comparison|PredicateOperatorType)|FunctionKey))|v(e(nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(Comparison|PredicateOperatorType)|ra(serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(clude(10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(i(ew(M(in(XMargin|YMargin)|ax(XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(lidationErrorM(inimum|aximum)|riableExpressionType))|Key(SpecifierEvaluationScriptError|Down(Mask)?|Up(Mask)?|PathExpressionType|Value(MinusSetMutation|SetSetMutation|Change(Re(placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(New|Old)|UnionSetMutation|ValidationError))|QTMovie(NormalPlayback|Looping(BackAndForthPlayback|Playback))|F(1(1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(nd(PanelAction(Replace(A(ndFind|ll(InSelection)?))?|S(howFindPanel|e(tFindString|lectAll(InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(Read(No(SuchFileError|PermissionError)|CorruptFileError|In(validFileNameError|applicableStringEncodingError)|Un(supportedSchemeError|knownError))|HandlingPanel(CancelButton|OKButton)|NoSuchFileError|ErrorM(inimum|aximum)|Write(NoPermissionError|In(validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(nt(Mo(noSpaceTrait|dernSerifsClass)|BoldTrait|S(ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(o(ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(ntegerAdvancementsRenderingMode|talicTrait)|O(ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(nknownClass|IOptimizedTrait)|Panel(S(hadowEffectModeMask|t(andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(amilyClassMask|reeformSerifsClass)|Antialiased(RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(Below|Type(None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(attingError(M(inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(ExpressionType|KeyMask)|3(1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(RevertButton|S(ize(Title|Field)|etButton)|CurrentField|Preview(Button|Field))|l(oat(ingPointSamplesBitmapFormat|Type)|agsChanged(Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(heelModeColorPanel|indow(s(NTOperatingSystem|CP125(1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(InterfaceStyle|OperatingSystem))|M(iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(ctivation|ddingToRecents)|A(sync|nd(Hide(Others)?|Print)|llowingClassicStartup))|eek(day(CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(ntsBidiLevels|rningAlertStyle)|r(itingDirection(RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(i(stModeMatrix|ne(Moves(Right|Down|Up|Left)|B(order|reakBy(C(harWrapping|lipping)|Truncating(Middle|Head|Tail)|WordWrapping))|S(eparatorCharacter|weep(Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(ssThan(Comparison|OrEqualTo(Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|T(ext(Movement|Alignment)|ab(sBezelBorder|StopType))|ArrowFunctionKey))|a(yout(RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(sc(iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(y(Type|PredicateModifier|EventMask)|choredSearch|imation(Blocking|Nonblocking(Threaded)?|E(ffect(DisappearingItemDefault|Poof)|ase(In(Out)?|Out))|Linear)|dPredicateType)|t(Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(obe(GB1CharacterCollection|CCP1CharacterCollection|Japan(1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(saveOperation|Pagination)|pp(lication(SupportDirectory|D(irectory|e(fined(Mask)?|legateReply(Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(Mask)?)|l(ternateKeyMask|pha(ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(sWrongScriptError|EvaluationScriptError)|bove(Bottom|Top)|WTEventType))\b + name + support.constant.cappuccino + + + include + #bracketed_content + + + include + source.js + + + repository + + bracketed_content + + begin + \[ + captures + + 0 + + name + punctuation.section.scope.js.objj + + + end + \] + name + meta.bracketed.js.objj + patterns + + + begin + (?=\w)(?<=[\w\])"] )(\w+(?:(:)|(?=\]))) + beginCaptures + + 1 + + name + support.function.any-method.js.objj + + 2 + + name + punctuation.separator.arguments.js.objj + + + end + (?=\]) + name + meta.function-call.js.objj + patterns + + + captures + + 1 + + name + punctuation.separator.arguments.js.objj + + + match + \b\w+(:) + name + support.function.any-method.name-of-parameter.js.objj + + + include + #special_variables + + + include + $base + + + + + include + #special_variables + + + include + $base + + + + comment + + patterns + + + begin + /\* + captures + + 0 + + name + punctuation.definition.comment.js.objj + + + end + \*/ + name + comment.block.js.objj + + + begin + // + beginCaptures + + 0 + + name + punctuation.definition.comment.js.objj + + + end + $\n? + name + comment.line.double-slash.js.objj + patterns + + + match + (?>\\\s*\n) + name + punctuation.separator.continuation.js.objj + + + + + + method + + begin + ^(-|\+)\s* + end + (?=\{)|; + name + meta.function.js.objj + patterns + + + begin + (\() + captures + + 1 + + name + punctuation.definition.type.js.objj + + 2 + + name + entity.name.function.js.objj + + + end + (\))\s*(\w+\b) + name + meta.return-type.js.objj + patterns + + + include + #protocol_list + + + include + #protocol_type_qualifier + + + include + $base + + + + + match + \b\w+(?=:) + name + entity.name.function.name-of-parameter.js.objj + + + begin + ((:))\s*(\() + beginCaptures + + 1 + + name + entity.name.function.name-of-parameter.js.objj + + 2 + + name + punctuation.separator.arguments.js.objj + + 3 + + name + punctuation.definition.type.js.objj + + + end + (\))\s*(\w+\b)? + endCaptures + + 1 + + name + punctuation.definition.type.js.objj + + 2 + + name + variable.parameter.function.js.objj + + + name + meta.argument-type.js.objj + patterns + + + include + #protocol_list + + + include + #protocol_type_qualifier + + + include + $base + + + + + include + #comment + + + + protocol_list + + begin + (<) + beginCaptures + + 1 + + name + punctuation.section.scope.begin.js.objj + + + end + (>) + endCaptures + + 1 + + name + punctuation.section.scope.end.js.objj + + + name + meta.protocol-list.js.objj + patterns + + + match + \bCP(GlyphStorage|M(utableCopying|enuItem)|C(hangeSpelling|o(ding|pying|lorPicking(Custom|Default)))|T(oolbarItemValidations|ext(Input|AttachmentCell))|I(nputServ(iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(CTypeSerializationCallBack|ect)|D(ecimalNumberBehaviors|raggingInfo)|U(serInterfaceValidations|RL(HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(ToobarItem|UserInterfaceItem)|Locking)\b + name + support.other.protocol.js.objj + + + + protocol_type_qualifier + + match + \b(in|out|inout|oneway|bycopy|byref)\b + name + storage.modifier.protocol.js.objj + + special_variables + + patterns + + + match + \b_cmd\b + name + variable.other.selector.js.objj + + + match + \b(self|super)\b + name + variable.language.js.objj + + + + + scopeName + source.js.objj + uuid + 58D4B98A-2110-423E-9C80-CC9E202816E7 + + diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/info.plist b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/info.plist new file mode 100644 index 000000000..f5f1b9036 --- /dev/null +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/info.plist @@ -0,0 +1,23 @@ + + + + + contactEmailRot13 + gbz@280abegu.pbz + contactName + Tom Robinson + description + <a href="http://cappuccino.org/">Cappuccino</a> is an open source framework that makes it easy to build desktop-caliber applications that run in a web browser. + name + JavaScript Objective-J + ordering + + 58D4B98A-2110-423E-9C80-CC9E202816E7 + 96C39647-4346-4750-9F96-58070F24EDE6 + AA41BEF8-5F81-4A5A-85DE-2E81A112778B + 85B0746B-AE1C-47B3-8B9A-2B9A95F4C71E + + uuid + 1FB3D538-84E1-4002-AA46-5705529A27E1 + + From 761e32a84792f6109ee3130c40871f687ff1d9ce Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 5 Jul 2009 21:04:08 -0700 Subject: [PATCH 069/244] Fix for updating window background color to match crushed png. Reviewed by me. --- AppKit/CPWindow/_CPStandardWindowView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPWindow/_CPStandardWindowView.j b/AppKit/CPWindow/_CPStandardWindowView.j index 38c44f353..c88da796b 100644 --- a/AppKit/CPWindow/_CPStandardWindowView.j +++ b/AppKit/CPWindow/_CPStandardWindowView.j @@ -56,7 +56,7 @@ var _CPTexturedWindowHeadGradientColor = nil, + (CPColor)solidColor { if (!_CPTexturedWindowHeadSolidColor) - _CPTexturedWindowHeadSolidColor = [CPColor colorWithCalibratedRed:182.0 / 255.0 green:182.0 / 255.0 blue:182.0 / 255.0 alpha:1.0]; + _CPTexturedWindowHeadSolidColor = [CPColor colorWithCalibratedRed:195.0 / 255.0 green:195.0 / 255.0 blue:195.0 / 255.0 alpha:1.0]; return _CPTexturedWindowHeadSolidColor; } From a5b468bbeb1cd58112464682903a78485b41d1df Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 6 Jul 2009 14:39:33 -0700 Subject: [PATCH 070/244] Fix for adding support for NSMutableString and NSMutableDictionary in nib2cib. Also, added support for inline strings. Reviewed by me. --- Foundation/CPKeyedUnarchiver.j | 2 +- Tools/nib2cib/NSFoundation.j | 3 +++ Tools/nib2cib/NSMutableDictionary.j | 35 +++++++++++++++++++++++++++++ Tools/nib2cib/NSMutableString.j | 35 +++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 Tools/nib2cib/NSMutableDictionary.j create mode 100644 Tools/nib2cib/NSMutableString.j diff --git a/Foundation/CPKeyedUnarchiver.j b/Foundation/CPKeyedUnarchiver.j index b646db995..6f5d45258 100644 --- a/Foundation/CPKeyedUnarchiver.j +++ b/Foundation/CPKeyedUnarchiver.j @@ -309,7 +309,7 @@ var _CPKeyedUnarchiverArrayClass = Ni if ([object isKindOfClass:_CPKeyedUnarchiverDictionaryClass]) return _CPKeyedUnarchiverDecodeObjectAtIndex(self, [object objectForKey:_CPKeyedArchiverUIDKey]); - else if ([object isKindOfClass:_CPKeyedUnarchiverNumberClass] || [object isKindOfClass:_CPKeyedUnarchiverDataClass]) + else if ([object isKindOfClass:_CPKeyedUnarchiverNumberClass] || [object isKindOfClass:_CPKeyedUnarchiverDataClass] || [object isKindOfClass:_CPKeyedUnarchiverStringClass]) return object; else if ([object isKindOfClass:_CPKeyedUnarchiverArrayClass]) diff --git a/Tools/nib2cib/NSFoundation.j b/Tools/nib2cib/NSFoundation.j index 5a5155272..f933cf17e 100644 --- a/Tools/nib2cib/NSFoundation.j +++ b/Tools/nib2cib/NSFoundation.j @@ -21,3 +21,6 @@ */ @import "NSArray.j" +@import "NSMutableDictionary.j" +@import "NSMutableString.j" +@import "NSSet.j" diff --git a/Tools/nib2cib/NSMutableDictionary.j b/Tools/nib2cib/NSMutableDictionary.j new file mode 100644 index 000000000..c99a3ee83 --- /dev/null +++ b/Tools/nib2cib/NSMutableDictionary.j @@ -0,0 +1,35 @@ +/* + * NSMutableDictionary.j + * nib2cib + * + * Portions based on NSCell.m (09/09/2008) in Cocotron (http://www.cocotron.org/) + * Copyright (c) 2006-2007 Christopher J. W. Lloyd + * + * 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 + */ + +@implementation NSMutableDictionary : CPObject +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [CPDictionary dictionaryWithObjects:[aCoder decodeObjectForKey:@"NS.objects"] forKeys:[aCoder decodeObjectForKey:@"NS.keys"]]; +} + +@end diff --git a/Tools/nib2cib/NSMutableString.j b/Tools/nib2cib/NSMutableString.j new file mode 100644 index 000000000..641b27b5d --- /dev/null +++ b/Tools/nib2cib/NSMutableString.j @@ -0,0 +1,35 @@ +/* + * NSMutableString.j + * nib2cib + * + * Portions based on NSCell.m (09/09/2008) in Cocotron (http://www.cocotron.org/) + * Copyright (c) 2006-2007 Christopher J. W. Lloyd + * + * 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 + */ + +@implementation NSMutableString : CPObject +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [aCoder decodeObjectForKey:@"NS.string"]; +} + +@end From b9208c2f593977ed68849a425a00aa7f20dbceb7 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 6 Jul 2009 22:43:43 -0700 Subject: [PATCH 071/244] Fixed bug in Scroll View where disabled scrollable scroller would appear. Also added tests for CPScrollView. Reviewed by me. --- AppKit/CPScrollView.j | 152 +++++++++++++-------------- Tests/AppKit/CPScrollViewTest.j | 177 ++++++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+), 81 deletions(-) create mode 100644 Tests/AppKit/CPScrollViewTest.j diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 04d4e0e87..77938bcfa 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -67,11 +67,11 @@ _horizontalLineScroll = 10.0; _horizontalPageScroll = 10.0; - _contentView = [[CPClipView alloc] initWithFrame:[self clipViewFrame]]; + _contentView = [[CPClipView alloc] initWithFrame:[self bounds]]; [self addSubview:_contentView]; - _headerClipView = [[CPClipView alloc] initWithFrame:[self headerClipViewFrame]]; + _headerClipView = [[CPClipView alloc] init]; [self addSubview:_headerClipView]; @@ -107,22 +107,21 @@ { if (!aContentView) return; - + var documentView = [aContentView documentView]; - + if (documentView) [documentView removeFromSuperview]; - + [_contentView removeFromSuperview]; - - var size = [self contentSize]; - + _contentView = aContentView; - - [_contentView setFrame:[self clipViewFrame]]; + [_contentView setDocumentView:documentView]; [self addSubview:_contentView]; + + [self reflectScrolledClipView:_contentView]; } /*! @@ -142,16 +141,10 @@ [_contentView setDocumentView:aView]; [_headerClipView setDocumentView:[self _headerView]]; - [_contentView setFrame:[self clipViewFrame]]; - [_headerClipView setFrame:[self headerClipViewFrame]]; - var cornerView = [self _cornerView]; if (cornerView) - { - [cornerView setFrame:[self cornerViewFrame]]; [self addSubview:cornerView]; - } [self reflectScrolledClipView:_contentView]; } @@ -185,77 +178,91 @@ // [_horizontalScroller setEnabled:NO]; } - [_contentView setFrame:[self clipViewFrame]]; - [_headerClipView setFrame:[self headerClipViewFrame]]; + [_contentView setFrame:[self bounds]]; + [_headerClipView setFrame:_CGRectMakeZero()]; --_recursionCount; return; } - var documentFrame = [documentView frame], // the size of the whole document - clipViewFrame = [self clipViewFrame], // the size of the visible document, within the scrollbars - headerViewFrame = [self headerClipViewFrame], - headerViewHeight = _CGRectGetHeight(headerViewFrame), - cornerViewFrame = [self cornerViewFrame], - cornerViewHeight = _CGRectGetHeight(cornerViewFrame), - scrollPoint = [_contentView bounds].origin, - difference = _CGSizeMake(CPRectGetWidth(documentFrame) - CPRectGetWidth(clipViewFrame), CPRectGetHeight(documentFrame) - CPRectGetHeight(clipViewFrame)), - shouldShowVerticalScroller = (!_autohidesScrollers || difference.height > 0.0) && _hasVerticalScroller, - shouldShowHorizontalScroller = (!_autohidesScrollers || difference.width > 0.0) && _hasHorizontalScroller, - wasShowingVerticalScroller = ![_verticalScroller isHidden], - wasShowingHorizontalScroller = ![_horizontalScroller isHidden], - verticalScrollerWidth = _CGRectGetWidth([_verticalScroller frame]); - horizontalScrollerHeight = _CGRectGetHeight([_horizontalScroller frame]); + var documentFrame = [documentView frame], // the size of the whole document + contentFrame = [self bounds], // assume it takes up the entire size of the scrollview (no scrollers) + headerClipViewFrame = [self headerClipViewFrame], + headerClipViewHeight = _CGRectGetHeight(headerClipViewFrame); - if (_autohidesScrollers) + contentFrame.origin.y += headerClipViewHeight; + contentFrame.size.height -= headerClipViewHeight; + + var difference = _CGSizeMake(_CGRectGetWidth(documentFrame) - _CGRectGetWidth(contentFrame), _CGRectGetHeight(documentFrame) - _CGRectGetHeight(contentFrame)), + verticalScrollerWidth = _CGRectGetWidth([_verticalScroller frame]), + horizontalScrollerHeight = _CGRectGetHeight([_horizontalScroller frame]), + hasVerticalScroll = difference.height > 0.0, + hasHorizontalScroll = difference.width > 0.0, + shouldShowVerticalScroller = _hasVerticalScroller && (!_autohidesScrollers || hasVerticalScroll), + shouldShowHorizontalScroller = _hasHorizontalScroller && (!_autohidesScrollers || hasHorizontalScroll); + + // Now we have to account for the shown scrollers affecting the deltas. + if (shouldShowVerticalScroller) { - // Check to see if either affected the other! - if (shouldShowVerticalScroller) - shouldShowHorizontalScroller = (!_autohidesScrollers || difference.width > -verticalScrollerWidth) && _hasHorizontalScroller; - - if (shouldShowHorizontalScroller) - shouldShowVerticalScroller = (!_autohidesScrollers || difference.height > -horizontalScrollerHeight) && _hasVerticalScroller; + difference.width += verticalScrollerWidth; + hasHorizontalScroll = difference.width > 0.0; + shouldShowHorizontalScroller = _hasHorizontalScroller && (!_autohidesScrollers || hasHorizontalScroll); } + if (shouldShowHorizontalScroller) + { + difference.height += horizontalScrollerHeight; + hasVerticalScroll = difference.height > 0.0; + shouldShowVerticalScroller = _hasVerticalScroller && (!_autohidesScrollers || hasVerticalScroll); + } + + // We now definitively know which scrollers are shown or not, as well as whether they are showing scroll values. [_verticalScroller setHidden:!shouldShowVerticalScroller]; - [_verticalScroller setEnabled:difference.height > 0.0]; + [_verticalScroller setEnabled:hasVerticalScroll]; [_horizontalScroller setHidden:!shouldShowHorizontalScroller]; - [_horizontalScroller setEnabled:difference.width > 0.0]; + [_horizontalScroller setEnabled:hasHorizontalScroll]; + + // We can thus appropriately account for them changing the content size. + if (shouldShowVerticalScroller) + contentFrame.size.width -= verticalScrollerWidth; + + if (shouldShowHorizontalScroller) + contentFrame.size.height -= horizontalScrollerHeight; + + var scrollPoint = [_contentView bounds].origin, + wasShowingVerticalScroller = ![_verticalScroller isHidden], + wasShowingHorizontalScroller = ![_horizontalScroller isHidden]; if (shouldShowVerticalScroller) { - var verticalScrollerHeight = CPRectGetHeight([self bounds]) - (cornerViewHeight ? cornerViewHeight : headerViewHeight); - + var verticalScrollerY = MAX(_CGRectGetHeight([self cornerViewFrame]), headerClipViewHeight), + verticalScrollerHeight = _CGRectGetHeight([self bounds]) - verticalScrollerY; + if (shouldShowHorizontalScroller) verticalScrollerHeight -= horizontalScrollerHeight; - - difference.width += verticalScrollerWidth; - clipViewFrame.size.width -= verticalScrollerWidth; - + [_verticalScroller setFloatValue:(difference.height <= 0.0) ? 0.0 : scrollPoint.y / difference.height - knobProportion:CPRectGetHeight(clipViewFrame) / CPRectGetHeight(documentFrame)]; - [_verticalScroller setFrame:CPRectMake(CPRectGetMaxX(clipViewFrame), (cornerViewHeight ? cornerViewHeight : headerViewHeight), verticalScrollerWidth, verticalScrollerHeight)]; + knobProportion:_CGRectGetHeight(contentFrame) / _CGRectGetHeight(documentFrame)]; + [_verticalScroller setFrame:_CGRectMake(_CGRectGetMaxX(contentFrame), verticalScrollerY, verticalScrollerWidth, verticalScrollerHeight)]; } else if (wasShowingVerticalScroller) [_verticalScroller setFloatValue:0.0 knobProportion:1.0]; if (shouldShowHorizontalScroller) { - difference.height += horizontalScrollerHeight; - clipViewFrame.size.height -= horizontalScrollerHeight; - [_horizontalScroller setFloatValue:(difference.width <= 0.0) ? 0.0 : scrollPoint.x / difference.width - knobProportion:CPRectGetWidth(clipViewFrame) / CPRectGetWidth(documentFrame)]; - [_horizontalScroller setFrame:CPRectMake(0.0, CPRectGetMaxY(clipViewFrame), CPRectGetWidth(clipViewFrame), horizontalScrollerHeight)]; + knobProportion:_CGRectGetWidth(contentFrame) / _CGRectGetWidth(documentFrame)]; + [_horizontalScroller setFrame:_CGRectMake(0.0, _CGRectGetMaxY(contentFrame), _CGRectGetWidth(contentFrame), horizontalScrollerHeight)]; } else if (wasShowingHorizontalScroller) [_horizontalScroller setFloatValue:0.0 knobProportion:1.0]; - - [_contentView setFrame:clipViewFrame]; - [_headerClipView setFrame:headerViewFrame]; - + + [_contentView setFrame:contentFrame]; + [_headerClipView setFrame:headerClipViewFrame]; + [[self _cornerView] setFrame:[self cornerViewFrame]]; + --_recursionCount; } @@ -304,7 +311,7 @@ _hasHorizontalScroller = shouldHaveHorizontalScroller; if (_hasHorizontalScroller && !_horizontalScroller) - [self setHorizontalScroller:[[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, CPRectGetWidth([self bounds]), [CPScroller scrollerWidth])]]; + [self setHorizontalScroller:[[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, _CGRectGetWidth([self bounds]), [CPScroller scrollerWidth])]]; else if (!_hasHorizontalScroller && _horizontalScroller) { @@ -367,7 +374,7 @@ _hasVerticalScroller = shouldHaveVerticalScroller; if (_hasVerticalScroller && !_verticalScroller) - [self setVerticalScroller:[[CPScroller alloc] initWithFrame:CPRectMake(0.0, 0.0, [CPScroller scrollerWidth], CPRectGetHeight([self bounds]))]]; + [self setVerticalScroller:[[CPScroller alloc] initWithFrame:_CGRectMake(0.0, 0.0, [CPScroller scrollerWidth], _CGRectGetHeight([self bounds]))]]; else if (!_hasVerticalScroller && _verticalScroller) { @@ -409,12 +416,6 @@ return _autohidesScrollers; } - -- (CGRect)insetBounds -{ - return [self bounds]; -} - - (CPView)_headerView { var documentView = [self documentView]; @@ -437,10 +438,10 @@ { var cornerView = [self _cornerView], cornerBounds = [cornerView bounds], - bounds = [self insetBounds]; + bounds = [self bounds]; if (!cornerView) - return CGRectMakeZero(); + return _CGRectMakeZero(); cornerBounds.origin.x = CGRectGetMaxX(bounds) - CGRectGetWidth(cornerBounds); cornerBounds.origin.y = 0; @@ -452,10 +453,10 @@ { var headerView = [self _headerView], cornerView = [self _cornerView], - bounds = [self insetBounds]; + bounds = [self bounds]; if (!headerView) - return CGRectMakeZero(); + return _CGRectMakeZero(); bounds.size.height = [headerView bounds].size.height; @@ -465,17 +466,6 @@ return bounds; } -- (CGRect)clipViewFrame -{ - var bounds = [self insetBounds], - headerViewFrame = [self headerClipViewFrame]; - - bounds.origin.y += headerViewFrame.size.height; - bounds.size.height -= headerViewFrame.size.height; - - return bounds; -} - /* @ignore */ - (void)_verticalScrollerDidScroll:(CPScroller)aScroller { diff --git a/Tests/AppKit/CPScrollViewTest.j b/Tests/AppKit/CPScrollViewTest.j new file mode 100644 index 000000000..428268c09 --- /dev/null +++ b/Tests/AppKit/CPScrollViewTest.j @@ -0,0 +1,177 @@ +@import + +@implementation CPScrollViewTest : OJTestCase +{ +} + +- (void)testBothScrollersVisible +{ + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; + + [scrollView setAutohidesScrollers:NO]; + [scrollView setHasHorizontalScroller:YES]; + [scrollView setHasVerticalScroller:YES]; + + var documentView = [[CPView alloc] init]; + + [scrollView setDocumentView:documentView]; + + // Test document view size smaller than scroll view size. + [documentView setFrameSize:CGSizeMake(50.0, 50.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; + + // Test document view size much larger than scroll view size. + [documentView setFrameSize:CGSizeMake(1000.0, 1000.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:YES]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:YES]; + + // Test document view size much taller than scroll view size. + [documentView setFrameSize:CGSizeMake(50.0, 1000.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:YES]; + + // Test document view size much wider than scroll view size. + [documentView setFrameSize:CGSizeMake(1000.0, 50.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:YES]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; + + // Test document view size equal to scroll view size. + [documentView setFrameSize:CGSizeMake(100.0, 100.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:YES]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:YES]; + + // Test document view size taller than scroll view size only because of scrollers. + [documentView setFrameSize:CGSizeMake(50.0, 100.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:YES]; + + // Test document view size wider than scroll view size only because of scrollers. + [documentView setFrameSize:CGSizeMake(100.0, 50.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:YES]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; + + // Test document view size exactly the right size relative to the scroll view size. + [documentView setFrameSize:CGSizeMake(100.0 - 17.0, 100.0 - 17.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; +} + +- (void)testAutoHidesScrollers +{ + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; + + [scrollView setAutohidesScrollers:YES]; + [scrollView setHasHorizontalScroller:YES]; + [scrollView setHasVerticalScroller:YES]; + + var documentView = [[CPView alloc] init]; + + [scrollView setDocumentView:documentView]; + + // Test document view size smaller than scroll view size. + [documentView setFrameSize:CGSizeMake(50.0, 50.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:YES]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:YES]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; + + // Test document view size much larger than scroll view size. + [documentView setFrameSize:CGSizeMake(1000.0, 1000.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:YES]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:YES]; + + // Test document view size much taller than scroll view size. + [documentView setFrameSize:CGSizeMake(50.0, 1000.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:YES]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:NO]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:YES]; + + // Test document view size much wider than scroll view size. + [documentView setFrameSize:CGSizeMake(1000.0, 50.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:NO]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:YES]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:YES]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; + + // Test document view size equal to scroll view size. + [documentView setFrameSize:CGSizeMake(100.0, 100.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:YES]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:YES]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; + + // Test document view size taller than scroll view size only because of scrollers. + [documentView setFrameSize:CGSizeMake(50.0, 100.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:YES]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:YES]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; + + // Test document view size wider than scroll view size only because of scrollers. + [documentView setFrameSize:CGSizeMake(100.0, 50.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:YES]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:YES]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; + + // Test document view size exactly the right size relative to the scroll view size. + [documentView setFrameSize:CGSizeMake(100.0 - 17.0, 100.0 - 17.0)]; + + [self assert:[[scrollView horizontalScroller] isHidden] equals:YES]; + [self assert:[[scrollView horizontalScroller] isEnabled] equals:NO]; + + [self assert:[[scrollView verticalScroller] isHidden] equals:YES]; + [self assert:[[scrollView verticalScroller] isEnabled] equals:NO]; +} + +@end \ No newline at end of file From 4086d37dac309f5210b2c03ed17fb27c06024ac0 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 7 Jul 2009 10:26:03 -0700 Subject: [PATCH 072/244] Slight fixes for resizing tableviews. Reviewed by me. --- AppKit/CPTableColumn.j | 13 +++++++------ AppKit/CPTableView.j | 9 +++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index ed3372bfc..e8edcff9c 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -325,6 +325,10 @@ var CPTableColumnIdentifierKey = @"CPTableColumnIdentifierKey", { _dataViewData = { }; + _width = [aCoder decodeFloatForKey:CPTableColumnWidthKey]; + _minWidth = [aCoder decodeFloatForKey:CPTableColumnMinWidthKey]; + _maxWidth = [aCoder decodeFloatForKey:CPTableColumnMaxWidthKey]; + [self setIdentifier:[aCoder decodeObjectForKey:CPTableColumnIdentifierKey]]; // [self setHeaderView:[aCoder decodeObjectForKey:CPTableColumnHeaderViewKey]]; // [self setDataView:[aCoder decodeObjectForKey:CPTableColumnDataViewKey]]; @@ -332,9 +336,6 @@ var CPTableColumnIdentifierKey = @"CPTableColumnIdentifierKey", [self setHeaderView:[CPTextField new]]; [self setDataView:[CPTextField new]]; - _width = [aCoder decodeFloatForKey:CPTableColumnWidthKey]; - _minWidth = [aCoder decodeFloatForKey:CPTableColumnMinWidthKey]; - _maxWidth = [aCoder decodeFloatForKey:CPTableColumnMaxWidthKey]; // _resizingMask = [aCoder decodeBoolForKey:CPTableColumnResizingMaskKey]; } @@ -346,13 +347,13 @@ var CPTableColumnIdentifierKey = @"CPTableColumnIdentifierKey", { [aCoder encodeObject:_identifier forKey:CPTableColumnIdentifierKey]; -// [aCoder encodeObject:_headerView forKey:CPTableColumnHeaderViewKey]; -// [aCoder encodeObject:_dataView forKey:CPTableColumnDataViewKey]; - [aCoder encodeObject:_width forKey:CPTableColumnWidthKey]; [aCoder encodeObject:_minWidth forKey:CPTableColumnMinWidthKey]; [aCoder encodeObject:_maxWidth forKey:CPTableColumnMaxWidthKey]; +// [aCoder encodeObject:_headerView forKey:CPTableColumnHeaderViewKey]; +// [aCoder encodeObject:_dataView forKey:CPTableColumnDataViewKey]; + // [aCoder encodeObject:_resizingMask forKey:CPTableColumnResizingMaskKey]; } diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 5d87543ee..bfa234f0e 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -6,6 +6,12 @@ @import "_CPCornerView.j" @import "CPScroller.j" + +CPTableViewColumnDidMoveNotification = @"CPTableViewColumnDidMoveNotification"; +CPTableViewColumnDidResizeNotification = @"CPTableViewColumnDidResizeNotification"; +CPTableViewSelectionDidChangeNotification = @"CPTableViewSelectionDidChangeNotification"; +CPTableViewSelectionIsChangingNotification = @"CPTableViewSelectionIsChangingNotification"; + #include "CoreGraphics/CGGeometry.h" var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2, @@ -1268,6 +1274,7 @@ _cachedDataViews[dataView.identifier].push(dataView); - (void)superviewFrameChanged:(CPNotification)aNotification { + [self _sizeToParent]; } // @@ -1433,6 +1440,8 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", [_tableColumns makeObjectsPerformSelector:@selector(setTableView:) withObject:self]; _dirtyTableColumnRangeIndex = 0; + + [self viewWillMoveToSuperview:[self superview]]; } return self; From ddbc1e0e94734ef36e31d9670986a9fdc4835cb5 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 7 Jul 2009 11:33:19 -0700 Subject: [PATCH 073/244] Changes to tableview nib. Reviewed by me. --- TableCibTest/Resources/MainMenu.cib | 2 +- TableCibTest/Resources/MainMenu.xib | 55 ++++++++++++++++++++++++++--- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/TableCibTest/Resources/MainMenu.cib b/TableCibTest/Resources/MainMenu.cib index 5a70d0b85..d3aac2d00 100644 --- a/TableCibTest/Resources/MainMenu.cib +++ b/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;335E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;E;E;S;16;IBCocoaFrameworkd;3;490D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;335E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;D;K;6;CP$UIDd;3;390E;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;D;K;6;CP$UIDd;3;452E;D;K;6;CP$UIDd;3;453E;D;K;6;CP$UIDd;3;454E;D;K;6;CP$UIDd;3;455E;D;K;6;CP$UIDd;3;456E;D;K;6;CP$UIDd;3;457E;D;K;6;CP$UIDd;3;458E;D;K;6;CP$UIDd;3;459E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;462E;D;K;6;CP$UIDd;3;463E;D;K;6;CP$UIDd;3;464E;D;K;6;CP$UIDd;3;465E;D;K;6;CP$UIDd;3;466E;D;K;6;CP$UIDd;3;467E;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;478E;D;K;6;CP$UIDd;3;479E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;481E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;483E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;485E;D;K;6;CP$UIDd;3;486E;D;K;6;CP$UIDd;3;487E;D;K;6;CP$UIDd;3;488E;D;K;6;CP$UIDd;3;489E;D;K;6;CP$UIDd;3;490E;D;K;6;CP$UIDd;3;491E;D;K;6;CP$UIDd;3;492E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;494E;D;K;6;CP$UIDd;3;495E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;497E;D;K;6;CP$UIDd;3;498E;D;K;6;CP$UIDd;3;499E;D;K;6;CP$UIDd;3;500E;D;K;6;CP$UIDd;3;501E;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;D;K;6;CP$UIDd;3;505E;D;K;6;CP$UIDd;3;506E;D;K;6;CP$UIDd;3;507E;D;K;6;CP$UIDd;3;508E;D;K;6;CP$UIDd;3;509E;D;K;6;CP$UIDd;3;510E;D;K;6;CP$UIDd;3;511E;D;K;6;CP$UIDd;3;512E;D;K;6;CP$UIDd;3;513E;D;K;6;CP$UIDd;3;514E;D;K;6;CP$UIDd;3;515E;D;K;6;CP$UIDd;3;516E;D;K;6;CP$UIDd;3;517E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;519E;D;K;6;CP$UIDd;3;520E;D;K;6;CP$UIDd;3;521E;D;K;6;CP$UIDd;3;522E;D;K;6;CP$UIDd;3;523E;D;K;6;CP$UIDd;3;524E;D;K;6;CP$UIDd;3;525E;D;K;6;CP$UIDd;3;526E;D;K;6;CP$UIDd;3;527E;D;K;6;CP$UIDd;3;528E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;530E;D;K;6;CP$UIDd;3;531E;D;K;6;CP$UIDd;3;532E;D;K;6;CP$UIDd;3;533E;D;K;6;CP$UIDd;3;534E;D;K;6;CP$UIDd;3;535E;D;K;6;CP$UIDd;3;536E;D;K;6;CP$UIDd;3;537E;D;K;6;CP$UIDd;3;538E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;540E;D;K;6;CP$UIDd;3;541E;D;K;6;CP$UIDd;3;542E;D;K;6;CP$UIDd;3;543E;D;K;6;CP$UIDd;3;544E;D;K;6;CP$UIDd;3;545E;D;K;6;CP$UIDd;3;546E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;548E;D;K;6;CP$UIDd;3;549E;D;K;6;CP$UIDd;3;550E;D;K;6;CP$UIDd;3;551E;D;K;6;CP$UIDd;3;552E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;554E;D;K;6;CP$UIDd;3;555E;D;K;6;CP$UIDd;3;556E;D;K;6;CP$UIDd;3;557E;D;K;6;CP$UIDd;3;558E;D;K;6;CP$UIDd;3;559E;D;K;6;CP$UIDd;3;560E;D;K;6;CP$UIDd;3;561E;D;K;6;CP$UIDd;3;562E;D;K;6;CP$UIDd;3;563E;D;K;6;CP$UIDd;3;564E;D;K;6;CP$UIDd;3;565E;D;K;6;CP$UIDd;3;566E;D;K;6;CP$UIDd;3;567E;D;K;6;CP$UIDd;3;568E;D;K;6;CP$UIDd;3;569E;D;K;6;CP$UIDd;3;570E;D;K;6;CP$UIDd;3;571E;D;K;6;CP$UIDd;3;572E;D;K;6;CP$UIDd;3;573E;D;K;6;CP$UIDd;3;574E;D;K;6;CP$UIDd;3;575E;D;K;6;CP$UIDd;3;576E;D;K;6;CP$UIDd;3;577E;D;K;6;CP$UIDd;3;578E;D;K;6;CP$UIDd;3;579E;D;K;6;CP$UIDd;3;580E;D;K;6;CP$UIDd;3;581E;D;K;6;CP$UIDd;3;582E;D;K;6;CP$UIDd;3;583E;D;K;6;CP$UIDd;3;584E;D;K;6;CP$UIDd;3;585E;D;K;6;CP$UIDd;3;586E;D;K;6;CP$UIDd;3;587E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;589E;D;K;6;CP$UIDd;3;590E;D;K;6;CP$UIDd;3;591E;D;K;6;CP$UIDd;3;592E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;595E;D;K;6;CP$UIDd;3;596E;D;K;6;CP$UIDd;3;597E;D;K;6;CP$UIDd;3;598E;D;K;6;CP$UIDd;3;599E;D;K;6;CP$UIDd;3;600E;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;602E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;603E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;604E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;607E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;71E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;608E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;609E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;607E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;610E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;611E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;612E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;616E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;53E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;618E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;620E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;621E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;622E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;623E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;624E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;625E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;626E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;627E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;628E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;629E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;630E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;634E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;635E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;636E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;47E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;637E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;636E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;639E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;98E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;640E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;641E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;616E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;642E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;643E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;644E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;645E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;647E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;648E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;95E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;649E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;650E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;118E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;651E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;654E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;152E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;655E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;70E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;656E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;657E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;658E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;659E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;661E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;101E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;20E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;632E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;632E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;632E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;632E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;613E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;613E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;662E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;663E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;665E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;666E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;667E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;86E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;668E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;669E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;670E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;671E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;672E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;673E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;674E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;675E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;676E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;667E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;677E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;678E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;679E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;680E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;681E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;682E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;130E;K;41;_CPCibWindowTemplateWindowIsFullBridgeKeyD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;683E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;162E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;682E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;684E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;685E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;686E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;687E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;648E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;689E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;690E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;691E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;639E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;692E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;694E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;695E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;696E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;607E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;71E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;608E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;609E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;607E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;697E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;698E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;699E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;700E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;701E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;702E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;703E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;672E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;704E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;621E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;705E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;690E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;706E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;707E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;665E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;666E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;708E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;650E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;709E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;710E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;711E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;712E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;630E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;714E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;622E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;31E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;125E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;661E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;715E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;715E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;661E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;609E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;716E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;717E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;615E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;613E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;718E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;719E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;720E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;721E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;721E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;722E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;723E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;724E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;725E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;682E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;90E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;726E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;685E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;91E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;670E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;727E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;728E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;632E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;22E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;729E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;626E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;617E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;34E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;730E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;731E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;732E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;733E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;734E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;647E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;735E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;654E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;736E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;737E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;738E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;739E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;740E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;741E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;742E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;683E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;744E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;745E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;746E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;747E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;613E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;S;19;Horizontal ScrollerS;13;Menu (Format)S;11;Separator-8S;25;Menu Item (Substitutions)S;22;Menu Item (Align Left)S;1;5S;31;Menu Item (NewApplication Help)S;16;Menu Item (File)S;9;SeparatorS;21;Menu (NewApplication)S;23;Menu Item (Hide Others)S;18;Menu Item (Delete)S;15;Menu (Baseline)S;17;Menu Item (Find…)S;1;3S;12;File's OwnerS;18;Menu Item (Speech)S;12;Table ColumnS;14;Table Column-1S;31;Menu Item (Hide NewApplication)S;30;Menu Item (Bring All to Front)S;11;Separator-1S;3;2-1S;16;Menu Item (View)S;23;Menu Item (Paste Style)S;29;Text Field Cell (Text Cell)-7S;11;Menu (View)S;16;Menu Item (Kern)S;18;Menu Item (Italic)S;11;Separator-9S;14;Table Column-2S;25;Menu Item (Stop Speaking)S;20;Menu (Substitutions)S;4;1111S;16;Menu Item (Undo)S;11;ApplicationS;19;Menu Item (Justify)S;2;10S;29;Text Field Cell (Text Cell)-8S;22;Menu Item (Use None)-1S;16;Menu Item (Text)S;24;Menu Item (Show Toolbar)S;29;Text Field Cell (Text Cell)-4S;20;Menu Item (Ligature)S;29;Text Field Cell (Text Cell)-5S;19;Menu Item (Tighten)S;11;Separator-2S;25;Menu Item (Use Default)-2S;23;Menu Item (Smart Links)S;23;Menu Item (Use Default)S;16;Menu Item (Font)S;18;Menu Item (Center)S;33;Bordered Scroll View (Table View)S;30;Menu Item (Customize Toolbar…)S;17;Menu Item (Open…)S;14;Table Column-4S;14;Table Column-3S;1;1S;15;Menu Item (Cut)S;17;Menu Item (Lower)S;16;Menu Item (Find)S;16;Menu Item (Copy)S;32;Menu Item (Spelling and Grammar)S;1;9S;14;Table Column-5S;8;MainMenuS;32;Menu Item (About NewApplication)S;1;2S;15;Window (Window)S;20;Menu Item (Services)S;13;Menu (Window)S;11;Menu (Edit)S;14;Table Column-6S;11;Separator-3S;26;Menu Item (Start Speaking)S;11;Menu (Text)S;29;Text Field Cell (Text Cell)-1S;1;8S;18;Menu (Open Recent)S;11;Menu (Kern)S;11;Separator-5S;20;Menu Item (Minimize)S;17;Vertical ScrollerS;14;Table Column-7S;28;Menu Item (Smart Copy/Paste)S;18;Menu Item (Bigger)S;22;Menu Item (Show Ruler)S;29;Text Field Cell (Text Cell)-9S;18;Menu Item (Loosen)S;22;Menu Item (Select All)S;19;Menu Item (Use All)S;25;Menu Item (Use Default)-1S;27;Menu (Spelling and Grammar)S;29;Text Field Cell (Text Cell)-2S;11;Menu (File)S;23;Menu Item (Open Recent)S;19;Menu Item (Smaller)S;11;Separator-4S;14;Table Column-8S;14;Table Column-9S;34;Menu Item (Use Selection for Find)S;15;Menu (Ligature)S;29;Text Field Cell (Text Cell)-3S;14;App ControllerS;23;Menu Item (Superscript)S;16;Menu Item (Redo)S;30;Text Field Cell (Text Cell)-10S;13;Menu (Speech)S;24;Menu Item (Smart Quotes)S;26;Menu Item (NewApplication)S;10;Table ViewS;16;Menu Item (Zoom)S;22;Menu Item (Copy Style)S;12;Content ViewS;26;Menu Item (Show Spelling…)S;23;Menu Item (Align Right)S;21;Menu Item (Underline)S;18;Menu Item (Window)S;17;Menu Item (Raise)S;16;Menu Item (Edit)S;11;Menu (Find)S;20;Menu Item (Show All)S;1;7S;15;Table Column-10S;18;Menu Item (Format)S;29;Menu Item (Jump to Selection)S;20;Menu Item (Baseline)S;39;Menu Item (Check Spelling While Typing)S;39;Menu Item (Check Grammar With Spelling)S;26;Menu Item (Check Spelling)S;3;1-1S;29;Text Field Cell (Text Cell)-6S;12;Separator-10S;21;Menu Item (Find Next)S;20;Menu Item (Use None)S;22;Menu Item (Copy Ruler)S;11;Menu (Font)S;22;Menu Item (Show Fonts)S;25;Menu Item (Find Previous)S;16;Menu Item (Bold)S;11;Separator-7S;27;Text Field Cell (Text Cell)S;21;Menu Item (Subscript)S;23;Menu Item (Show Colors)S;23;Menu Item (Paste Ruler)S;1;6S;12;Separator-11S;15;Menu (Services)S;3;121S;22;Menu Item (Clear Menu)S;17;Menu Item (Paste)S;11;Separator-6D;K;10;$classnameS;22;_CPCibControlConnectorK;8;$classesA;S;22;_CPCibControlConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;55E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;748E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;749E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;750E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;751E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;752E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;96E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;755E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;756E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;757E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;758E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;759E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;760E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;761E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;762E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;763E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;764E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;765E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;767E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;769E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;27E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;770E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;771E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;773E;E;D;K;10;$classnameS;21;_CPCibOutletConnectorK;8;$classesA;S;21;_CPCibOutletConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;346E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;119E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;774E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;777E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;778E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;780E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;781E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;783E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;784E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;785E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;786E;E;D;K;6;$classD;K;6;CP$UIDd;3;346E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;119E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;787E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;788E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;790E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;791E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;58E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;792E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;793E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;794E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;795E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;796E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;797E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;28E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;798E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;26E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;54E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;346E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;88E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;d;3;370d;3;439d;3;396d;3;348d;3;145d;3;202d;3;405d;3;489d;3;211d;3;483d;3;479d;3;355d;3;443d;3;347d;3;391d;3;393d;3;475d;3;349d;3;356d;3;382d;2;-3d;3;440d;3;225d;3;112d;3;478d;3;486d;3;297d;3;418d;3;472d;3;142d;3;362d;3;354d;3;227d;3;377d;3;381d;3;460d;3;298d;2;72d;3;485d;3;218d;3;197d;3;471d;3;127d;2;29d;3;131d;2;58d;3;371d;2;24d;3;205d;3;235d;3;480d;3;379d;3;364d;2;80d;3;125d;3;366d;3;214d;3;350d;3;461d;3;467d;3;419d;3;198d;3;445d;3;363d;3;476d;3;395d;3;477d;3;466d;3;221d;3;411d;3;468d;3;407d;3;450d;3;470d;3;212d;3;449d;3;427d;3;367d;3;239d;3;228d;3;403d;3;204d;3;372d;3;383d;3;392d;2;19d;3;217d;3;437d;3;210d;3;375d;3;433d;3;346d;3;201d;3;474d;3;208d;3;388d;3;389d;3;213d;3;401d;3;374d;3;448d;3;444d;2;78d;3;400d;3;368d;3;126d;3;429d;3;462d;3;376d;3;380d;2;77d;3;111d;3;144d;2;83d;2;57d;3;209d;2;75d;2;86d;3;441d;2;39d;2;87d;3;134d;1;5d;3;149d;3;447d;2;74d;3;295d;3;404d;3;482d;3;430d;3;296d;3;397d;3;195d;3;373d;3;136d;3;207d;3;431d;3;413d;3;378d;3;398d;3;226d;3;143d;3;245d;3;406d;3;416d;3;410d;3;465d;3;103d;3;199d;3;488d;3;216d;3;240d;2;82d;3;106d;3;223d;3;473d;3;236d;3;196d;3;241d;3;415d;2;23d;3;481d;3;394d;3;232d;3;385d;3;426d;3;224d;3;442d;3;434d;3;414d;3;412d;3;200d;3;357d;2;81d;3;124d;3;428d;2;92d;3;360d;3;436d;3;215d;3;222d;3;351d;2;56d;3;463d;3;193d;2;37d;3;409d;3;432d;3;220d;3;459d;3;230d;3;150d;2;79d;3;399d;3;469d;3;219d;3;365d;3;446d;2;73d;3;402d;3;233d;3;417d;3;386d;3;484d;3;390d;3;451d;3;408d;3;384d;3;387d;3;438d;3;130d;3;231d;3;129d;3;435d;3;203d;3;206S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;88E;E;E;S;19;{{1, 1}, {476, 17}}S;19;{{0, 0}, {476, 17}}d;1;8S;6;normald;1;0S;29;_horizontalScrollerDidScroll:d;1;4f;18;0.6888567209243774S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;60E;E;E;T;S;0;F;S;13;SubstitutionsS;14;submenuAction:S;10;Align LeftS;13;Page Setup...S;19;NewApplication HelpS;4;FileS;14;NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;54E;E;E;S;11;Hide OthersS;6;DeleteS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;78E;E;E;S;5;Find…S;4;SaveS;6;Speechd;2;64d;2;10d;22;3.4028230607370965e+38S;19;Hide NewApplicationS;18;Bring All to FrontS;4;ViewS;11;Paste StyleD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;72E;E;E;S;4;KernS;6;ItalicS;13;Stop SpeakingD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;66E;E;E;S;19;Quit NewApplicationS;4;UndoS;7;JustifyS;15;Revert to SavedS;8;Use NoneS;4;TextS;12;Show ToolbarS;8;LigatureS;7;TightenS;11;Use DefaultS;11;Smart LinksS;4;FontS;6;CenterS;22;{{-1, -1}, {493, 365}}S;20;{{0, 0}, {493, 365}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;661E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;20E;E;E;d;2;18D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;660E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;812E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;813E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;814E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;605E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;816E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;126E;E;S;18;Customize Toolbar…S;5;Open…d;2;69d;2;40d;4;1000S;4;HelpS;3;CutS;5;LowerS;4;FindS;4;CopyS;20;Spelling and GrammarS;3;NewS;9;AMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;76E;E;E;S;20;About NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;24;{{335, 128}, {491, 363}}d;1;7S;6;WindowS;8;ServicesD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;42E;E;E;S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;37E;E;E;S;14;Start SpeakingD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;159E;E;E;S;8;Save As…S;11;Open RecentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;164E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;3;106E;E;E;S;8;MinimizeS;22;{{477, 347}, {15, 17}}S;18;{{0, 0}, {15, 17}}S;17;disabled+verticalf;18;0.9971429109573364S;16;Smart Copy/PasteS;6;BiggerS;10;Show RulerS;6;LoosenS;10;Select AllS;7;Use AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;3;160E;E;E;S;7;Smallerd;2;67S;22;Use Selection for FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;3;108E;E;E;S;13;AppControllerS;11;SuperscriptS;4;RedoD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;52E;E;E;S;12;Smart QuotesS;20;{{0, 0}, {691, 348}}d;2;17S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;74E;E;E;S;4;ZoomS;10;Copy StyleS;20;{{0, 0}, {491, 363}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;E;E;S;14;Show Spelling…S;11;Align RightS;9;UnderlineS;5;RaiseD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;142E;E;E;S;8;Show AllS;17;Jump to SelectionS;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;14;Check SpellingS;5;CloseS;9;Find NextS;10;Copy RulerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;46E;E;E;S;10;Show FontsS;13;Find PreviousS;4;BoldS;9;SubscriptS;11;Show ColorsS;11;Paste RulerS;6;Print…D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;12;Preferences…S;10;Clear MenuS;5;PasteS;5;undo:S;29;centerSelectionInVisibleArea:S;24;toggleSmartInsertDelete:S;22;hideOtherApplications:S;13;stopSpeaking:S;15;saveDocumentAs:S;23;performFindPanelAction:S;15;showGuessPanel:S;15;arrangeInFront:S;15;tightenKerning:S;12;superscript:S;13;performClose:S;19;useStandardKerning:S;5;copy:S;21;orderFrontColorPanel:S;10;selectAll:S;14;lowerBaseline:S;30;toggleContinuousSpellChecking:S;7;delete:S;17;turnOffLigatures:S;9;copyFont:S;22;unhideAllApplications:S;14;runPageLayout:S;22;toggleGrammarChecking:S;12;performZoom:S;14;checkSpelling:S;8;delegateS;29;toggleAutomaticLinkDetection:S;5;hide:S;19;toggleToolbarShown:S;10;underline:S;12;alignCenter:S;6;paste:S;15;alignJustified:S;15;turnOffKerning:S;4;cut:S;33;toggleAutomaticQuoteSubstitution:S;14;loosenKerning:S;21;useStandardLigatures:S;10;dataSourceS;9;unscript:S;13;openDocument:S;10;pasteFont:S;5;redo:S;22;revertDocumentToSaved:S;13;saveDocument:S;14;raiseBaseline:S;6;print:S;21;clearRecentDocuments:S;31;runToolbarCustomizationPalette:S;9;showHelp:S;11;pasteRuler:S;10;alignLeft:S;10;terminate:S;14;startSpeaking:S;11;alignRight:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;12;newDocument:S;10;subscript:S;16;useAllLigatures:S;9;theWindowS;10;copyRuler:S;12;toggleRuler:S;21;{{1, 16}, {476, 348}}S;20;{{0, 0}, {476, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;126E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;815E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;817E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;818E;D;K;6;CP$UIDd;3;818E;D;K;6;CP$UIDd;3;818E;D;K;6;CP$UIDd;3;819E;E;E;f;10;0.66666669d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;E;E;S;16;IBCocoaFrameworkd;3;490D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;3;111E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;379E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;D;K;6;CP$UIDd;3;390E;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;D;K;6;CP$UIDd;3;452E;D;K;6;CP$UIDd;3;453E;D;K;6;CP$UIDd;3;454E;D;K;6;CP$UIDd;3;455E;D;K;6;CP$UIDd;3;456E;D;K;6;CP$UIDd;3;457E;D;K;6;CP$UIDd;3;458E;D;K;6;CP$UIDd;3;459E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;462E;D;K;6;CP$UIDd;3;463E;D;K;6;CP$UIDd;3;464E;D;K;6;CP$UIDd;3;465E;D;K;6;CP$UIDd;3;466E;D;K;6;CP$UIDd;3;467E;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;478E;D;K;6;CP$UIDd;3;479E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;481E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;483E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;485E;D;K;6;CP$UIDd;3;486E;D;K;6;CP$UIDd;3;487E;D;K;6;CP$UIDd;3;488E;D;K;6;CP$UIDd;3;489E;D;K;6;CP$UIDd;3;490E;D;K;6;CP$UIDd;3;491E;D;K;6;CP$UIDd;3;492E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;494E;D;K;6;CP$UIDd;3;495E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;497E;D;K;6;CP$UIDd;3;498E;D;K;6;CP$UIDd;3;499E;D;K;6;CP$UIDd;3;500E;D;K;6;CP$UIDd;3;501E;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;D;K;6;CP$UIDd;3;505E;D;K;6;CP$UIDd;3;506E;D;K;6;CP$UIDd;3;507E;D;K;6;CP$UIDd;3;508E;D;K;6;CP$UIDd;3;509E;D;K;6;CP$UIDd;3;510E;D;K;6;CP$UIDd;3;511E;D;K;6;CP$UIDd;3;512E;D;K;6;CP$UIDd;3;513E;D;K;6;CP$UIDd;3;514E;D;K;6;CP$UIDd;3;515E;D;K;6;CP$UIDd;3;516E;D;K;6;CP$UIDd;3;517E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;519E;D;K;6;CP$UIDd;3;520E;D;K;6;CP$UIDd;3;521E;D;K;6;CP$UIDd;3;522E;D;K;6;CP$UIDd;3;523E;D;K;6;CP$UIDd;3;524E;D;K;6;CP$UIDd;3;525E;D;K;6;CP$UIDd;3;526E;D;K;6;CP$UIDd;3;527E;D;K;6;CP$UIDd;3;528E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;530E;D;K;6;CP$UIDd;3;531E;D;K;6;CP$UIDd;3;532E;D;K;6;CP$UIDd;3;533E;D;K;6;CP$UIDd;3;534E;D;K;6;CP$UIDd;3;535E;D;K;6;CP$UIDd;3;536E;D;K;6;CP$UIDd;3;537E;D;K;6;CP$UIDd;3;538E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;540E;D;K;6;CP$UIDd;3;541E;D;K;6;CP$UIDd;3;542E;D;K;6;CP$UIDd;3;543E;D;K;6;CP$UIDd;3;544E;D;K;6;CP$UIDd;3;545E;D;K;6;CP$UIDd;3;546E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;548E;D;K;6;CP$UIDd;3;549E;D;K;6;CP$UIDd;3;550E;D;K;6;CP$UIDd;3;551E;D;K;6;CP$UIDd;3;552E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;554E;D;K;6;CP$UIDd;3;555E;D;K;6;CP$UIDd;3;556E;D;K;6;CP$UIDd;3;557E;D;K;6;CP$UIDd;3;558E;D;K;6;CP$UIDd;3;559E;D;K;6;CP$UIDd;3;560E;D;K;6;CP$UIDd;3;561E;D;K;6;CP$UIDd;3;562E;D;K;6;CP$UIDd;3;563E;D;K;6;CP$UIDd;3;564E;D;K;6;CP$UIDd;3;565E;D;K;6;CP$UIDd;3;566E;D;K;6;CP$UIDd;3;567E;D;K;6;CP$UIDd;3;568E;D;K;6;CP$UIDd;3;569E;D;K;6;CP$UIDd;3;570E;D;K;6;CP$UIDd;3;571E;D;K;6;CP$UIDd;3;572E;D;K;6;CP$UIDd;3;573E;D;K;6;CP$UIDd;3;574E;D;K;6;CP$UIDd;3;575E;D;K;6;CP$UIDd;3;576E;D;K;6;CP$UIDd;3;577E;D;K;6;CP$UIDd;3;578E;D;K;6;CP$UIDd;3;579E;D;K;6;CP$UIDd;3;580E;D;K;6;CP$UIDd;3;581E;D;K;6;CP$UIDd;3;582E;D;K;6;CP$UIDd;3;583E;D;K;6;CP$UIDd;3;584E;D;K;6;CP$UIDd;3;585E;D;K;6;CP$UIDd;3;586E;D;K;6;CP$UIDd;3;587E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;589E;D;K;6;CP$UIDd;3;590E;D;K;6;CP$UIDd;3;591E;D;K;6;CP$UIDd;3;592E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;595E;D;K;6;CP$UIDd;3;596E;D;K;6;CP$UIDd;3;597E;D;K;6;CP$UIDd;3;598E;D;K;6;CP$UIDd;3;599E;D;K;6;CP$UIDd;3;600E;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;602E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;603E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;35E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;605E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;606E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;607E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;608E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;609E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;612E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;46E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;165E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;613E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;613E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;613E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;613E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;614E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;614E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;616E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;617E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;38E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;620E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;621E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;621E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;622E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;612E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;624E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;624E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;612E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;625E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;626E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;627E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;615E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;614E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;628E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;629E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;56E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;630E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;72E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;603E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;631E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;632E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;634E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;619E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;636E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;637E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;216E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;639E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;640E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;641E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;642E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;643E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;644E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;645E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;646E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;625E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;645E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;647E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;648E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;133E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;649E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;650E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;197E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;151E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;654E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;171E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;655E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;629E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;656E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;657E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;311E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;658E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;659E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;660E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;661E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;662E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;663E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;664E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;665E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;666E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;667E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;668E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;186E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;669E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;670E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;671E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;630E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;672E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;673E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;674E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;675E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;676E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;677E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;678E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;209E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;679E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;680E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;632E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;36E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;681E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;682E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;683E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;649E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;685E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;223E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;686E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;687E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;688E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;689E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;690E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;691E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;30E;K;41;_CPCibWindowTemplateWindowIsFullBridgeKeyD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;692E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;694E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;695E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;636E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;39E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;696E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;697E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;691E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;698E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;699E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;700E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;701E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;702E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;703E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;135E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;704E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;705E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;140E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;706E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;707E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;708E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;709E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;710E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;711E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;712E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;661E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;62E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;714E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;150E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;706E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;715E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;716E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;717E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;718E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;696E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;99E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;717E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;719E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;717E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;720E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;721E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;648E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;722E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;723E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;703E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;724E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;725E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;617E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;26E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;726E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;705E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;727E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;728E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;729E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;730E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;287E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;731E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;710E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;711E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;732E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;733E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;734E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;714E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;735E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;652E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;736E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;691E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;721E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;737E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;738E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;739E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;282E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;740E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;741E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;742E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;744E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;745E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;746E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;747E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;645E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;646E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;625E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;645E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;748E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;749E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;S;20;Menu Item (Services)S;3;121S;33;Bordered Scroll View (Table View)S;20;Menu Item (Show All)S;1;2S;16;Menu Item (File)S;22;Menu Item (Select All)S;12;Content ViewS;10;Table ViewS;30;Text Field Cell (Text Cell)-10S;18;Menu Item (Format)S;23;Menu Item (Open Recent)S;15;Menu (Services)S;20;Menu (Substitutions)S;17;Menu Item (Find…)S;11;Menu (File)S;21;Menu (NewApplication)S;17;Table Column (10)S;16;Menu Item (Bold)S;1;9S;3;1-1S;29;Text Field Cell (Text Cell)-7S;29;Text Field Cell (Text Cell)-9S;27;Text Field Cell (Text Cell)S;17;Vertical ScrollerS;16;Menu Item (Text)S;20;Menu Item (Baseline)S;15;Menu Item (Cut)S;16;Table Column (5)S;32;Menu Item (Spelling and Grammar)S;1;5S;23;Menu Item (Paste Style)S;16;Table Column (2)S;26;Menu Item (Check Spelling)S;13;Menu (Format)S;23;Menu Item (Hide Others)S;16;Table Column (8)S;32;Menu Item (About NewApplication)S;22;Menu Item (Show Ruler)S;23;Menu Item (Paste Ruler)S;15;Menu (Ligature)S;17;Menu Item (Lower)S;1;6S;26;Menu Item (Show Spelling…)S;29;Text Field Cell (Text Cell)-2S;8;MainMenuS;31;Menu Item (NewApplication Help)S;16;Table Column (9)S;22;Menu Item (Clear Menu)S;2;10S;17;Menu Item (Paste)S;18;Menu (Open Recent)S;26;Menu Item (Start Speaking)S;21;Menu Item (Subscript)S;16;Menu Item (Zoom)S;16;Menu Item (Undo)S;1;3S;16;Table Column (4)S;16;Table Column (6)S;19;Menu Item (Justify)S;22;Menu Item (Align Left)S;25;Menu Item (Substitutions)S;23;Menu Item (Align Right)S;39;Menu Item (Check Spelling While Typing)S;34;Menu Item (Use Selection for Find)S;9;SeparatorS;12;File's OwnerS;29;Text Field Cell (Text Cell)-1S;15;Menu (Baseline)S;16;Table Column (3)S;22;Menu Item (Copy Style)S;15;Window (Window)S;18;Menu Item (Center)S;20;Menu Item (Use None)S;22;Menu Item (Use None)-1S;11;Separator-8S;18;Menu Item (Bigger)S;21;Menu Item (Underline)S;26;Menu Item (NewApplication)S;11;Menu (Kern)S;3;2-1S;13;Menu (Window)S;23;Menu Item (Smart Links)S;21;Menu Item (Find Next)S;11;Separator-4S;28;Menu Item (Smart Copy/Paste)S;17;Menu Item (Open…)S;11;ApplicationS;16;Menu Item (Font)S;4;1111S;18;Menu Item (Speech)S;11;Menu (Find)S;16;Table Column (0)S;23;Menu Item (Superscript)S;11;Separator-1S;20;Menu Item (Ligature)S;14;App ControllerS;16;Menu Item (View)S;29;Text Field Cell (Text Cell)-4S;16;Menu Item (Find)S;29;Text Field Cell (Text Cell)-6S;20;Menu Item (Minimize)S;17;Menu Item (Raise)S;11;Separator-6S;25;Menu Item (Use Default)-2S;25;Menu Item (Find Previous)S;16;Menu Item (Kern)S;25;Menu Item (Use Default)-1S;30;Menu Item (Bring All to Front)S;11;Separator-5S;23;Menu Item (Use Default)S;18;Menu Item (Delete)S;11;Separator-2S;16;Menu Item (Edit)S;29;Text Field Cell (Text Cell)-5S;1;7S;11;Menu (Text)S;16;Menu Item (Copy)S;11;Menu (Font)S;25;Menu Item (Stop Speaking)S;1;1S;22;Menu Item (Copy Ruler)S;11;Separator-7S;13;Menu (Speech)S;24;Menu Item (Show Toolbar)S;11;Separator-9S;16;Menu Item (Redo)S;12;Separator-10S;23;Menu Item (Show Colors)S;16;Table Column (1)S;30;Menu Item (Customize Toolbar…)S;39;Menu Item (Check Grammar With Spelling)S;19;Menu Item (Use All)S;11;Menu (View)S;27;Menu (Spelling and Grammar)S;12;Separator-11S;18;Menu Item (Window)S;11;Menu (Edit)S;24;Menu Item (Smart Quotes)S;18;Menu Item (Italic)S;16;Table Column (7)S;29;Text Field Cell (Text Cell)-8S;29;Text Field Cell (Text Cell)-3S;18;Menu Item (Loosen)S;1;8S;22;Menu Item (Show Fonts)S;19;Menu Item (Smaller)S;19;Menu Item (Tighten)S;31;Menu Item (Hide NewApplication)S;11;Separator-3S;19;Horizontal ScrollerS;29;Menu Item (Jump to Selection)D;K;10;$classnameS;22;_CPCibControlConnectorK;8;$classesA;S;22;_CPCibControlConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;750E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;751E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;752E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;755E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;756E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;757E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;758E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;759E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;74E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;760E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;761E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;762E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;763E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;764E;E;D;K;10;$classnameS;21;_CPCibOutletConnectorK;8;$classesA;S;21;_CPCibOutletConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;116E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;765E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;141E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;767E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;769E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;53E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;770E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;771E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;773E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;774E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;777E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;778E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;780E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;781E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;783E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;784E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;785E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;24E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;786E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;787E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;788E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;91E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;790E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;791E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;107E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;792E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;793E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;794E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;795E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;75E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;796E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;797E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;798E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;116E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;28E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;55E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;812E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;813E;E;d;3;129d;3;460d;3;347d;3;150d;3;230d;3;445d;2;83d;3;372d;3;449d;3;434d;3;480d;3;241d;3;209d;3;349d;2;81d;3;427d;3;485d;3;245d;2;82d;2;73d;3;472d;3;488d;3;448d;3;378d;3;404d;3;469d;3;451d;3;367d;3;376d;3;360d;3;410d;2;58d;2;78d;3;111d;3;224d;3;126d;3;408d;3;203d;3;196d;3;125d;3;239d;3;382d;2;75d;3;477d;3;437d;3;219d;3;348d;3;383d;3;144d;3;489d;3;476d;3;371d;3;393d;3;415d;3;392d;2;74d;2;24d;3;354d;3;206d;2;72d;2;-3d;3;220d;3;407d;3;370d;3;409d;3;295d;3;478d;3;450d;3;355d;2;23d;3;416d;3;227d;3;213d;3;412d;2;86d;3;236d;3;217d;3;438d;3;362d;3;379d;3;197d;3;368d;3;240d;3;373d;3;103d;3;396d;3;386d;3;212d;3;346d;3;401d;3;222d;3;226d;3;374d;3;466d;3;298d;3;127d;3;414d;3;200d;3;296d;3;402d;3;205d;3;459d;3;351d;3;391d;3;479d;3;433d;3;366d;3;482d;2;80d;3;389d;3;418d;3;149d;3;462d;3;428d;3;131d;3;106d;2;37d;3;231d;3;442d;3;198d;3;463d;3;375d;3;124d;3;130d;3;363d;2;57d;3;429d;3;390d;3;440d;3;467d;3;486d;3;223d;3;461d;3;399d;3;439d;3;199d;3;475d;3;216d;2;77d;3;201d;3;436d;3;441d;3;443d;3;145d;3;411d;3;385d;3;387d;3;481d;3;446d;3;204d;3;470d;2;29d;3;444d;3;483d;3;356d;3;112d;3;207d;3;473d;3;417d;3;380d;3;432d;3;221d;3;405d;3;435d;3;413d;3;471d;3;403d;3;381d;3;394d;2;56d;3;208d;3;235d;3;142d;3;350d;3;377d;3;136d;3;465d;3;211d;3;143d;3;398d;2;87d;3;484d;3;431d;3;218d;3;364d;2;92d;3;397d;3;430d;1;5d;3;193d;3;214d;3;228d;2;39d;3;406d;3;202d;3;474d;3;447d;3;426d;3;195d;2;79d;3;388d;3;365d;3;384d;3;297d;3;400d;3;215d;3;233d;2;19d;3;468d;3;225d;3;419d;3;395d;3;134d;3;357d;3;210d;3;232S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;E;E;S;8;ServicesS;14;submenuAction:S;12;Preferences…S;22;{{-1, -1}, {493, 365}}S;20;{{0, 0}, {493, 365}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;612E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;165E;E;E;d;2;18S;6;normalD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;611E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;814E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;815E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;816E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;818E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;32E;E;d;2;10T;F;S;8;Show AllS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;E;E;S;4;FileS;10;Select AllS;20;{{0, 0}, {491, 363}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;d;1;8S;20;{{0, 0}, {691, 348}}d;1;4d;2;17S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;41E;E;E;S;6;FormatS;11;Open RecentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;102E;E;E;S;5;Find…D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;64E;E;E;S;14;NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;109E;E;E;d;22;3.4028230607370965e+38S;4;BoldS;3;NewS;5;CloseS;22;{{477, 347}, {15, 17}}S;18;{{0, 0}, {15, 17}}S;17;disabled+verticald;1;0S;29;_horizontalScrollerDidScroll:f;18;0.9971429109573364S;4;TextS;8;BaselineS;3;Cutd;2;64S;20;Spelling and GrammarS;13;Page Setup...S;11;Paste StyleS;14;Check SpellingD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;47E;E;E;S;11;Hide OthersS;20;About NewApplicationS;10;Show RulerS;11;Paste RulerS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;149E;E;E;S;5;LowerS;6;Print…S;14;Show Spelling…S;9;AMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;137E;E;E;S;19;NewApplication HelpS;10;Clear MenuS;15;Revert to SavedS;5;PasteD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;69E;E;E;S;14;Start SpeakingS;9;SubscriptS;4;ZoomS;4;UndoS;4;SaveS;1;4S;7;JustifyS;10;Align LeftS;11;Align RightS;27;Check Spelling While TypingS;22;Use Selection for FindS;0;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;2;63E;E;E;S;10;Copy StyleS;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;24;{{335, 128}, {491, 363}}d;1;7S;6;WindowS;6;CenterS;8;Use NoneS;6;BiggerS;9;UnderlineS;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;158E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;126E;E;E;S;11;Smart LinksS;9;Find NextS;16;Smart Copy/PasteS;5;Open…S;4;FontS;19;Quit NewApplicationS;6;SpeechS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;3;166E;E;E;S;1;0d;2;69d;2;40d;4;1000S;11;SuperscriptS;13;AppControllerS;4;ViewS;8;MinimizeS;5;RaiseS;11;Use DefaultS;13;Find PreviousS;18;Bring All to FrontS;6;DeleteS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;61E;E;E;S;4;CopyD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;53E;E;E;S;13;Stop SpeakingS;10;Copy RulerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;3;136E;E;E;S;12;Show ToolbarS;4;RedoS;11;Show Colorsd;2;67S;18;Customize Toolbar…S;27;Check Grammar With SpellingS;7;Use AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;147E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;148E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;110E;E;E;S;12;Smart QuotesS;6;ItalicS;6;LoosenS;8;Save As…S;10;Show FontsS;7;SmallerS;7;TightenS;19;Hide NewApplicationS;20;{{1, -1}, {476, 17}}S;19;{{0, 0}, {476, 17}}f;18;0.6888567209243774S;17;Jump to SelectionS;14;loosenKerning:S;12;superscript:S;14;lowerBaseline:S;13;saveDocument:S;29;centerSelectionInVisibleArea:S;19;useStandardKerning:S;24;toggleSmartInsertDelete:S;19;performMiniaturize:S;11;pasteRuler:S;13;performClose:S;10;subscript:S;14;raiseBaseline:S;15;showGuessPanel:S;29;toggleAutomaticLinkDetection:S;12;toggleRuler:S;8;delegateS;19;toggleToolbarShown:S;5;hide:S;6;print:S;30;toggleContinuousSpellChecking:S;10;pasteFont:S;23;performFindPanelAction:S;9;unscript:S;21;orderFrontColorPanel:S;10;copyRuler:S;6;paste:S;22;hideOtherApplications:S;7;delete:S;29;orderFrontStandardAboutPanel:S;31;runToolbarCustomizationPalette:S;14;startSpeaking:S;33;toggleAutomaticQuoteSubstitution:S;13;openDocument:S;10;underline:S;9;showHelp:S;15;turnOffKerning:S;22;unhideAllApplications:S;14;runPageLayout:S;5;redo:S;11;alignRight:S;9;theWindowS;22;toggleGrammarChecking:S;10;terminate:S;16;useAllLigatures:S;10;alignLeft:S;21;clearRecentDocuments:S;12;performZoom:S;15;saveDocumentAs:S;15;arrangeInFront:S;22;revertDocumentToSaved:S;5;copy:S;10;dataSourceS;12;alignCenter:S;15;tightenKerning:S;12;newDocument:S;17;turnOffLigatures:S;15;alignJustified:S;21;useStandardLigatures:S;10;selectAll:S;13;stopSpeaking:S;9;copyFont:S;14;checkSpelling:S;5;undo:S;4;cut:S;21;{{1, 16}, {476, 348}}S;20;{{0, 0}, {476, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;817E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;819E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;820E;D;K;6;CP$UIDd;3;820E;D;K;6;CP$UIDd;3;820E;D;K;6;CP$UIDd;3;821E;E;E;f;10;0.66666669d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/TableCibTest/Resources/MainMenu.xib b/TableCibTest/Resources/MainMenu.xib index 671d22a13..69234c332 100644 --- a/TableCibTest/Resources/MainMenu.xib +++ b/TableCibTest/Resources/MainMenu.xib @@ -8,7 +8,7 @@ 353.00 YES - + YES @@ -1137,7 +1137,7 @@ 256 - {691, 349} + {691, 348} YES @@ -1148,6 +1148,7 @@ YES + 0 6.900000e+01 4.000000e+01 1.000000e+03 @@ -1206,6 +1207,7 @@ + 1 6.700000e+01 4.000000e+01 1.000000e+03 @@ -1232,6 +1234,7 @@ + 2 6.400000e+01 1.000000e+01 3.402823e+38 @@ -1266,6 +1269,7 @@ + 3 6.400000e+01 1.000000e+01 3.402823e+38 @@ -1292,6 +1296,7 @@ + 4 6.400000e+01 1.000000e+01 3.402823e+38 @@ -1318,6 +1323,7 @@ + 5 6.400000e+01 1.000000e+01 3.402823e+38 @@ -1344,6 +1350,7 @@ + 6 6.400000e+01 1.000000e+01 3.402823e+38 @@ -1370,6 +1377,7 @@ + 7 6.400000e+01 1.000000e+01 3.402823e+38 @@ -1396,6 +1404,7 @@ + 8 6.400000e+01 1.000000e+01 3.402823e+38 @@ -1422,6 +1431,7 @@ + 9 6.400000e+01 1.000000e+01 3.402823e+38 @@ -1448,6 +1458,7 @@ + 10 1.000000e+01 1.000000e+01 3.402823e+38 @@ -1494,7 +1505,7 @@ YES - {{1, 0}, {476, 349}} + {{1, 1}, {476, 348}} @@ -1504,7 +1515,7 @@ 256 - {{477, 0}, {15, 349}} + {{477, 1}, {15, 348}} _doScroller: @@ -3351,6 +3362,24 @@ 466.IBPluginDependency 467.IBPluginDependency 468.IBPluginDependency + 469.IBPluginDependency + 470.IBPluginDependency + 471.IBPluginDependency + 472.IBPluginDependency + 473.IBPluginDependency + 474.IBPluginDependency + 475.IBPluginDependency + 476.IBPluginDependency + 477.IBPluginDependency + 478.IBPluginDependency + 479.IBPluginDependency + 480.IBPluginDependency + 481.IBPluginDependency + 482.IBPluginDependency + 483.IBPluginDependency + 484.IBPluginDependency + 485.IBPluginDependency + 486.IBPluginDependency 5.IBPluginDependency 5.ImportedFromIB2 56.IBPluginDependency @@ -3584,6 +3613,24 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin From b2f35b61d39ba9233998deae0c16a44c6b23fb34 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 7 Jul 2009 11:33:58 -0700 Subject: [PATCH 074/244] Fix for making scrolling smoother. Reviewed by me. --- AppKit/CPScrollView.j | 4 +--- AppKit/Platform/DOM/CPDOMWindowBridge.j | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 9b92c6032..e8ff5f873 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -580,8 +580,7 @@ */ - (void)scrollWheel:(CPEvent)anEvent { - var value = [_verticalScroller floatValue], - documentFrame = [[self documentView] frame], + var documentFrame = [[self documentView] frame], contentBounds = [_contentView bounds]; contentBounds.origin.x += [anEvent deltaX] * _horizontalLineScroll; @@ -593,7 +592,6 @@ - (void)keyDown:(CPEvent)anEvent { var keyCode = [anEvent keyCode], - value = [_verticalScroller floatValue], documentFrame = [[self documentView] frame], contentBounds = [_contentView bounds]; diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index 17d7da992..6b6c57d29 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -785,7 +785,7 @@ var CTRL_KEY_CODE = 17; location.x -= CGRectGetMinX(windowFrame); location.y -= CGRectGetMinY(windowFrame); - + if(typeof aDOMEvent.wheelDeltaX != "undefined") { deltaX = aDOMEvent.wheelDeltaX / 120.0; @@ -811,8 +811,8 @@ var CTRL_KEY_CODE = 17; timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0 ]; event._DOMEvent = aDOMEvent; - event._deltaX = ROUND(deltaX * 1.5); - event._deltaY = ROUND(deltaY * 1.5); + event._deltaX = deltaX; + event._deltaY = deltaY; [CPApp sendEvent:event]; From cb81eeed1596d48f44c3d2e0e1e196e58532a941 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 7 Jul 2009 18:42:44 -0700 Subject: [PATCH 075/244] Fix for selection in tableview. Reviewed by me. --- AppKit/CPColor.j | 10 ++++++++++ AppKit/CPTableView.j | 15 ++++++++++----- TableTest/AppController.j | 4 ++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/AppKit/CPColor.j b/AppKit/CPColor.j index 464ddecb3..53342b37a 100644 --- a/AppKit/CPColor.j +++ b/AppKit/CPColor.j @@ -375,6 +375,16 @@ var cachedBlackColor, return cachedClearColor; } ++ (CPColor)alternateSelectedControlColor +{ + return [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]; +} + ++ (CPColor)secondarySelectedControlColor +{ + return [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]; +} + /*! Creates a color using a tile pattern with anImage @param the image to tile diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index bfa234f0e..eff694654 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -120,7 +120,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; CPIndexSet _selectedColumnIndexes; CPIndexSet _selectedRowIndexes; - CPInteger _selectionStartRow; + CPInteger _selectionAnchorRow; _CPTableDrawView _tableDrawView; } @@ -1201,7 +1201,7 @@ _cachedDataViews[dataView.identifier].push(dataView); - (void)highlightSelectionInClipRect:(CGRect)aRect { - [[CPColor greenColor] set]; + [[CPColor alternateSelectedControlColor] set]; var context = [[CPGraphicsContext currentContext] graphicsPort]; @@ -1286,15 +1286,20 @@ _cachedDataViews[dataView.identifier].push(dataView); */ +- (BOOL)tracksMouseOutsideOfFrame +{ + return YES; +} + - (BOOL)startTrackingAt:(CGPoint)aPoint { var row = [self rowAtPoint:aPoint]; if ([self mouseDownFlags] & CPShiftKeyMask) - _selectionAnchor = (ABS([_selectedRowIndexes firstIndex] - row) < ABS([_selectedRowIndexes lastIndex] - row)) ? + _selectionAnchorRow = (ABS([_selectedRowIndexes firstIndex] - row) < ABS([_selectedRowIndexes lastIndex] - row)) ? [_selectedRowIndexes firstIndex] : [_selectedRowIndexes lastIndex]; else - _selectionAnchor = row; + _selectionAnchorRow = row; [self _updateSelectionWithMouseAtRow:row]; @@ -1355,7 +1360,7 @@ _cachedDataViews[dataView.identifier].push(dataView); } else if (_allowsMultipleSelection) - newSelection = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(MIN(aRow, _selectionStartRow), ABS(aRow - _selectionStartRow) + 1)]; + newSelection = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(MIN(aRow, _selectionAnchorRow), ABS(aRow - _selectionAnchorRow) + 1)]; else if (aRow >= 0 && aRow < _numberOfRows) newSelection = [CPIndexSet indexSetWithIndex:aRow]; diff --git a/TableTest/AppController.j b/TableTest/AppController.j index 1030e9403..152034025 100644 --- a/TableTest/AppController.j +++ b/TableTest/AppController.j @@ -105,8 +105,8 @@ CPLogRegister(CPLogConsole); { //CPLog.debug(@"shouldSelectRow %d", rowIndex); for (var i = 2, sqrt = SQRT(rowIndex+1); i <= sqrt; i++) - if ((rowIndex+1) % i === 0){console.log("NO for " + rowIndex); - return false;} + if ((rowIndex+1) % i === 0) + return false; return true; } From 8660c72015757f6824db47f1ce86fc84ee4c2e36 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 8 Jul 2009 11:15:15 -0700 Subject: [PATCH 076/244] Fix for scrollers and nib2cib, as well as resizing. Closes #217. Closes #218. Reviewed by me. --- AppKit/CPScrollView.j | 18 +++++--- AppKit/CPScroller.j | 61 +++++++++++++------------ AppKit/Themes/Aristo/ThemeDescriptors.j | 10 ++-- Tools/nib2cib/NSScroller.j | 2 + 4 files changed, 51 insertions(+), 40 deletions(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index b89aa3401..ec93beb28 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -243,21 +243,27 @@ if (shouldShowHorizontalScroller) verticalScrollerHeight -= horizontalScrollerHeight; - [_verticalScroller setFloatValue:(difference.height <= 0.0) ? 0.0 : scrollPoint.y / difference.height - knobProportion:_CGRectGetHeight(contentFrame) / _CGRectGetHeight(documentFrame)]; + [_verticalScroller setFloatValue:(difference.height <= 0.0) ? 0.0 : scrollPoint.y / difference.height]; + [_verticalScroller setKnobProportion:_CGRectGetHeight(contentFrame) / _CGRectGetHeight(documentFrame)]; [_verticalScroller setFrame:_CGRectMake(_CGRectGetMaxX(contentFrame), verticalScrollerY, verticalScrollerWidth, verticalScrollerHeight)]; } else if (wasShowingVerticalScroller) - [_verticalScroller setFloatValue:0.0 knobProportion:1.0]; + { + [_verticalScroller setFloatValue:0.0]; + [_verticalScroller setKnobProportion:1.0]; + } if (shouldShowHorizontalScroller) { - [_horizontalScroller setFloatValue:(difference.width <= 0.0) ? 0.0 : scrollPoint.x / difference.width - knobProportion:_CGRectGetWidth(contentFrame) / _CGRectGetWidth(documentFrame)]; + [_horizontalScroller setFloatValue:(difference.width <= 0.0) ? 0.0 : scrollPoint.x / difference.width]; + [_horizontalScroller setKnobProportion:_CGRectGetWidth(contentFrame) / _CGRectGetWidth(documentFrame)]; [_horizontalScroller setFrame:_CGRectMake(0.0, _CGRectGetMaxY(contentFrame), _CGRectGetWidth(contentFrame), horizontalScrollerHeight)]; } else if (wasShowingHorizontalScroller) - [_horizontalScroller setFloatValue:0.0 knobProportion:1.0]; + { + [_horizontalScroller setFloatValue:0.0]; + [_horizontalScroller setKnobProportion:1.0]; + } [_contentView setFrame:contentFrame]; [_headerClipView setFrame:headerClipViewFrame]; diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index d922603d7..af566614e 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -64,9 +64,9 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; BOOL _isVertical @accessors(readonly, getter=isVertical); float _knobProportion; - + CPScrollerPart _hitPart; - + CPScrollerPart _trackingPart; float _trackingFloatValue; CGPoint _trackingStartPoint; @@ -104,11 +104,12 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; _controlSize = CPRegularControlSize; _partRects = []; - [self setFloatValue:0.0 knobProportion:1.0]; + [self setFloatValue:0.0]; + [self setKnobProportion:1.0]; _hitPart = CPScrollerNoPart; - [self _recalculateIsVertical]; + [self _calculateIsVertical]; } return self; @@ -155,28 +156,17 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; return _controlSize; } -// Setting the Knob Position -/*! - Sets the scroller's knob position (ranges from 0.0 to 1.0). - @param aValue the knob position (ranges from 0.0 to 1.0) -*/ -- (void)setFloatValue:(float)aValue +- (void)setObjectValue:(id)aValue { - [super setFloatValue:MIN(1.0, MAX(0.0, aValue))]; - - [self setNeedsLayout]; + [super setObjectValue:MIN(1.0, MAX(0.0, +aValue))]; } -/*! - Sets the position and proportion of the knob. - @param aValue the knob position (ranges from 0.0 to 1.0) - @param aProportion the knob's proportion (ranges from 0.0 to 1.0) -*/ -- (void)setFloatValue:(float)aValue knobProportion:(float)aProportion +- (void)setKnobProportion:(float)aProportion { _knobProportion = MIN(1.0, MAX(0.0001, aProportion)); - [self setFloatValue:aValue]; + [self setNeedsDisplay:YES]; + [self setNeedsLayout]; } /*! @@ -533,15 +523,15 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; } -- (void)_recalculateIsVertical +- (void)_calculateIsVertical { // Recalculate isVertical. var bounds = [self bounds], width = _CGRectGetWidth(bounds), height = _CGRectGetHeight(bounds); - + _isVertical = width < height ? 1 : (width > height ? 0 : -1); - + if (_isVertical === 1) [self setThemeState:CPThemeStateVertical]; else if (_isVertical === 0) @@ -552,8 +542,6 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; { [super setFrameSize:aSize]; - [self _recalculateIsVertical]; - [self checkSpaceForParts]; [self setNeedsLayout]; } @@ -590,18 +578,16 @@ var CPScrollerControlSizeKey = "CPScrollerControlSize", _controlSize = CPRegularControlSize; if ([aCoder containsValueForKey:CPScrollerControlSizeKey]) _controlSize = [aCoder decodeIntForKey:CPScrollerControlSizeKey]; - + _knobProportion = 1.0; if ([aCoder containsValueForKey:CPScrollerKnobProportionKey]) _knobProportion = [aCoder decodeFloatForKey:CPScrollerKnobProportionKey]; - + _partRects = []; _hitPart = CPScrollerNoPart; - [self _recalculateIsVertical]; -// [self checkSpaceForParts]; -// [self setNeedsLayout]; + [self _calculateIsVertical]; } return self; @@ -616,3 +602,18 @@ var CPScrollerControlSizeKey = "CPScrollerControlSize", } @end + +@implementation CPScroller (Deprecated) + +/*! + Sets the position and proportion of the knob. + @param aValue the knob position (ranges from 0.0 to 1.0) + @param aProportion the knob's proportion (ranges from 0.0 to 1.0) +*/ +- (void)setFloatValue:(float)aValue knobProportion:(float)aProportion +{ + [self setFloatValue:aValue]; + [self setKnobProportion:aProportion]; +} + +@end diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 72efe57a9..57e7033a9 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -191,7 +191,8 @@ [scroller setValue:knobColor forThemeAttribute:@"knob-color" inState:CPThemeStateVertical]; - [scroller setFloatValue:0.1 knobProportion:0.5]; + [scroller setFloatValue:0.1]; + [scroller setKnobProportion:0.5]; return scroller; } @@ -234,10 +235,11 @@ [_CPCibCustomResource imageResourceWithName:"scroller-horizontal-knob-right.png" size:CGSizeMake(9.0, 15.0)] ] isVertical:NO]); - + [scroller setValue:knobColor forThemeAttribute:@"knob-color"]; - - [scroller setFloatValue:0.1 knobProportion:0.5]; + + [scroller setFloatValue:0.1]; + [scroller setKnobProportion:0.5]; return scroller; } diff --git a/Tools/nib2cib/NSScroller.j b/Tools/nib2cib/NSScroller.j index 1c39d70bd..5909d8d93 100644 --- a/Tools/nib2cib/NSScroller.j +++ b/Tools/nib2cib/NSScroller.j @@ -45,6 +45,8 @@ if ([aCoder containsValueForKey:"NSCurValue"]) _value = [aCoder decodeFloatForKey:"NSCurValue"]; + [self _calculateIsVertical]; + var isVertical = [self isVertical]; if (CPStringFromSelector([self action]) === @"_doScroller:") From c281d01974ff5881ba524f0ded07c302e39c6f11 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 8 Jul 2009 11:17:31 -0700 Subject: [PATCH 077/244] Updated cib for test project. Reviewed by me. --- TableCibTest/Resources/MainMenu.cib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TableCibTest/Resources/MainMenu.cib b/TableCibTest/Resources/MainMenu.cib index d3aac2d00..e873817a6 100644 --- a/TableCibTest/Resources/MainMenu.cib +++ b/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;E;E;S;16;IBCocoaFrameworkd;3;490D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;3;111E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;379E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;D;K;6;CP$UIDd;3;390E;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;D;K;6;CP$UIDd;3;452E;D;K;6;CP$UIDd;3;453E;D;K;6;CP$UIDd;3;454E;D;K;6;CP$UIDd;3;455E;D;K;6;CP$UIDd;3;456E;D;K;6;CP$UIDd;3;457E;D;K;6;CP$UIDd;3;458E;D;K;6;CP$UIDd;3;459E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;462E;D;K;6;CP$UIDd;3;463E;D;K;6;CP$UIDd;3;464E;D;K;6;CP$UIDd;3;465E;D;K;6;CP$UIDd;3;466E;D;K;6;CP$UIDd;3;467E;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;478E;D;K;6;CP$UIDd;3;479E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;481E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;483E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;485E;D;K;6;CP$UIDd;3;486E;D;K;6;CP$UIDd;3;487E;D;K;6;CP$UIDd;3;488E;D;K;6;CP$UIDd;3;489E;D;K;6;CP$UIDd;3;490E;D;K;6;CP$UIDd;3;491E;D;K;6;CP$UIDd;3;492E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;494E;D;K;6;CP$UIDd;3;495E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;497E;D;K;6;CP$UIDd;3;498E;D;K;6;CP$UIDd;3;499E;D;K;6;CP$UIDd;3;500E;D;K;6;CP$UIDd;3;501E;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;D;K;6;CP$UIDd;3;505E;D;K;6;CP$UIDd;3;506E;D;K;6;CP$UIDd;3;507E;D;K;6;CP$UIDd;3;508E;D;K;6;CP$UIDd;3;509E;D;K;6;CP$UIDd;3;510E;D;K;6;CP$UIDd;3;511E;D;K;6;CP$UIDd;3;512E;D;K;6;CP$UIDd;3;513E;D;K;6;CP$UIDd;3;514E;D;K;6;CP$UIDd;3;515E;D;K;6;CP$UIDd;3;516E;D;K;6;CP$UIDd;3;517E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;519E;D;K;6;CP$UIDd;3;520E;D;K;6;CP$UIDd;3;521E;D;K;6;CP$UIDd;3;522E;D;K;6;CP$UIDd;3;523E;D;K;6;CP$UIDd;3;524E;D;K;6;CP$UIDd;3;525E;D;K;6;CP$UIDd;3;526E;D;K;6;CP$UIDd;3;527E;D;K;6;CP$UIDd;3;528E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;530E;D;K;6;CP$UIDd;3;531E;D;K;6;CP$UIDd;3;532E;D;K;6;CP$UIDd;3;533E;D;K;6;CP$UIDd;3;534E;D;K;6;CP$UIDd;3;535E;D;K;6;CP$UIDd;3;536E;D;K;6;CP$UIDd;3;537E;D;K;6;CP$UIDd;3;538E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;540E;D;K;6;CP$UIDd;3;541E;D;K;6;CP$UIDd;3;542E;D;K;6;CP$UIDd;3;543E;D;K;6;CP$UIDd;3;544E;D;K;6;CP$UIDd;3;545E;D;K;6;CP$UIDd;3;546E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;548E;D;K;6;CP$UIDd;3;549E;D;K;6;CP$UIDd;3;550E;D;K;6;CP$UIDd;3;551E;D;K;6;CP$UIDd;3;552E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;554E;D;K;6;CP$UIDd;3;555E;D;K;6;CP$UIDd;3;556E;D;K;6;CP$UIDd;3;557E;D;K;6;CP$UIDd;3;558E;D;K;6;CP$UIDd;3;559E;D;K;6;CP$UIDd;3;560E;D;K;6;CP$UIDd;3;561E;D;K;6;CP$UIDd;3;562E;D;K;6;CP$UIDd;3;563E;D;K;6;CP$UIDd;3;564E;D;K;6;CP$UIDd;3;565E;D;K;6;CP$UIDd;3;566E;D;K;6;CP$UIDd;3;567E;D;K;6;CP$UIDd;3;568E;D;K;6;CP$UIDd;3;569E;D;K;6;CP$UIDd;3;570E;D;K;6;CP$UIDd;3;571E;D;K;6;CP$UIDd;3;572E;D;K;6;CP$UIDd;3;573E;D;K;6;CP$UIDd;3;574E;D;K;6;CP$UIDd;3;575E;D;K;6;CP$UIDd;3;576E;D;K;6;CP$UIDd;3;577E;D;K;6;CP$UIDd;3;578E;D;K;6;CP$UIDd;3;579E;D;K;6;CP$UIDd;3;580E;D;K;6;CP$UIDd;3;581E;D;K;6;CP$UIDd;3;582E;D;K;6;CP$UIDd;3;583E;D;K;6;CP$UIDd;3;584E;D;K;6;CP$UIDd;3;585E;D;K;6;CP$UIDd;3;586E;D;K;6;CP$UIDd;3;587E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;589E;D;K;6;CP$UIDd;3;590E;D;K;6;CP$UIDd;3;591E;D;K;6;CP$UIDd;3;592E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;595E;D;K;6;CP$UIDd;3;596E;D;K;6;CP$UIDd;3;597E;D;K;6;CP$UIDd;3;598E;D;K;6;CP$UIDd;3;599E;D;K;6;CP$UIDd;3;600E;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;602E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;603E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;35E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;605E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;606E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;607E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;608E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;609E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;612E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;46E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;165E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;613E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;613E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;613E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;613E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;614E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;614E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;616E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;617E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;38E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;620E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;621E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;621E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;622E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;612E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;624E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;624E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;612E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;625E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;626E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;627E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;615E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;614E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;628E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;629E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;56E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;630E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;72E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;603E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;631E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;632E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;634E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;619E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;636E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;637E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;216E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;639E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;640E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;641E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;642E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;643E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;644E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;645E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;646E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;625E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;645E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;647E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;648E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;133E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;649E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;650E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;197E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;151E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;654E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;171E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;655E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;629E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;656E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;657E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;311E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;658E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;659E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;660E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;661E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;662E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;663E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;664E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;665E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;666E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;667E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;668E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;186E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;669E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;670E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;671E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;630E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;672E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;673E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;674E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;675E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;676E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;677E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;678E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;209E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;679E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;680E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;632E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;36E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;681E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;682E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;683E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;649E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;685E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;223E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;686E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;687E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;688E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;689E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;690E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;691E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;30E;K;41;_CPCibWindowTemplateWindowIsFullBridgeKeyD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;692E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;694E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;695E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;636E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;39E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;696E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;697E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;691E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;698E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;699E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;700E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;701E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;702E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;703E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;135E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;704E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;705E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;140E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;706E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;707E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;708E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;709E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;710E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;711E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;712E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;661E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;62E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;714E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;150E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;706E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;715E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;716E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;717E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;718E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;696E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;99E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;717E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;719E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;717E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;720E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;721E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;648E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;722E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;723E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;703E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;724E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;725E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;617E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;26E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;726E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;705E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;727E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;728E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;729E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;730E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;287E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;731E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;710E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;711E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;732E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;733E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;734E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;714E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;735E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;652E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;736E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;691E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;604E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;721E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;737E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;738E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;739E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;282E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;651E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;740E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;741E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;742E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;744E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;745E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;614E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;615E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;746E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;747E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;645E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;646E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;625E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;645E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;748E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;749E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;E;S;20;Menu Item (Services)S;3;121S;33;Bordered Scroll View (Table View)S;20;Menu Item (Show All)S;1;2S;16;Menu Item (File)S;22;Menu Item (Select All)S;12;Content ViewS;10;Table ViewS;30;Text Field Cell (Text Cell)-10S;18;Menu Item (Format)S;23;Menu Item (Open Recent)S;15;Menu (Services)S;20;Menu (Substitutions)S;17;Menu Item (Find…)S;11;Menu (File)S;21;Menu (NewApplication)S;17;Table Column (10)S;16;Menu Item (Bold)S;1;9S;3;1-1S;29;Text Field Cell (Text Cell)-7S;29;Text Field Cell (Text Cell)-9S;27;Text Field Cell (Text Cell)S;17;Vertical ScrollerS;16;Menu Item (Text)S;20;Menu Item (Baseline)S;15;Menu Item (Cut)S;16;Table Column (5)S;32;Menu Item (Spelling and Grammar)S;1;5S;23;Menu Item (Paste Style)S;16;Table Column (2)S;26;Menu Item (Check Spelling)S;13;Menu (Format)S;23;Menu Item (Hide Others)S;16;Table Column (8)S;32;Menu Item (About NewApplication)S;22;Menu Item (Show Ruler)S;23;Menu Item (Paste Ruler)S;15;Menu (Ligature)S;17;Menu Item (Lower)S;1;6S;26;Menu Item (Show Spelling…)S;29;Text Field Cell (Text Cell)-2S;8;MainMenuS;31;Menu Item (NewApplication Help)S;16;Table Column (9)S;22;Menu Item (Clear Menu)S;2;10S;17;Menu Item (Paste)S;18;Menu (Open Recent)S;26;Menu Item (Start Speaking)S;21;Menu Item (Subscript)S;16;Menu Item (Zoom)S;16;Menu Item (Undo)S;1;3S;16;Table Column (4)S;16;Table Column (6)S;19;Menu Item (Justify)S;22;Menu Item (Align Left)S;25;Menu Item (Substitutions)S;23;Menu Item (Align Right)S;39;Menu Item (Check Spelling While Typing)S;34;Menu Item (Use Selection for Find)S;9;SeparatorS;12;File's OwnerS;29;Text Field Cell (Text Cell)-1S;15;Menu (Baseline)S;16;Table Column (3)S;22;Menu Item (Copy Style)S;15;Window (Window)S;18;Menu Item (Center)S;20;Menu Item (Use None)S;22;Menu Item (Use None)-1S;11;Separator-8S;18;Menu Item (Bigger)S;21;Menu Item (Underline)S;26;Menu Item (NewApplication)S;11;Menu (Kern)S;3;2-1S;13;Menu (Window)S;23;Menu Item (Smart Links)S;21;Menu Item (Find Next)S;11;Separator-4S;28;Menu Item (Smart Copy/Paste)S;17;Menu Item (Open…)S;11;ApplicationS;16;Menu Item (Font)S;4;1111S;18;Menu Item (Speech)S;11;Menu (Find)S;16;Table Column (0)S;23;Menu Item (Superscript)S;11;Separator-1S;20;Menu Item (Ligature)S;14;App ControllerS;16;Menu Item (View)S;29;Text Field Cell (Text Cell)-4S;16;Menu Item (Find)S;29;Text Field Cell (Text Cell)-6S;20;Menu Item (Minimize)S;17;Menu Item (Raise)S;11;Separator-6S;25;Menu Item (Use Default)-2S;25;Menu Item (Find Previous)S;16;Menu Item (Kern)S;25;Menu Item (Use Default)-1S;30;Menu Item (Bring All to Front)S;11;Separator-5S;23;Menu Item (Use Default)S;18;Menu Item (Delete)S;11;Separator-2S;16;Menu Item (Edit)S;29;Text Field Cell (Text Cell)-5S;1;7S;11;Menu (Text)S;16;Menu Item (Copy)S;11;Menu (Font)S;25;Menu Item (Stop Speaking)S;1;1S;22;Menu Item (Copy Ruler)S;11;Separator-7S;13;Menu (Speech)S;24;Menu Item (Show Toolbar)S;11;Separator-9S;16;Menu Item (Redo)S;12;Separator-10S;23;Menu Item (Show Colors)S;16;Table Column (1)S;30;Menu Item (Customize Toolbar…)S;39;Menu Item (Check Grammar With Spelling)S;19;Menu Item (Use All)S;11;Menu (View)S;27;Menu (Spelling and Grammar)S;12;Separator-11S;18;Menu Item (Window)S;11;Menu (Edit)S;24;Menu Item (Smart Quotes)S;18;Menu Item (Italic)S;16;Table Column (7)S;29;Text Field Cell (Text Cell)-8S;29;Text Field Cell (Text Cell)-3S;18;Menu Item (Loosen)S;1;8S;22;Menu Item (Show Fonts)S;19;Menu Item (Smaller)S;19;Menu Item (Tighten)S;31;Menu Item (Hide NewApplication)S;11;Separator-3S;19;Horizontal ScrollerS;29;Menu Item (Jump to Selection)D;K;10;$classnameS;22;_CPCibControlConnectorK;8;$classesA;S;22;_CPCibControlConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;750E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;751E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;752E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;755E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;756E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;757E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;758E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;759E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;74E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;760E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;761E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;762E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;763E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;764E;E;D;K;10;$classnameS;21;_CPCibOutletConnectorK;8;$classesA;S;21;_CPCibOutletConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;116E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;765E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;141E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;767E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;769E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;53E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;770E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;771E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;773E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;774E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;777E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;778E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;780E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;781E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;783E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;784E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;785E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;24E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;786E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;787E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;788E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;91E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;790E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;791E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;107E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;792E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;793E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;794E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;795E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;75E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;796E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;797E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;798E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;116E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;28E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;55E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;812E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;813E;E;d;3;129d;3;460d;3;347d;3;150d;3;230d;3;445d;2;83d;3;372d;3;449d;3;434d;3;480d;3;241d;3;209d;3;349d;2;81d;3;427d;3;485d;3;245d;2;82d;2;73d;3;472d;3;488d;3;448d;3;378d;3;404d;3;469d;3;451d;3;367d;3;376d;3;360d;3;410d;2;58d;2;78d;3;111d;3;224d;3;126d;3;408d;3;203d;3;196d;3;125d;3;239d;3;382d;2;75d;3;477d;3;437d;3;219d;3;348d;3;383d;3;144d;3;489d;3;476d;3;371d;3;393d;3;415d;3;392d;2;74d;2;24d;3;354d;3;206d;2;72d;2;-3d;3;220d;3;407d;3;370d;3;409d;3;295d;3;478d;3;450d;3;355d;2;23d;3;416d;3;227d;3;213d;3;412d;2;86d;3;236d;3;217d;3;438d;3;362d;3;379d;3;197d;3;368d;3;240d;3;373d;3;103d;3;396d;3;386d;3;212d;3;346d;3;401d;3;222d;3;226d;3;374d;3;466d;3;298d;3;127d;3;414d;3;200d;3;296d;3;402d;3;205d;3;459d;3;351d;3;391d;3;479d;3;433d;3;366d;3;482d;2;80d;3;389d;3;418d;3;149d;3;462d;3;428d;3;131d;3;106d;2;37d;3;231d;3;442d;3;198d;3;463d;3;375d;3;124d;3;130d;3;363d;2;57d;3;429d;3;390d;3;440d;3;467d;3;486d;3;223d;3;461d;3;399d;3;439d;3;199d;3;475d;3;216d;2;77d;3;201d;3;436d;3;441d;3;443d;3;145d;3;411d;3;385d;3;387d;3;481d;3;446d;3;204d;3;470d;2;29d;3;444d;3;483d;3;356d;3;112d;3;207d;3;473d;3;417d;3;380d;3;432d;3;221d;3;405d;3;435d;3;413d;3;471d;3;403d;3;381d;3;394d;2;56d;3;208d;3;235d;3;142d;3;350d;3;377d;3;136d;3;465d;3;211d;3;143d;3;398d;2;87d;3;484d;3;431d;3;218d;3;364d;2;92d;3;397d;3;430d;1;5d;3;193d;3;214d;3;228d;2;39d;3;406d;3;202d;3;474d;3;447d;3;426d;3;195d;2;79d;3;388d;3;365d;3;384d;3;297d;3;400d;3;215d;3;233d;2;19d;3;468d;3;225d;3;419d;3;395d;3;134d;3;357d;3;210d;3;232S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;E;E;S;8;ServicesS;14;submenuAction:S;12;Preferences…S;22;{{-1, -1}, {493, 365}}S;20;{{0, 0}, {493, 365}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;612E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;165E;E;E;d;2;18S;6;normalD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;611E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;814E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;815E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;816E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;623E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;818E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;32E;E;d;2;10T;F;S;8;Show AllS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;E;E;S;4;FileS;10;Select AllS;20;{{0, 0}, {491, 363}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;d;1;8S;20;{{0, 0}, {691, 348}}d;1;4d;2;17S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;41E;E;E;S;6;FormatS;11;Open RecentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;102E;E;E;S;5;Find…D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;64E;E;E;S;14;NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;109E;E;E;d;22;3.4028230607370965e+38S;4;BoldS;3;NewS;5;CloseS;22;{{477, 347}, {15, 17}}S;18;{{0, 0}, {15, 17}}S;17;disabled+verticald;1;0S;29;_horizontalScrollerDidScroll:f;18;0.9971429109573364S;4;TextS;8;BaselineS;3;Cutd;2;64S;20;Spelling and GrammarS;13;Page Setup...S;11;Paste StyleS;14;Check SpellingD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;47E;E;E;S;11;Hide OthersS;20;About NewApplicationS;10;Show RulerS;11;Paste RulerS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;149E;E;E;S;5;LowerS;6;Print…S;14;Show Spelling…S;9;AMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;137E;E;E;S;19;NewApplication HelpS;10;Clear MenuS;15;Revert to SavedS;5;PasteD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;69E;E;E;S;14;Start SpeakingS;9;SubscriptS;4;ZoomS;4;UndoS;4;SaveS;1;4S;7;JustifyS;10;Align LeftS;11;Align RightS;27;Check Spelling While TypingS;22;Use Selection for FindS;0;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;2;63E;E;E;S;10;Copy StyleS;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;24;{{335, 128}, {491, 363}}d;1;7S;6;WindowS;6;CenterS;8;Use NoneS;6;BiggerS;9;UnderlineS;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;158E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;126E;E;E;S;11;Smart LinksS;9;Find NextS;16;Smart Copy/PasteS;5;Open…S;4;FontS;19;Quit NewApplicationS;6;SpeechS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;3;166E;E;E;S;1;0d;2;69d;2;40d;4;1000S;11;SuperscriptS;13;AppControllerS;4;ViewS;8;MinimizeS;5;RaiseS;11;Use DefaultS;13;Find PreviousS;18;Bring All to FrontS;6;DeleteS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;61E;E;E;S;4;CopyD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;53E;E;E;S;13;Stop SpeakingS;10;Copy RulerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;3;136E;E;E;S;12;Show ToolbarS;4;RedoS;11;Show Colorsd;2;67S;18;Customize Toolbar…S;27;Check Grammar With SpellingS;7;Use AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;147E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;148E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;110E;E;E;S;12;Smart QuotesS;6;ItalicS;6;LoosenS;8;Save As…S;10;Show FontsS;7;SmallerS;7;TightenS;19;Hide NewApplicationS;20;{{1, -1}, {476, 17}}S;19;{{0, 0}, {476, 17}}f;18;0.6888567209243774S;17;Jump to SelectionS;14;loosenKerning:S;12;superscript:S;14;lowerBaseline:S;13;saveDocument:S;29;centerSelectionInVisibleArea:S;19;useStandardKerning:S;24;toggleSmartInsertDelete:S;19;performMiniaturize:S;11;pasteRuler:S;13;performClose:S;10;subscript:S;14;raiseBaseline:S;15;showGuessPanel:S;29;toggleAutomaticLinkDetection:S;12;toggleRuler:S;8;delegateS;19;toggleToolbarShown:S;5;hide:S;6;print:S;30;toggleContinuousSpellChecking:S;10;pasteFont:S;23;performFindPanelAction:S;9;unscript:S;21;orderFrontColorPanel:S;10;copyRuler:S;6;paste:S;22;hideOtherApplications:S;7;delete:S;29;orderFrontStandardAboutPanel:S;31;runToolbarCustomizationPalette:S;14;startSpeaking:S;33;toggleAutomaticQuoteSubstitution:S;13;openDocument:S;10;underline:S;9;showHelp:S;15;turnOffKerning:S;22;unhideAllApplications:S;14;runPageLayout:S;5;redo:S;11;alignRight:S;9;theWindowS;22;toggleGrammarChecking:S;10;terminate:S;16;useAllLigatures:S;10;alignLeft:S;21;clearRecentDocuments:S;12;performZoom:S;15;saveDocumentAs:S;15;arrangeInFront:S;22;revertDocumentToSaved:S;5;copy:S;10;dataSourceS;12;alignCenter:S;15;tightenKerning:S;12;newDocument:S;17;turnOffLigatures:S;15;alignJustified:S;21;useStandardLigatures:S;10;selectAll:S;13;stopSpeaking:S;9;copyFont:S;14;checkSpelling:S;5;undo:S;4;cut:S;21;{{1, 16}, {476, 348}}S;20;{{0, 0}, {476, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;817E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;819E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;820E;D;K;6;CP$UIDd;3;820E;D;K;6;CP$UIDd;3;820E;D;K;6;CP$UIDd;3;821E;E;E;f;10;0.66666669d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;E;E;S;16;IBCocoaFrameworkd;3;490D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;165E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;28E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;348E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;D;K;6;CP$UIDd;3;390E;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;D;K;6;CP$UIDd;3;452E;D;K;6;CP$UIDd;3;453E;D;K;6;CP$UIDd;3;454E;D;K;6;CP$UIDd;3;455E;D;K;6;CP$UIDd;3;456E;D;K;6;CP$UIDd;3;457E;D;K;6;CP$UIDd;3;458E;D;K;6;CP$UIDd;3;459E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;462E;D;K;6;CP$UIDd;3;463E;D;K;6;CP$UIDd;3;464E;D;K;6;CP$UIDd;3;465E;D;K;6;CP$UIDd;3;466E;D;K;6;CP$UIDd;3;467E;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;478E;D;K;6;CP$UIDd;3;479E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;481E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;483E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;485E;D;K;6;CP$UIDd;3;486E;D;K;6;CP$UIDd;3;487E;D;K;6;CP$UIDd;3;488E;D;K;6;CP$UIDd;3;489E;D;K;6;CP$UIDd;3;490E;D;K;6;CP$UIDd;3;491E;D;K;6;CP$UIDd;3;492E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;494E;D;K;6;CP$UIDd;3;495E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;497E;D;K;6;CP$UIDd;3;498E;D;K;6;CP$UIDd;3;499E;D;K;6;CP$UIDd;3;500E;D;K;6;CP$UIDd;3;501E;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;D;K;6;CP$UIDd;3;505E;D;K;6;CP$UIDd;3;506E;D;K;6;CP$UIDd;3;507E;D;K;6;CP$UIDd;3;508E;D;K;6;CP$UIDd;3;509E;D;K;6;CP$UIDd;3;510E;D;K;6;CP$UIDd;3;511E;D;K;6;CP$UIDd;3;512E;D;K;6;CP$UIDd;3;513E;D;K;6;CP$UIDd;3;514E;D;K;6;CP$UIDd;3;515E;D;K;6;CP$UIDd;3;516E;D;K;6;CP$UIDd;3;517E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;519E;D;K;6;CP$UIDd;3;520E;D;K;6;CP$UIDd;3;521E;D;K;6;CP$UIDd;3;522E;D;K;6;CP$UIDd;3;523E;D;K;6;CP$UIDd;3;524E;D;K;6;CP$UIDd;3;525E;D;K;6;CP$UIDd;3;526E;D;K;6;CP$UIDd;3;527E;D;K;6;CP$UIDd;3;528E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;530E;D;K;6;CP$UIDd;3;531E;D;K;6;CP$UIDd;3;532E;D;K;6;CP$UIDd;3;533E;D;K;6;CP$UIDd;3;534E;D;K;6;CP$UIDd;3;535E;D;K;6;CP$UIDd;3;536E;D;K;6;CP$UIDd;3;537E;D;K;6;CP$UIDd;3;538E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;540E;D;K;6;CP$UIDd;3;541E;D;K;6;CP$UIDd;3;542E;D;K;6;CP$UIDd;3;543E;D;K;6;CP$UIDd;3;544E;D;K;6;CP$UIDd;3;545E;D;K;6;CP$UIDd;3;546E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;548E;D;K;6;CP$UIDd;3;549E;D;K;6;CP$UIDd;3;550E;D;K;6;CP$UIDd;3;551E;D;K;6;CP$UIDd;3;552E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;554E;D;K;6;CP$UIDd;3;555E;D;K;6;CP$UIDd;3;556E;D;K;6;CP$UIDd;3;557E;D;K;6;CP$UIDd;3;558E;D;K;6;CP$UIDd;3;559E;D;K;6;CP$UIDd;3;560E;D;K;6;CP$UIDd;3;561E;D;K;6;CP$UIDd;3;562E;D;K;6;CP$UIDd;3;563E;D;K;6;CP$UIDd;3;564E;D;K;6;CP$UIDd;3;565E;D;K;6;CP$UIDd;3;566E;D;K;6;CP$UIDd;3;567E;D;K;6;CP$UIDd;3;568E;D;K;6;CP$UIDd;3;569E;D;K;6;CP$UIDd;3;570E;D;K;6;CP$UIDd;3;571E;D;K;6;CP$UIDd;3;572E;D;K;6;CP$UIDd;3;573E;D;K;6;CP$UIDd;3;574E;D;K;6;CP$UIDd;3;575E;D;K;6;CP$UIDd;3;576E;D;K;6;CP$UIDd;3;577E;D;K;6;CP$UIDd;3;578E;D;K;6;CP$UIDd;3;579E;D;K;6;CP$UIDd;3;580E;D;K;6;CP$UIDd;3;581E;D;K;6;CP$UIDd;3;582E;D;K;6;CP$UIDd;3;583E;D;K;6;CP$UIDd;3;584E;D;K;6;CP$UIDd;3;585E;D;K;6;CP$UIDd;3;586E;D;K;6;CP$UIDd;3;587E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;589E;D;K;6;CP$UIDd;3;590E;D;K;6;CP$UIDd;3;591E;D;K;6;CP$UIDd;3;592E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;595E;D;K;6;CP$UIDd;3;596E;D;K;6;CP$UIDd;3;597E;D;K;6;CP$UIDd;3;598E;D;K;6;CP$UIDd;3;599E;D;K;6;CP$UIDd;3;600E;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;602E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;603E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;604E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;605E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;606E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;607E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;608E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;609E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;610E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;611E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;612E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;615E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;165E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;121E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;616E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;616E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;616E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;616E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;617E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;617E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;620E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;621E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;622E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;623E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;624E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;625E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;151E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;627E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;628E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;615E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;629E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;629E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;615E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;632E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;633E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;618E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;617E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;634E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;635E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;635E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;637E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;639E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;640E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;90E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;641E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;299E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;198E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;644E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;645E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;647E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;648E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;649E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;650E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;651E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;141E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;177E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;654E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;655E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;656E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;657E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;658E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;656E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;62E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;659E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;661E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;645E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;662E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;663E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;665E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;666E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;667E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;668E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;669E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;670E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;671E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;672E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;248E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;673E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;674E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;675E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;133E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;676E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;677E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;678E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;679E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;123E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;680E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;681E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;682E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;683E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;685E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;686E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;687E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;688E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;689E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;40E;K;41;_CPCibWindowTemplateWindowIsFullBridgeKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;690E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;691E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;692E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;694E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;695E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;696E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;697E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;698E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;699E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;700E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;645E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;696E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;102E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;701E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;637E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;41E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;702E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;703E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;604E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;22E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;704E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;660E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;705E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;706E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;707E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;666E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;708E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;709E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;710E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;711E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;28E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;712E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;631E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;711E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;647E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;714E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;679E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;715E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;716E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;717E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;718E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;719E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;689E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;627E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;36E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;720E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;721E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;266E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;722E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;665E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;675E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;723E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;718E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;724E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;725E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;704E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;726E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;727E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;648E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;52E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;652E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;728E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;206E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;729E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;730E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;731E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;732E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;731E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;145E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;733E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;734E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;735E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;736E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;625E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;737E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;738E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;739E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;240E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;740E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;741E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;689E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;742E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;214E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;227E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;744E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;745E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;746E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;747E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;711E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;28E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;748E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;631E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;711E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;749E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;750E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;S;17;Menu Item (Open…)S;15;Menu (Ligature)S;29;Menu Item (Jump to Selection)S;11;ApplicationS;24;Menu Item (Show Toolbar)S;17;Menu Item (Raise)S;33;Bordered Scroll View (Table View)S;22;Menu Item (Show Fonts)S;22;Menu Item (Copy Style)S;28;Menu Item (Smart Copy/Paste)S;2;10S;20;Menu Item (Show All)S;21;Menu Item (Subscript)S;20;Menu Item (Services)S;13;Menu (Speech)S;10;Table ViewS;12;Content ViewS;21;Menu (NewApplication)S;30;Menu Item (Bring All to Front)S;16;Menu Item (Find)S;17;Menu Item (Paste)S;16;Table Column (6)S;16;Table Column (8)S;18;Menu Item (Bigger)S;25;Menu Item (Use Default)-2S;11;Separator-4S;29;Text Field Cell (Text Cell)-4S;16;Menu Item (Font)S;11;Menu (File)S;30;Menu Item (Customize Toolbar…)S;11;Separator-6S;1;8S;11;Separator-7S;16;Menu Item (Text)S;23;Menu Item (Smart Links)S;17;Table Column (10)S;26;Menu Item (Show Spelling…)S;16;Table Column (4)S;15;Menu (Baseline)S;1;5S;11;Separator-5S;20;Menu Item (Baseline)S;16;Menu Item (Copy)S;11;Menu (Edit)S;27;Text Field Cell (Text Cell)S;25;Menu Item (Use Default)-1S;16;Table Column (0)S;1;2S;20;Menu Item (Minimize)S;22;Menu Item (Align Left)S;22;Menu Item (Clear Menu)S;9;SeparatorS;11;Separator-8S;23;Menu Item (Paste Style)S;22;Menu Item (Show Ruler)S;11;Separator-1S;29;Text Field Cell (Text Cell)-8S;16;Table Column (9)S;23;Menu Item (Show Colors)S;12;File's OwnerS;1;3S;18;Menu Item (Format)S;18;Menu Item (Italic)S;23;Menu Item (Hide Others)S;29;Text Field Cell (Text Cell)-6S;16;Menu Item (Zoom)S;23;Menu Item (Open Recent)S;4;1111S;16;Menu Item (Redo)S;22;Menu Item (Select All)S;11;Menu (Find)S;20;Menu Item (Use None)S;15;Window (Window)S;1;7S;34;Menu Item (Use Selection for Find)S;21;Menu Item (Find Next)S;14;App ControllerS;12;Separator-11S;17;Menu Item (Find…)S;17;Menu Item (Lower)S;30;Text Field Cell (Text Cell)-10S;1;9S;20;Menu (Substitutions)S;25;Menu Item (Stop Speaking)S;26;Menu Item (Check Spelling)S;29;Text Field Cell (Text Cell)-5S;16;Menu Item (Bold)S;23;Menu Item (Use Default)S;25;Menu Item (Substitutions)S;19;Menu Item (Tighten)S;26;Menu Item (NewApplication)S;8;MainMenuS;20;Menu Item (Ligature)S;16;Menu Item (View)S;16;Menu Item (Edit)S;39;Menu Item (Check Grammar With Spelling)S;3;2-1S;39;Menu Item (Check Spelling While Typing)S;15;Menu Item (Cut)S;1;1S;31;Menu Item (Hide NewApplication)S;19;Horizontal ScrollerS;11;Menu (Font)S;18;Menu (Open Recent)S;11;Separator-9S;19;Menu Item (Use All)S;22;Menu Item (Copy Ruler)S;27;Menu (Spelling and Grammar)S;29;Text Field Cell (Text Cell)-1S;18;Menu Item (Window)S;29;Text Field Cell (Text Cell)-7S;18;Menu Item (Speech)S;23;Menu Item (Paste Ruler)S;24;Menu Item (Smart Quotes)S;16;Table Column (1)S;29;Text Field Cell (Text Cell)-2S;13;Menu (Format)S;32;Menu Item (Spelling and Grammar)S;31;Menu Item (NewApplication Help)S;29;Text Field Cell (Text Cell)-3S;19;Menu Item (Smaller)S;11;Menu (View)S;12;Separator-10S;23;Menu Item (Superscript)S;16;Menu Item (File)S;11;Menu (Text)S;16;Table Column (5)S;19;Menu Item (Justify)S;21;Menu Item (Underline)S;11;Menu (Kern)S;16;Menu Item (Kern)S;32;Menu Item (About NewApplication)S;1;6S;23;Menu Item (Align Right)S;18;Menu Item (Delete)S;15;Menu (Services)S;26;Menu Item (Start Speaking)S;3;121S;16;Table Column (7)S;25;Menu Item (Find Previous)S;11;Separator-2S;3;1-1S;13;Menu (Window)S;16;Table Column (2)S;16;Menu Item (Undo)S;16;Table Column (3)S;18;Menu Item (Loosen)S;29;Text Field Cell (Text Cell)-9S;11;Separator-3S;22;Menu Item (Use None)-1S;17;Vertical ScrollerS;18;Menu Item (Center)D;K;10;$classnameS;22;_CPCibControlConnectorK;8;$classesA;S;22;_CPCibControlConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;751E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;20E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;752E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;755E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;756E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;757E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;758E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;759E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;760E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;761E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;762E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;763E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;764E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;765E;E;D;K;10;$classnameS;21;_CPCibOutletConnectorK;8;$classesA;S;21;_CPCibOutletConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;97E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;767E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;23E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;769E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;770E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;88E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;771E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;773E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;774E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;777E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;778E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;780E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;781E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;783E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;784E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;785E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;786E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;787E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;788E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;53E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;790E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;791E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;792E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;793E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;794E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;795E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;796E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;797E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;87E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;798E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;26E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;93E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;25E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;97E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;55E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;812E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;58E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;813E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;814E;E;d;3;444d;3;363d;3;224d;3;193d;3;440d;3;210d;2;-3d;3;428d;3;297d;3;347d;3;389d;3;403d;3;460d;3;350d;3;367d;3;131d;3;212d;3;372d;2;57d;3;218d;3;203d;3;477d;3;214d;3;377d;2;81d;3;298d;2;92d;3;354d;3;204d;3;405d;3;206d;3;399d;3;197d;3;478d;3;443d;3;126d;3;402d;3;144d;3;401d;3;375d;3;239d;3;136d;3;215d;3;370d;3;429d;3;198d;3;413d;3;222d;3;371d;3;221d;3;448d;3;208d;3;384d;3;450d;3;426d;3;418d;3;348d;3;459d;2;29d;3;398d;3;346d;3;217d;2;74d;3;199d;3;240d;3;462d;3;414d;3;125d;3;357d;3;228d;3;386d;2;19d;3;476d;3;232d;3;351d;3;387d;3;466d;3;111d;3;216d;3;376d;3;431d;3;395d;3;400d;3;439d;3;373d;2;83d;3;415d;3;397d;2;58d;2;78d;3;441d;3;383d;3;366d;3;130d;3;202d;3;364d;3;129d;3;479d;2;73d;2;24d;3;430d;3;207d;3;471d;3;470d;3;149d;3;417d;2;72d;3;411d;3;451d;3;365d;3;442d;3;409d;3;360d;3;127d;3;112d;3;434d;3;150d;3;408d;3;463d;1;5d;3;416d;3;394d;3;481d;3;468d;3;374d;2;80d;3;396d;3;378d;3;445d;3;485d;3;473d;2;77d;3;205d;3;412d;3;465d;3;488d;2;23d;3;106d;3;380d;3;236d;3;404d;3;385d;3;480d;3;483d;3;225d;3;489d;2;75d;3;356d;3;391d;3;145d;3;467d;3;245d;3;124d;2;39d;3;220d;2;79d;3;209d;3;410d;3;472d;2;82d;3;349d;3;195d;3;201d;3;406d;3;390d;3;484d;2;56d;3;295d;3;231d;3;226d;3;219d;3;432d;3;103d;3;134d;3;388d;3;393d;2;87d;3;200d;3;482d;3;211d;3;486d;3;435d;3;223d;3;474d;3;142d;3;296d;3;407d;3;368d;3;379d;3;362d;3;438d;3;475d;3;233d;3;382d;3;392d;3;433d;3;446d;3;447d;3;196d;3;227d;3;213d;3;143d;3;469d;3;449d;3;235d;3;230d;3;437d;2;37d;2;86d;3;427d;3;419d;3;355d;3;436d;3;381d;3;461d;3;241S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;93E;E;E;S;5;Open…S;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;125E;E;E;S;17;Jump to SelectionS;12;Show ToolbarS;5;RaiseS;22;{{-1, -1}, {493, 365}}S;20;{{0, 0}, {493, 365}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;121E;E;E;d;2;18S;6;normalD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;614E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;815E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;816E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;817E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;819E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;38E;E;d;2;10T;F;S;10;Show FontsS;10;Copy StyleS;16;Smart Copy/PasteS;15;Revert to SavedS;8;Show AllS;9;SubscriptS;8;ServicesS;14;submenuAction:S;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;103E;E;E;S;20;{{0, 0}, {691, 348}}d;1;8d;1;4d;2;17S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;59E;E;E;S;20;{{0, 0}, {491, 363}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;14;NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;87E;E;E;S;18;Bring All to FrontS;4;FindS;5;Pasted;2;64d;22;3.4028230607370965e+38S;6;BiggerS;11;Use DefaultS;0;S;4;FontS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;3;148E;E;E;S;18;Customize Toolbar…S;8;Save As…S;4;TextS;11;Smart LinksS;14;Show Spelling…S;1;4S;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;100E;E;E;S;13;Page Setup...S;4;CopyS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;129E;E;E;S;1;0d;2;69d;2;40d;4;1000S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;E;E;S;8;MinimizeS;10;Align LeftS;10;Clear MenuS;11;Paste StyleS;10;Show RulerS;11;Show ColorsS;4;SaveS;6;FormatS;6;ItalicS;11;Hide OthersS;4;ZoomS;11;Open RecentS;19;Quit NewApplicationS;4;RedoS;10;Select AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;23E;E;E;S;8;Use NoneS;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;24;{{335, 128}, {491, 363}}d;1;7S;6;WindowS;22;Use Selection for FindS;9;Find NextS;13;AppControllerS;5;Find…S;5;LowerS;3;NewS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;58E;E;E;S;13;Stop SpeakingS;14;Check SpellingS;4;BoldS;7;TightenS;9;AMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;118E;E;E;S;4;ViewS;27;Check Grammar With SpellingS;27;Check Spelling While TypingS;3;CutS;19;Hide NewApplicationS;20;{{1, -1}, {476, 17}}S;19;{{0, 0}, {476, 17}}d;1;0S;29;_horizontalScrollerDidScroll:f;18;0.6888567209243774D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;76E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;73E;E;E;S;7;Use AllS;10;Copy RulerS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;114E;E;E;S;11;Paste RulerS;12;Smart Quotesd;2;67D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;57E;E;E;S;19;NewApplication HelpS;7;SmallerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;53E;E;E;S;11;SuperscriptD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;130E;E;E;S;7;JustifyS;9;UnderlineS;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;162E;E;E;S;20;About NewApplicationS;6;Print…S;11;Align RightS;6;DeleteD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;14;Start SpeakingS;12;Preferences…S;13;Find PreviousS;5;CloseD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;42E;E;E;S;4;UndoS;6;LoosenS;22;{{477, 16}, {17, 348}}S;19;{{0, 0}, {17, 348}}S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9971429109573364S;6;CenterS;10;alignLeft:S;13;openDocument:S;10;selectAll:S;22;unhideAllApplications:S;33;toggleAutomaticQuoteSubstitution:S;15;showGuessPanel:S;5;undo:S;14;checkSpelling:S;12;newDocument:S;14;lowerBaseline:S;21;clearRecentDocuments:S;22;hideOtherApplications:S;22;toggleGrammarChecking:S;13;stopSpeaking:S;13;saveDocument:S;10;dataSourceS;12;superscript:S;29;centerSelectionInVisibleArea:S;22;revertDocumentToSaved:S;15;turnOffKerning:S;5;redo:S;6;paste:S;11;alignRight:S;12;alignCenter:S;29;orderFrontStandardAboutPanel:S;30;toggleContinuousSpellChecking:S;15;alignJustified:S;23;performFindPanelAction:S;11;pasteRuler:S;10;underline:S;9;unscript:S;9;showHelp:S;21;orderFrontColorPanel:S;6;print:S;10;pasteFont:S;5;copy:S;14;startSpeaking:S;12;toggleRuler:S;31;runToolbarCustomizationPalette:S;12;performZoom:S;14;runPageLayout:S;14;loosenKerning:S;24;toggleSmartInsertDelete:S;9;copyFont:S;5;hide:S;21;useStandardLigatures:S;15;tightenKerning:S;10;terminate:S;15;arrangeInFront:S;16;useAllLigatures:S;14;raiseBaseline:S;13;performClose:S;9;theWindowS;10;subscript:S;19;useStandardKerning:S;17;turnOffLigatures:S;19;toggleToolbarShown:S;4;cut:S;8;delegateS;10;copyRuler:S;15;saveDocumentAs:S;19;performMiniaturize:S;29;toggleAutomaticLinkDetection:S;7;delete:S;21;{{1, 16}, {476, 348}}S;20;{{0, 0}, {476, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;818E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;820E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;822E;E;E;f;10;0.66666669d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file From a5a43de26ecda590234341db18f8bb29937eb7fb Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 8 Jul 2009 11:52:47 -0700 Subject: [PATCH 078/244] Fix for objectAtIndex: throwing out of range exceptions. Closes #105. Reviewed by me. --- Foundation/CPArray.j | 4 ++++ Tests/Foundation/CPArrayTest.j | 40 ++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/Foundation/CPArray.j b/Foundation/CPArray.j index 29139a5f5..efe2e8196 100755 --- a/Foundation/CPArray.j +++ b/Foundation/CPArray.j @@ -26,6 +26,7 @@ @import "CPSortDescriptor.j" @import "CPException.j" + /* @ignore */ @implementation _CPArrayEnumerator : CPEnumerator { @@ -520,6 +521,9 @@ */ - (id)objectAtIndex:(int)anIndex { + if (anIndex >= length) + [CPException raise:CPRangeException reason:@"index (" + anIndex + @") beyond bounds (" + length + @")"]; + return self[anIndex]; } diff --git a/Tests/Foundation/CPArrayTest.j b/Tests/Foundation/CPArrayTest.j index eba367e5c..04ea56486 100644 --- a/Tests/Foundation/CPArrayTest.j +++ b/Tests/Foundation/CPArrayTest.j @@ -115,6 +115,46 @@ equals:2]; } +- (void)testIndexOutOfBounds +{ + try + { + [[] objectAtIndex:0]; + [self assert:false]; + } + catch (anException) + { + [self assert:[anException name] equals:CPRangeException]; + [self assert:[anException reason] equals:@"index (0) beyond bounds (0)"]; + } + + [[0, 1, 2] objectAtIndex:0]; + [[0, 1, 2] objectAtIndex:1]; + [[0, 1, 2] objectAtIndex:2]; + + try + { + [[0, 1, 2] objectAtIndex:3]; + [self assert:false]; + } + catch (anException) + { + [self assert:[anException name] equals:CPRangeException]; + [self assert:[anException reason] equals:@"index (3) beyond bounds (3)"]; + } + + try + { + [[0, 1, 2] objectAtIndex:4]; + [self assert:false]; + } + catch (anException) + { + [self assert:[anException name] equals:CPRangeException]; + [self assert:[anException reason] equals:@"index (4) beyond bounds (3)"]; + } +} + @end @implementation CPArray (reverse) From 3761fb8037387a0b0618ad9895810ffd915587a3 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Thu, 9 Jul 2009 10:55:38 -0700 Subject: [PATCH 079/244] Removed some commented code. Reviewed by me. --- Tools/nib2cib/NSIBObjectData.j | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/Tools/nib2cib/NSIBObjectData.j b/Tools/nib2cib/NSIBObjectData.j index 9031edd02..a30a7ba8c 100644 --- a/Tools/nib2cib/NSIBObjectData.j +++ b/Tools/nib2cib/NSIBObjectData.j @@ -20,20 +20,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -/*#import "NSIBObjectData.h" -#import -#import -#import -#import -#import -#import "NSNibKeyedUnarchiver.h" -#import "NSCustomObject.h" -#import -#import -#import */ - -@import - @import From afba1909bb4dac215ebf53ad0b61d0cf40c95ab1 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 11 Jul 2009 18:12:20 -0700 Subject: [PATCH 080/244] Improved TableView nib support as well as including several nib2cib improvements. Reviewed by me. --- Foundation/CPKeyedUnarchiver.j | 2 +- Tools/nib2cib/Converter+Mac.j | 85 ++++++++++++ Tools/nib2cib/Converter.j | 160 +++++++++++++++++++++++ Tools/nib2cib/NSClipView.j | 5 + Tools/nib2cib/NSCustomResource.j | 8 +- Tools/nib2cib/NSView.j | 38 +----- Tools/nib2cib/Nib2CibKeyedUnarchiver.j | 70 ++++++---- Tools/nib2cib/main.j | 172 ++++++------------------- 8 files changed, 346 insertions(+), 194 deletions(-) create mode 100644 Tools/nib2cib/Converter+Mac.j create mode 100644 Tools/nib2cib/Converter.j diff --git a/Foundation/CPKeyedUnarchiver.j b/Foundation/CPKeyedUnarchiver.j index 6f5d45258..37b5c20e9 100644 --- a/Foundation/CPKeyedUnarchiver.j +++ b/Foundation/CPKeyedUnarchiver.j @@ -108,7 +108,7 @@ var _CPKeyedUnarchiverArrayClass = Ni CPDictionary _replacementClasses; - CPDictionary _objects; + CPArray _objects; CPDictionary _archive; CPDictionary _plistObject; diff --git a/Tools/nib2cib/Converter+Mac.j b/Tools/nib2cib/Converter+Mac.j new file mode 100644 index 000000000..982f10801 --- /dev/null +++ b/Tools/nib2cib/Converter+Mac.j @@ -0,0 +1,85 @@ +/* + * Converter+Mac.j + * nib2cib + * + * 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 "Converter.j" + + +@implementation Converter (Mac) + +- (void)convertedDataFromMacData:(CPData)data resourcesPath:(CPString)aResourcesPath +{ + // Unarchive the NS data + var unarchiver = [[Nib2CibKeyedUnarchiver alloc] initForReadingWithData:data resourcesPath:aResourcesPath], + objectData = [unarchiver decodeObjectForKey:@"IB.objectdata"]; + + // Perform a bit of post-processing on views since all CP views are flipped. + // It's better to do this here (instead of say, in NSView::initWithCoder:), + // because at this point all the objects an mappings are stabilized. + var objects = [unarchiver allObjects], + count = [objects count]; + + while (count--) + { + var object = objects[count]; + + if (![object isKindOfClass:[CPView class]]) + continue; + + var superview = [object superview]; + + if (!superview || [superview NS_isFlipped]) + continue; + + var superviewHeight = CGRectGetHeight([superview bounds]), + frame = [object frame]; + + [object setFrameOrigin:CGPointMake(CGRectGetMinX(frame), superviewHeight - CGRectGetMaxY(frame))]; + + var NS_autoresizingMask = [object autoresizingMask]; + + autoresizingMask = NS_autoresizingMask & ~(CPViewMaxYMargin | CPViewMinYMargin); + + if (!(NS_autoresizingMask & (CPViewMaxYMargin | CPViewMinYMargin | CPViewHeightSizable))) + autoresizingMask |= CPViewMinYMargin; + else + { + if (NS_autoresizingMask & CPViewMaxYMargin) + autoresizingMask |= CPViewMinYMargin; + if (NS_autoresizingMask & CPViewMinYMargin) + autoresizingMask |= CPViewMaxYMargin; + } + + [object setAutoresizingMask:autoresizingMask]; + } + + // Re-archive the CP data. + var convertedData = [CPData data], + archiver = [[CPKeyedArchiver alloc] initForWritingWithMutableData:convertedData]; + + [archiver encodeObject:objectData forKey:@"CPCibObjectDataKey"]; + [archiver finishEncoding]; + + return convertedData; +} + +@end diff --git a/Tools/nib2cib/Converter.j b/Tools/nib2cib/Converter.j new file mode 100644 index 000000000..e4f261571 --- /dev/null +++ b/Tools/nib2cib/Converter.j @@ -0,0 +1,160 @@ +/* + * Converter.j + * nib2cib + * + * 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 +@import + +var File = require("file"), + popen = require("os").popen; + + +NibFormatUndetermined = 0, +NibFormatMac = 1, +NibFormatIPhone = 2; + +ConverterConversionException = @"ConverterConversionException"; + +@implementation Converter : CPObject +{ + NibFormat format @accessors; + CPString inputPath @accessors; + CPString outputPath @accessors; + CPString resourcesPath @accessors; +} + +- (id)init +{ + self = [super init]; + + if (self) + [self setFormat:NibFormatUndetermined]; + + return self; +} + +- (void)convert +{ + try + { + if ([resourcesPath length] && !File.isReadable(resourcesPath)) + [CPException raise:ConverterConversionException reason:@"Could not read Resources at path \"" + resourcesPath + "\""]; + + var stringContents = File.read(inputPath, { charset:"UTF-8" }), + inferredFormat = format; + + if (inferredFormat === NibFormatUndetermined) + { + // Assume its a Mac file. + inferredFormat = NibFormatMac; + + // Some .xibs are iPhone nibs, check the actual contents in this case. + if (File.extname(inputPath) !== ".nib" && + stringContents.indexOf("\s*CF\$UID\s*\<\/key\>/g, "CP$UID"); + plistContents = String(java.lang.String(plistContents).replaceAll("\\\\s*CF\\$UID\\s*\\<\/key\\>", "CP\\$UID")); + + return [CPData dataWithString:plistContents]; +} + +@end + +File.createTempFile = function(aName, anExtension, shouldDeleteOnExit) +{ + var tempFile = Packages.java.io.File.createTempFile(aName, anExtension), + tempFilePath = String(tempFile.getAbsolutePath()); + + if (shouldDeleteOnExit) + tempFile.deleteOnExit(); + + return String(tempFilePath); +} + +function cibExtension(aPath) +{ + var start = aPath.length - 1; + + while (aPath.charAt(start) === '/') + start--; + + aPath = aPath.substr(0, start + 1); + + var dotIndex = aPath.lastIndexOf('.'); + + if (dotIndex == -1) + return aPath + ".cib"; + + var slashIndex = aPath.lastIndexOf('/'); + + if (slashIndex > dotIndex) + return aPath + ".cib"; + + return aPath.substr(0, dotIndex) + ".cib"; +} + +@import "Converter+Mac.j" diff --git a/Tools/nib2cib/NSClipView.j b/Tools/nib2cib/NSClipView.j index 7ed55cfa5..7c0d9621c 100644 --- a/Tools/nib2cib/NSClipView.j +++ b/Tools/nib2cib/NSClipView.j @@ -40,6 +40,11 @@ return self; } +- (BOOL)NS_isFlipped +{ + return YES; +} + @end @implementation NSClipView : CPClipView diff --git a/Tools/nib2cib/NSCustomResource.j b/Tools/nib2cib/NSCustomResource.j index ccad4210e..e700fbe9c 100644 --- a/Tools/nib2cib/NSCustomResource.j +++ b/Tools/nib2cib/NSCustomResource.j @@ -49,13 +49,13 @@ importClass(javax.imageio.ImageIO); } else { - var resourceFile = [aCoder resourceFileForName:_resourceName]; - - if (!resourceFile) + var resourcePath = [aCoder resourcePathForName:_resourceName]; + + if (!resourcePath) CPLog.warn("***WARNING: Resource named " + _resourceName + " not found in supplied resources path."); else { - var imageStream = ImageIO.createImageInputStream(resourceFile), + var imageStream = ImageIO.createImageInputStream(new Packages.java.io.File(resourcePath).getCanonicalFile()), readers = ImageIO.getImageReaders(imageStream), reader = null; diff --git a/Tools/nib2cib/NSView.j b/Tools/nib2cib/NSView.j index 0025bb7ef..8e0c8c219 100644 --- a/Tools/nib2cib/NSView.j +++ b/Tools/nib2cib/NSView.j @@ -56,42 +56,13 @@ _subviews = []; var vFlags = [aCoder decodeIntForKey:@"NSvFlags"]; - - var autoresizingMaskNS = vFlags & 0x3F; - - // swap Y coordinate flags: - _autoresizingMask = autoresizingMaskNS & ~(CPViewMaxYMargin | CPViewMinYMargin) - if (!(autoresizingMaskNS & (CPViewMaxYMargin | CPViewMinYMargin | CPViewHeightSizable))) - { - _autoresizingMask |= CPViewMinYMargin; - } - else - { - if (autoresizingMaskNS & CPViewMaxYMargin) - _autoresizingMask |= CPViewMinYMargin; - if (autoresizingMaskNS & CPViewMinYMargin) - _autoresizingMask |= CPViewMaxYMargin; - } - + + _autoresizingMask = vFlags & 0x3F; _autoresizesSubviews = vFlags & (1 << 8); _hitTests = YES; _isHidden = NO;//[aCoder decodeObjectForKey:CPViewIsHiddenKey]; _opacity = 1.0;//[aCoder decodeIntForKey:CPViewOpacityKey]; - - if (YES/*[_superview isFlipped]*/) - { - var height = CGRectGetHeight([self bounds]), - count = [_subviews count]; - - while (count--) - { - var subview = _subviews[count], - frame = [subview frame]; - - [subview setFrameOrigin:CGPointMake(CGRectGetMinX(frame), height - CGRectGetMaxY(frame))]; - } - } _themeAttributes = {}; _themeState = CPThemeStateNormal; @@ -101,6 +72,11 @@ return self; } +- (BOOL)NS_isFlipped +{ + return NO; +} + @end @implementation NSView : CPView diff --git a/Tools/nib2cib/Nib2CibKeyedUnarchiver.j b/Tools/nib2cib/Nib2CibKeyedUnarchiver.j index 03f5415b7..c91d619ae 100644 --- a/Tools/nib2cib/Nib2CibKeyedUnarchiver.j +++ b/Tools/nib2cib/Nib2CibKeyedUnarchiver.j @@ -1,51 +1,75 @@ +/* + * NSKeyedArchiver.j + * nib2cib + * + * 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 +var File = require("file"); + @implementation Nib2CibKeyedUnarchiver : CPKeyedUnarchiver { - File resourcesFile; + CPString resourcesPath; } -- (id)initForReadingWithData:(CPData)data resourcesFile:(File)aResourcesFile +- (id)initForReadingWithData:(CPData)data resourcesPath:(CPString)aResourcesPath { self = [super initForReadingWithData:data]; - + if (self) - resourcesFile = aResourcesFile; - + resourcesPath = aResourcesPath; + return self; } -- (File)resourcesFile +- (CPArray)allObjects { - return resourcesFile; + return _objects; } -- (File)resourceFileForName:(CPString)aName +- (CPString)resourcePathForName:(CPString)aName { - var moreFiles = [resourcesFile.listFiles()]; + if (!resourcesPath) + return NULL; - do + var pathGroups = [File.list(resourcesPath)]; + + while (pathGroups.length > 0) { - var files = moreFiles.shift(), + var paths = pathGroups.shift(), index = 0, - count = files.length; - + count = paths.length; + for (; index < count; ++index) { - var file = files[index].getCanonicalFile(), - name = String(file.getName()); - - if (name === aName) - return file; - - if (file.isDirectory()) - moreFiles.push(file.listFiles()); + var path = files[index]; + + if (File.basename(path) === aName) + return path; + + if (File.isDirectory(path)) + pathGroups.push(File.list(path)); } } - while (moreFiles.length > 0) - + return NULL; } diff --git a/Tools/nib2cib/main.j b/Tools/nib2cib/main.j index 9654facc7..b0f0ed8c3 100644 --- a/Tools/nib2cib/main.j +++ b/Tools/nib2cib/main.j @@ -20,14 +20,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - @import @import @import "NSFoundation.j" @import "NSAppKit.j" + @import "Nib2CibKeyedUnarchiver.j" +@import "Converter.j" var File = require("file"); @@ -35,118 +36,15 @@ importPackage(java.io); CPLogRegister(CPLogPrint); -function exec(command) -{ - var p = Packages.java.lang.Runtime.getRuntime().exec(command); - var result = p.waitFor(); - - var reader = new Packages.java.io.BufferedReader(new Packages.java.io.InputStreamReader(p.getInputStream())); - while (s = reader.readLine()) - print(s); - - var reader = new Packages.java.io.BufferedReader(new Packages.java.io.InputStreamReader(p.getErrorStream())); - while (s = reader.readLine()) - print(s); - - return result; -} - function printUsage() { - java.lang.System.out.println("usage: nib2cib INPUT_FILE [OUTPUT_FILE] [-F /path/to/required/framework]"); + print("usage: nib2cib INPUT_FILE [OUTPUT_FILE] [-F /path/to/required/framework] [-R path/to/resources]"); java.lang.System.exit(1); } -function cibExtension(aPath) -{ - var start = aPath.length - 1; - - while (aPath.charAt(start) === '/') - start--; - - aPath = aPath.substr(0, start + 1); - - var dotIndex = aPath.lastIndexOf('.'); - - if (dotIndex == -1) - return aPath + ".cib"; - - var slashIndex = aPath.lastIndexOf('/'); - - if (slashIndex > dotIndex) - return aPath + ".cib"; - - return aPath.substr(0, dotIndex) + ".cib"; -} - -function convert(inputFileName, outputFileName, resourcesPath) -{ - var resourcesFile = nil; - - if (resourcesPath) - { - resourcesFile = new java.io.File(resourcesPath).getCanonicalFile(); - - if (!resourcesFile.canRead()) - { - print("Could not find Resources at " + resourcesFile); - return; - } - } - - // Make sure we can read the file - if (!(new Packages.java.io.File(inputFileName)).canRead()) - { - print("Could not read file at " + inputFileName); - return; - } - - // Compile xib or nib to make sure we have a non-new format nib. - var temporaryNibFile = java.io.File.createTempFile("temp", ".nib"), - temporaryNibFilePath = temporaryNibFile.getAbsolutePath(); - - temporaryNibFile.deleteOnExit(); - - if (exec(["/usr/bin/ibtool", inputFileName, "--compile", temporaryNibFilePath])) - { - print("Could not compile file at " + inputFileName); - return; - } - - // Convert from binary plist to XML plist - var temporaryPlistFile = java.io.File.createTempFile("temp", ".plist"), - temporaryPlistFilePath = String(temporaryPlistFile.getAbsolutePath()); - - temporaryPlistFile.deleteOnExit(); - - if (exec(["/usr/bin/plutil", "-convert", "xml1", temporaryNibFilePath, "-o", temporaryPlistFilePath])) - { - print("Could not convert to xml plist for file at " + inputFileName); - return; - } - - var data = [CPData dataWithString:File.read(String(temporaryPlistFilePath), { charset:"UTF-8" })]; - - // Minor NSKeyedArchive to CPKeyedArchive conversion. - [data setString:[data string].replace(/\\s*CF\$UID\s*\<\/key\>/g, "CP$UID")]; - - // Unarchive the NS data - var unarchiver = [[Nib2CibKeyedUnarchiver alloc] initForReadingWithData:data resourcesFile:resourcesFile], - objectData = [unarchiver decodeObjectForKey:@"IB.objectdata"], - - data = [CPData data], - archiver = [[CPKeyedArchiver alloc] initForWritingWithMutableData:data]; - - // Re-archive the CP data. - [archiver encodeObject:objectData forKey:@"CPCibObjectDataKey"]; - [archiver finishEncoding]; - - File.write(outputFileName, [data string], { charset:"UTF-8" }); -} - function loadFrameworks(frameworkPaths, aCallback) { - if (frameworkPaths.length === 0) + if (!frameworkPaths || frameworkPaths.length === 0) return aCallback(); var frameworkPath = frameworkPaths.shift(), @@ -167,6 +65,8 @@ function loadFrameworks(frameworkPaths, aCallback) java.lang.System.exit(1); } + print("Loading " + [infoDictionary objectForKey:@"CPBundleName"]); + var files = [infoDictionary objectForKey:@"CPBundleReplacedFiles"], count = files.length; @@ -175,14 +75,18 @@ function loadFrameworks(frameworkPaths, aCallback) var context = new objj_context(); context.didCompleteCallback = function() { loadFrameworks(frameworkPaths, aCallback) }; - +print("2he"); while (count--) + { + print(frameworkPath + '/' + files[count]); context.pushFragment(fragment_create_file(frameworkPath + '/' + files[count], new objj_bundle(""), YES, NULL)); - - context.evaluate(); + } +print("hmmm"); + context.evaluate();print("wha???"); } else loadFrameworks(frameworkPaths, aCallback); +print("so far so good..."); } function main() @@ -190,41 +94,39 @@ function main() var count = arguments.length; if (count < 1) - printUsage(); + return printUsage(); var index = 0, - - inputFileName = nil, - outputFileName = nil, - resourcesPath = nil, - frameworkPaths = []; + + frameworkPaths = [], + converter = [[Converter alloc] init]; for (; index < count; ++index) { switch(arguments[index]) { case "-help": - case "--help": printUsage(); - - case "-F": frameworkPaths.push(arguments[++index]); - break; - - case "-R": resourcesPath = arguments[++index]; - break; - - default: if (inputFileName && inputFileName.length > 0) - outputFileName = arguments[index]; - else - inputFileName = arguments[index]; + case "--help": printUsage(); + break; + + case "--mac": [converter setFormat:NibFormatMac]; + break; + + case "-F": frameworkPaths.push(arguments[++index]); + break; + + case "-R": [converter setResourcesPath:arguments[++index]]; + break; + + default: if ([converter inputPath]) + [converter setOutputPath:arguments[index]]; + else + [converter setInputPath:arguments[index]]; } } - if (!outputFileName || outputFileName.length < 1) - outputFileName = cibExtension(inputFileName); - - if (frameworkPaths.length) - loadFrameworks(frameworkPaths, function() { convert(inputFileName, outputFileName, resourcesPath); }); - - else - convert(inputFileName, outputFileName, resourcesPath); + loadFrameworks(frameworkPaths, function() + { + [converter convert]; + }); } From d0599aef8f37f6dffcfa999e2626785de1603e47 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 11 Jul 2009 20:31:12 -0700 Subject: [PATCH 081/244] More java call removal from nib2cib. Reviewed by me. --- Tools/nib2cib/main.j | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Tools/nib2cib/main.j b/Tools/nib2cib/main.j index b0f0ed8c3..294748070 100644 --- a/Tools/nib2cib/main.j +++ b/Tools/nib2cib/main.j @@ -46,30 +46,29 @@ function loadFrameworks(frameworkPaths, aCallback) { if (!frameworkPaths || frameworkPaths.length === 0) return aCallback(); - + var frameworkPath = frameworkPaths.shift(), - - infoPlist = new java.io.File(frameworkPath + "/Info.plist"); - - if (!infoPlist.exists()) + infoPlistPath = frameworkPath + "/Info.plist"; + + if (!File.isReadable(infoPlistPath)) { - java.lang.System.out.println("'" + frameworkPath + "' is not a framework or could not be found."); + print("'" + frameworkPath + "' is not a framework or could not be found."); java.lang.System.exit(1); } - - var infoDictionary = CPPropertyListCreateFromData([CPData dataWithString:File.read(frameworkPath + "/Info.plist", { charset:"UTF-8" })]); + + var infoDictionary = CPPropertyListCreateFromData([CPData dataWithString:File.read(infoPlistPath, { charset:"UTF-8" })]); if ([infoDictionary objectForKey:@"CPBundlePackageType"] !== "FMWK") { - java.lang.System.out.println("'" + frameworkPath + "' is not a framework."); + print("'" + frameworkPath + "' is not a framework."); java.lang.System.exit(1); } print("Loading " + [infoDictionary objectForKey:@"CPBundleName"]); - + var files = [infoDictionary objectForKey:@"CPBundleReplacedFiles"], count = files.length; - + if (count) { var context = new objj_context(); From 308bbb2f8c0c386d85bff5fb48483fbdd28abf64 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 11 Jul 2009 21:01:07 -0700 Subject: [PATCH 082/244] Updated tableview nib. Reviewed by me. --- TableCibTest/Resources/MainMenu.cib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TableCibTest/Resources/MainMenu.cib b/TableCibTest/Resources/MainMenu.cib index e873817a6..cc4ca88e9 100644 --- a/TableCibTest/Resources/MainMenu.cib +++ b/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;E;E;S;16;IBCocoaFrameworkd;3;490D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;165E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;28E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;348E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;D;K;6;CP$UIDd;3;390E;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;D;K;6;CP$UIDd;3;452E;D;K;6;CP$UIDd;3;453E;D;K;6;CP$UIDd;3;454E;D;K;6;CP$UIDd;3;455E;D;K;6;CP$UIDd;3;456E;D;K;6;CP$UIDd;3;457E;D;K;6;CP$UIDd;3;458E;D;K;6;CP$UIDd;3;459E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;462E;D;K;6;CP$UIDd;3;463E;D;K;6;CP$UIDd;3;464E;D;K;6;CP$UIDd;3;465E;D;K;6;CP$UIDd;3;466E;D;K;6;CP$UIDd;3;467E;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;478E;D;K;6;CP$UIDd;3;479E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;481E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;483E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;485E;D;K;6;CP$UIDd;3;486E;D;K;6;CP$UIDd;3;487E;D;K;6;CP$UIDd;3;488E;D;K;6;CP$UIDd;3;489E;D;K;6;CP$UIDd;3;490E;D;K;6;CP$UIDd;3;491E;D;K;6;CP$UIDd;3;492E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;494E;D;K;6;CP$UIDd;3;495E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;497E;D;K;6;CP$UIDd;3;498E;D;K;6;CP$UIDd;3;499E;D;K;6;CP$UIDd;3;500E;D;K;6;CP$UIDd;3;501E;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;D;K;6;CP$UIDd;3;505E;D;K;6;CP$UIDd;3;506E;D;K;6;CP$UIDd;3;507E;D;K;6;CP$UIDd;3;508E;D;K;6;CP$UIDd;3;509E;D;K;6;CP$UIDd;3;510E;D;K;6;CP$UIDd;3;511E;D;K;6;CP$UIDd;3;512E;D;K;6;CP$UIDd;3;513E;D;K;6;CP$UIDd;3;514E;D;K;6;CP$UIDd;3;515E;D;K;6;CP$UIDd;3;516E;D;K;6;CP$UIDd;3;517E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;519E;D;K;6;CP$UIDd;3;520E;D;K;6;CP$UIDd;3;521E;D;K;6;CP$UIDd;3;522E;D;K;6;CP$UIDd;3;523E;D;K;6;CP$UIDd;3;524E;D;K;6;CP$UIDd;3;525E;D;K;6;CP$UIDd;3;526E;D;K;6;CP$UIDd;3;527E;D;K;6;CP$UIDd;3;528E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;530E;D;K;6;CP$UIDd;3;531E;D;K;6;CP$UIDd;3;532E;D;K;6;CP$UIDd;3;533E;D;K;6;CP$UIDd;3;534E;D;K;6;CP$UIDd;3;535E;D;K;6;CP$UIDd;3;536E;D;K;6;CP$UIDd;3;537E;D;K;6;CP$UIDd;3;538E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;540E;D;K;6;CP$UIDd;3;541E;D;K;6;CP$UIDd;3;542E;D;K;6;CP$UIDd;3;543E;D;K;6;CP$UIDd;3;544E;D;K;6;CP$UIDd;3;545E;D;K;6;CP$UIDd;3;546E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;548E;D;K;6;CP$UIDd;3;549E;D;K;6;CP$UIDd;3;550E;D;K;6;CP$UIDd;3;551E;D;K;6;CP$UIDd;3;552E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;554E;D;K;6;CP$UIDd;3;555E;D;K;6;CP$UIDd;3;556E;D;K;6;CP$UIDd;3;557E;D;K;6;CP$UIDd;3;558E;D;K;6;CP$UIDd;3;559E;D;K;6;CP$UIDd;3;560E;D;K;6;CP$UIDd;3;561E;D;K;6;CP$UIDd;3;562E;D;K;6;CP$UIDd;3;563E;D;K;6;CP$UIDd;3;564E;D;K;6;CP$UIDd;3;565E;D;K;6;CP$UIDd;3;566E;D;K;6;CP$UIDd;3;567E;D;K;6;CP$UIDd;3;568E;D;K;6;CP$UIDd;3;569E;D;K;6;CP$UIDd;3;570E;D;K;6;CP$UIDd;3;571E;D;K;6;CP$UIDd;3;572E;D;K;6;CP$UIDd;3;573E;D;K;6;CP$UIDd;3;574E;D;K;6;CP$UIDd;3;575E;D;K;6;CP$UIDd;3;576E;D;K;6;CP$UIDd;3;577E;D;K;6;CP$UIDd;3;578E;D;K;6;CP$UIDd;3;579E;D;K;6;CP$UIDd;3;580E;D;K;6;CP$UIDd;3;581E;D;K;6;CP$UIDd;3;582E;D;K;6;CP$UIDd;3;583E;D;K;6;CP$UIDd;3;584E;D;K;6;CP$UIDd;3;585E;D;K;6;CP$UIDd;3;586E;D;K;6;CP$UIDd;3;587E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;589E;D;K;6;CP$UIDd;3;590E;D;K;6;CP$UIDd;3;591E;D;K;6;CP$UIDd;3;592E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;595E;D;K;6;CP$UIDd;3;596E;D;K;6;CP$UIDd;3;597E;D;K;6;CP$UIDd;3;598E;D;K;6;CP$UIDd;3;599E;D;K;6;CP$UIDd;3;600E;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;602E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;603E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;604E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;605E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;606E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;607E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;608E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;609E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;610E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;611E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;612E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;615E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;165E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;121E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;616E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;616E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;616E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;616E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;617E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;617E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;620E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;621E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;622E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;623E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;624E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;625E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;151E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;627E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;628E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;615E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;629E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;629E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;615E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;631E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;632E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;633E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;618E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;617E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;634E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;635E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;635E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;637E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;639E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;640E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;90E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;641E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;299E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;198E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;644E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;645E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;647E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;648E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;649E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;650E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;651E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;141E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;177E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;654E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;655E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;656E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;657E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;658E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;656E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;62E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;659E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;661E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;645E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;662E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;663E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;665E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;666E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;667E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;668E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;669E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;670E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;671E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;672E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;248E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;673E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;674E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;675E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;133E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;676E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;677E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;678E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;679E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;123E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;680E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;681E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;682E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;683E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;685E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;686E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;687E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;688E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;689E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;40E;K;41;_CPCibWindowTemplateWindowIsFullBridgeKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;690E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;691E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;692E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;694E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;695E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;696E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;697E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;698E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;699E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;700E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;645E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;696E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;102E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;701E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;637E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;41E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;702E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;703E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;604E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;22E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;704E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;660E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;705E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;706E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;707E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;666E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;708E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;709E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;710E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;711E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;28E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;712E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;631E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;711E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;647E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;714E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;679E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;715E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;716E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;717E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;718E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;719E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;689E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;627E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;36E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;720E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;721E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;266E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;722E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;665E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;675E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;723E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;718E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;724E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;725E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;704E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;726E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;727E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;648E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;52E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;652E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;728E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;206E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;729E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;730E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;731E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;732E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;731E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;626E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;145E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;733E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;734E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;735E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;736E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;625E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;737E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;738E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;739E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;240E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;740E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;741E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;689E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;742E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;214E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;227E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;642E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;616E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;744E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;617E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;646E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;618E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;745E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;746E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;747E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;711E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;28E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;748E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;631E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;711E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;749E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;750E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;E;S;17;Menu Item (Open…)S;15;Menu (Ligature)S;29;Menu Item (Jump to Selection)S;11;ApplicationS;24;Menu Item (Show Toolbar)S;17;Menu Item (Raise)S;33;Bordered Scroll View (Table View)S;22;Menu Item (Show Fonts)S;22;Menu Item (Copy Style)S;28;Menu Item (Smart Copy/Paste)S;2;10S;20;Menu Item (Show All)S;21;Menu Item (Subscript)S;20;Menu Item (Services)S;13;Menu (Speech)S;10;Table ViewS;12;Content ViewS;21;Menu (NewApplication)S;30;Menu Item (Bring All to Front)S;16;Menu Item (Find)S;17;Menu Item (Paste)S;16;Table Column (6)S;16;Table Column (8)S;18;Menu Item (Bigger)S;25;Menu Item (Use Default)-2S;11;Separator-4S;29;Text Field Cell (Text Cell)-4S;16;Menu Item (Font)S;11;Menu (File)S;30;Menu Item (Customize Toolbar…)S;11;Separator-6S;1;8S;11;Separator-7S;16;Menu Item (Text)S;23;Menu Item (Smart Links)S;17;Table Column (10)S;26;Menu Item (Show Spelling…)S;16;Table Column (4)S;15;Menu (Baseline)S;1;5S;11;Separator-5S;20;Menu Item (Baseline)S;16;Menu Item (Copy)S;11;Menu (Edit)S;27;Text Field Cell (Text Cell)S;25;Menu Item (Use Default)-1S;16;Table Column (0)S;1;2S;20;Menu Item (Minimize)S;22;Menu Item (Align Left)S;22;Menu Item (Clear Menu)S;9;SeparatorS;11;Separator-8S;23;Menu Item (Paste Style)S;22;Menu Item (Show Ruler)S;11;Separator-1S;29;Text Field Cell (Text Cell)-8S;16;Table Column (9)S;23;Menu Item (Show Colors)S;12;File's OwnerS;1;3S;18;Menu Item (Format)S;18;Menu Item (Italic)S;23;Menu Item (Hide Others)S;29;Text Field Cell (Text Cell)-6S;16;Menu Item (Zoom)S;23;Menu Item (Open Recent)S;4;1111S;16;Menu Item (Redo)S;22;Menu Item (Select All)S;11;Menu (Find)S;20;Menu Item (Use None)S;15;Window (Window)S;1;7S;34;Menu Item (Use Selection for Find)S;21;Menu Item (Find Next)S;14;App ControllerS;12;Separator-11S;17;Menu Item (Find…)S;17;Menu Item (Lower)S;30;Text Field Cell (Text Cell)-10S;1;9S;20;Menu (Substitutions)S;25;Menu Item (Stop Speaking)S;26;Menu Item (Check Spelling)S;29;Text Field Cell (Text Cell)-5S;16;Menu Item (Bold)S;23;Menu Item (Use Default)S;25;Menu Item (Substitutions)S;19;Menu Item (Tighten)S;26;Menu Item (NewApplication)S;8;MainMenuS;20;Menu Item (Ligature)S;16;Menu Item (View)S;16;Menu Item (Edit)S;39;Menu Item (Check Grammar With Spelling)S;3;2-1S;39;Menu Item (Check Spelling While Typing)S;15;Menu Item (Cut)S;1;1S;31;Menu Item (Hide NewApplication)S;19;Horizontal ScrollerS;11;Menu (Font)S;18;Menu (Open Recent)S;11;Separator-9S;19;Menu Item (Use All)S;22;Menu Item (Copy Ruler)S;27;Menu (Spelling and Grammar)S;29;Text Field Cell (Text Cell)-1S;18;Menu Item (Window)S;29;Text Field Cell (Text Cell)-7S;18;Menu Item (Speech)S;23;Menu Item (Paste Ruler)S;24;Menu Item (Smart Quotes)S;16;Table Column (1)S;29;Text Field Cell (Text Cell)-2S;13;Menu (Format)S;32;Menu Item (Spelling and Grammar)S;31;Menu Item (NewApplication Help)S;29;Text Field Cell (Text Cell)-3S;19;Menu Item (Smaller)S;11;Menu (View)S;12;Separator-10S;23;Menu Item (Superscript)S;16;Menu Item (File)S;11;Menu (Text)S;16;Table Column (5)S;19;Menu Item (Justify)S;21;Menu Item (Underline)S;11;Menu (Kern)S;16;Menu Item (Kern)S;32;Menu Item (About NewApplication)S;1;6S;23;Menu Item (Align Right)S;18;Menu Item (Delete)S;15;Menu (Services)S;26;Menu Item (Start Speaking)S;3;121S;16;Table Column (7)S;25;Menu Item (Find Previous)S;11;Separator-2S;3;1-1S;13;Menu (Window)S;16;Table Column (2)S;16;Menu Item (Undo)S;16;Table Column (3)S;18;Menu Item (Loosen)S;29;Text Field Cell (Text Cell)-9S;11;Separator-3S;22;Menu Item (Use None)-1S;17;Vertical ScrollerS;18;Menu Item (Center)D;K;10;$classnameS;22;_CPCibControlConnectorK;8;$classesA;S;22;_CPCibControlConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;751E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;20E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;752E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;755E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;756E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;757E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;758E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;759E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;760E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;761E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;762E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;763E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;764E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;765E;E;D;K;10;$classnameS;21;_CPCibOutletConnectorK;8;$classesA;S;21;_CPCibOutletConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;97E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;767E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;23E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;769E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;770E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;88E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;771E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;773E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;774E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;777E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;778E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;780E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;781E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;783E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;784E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;785E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;786E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;787E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;788E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;53E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;790E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;791E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;792E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;793E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;794E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;795E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;796E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;797E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;87E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;798E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;26E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;93E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;25E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;97E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;55E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;812E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;58E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;813E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;814E;E;d;3;444d;3;363d;3;224d;3;193d;3;440d;3;210d;2;-3d;3;428d;3;297d;3;347d;3;389d;3;403d;3;460d;3;350d;3;367d;3;131d;3;212d;3;372d;2;57d;3;218d;3;203d;3;477d;3;214d;3;377d;2;81d;3;298d;2;92d;3;354d;3;204d;3;405d;3;206d;3;399d;3;197d;3;478d;3;443d;3;126d;3;402d;3;144d;3;401d;3;375d;3;239d;3;136d;3;215d;3;370d;3;429d;3;198d;3;413d;3;222d;3;371d;3;221d;3;448d;3;208d;3;384d;3;450d;3;426d;3;418d;3;348d;3;459d;2;29d;3;398d;3;346d;3;217d;2;74d;3;199d;3;240d;3;462d;3;414d;3;125d;3;357d;3;228d;3;386d;2;19d;3;476d;3;232d;3;351d;3;387d;3;466d;3;111d;3;216d;3;376d;3;431d;3;395d;3;400d;3;439d;3;373d;2;83d;3;415d;3;397d;2;58d;2;78d;3;441d;3;383d;3;366d;3;130d;3;202d;3;364d;3;129d;3;479d;2;73d;2;24d;3;430d;3;207d;3;471d;3;470d;3;149d;3;417d;2;72d;3;411d;3;451d;3;365d;3;442d;3;409d;3;360d;3;127d;3;112d;3;434d;3;150d;3;408d;3;463d;1;5d;3;416d;3;394d;3;481d;3;468d;3;374d;2;80d;3;396d;3;378d;3;445d;3;485d;3;473d;2;77d;3;205d;3;412d;3;465d;3;488d;2;23d;3;106d;3;380d;3;236d;3;404d;3;385d;3;480d;3;483d;3;225d;3;489d;2;75d;3;356d;3;391d;3;145d;3;467d;3;245d;3;124d;2;39d;3;220d;2;79d;3;209d;3;410d;3;472d;2;82d;3;349d;3;195d;3;201d;3;406d;3;390d;3;484d;2;56d;3;295d;3;231d;3;226d;3;219d;3;432d;3;103d;3;134d;3;388d;3;393d;2;87d;3;200d;3;482d;3;211d;3;486d;3;435d;3;223d;3;474d;3;142d;3;296d;3;407d;3;368d;3;379d;3;362d;3;438d;3;475d;3;233d;3;382d;3;392d;3;433d;3;446d;3;447d;3;196d;3;227d;3;213d;3;143d;3;469d;3;449d;3;235d;3;230d;3;437d;2;37d;2;86d;3;427d;3;419d;3;355d;3;436d;3;381d;3;461d;3;241S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;93E;E;E;S;5;Open…S;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;125E;E;E;S;17;Jump to SelectionS;12;Show ToolbarS;5;RaiseS;22;{{-1, -1}, {493, 365}}S;20;{{0, 0}, {493, 365}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;121E;E;E;d;2;18S;6;normalD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;614E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;815E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;816E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;817E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;630E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;819E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;613E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;38E;E;d;2;10T;F;S;10;Show FontsS;10;Copy StyleS;16;Smart Copy/PasteS;15;Revert to SavedS;8;Show AllS;9;SubscriptS;8;ServicesS;14;submenuAction:S;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;103E;E;E;S;20;{{0, 0}, {691, 348}}d;1;8d;1;4d;2;17S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;59E;E;E;S;20;{{0, 0}, {491, 363}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;14;NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;87E;E;E;S;18;Bring All to FrontS;4;FindS;5;Pasted;2;64d;22;3.4028230607370965e+38S;6;BiggerS;11;Use DefaultS;0;S;4;FontS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;3;148E;E;E;S;18;Customize Toolbar…S;8;Save As…S;4;TextS;11;Smart LinksS;14;Show Spelling…S;1;4S;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;100E;E;E;S;13;Page Setup...S;4;CopyS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;129E;E;E;S;1;0d;2;69d;2;40d;4;1000S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;E;E;S;8;MinimizeS;10;Align LeftS;10;Clear MenuS;11;Paste StyleS;10;Show RulerS;11;Show ColorsS;4;SaveS;6;FormatS;6;ItalicS;11;Hide OthersS;4;ZoomS;11;Open RecentS;19;Quit NewApplicationS;4;RedoS;10;Select AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;23E;E;E;S;8;Use NoneS;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;24;{{335, 128}, {491, 363}}d;1;7S;6;WindowS;22;Use Selection for FindS;9;Find NextS;13;AppControllerS;5;Find…S;5;LowerS;3;NewS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;58E;E;E;S;13;Stop SpeakingS;14;Check SpellingS;4;BoldS;7;TightenS;9;AMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;118E;E;E;S;4;ViewS;27;Check Grammar With SpellingS;27;Check Spelling While TypingS;3;CutS;19;Hide NewApplicationS;20;{{1, -1}, {476, 17}}S;19;{{0, 0}, {476, 17}}d;1;0S;29;_horizontalScrollerDidScroll:f;18;0.6888567209243774D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;76E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;73E;E;E;S;7;Use AllS;10;Copy RulerS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;114E;E;E;S;11;Paste RulerS;12;Smart Quotesd;2;67D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;57E;E;E;S;19;NewApplication HelpS;7;SmallerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;53E;E;E;S;11;SuperscriptD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;130E;E;E;S;7;JustifyS;9;UnderlineS;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;162E;E;E;S;20;About NewApplicationS;6;Print…S;11;Align RightS;6;DeleteD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;14;Start SpeakingS;12;Preferences…S;13;Find PreviousS;5;CloseD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;42E;E;E;S;4;UndoS;6;LoosenS;22;{{477, 16}, {17, 348}}S;19;{{0, 0}, {17, 348}}S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9971429109573364S;6;CenterS;10;alignLeft:S;13;openDocument:S;10;selectAll:S;22;unhideAllApplications:S;33;toggleAutomaticQuoteSubstitution:S;15;showGuessPanel:S;5;undo:S;14;checkSpelling:S;12;newDocument:S;14;lowerBaseline:S;21;clearRecentDocuments:S;22;hideOtherApplications:S;22;toggleGrammarChecking:S;13;stopSpeaking:S;13;saveDocument:S;10;dataSourceS;12;superscript:S;29;centerSelectionInVisibleArea:S;22;revertDocumentToSaved:S;15;turnOffKerning:S;5;redo:S;6;paste:S;11;alignRight:S;12;alignCenter:S;29;orderFrontStandardAboutPanel:S;30;toggleContinuousSpellChecking:S;15;alignJustified:S;23;performFindPanelAction:S;11;pasteRuler:S;10;underline:S;9;unscript:S;9;showHelp:S;21;orderFrontColorPanel:S;6;print:S;10;pasteFont:S;5;copy:S;14;startSpeaking:S;12;toggleRuler:S;31;runToolbarCustomizationPalette:S;12;performZoom:S;14;runPageLayout:S;14;loosenKerning:S;24;toggleSmartInsertDelete:S;9;copyFont:S;5;hide:S;21;useStandardLigatures:S;15;tightenKerning:S;10;terminate:S;15;arrangeInFront:S;16;useAllLigatures:S;14;raiseBaseline:S;13;performClose:S;9;theWindowS;10;subscript:S;19;useStandardKerning:S;17;turnOffLigatures:S;19;toggleToolbarShown:S;4;cut:S;8;delegateS;10;copyRuler:S;15;saveDocumentAs:S;19;performMiniaturize:S;29;toggleAutomaticLinkDetection:S;7;delete:S;21;{{1, 16}, {476, 348}}S;20;{{0, 0}, {476, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;818E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;820E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;822E;E;E;f;10;0.66666669d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;335E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;E;E;S;16;IBCocoaFrameworkd;3;490D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;165E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;124E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;335E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;166E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;D;K;6;CP$UIDd;3;390E;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;D;K;6;CP$UIDd;3;452E;D;K;6;CP$UIDd;3;453E;D;K;6;CP$UIDd;3;454E;D;K;6;CP$UIDd;3;455E;D;K;6;CP$UIDd;3;456E;D;K;6;CP$UIDd;3;457E;D;K;6;CP$UIDd;3;458E;D;K;6;CP$UIDd;3;459E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;462E;D;K;6;CP$UIDd;3;463E;D;K;6;CP$UIDd;3;464E;D;K;6;CP$UIDd;3;465E;D;K;6;CP$UIDd;3;466E;D;K;6;CP$UIDd;3;467E;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;478E;D;K;6;CP$UIDd;3;479E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;481E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;483E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;485E;D;K;6;CP$UIDd;3;486E;D;K;6;CP$UIDd;3;487E;D;K;6;CP$UIDd;3;488E;D;K;6;CP$UIDd;3;489E;D;K;6;CP$UIDd;3;490E;D;K;6;CP$UIDd;3;491E;D;K;6;CP$UIDd;3;492E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;494E;D;K;6;CP$UIDd;3;495E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;497E;D;K;6;CP$UIDd;3;498E;D;K;6;CP$UIDd;3;499E;D;K;6;CP$UIDd;3;500E;D;K;6;CP$UIDd;3;501E;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;D;K;6;CP$UIDd;3;505E;D;K;6;CP$UIDd;3;506E;D;K;6;CP$UIDd;3;507E;D;K;6;CP$UIDd;3;508E;D;K;6;CP$UIDd;3;509E;D;K;6;CP$UIDd;3;510E;D;K;6;CP$UIDd;3;511E;D;K;6;CP$UIDd;3;512E;D;K;6;CP$UIDd;3;513E;D;K;6;CP$UIDd;3;514E;D;K;6;CP$UIDd;3;515E;D;K;6;CP$UIDd;3;516E;D;K;6;CP$UIDd;3;517E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;519E;D;K;6;CP$UIDd;3;520E;D;K;6;CP$UIDd;3;521E;D;K;6;CP$UIDd;3;522E;D;K;6;CP$UIDd;3;523E;D;K;6;CP$UIDd;3;524E;D;K;6;CP$UIDd;3;525E;D;K;6;CP$UIDd;3;526E;D;K;6;CP$UIDd;3;527E;D;K;6;CP$UIDd;3;528E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;530E;D;K;6;CP$UIDd;3;531E;D;K;6;CP$UIDd;3;532E;D;K;6;CP$UIDd;3;533E;D;K;6;CP$UIDd;3;534E;D;K;6;CP$UIDd;3;535E;D;K;6;CP$UIDd;3;536E;D;K;6;CP$UIDd;3;537E;D;K;6;CP$UIDd;3;538E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;540E;D;K;6;CP$UIDd;3;541E;D;K;6;CP$UIDd;3;542E;D;K;6;CP$UIDd;3;543E;D;K;6;CP$UIDd;3;544E;D;K;6;CP$UIDd;3;545E;D;K;6;CP$UIDd;3;546E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;548E;D;K;6;CP$UIDd;3;549E;D;K;6;CP$UIDd;3;550E;D;K;6;CP$UIDd;3;551E;D;K;6;CP$UIDd;3;552E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;554E;D;K;6;CP$UIDd;3;555E;D;K;6;CP$UIDd;3;556E;D;K;6;CP$UIDd;3;557E;D;K;6;CP$UIDd;3;558E;D;K;6;CP$UIDd;3;559E;D;K;6;CP$UIDd;3;560E;D;K;6;CP$UIDd;3;561E;D;K;6;CP$UIDd;3;562E;D;K;6;CP$UIDd;3;563E;D;K;6;CP$UIDd;3;564E;D;K;6;CP$UIDd;3;565E;D;K;6;CP$UIDd;3;566E;D;K;6;CP$UIDd;3;567E;D;K;6;CP$UIDd;3;568E;D;K;6;CP$UIDd;3;569E;D;K;6;CP$UIDd;3;570E;D;K;6;CP$UIDd;3;571E;D;K;6;CP$UIDd;3;572E;D;K;6;CP$UIDd;3;573E;D;K;6;CP$UIDd;3;574E;D;K;6;CP$UIDd;3;575E;D;K;6;CP$UIDd;3;576E;D;K;6;CP$UIDd;3;577E;D;K;6;CP$UIDd;3;578E;D;K;6;CP$UIDd;3;579E;D;K;6;CP$UIDd;3;580E;D;K;6;CP$UIDd;3;581E;D;K;6;CP$UIDd;3;582E;D;K;6;CP$UIDd;3;583E;D;K;6;CP$UIDd;3;584E;D;K;6;CP$UIDd;3;585E;D;K;6;CP$UIDd;3;586E;D;K;6;CP$UIDd;3;587E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;589E;D;K;6;CP$UIDd;3;590E;D;K;6;CP$UIDd;3;591E;D;K;6;CP$UIDd;3;592E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;595E;D;K;6;CP$UIDd;3;596E;D;K;6;CP$UIDd;3;597E;D;K;6;CP$UIDd;3;598E;D;K;6;CP$UIDd;3;599E;D;K;6;CP$UIDd;3;600E;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;602E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;603E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;604E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;605E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;606E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;197E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;607E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;608E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;609E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;613E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;615E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;98E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;617E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;93E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;618E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;619E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;620E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;621E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;622E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;623E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;624E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;625E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;626E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;626E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;627E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;628E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;629E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;630E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;612E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;610E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;631E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;632E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;633E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;636E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;637E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;638E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;639E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;641E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;642E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;202E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;633E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;644E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;645E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;646E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;608E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;609E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;647E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;638E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;43E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;648E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;649E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;142E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;650E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;651E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;652E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;653E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;654E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;126E;K;41;_CPCibWindowTemplateWindowIsFullBridgeKeyD;K;6;CP$UIDd;3;612E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;655E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;656E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;657E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;658E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;659E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;660E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;661E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;62E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;662E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;663E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;86E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;664E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;665E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;666E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;86E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;667E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;628E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;666E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;668E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;669E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;670E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;671E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;672E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;605E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;23E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;673E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;674E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;618E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;32E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;675E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;676E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;677E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;132E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;62E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;678E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;679E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;86E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;664E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;627E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;666E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;86E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;680E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;628E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;666E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;681E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;682E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;136E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;683E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;669E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;261E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;633E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;278E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;633E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;126E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;685E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;686E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;687E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;126E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;688E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;627E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;625E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;63E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;78E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;634E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;634E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;634E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;634E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;610E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;610E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;612E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;690E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;210E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;633E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;312E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;633E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;691E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;692E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;142E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;617E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;694E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;695E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;696E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;697E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;698E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;615E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;699E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;700E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;105E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;701E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;702E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;703E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;704E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;700E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;705E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;706E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;654E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;707E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;708E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;124E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;709E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;710E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;711E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;712E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;713E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;714E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;715E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;716E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;23E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;622E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;717E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;190E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;633E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;718E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;708E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;719E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;125E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;720E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;720E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;627E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;722E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;723E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;724E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;725E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;726E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;727E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;677E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;728E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;696E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;95E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;691E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;91E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;729E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;682E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;730E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;731E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;732E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;145E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;309E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;693E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;733E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;726E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;734E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;732E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;735E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;736E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;737E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;654E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;108E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;738E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;739E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;740E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;683E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;741E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;301E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;633E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;634E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;742E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;744E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;745E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;746E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;747E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;748E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;749E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;642E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;616E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;45E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;750E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;610E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;611E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;612E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;S;18;Menu Item (Loosen)S;19;Menu Item (Smaller)S;18;Menu (Open Recent)S;16;Table Column (1)S;9;SeparatorS;11;Separator-2S;25;Menu Item (Find Previous)S;18;Menu Item (Center)S;16;Menu Item (Edit)S;20;Menu Item (Services)S;11;Menu (Find)S;29;Menu Item (Jump to Selection)S;17;Menu Item (Find…)S;16;Menu Item (Font)S;14;App ControllerS;17;Menu Item (Raise)S;29;Text Field Cell (Text Cell)-9S;10;Table ViewS;12;File's OwnerS;16;Table Column (4)S;39;Menu Item (Check Spelling While Typing)S;29;Text Field Cell (Text Cell)-1S;24;Menu Item (Show Toolbar)S;1;2S;8;MainMenuS;27;Menu (Spelling and Grammar)S;16;Table Column (6)S;22;Menu Item (Copy Ruler)S;16;Table Column (0)S;22;Menu Item (Copy Style)S;1;1S;16;Menu Item (Zoom)S;25;Menu Item (Stop Speaking)S;15;Window (Window)S;22;Menu Item (Show Fonts)S;1;6S;23;Menu Item (Smart Links)S;16;Menu Item (Bold)S;16;Menu Item (Copy)S;18;Menu Item (Italic)S;23;Menu Item (Show Colors)S;17;Vertical ScrollerS;11;Separator-3S;1;7S;11;ApplicationS;22;Menu Item (Use None)-1S;34;Menu Item (Use Selection for Find)S;23;Menu Item (Hide Others)S;22;Menu Item (Align Left)S;23;Menu Item (Open Recent)S;30;Menu Item (Bring All to Front)S;16;Menu Item (Redo)S;16;Menu Item (Find)S;26;Menu Item (Check Spelling)S;26;Menu Item (Show Spelling…)S;16;Menu Item (Text)S;19;Horizontal ScrollerS;20;Menu Item (Baseline)S;26;Menu Item (NewApplication)S;20;Menu Item (Use None)S;25;Menu Item (Use Default)-2S;16;Table Column (5)S;16;Table Column (3)S;33;Bordered Scroll View (Table View)S;11;Separator-7S;32;Menu Item (About NewApplication)S;16;Table Column (7)S;16;Table Column (9)S;13;Menu (Format)S;18;Menu Item (Speech)S;15;Menu (Services)S;29;Text Field Cell (Text Cell)-4S;29;Text Field Cell (Text Cell)-6S;23;Menu Item (Align Right)S;11;Menu (Kern)S;23;Menu Item (Use Default)S;28;Menu Item (Smart Copy/Paste)S;11;Menu (Edit)S;16;Menu Item (View)S;3;2-1S;29;Text Field Cell (Text Cell)-2S;18;Menu Item (Delete)S;23;Menu Item (Superscript)S;20;Menu Item (Minimize)S;31;Menu Item (Hide NewApplication)S;11;Menu (View)S;11;Separator-8S;23;Menu Item (Paste Style)S;13;Menu (Window)S;16;Menu Item (File)S;30;Menu Item (Customize Toolbar…)S;3;1-1S;39;Menu Item (Check Grammar With Spelling)S;23;Menu Item (Paste Ruler)S;1;5S;21;Menu Item (Subscript)S;25;Menu Item (Use Default)-1S;11;Separator-4S;30;Text Field Cell (Text Cell)-10S;20;Menu Item (Show All)S;11;Separator-1S;22;Menu Item (Clear Menu)S;27;Text Field Cell (Text Cell)S;11;Menu (Font)S;16;Table Column (2)S;19;Menu Item (Justify)S;11;Menu (File)S;12;Content ViewS;16;Menu Item (Undo)S;3;121S;4;1111S;1;3S;20;Menu (Substitutions)S;11;Menu (Text)S;16;Menu Item (Kern)S;29;Text Field Cell (Text Cell)-3S;29;Text Field Cell (Text Cell)-7S;18;Menu Item (Format)S;22;Menu Item (Select All)S;15;Menu (Baseline)S;24;Menu Item (Smart Quotes)S;29;Text Field Cell (Text Cell)-5S;20;Menu Item (Ligature)S;11;Separator-9S;11;Separator-6S;17;Table Column (10)S;13;Menu (Speech)S;25;Menu Item (Substitutions)S;21;Menu Item (Underline)S;29;Text Field Cell (Text Cell)-8S;15;Menu (Ligature)S;15;Menu Item (Cut)S;17;Menu Item (Paste)S;18;Menu Item (Window)S;1;8S;12;Separator-11S;19;Menu Item (Tighten)S;18;Menu Item (Bigger)S;21;Menu (NewApplication)S;16;Table Column (8)S;26;Menu Item (Start Speaking)S;19;Menu Item (Use All)S;2;10S;17;Menu Item (Lower)S;12;Separator-10S;1;9S;31;Menu Item (NewApplication Help)S;22;Menu Item (Show Ruler)S;21;Menu Item (Find Next)S;32;Menu Item (Spelling and Grammar)S;17;Menu Item (Open…)S;11;Separator-5D;K;10;$classnameS;22;_CPCibControlConnectorK;8;$classesA;S;22;_CPCibControlConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;751E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;752E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;755E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;756E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;20E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;757E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;758E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;759E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;760E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;761E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;762E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;763E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;764E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;765E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;767E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;769E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;770E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;88E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;771E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;51E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;773E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;774E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;118E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;777E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;778E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;66E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;156E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;780E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;137E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;781E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;783E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;96E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;784E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;56E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;785E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;786E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;787E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;788E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;115E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;790E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;791E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;792E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;75E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;793E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;794E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;795E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;796E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;797E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;798E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;10;$classnameS;21;_CPCibOutletConnectorK;8;$classesA;S;21;_CPCibOutletConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;374E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;36E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;374E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;54E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;374E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;36E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;111E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;812E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;47E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;813E;E;D;K;6;$classD;K;6;CP$UIDd;3;319E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;814E;E;d;3;438d;3;447d;3;395d;3;125d;3;433d;3;206d;3;360d;3;381d;3;220d;3;209d;3;210d;3;409d;3;486d;3;451d;3;474d;3;373d;3;297d;2;29d;3;200d;3;477d;3;465d;3;224d;3;230d;3;103d;3;371d;2;39d;3;231d;3;354d;3;390d;3;391d;2;86d;3;461d;3;236d;3;235d;3;413d;3;362d;3;380d;1;5d;3;218d;3;201d;3;378d;3;347d;3;412d;3;460d;3;446d;3;396d;3;479d;3;406d;3;442d;3;476d;3;205d;3;295d;3;478d;2;23d;3;222d;2;24d;3;298d;3;227d;2;73d;3;225d;3;346d;3;488d;3;387d;3;448d;3;432d;2;77d;3;416d;3;149d;3;367d;3;482d;3;240d;3;150d;3;214d;3;126d;3;245d;3;467d;3;430d;3;226d;3;357d;3;429d;3;142d;3;435d;3;207d;3;136d;3;484d;3;379d;3;468d;3;351d;3;398d;3;400d;3;374d;3;485d;3;470d;2;87d;3;233d;3;411d;3;203d;2;19d;3;394d;2;57d;3;196d;3;481d;3;444d;3;393d;2;82d;3;111d;3;241d;3;223d;3;366d;2;72d;3;368d;3;419d;3;364d;3;466d;3;363d;3;143d;3;213d;3;443d;3;437d;3;193d;3;217d;3;131d;3;377d;3;450d;3;232d;3;463d;3;489d;3;473d;3;219d;3;228d;3;439d;3;106d;3;386d;3;403d;3;239d;3;441d;3;195d;3;389d;3;436d;2;78d;2;37d;3;197d;3;401d;2;79d;2;-3d;3;221d;3;145d;3;124d;3;215d;3;445d;3;204d;3;399d;3;370d;3;417d;3;462d;2;56d;3;431d;3;475d;3;471d;2;58d;3;483d;3;130d;3;211d;3;376d;3;480d;3;449d;3;383d;3;415d;3;350d;3;407d;2;74d;3;202d;3;134d;3;296d;3;402d;3;404d;3;365d;2;83d;3;459d;3;408d;3;127d;3;440d;3;427d;3;388d;3;469d;3;382d;2;81d;3;372d;3;349d;3;129d;2;75d;3;397d;3;405d;3;375d;3;198d;3;472d;2;92d;3;392d;3;212d;3;348d;3;356d;3;355d;3;199d;2;80d;3;384d;3;418d;3;434d;3;428d;3;414d;3;112d;3;410d;3;426d;3;385d;3;208d;3;216d;3;144S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;54E;E;E;S;6;LoosenS;7;SmallerS;11;Open RecentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;120E;E;E;d;2;67d;2;40d;4;1000T;S;0;F;S;13;Find PreviousS;6;CenterS;4;EditS;14;submenuAction:S;8;ServicesS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;33E;E;E;S;17;Jump to SelectionS;5;Find…S;4;FontS;13;AppControllerS;5;RaiseD;K;6;$classD;K;6;CP$UIDd;3;689E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;815E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;816E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;817E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;86E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;664E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;819E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;627E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;39E;E;S;20;{{0, 0}, {691, 348}}S;6;normald;1;4d;2;17S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;141E;E;E;S;1;4d;2;64d;2;10d;22;3.4028230607370965e+38S;27;Check Spelling While TypingS;12;Show ToolbarS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;161E;E;E;S;9;AMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;50E;E;E;S;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;3;112E;E;E;S;10;Copy RulerS;1;0d;2;69S;10;Copy StyleS;4;ZoomS;13;Stop SpeakingS;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;24;{{335, 128}, {491, 363}}d;1;7S;6;WindowS;10;Show FontsS;6;Print…S;11;Smart LinksS;4;BoldS;4;CopyS;6;ItalicS;11;Show ColorsS;22;{{477, 16}, {17, 348}}S;19;{{0, 0}, {17, 348}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:f;18;0.9971429109573364S;8;Use NoneS;22;Use Selection for FindS;11;Hide OthersS;10;Align LeftS;18;Bring All to FrontS;4;RedoS;14;Check SpellingS;14;Show Spelling…S;4;TextS;20;{{1, -1}, {476, 17}}S;19;{{0, 0}, {476, 17}}S;29;_horizontalScrollerDidScroll:f;18;0.6888567209243774S;8;BaselineS;14;NewApplicationS;11;Use DefaultS;22;{{-1, -1}, {493, 365}}S;20;{{0, 0}, {493, 365}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;625E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;78E;E;E;d;2;18D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;20;About NewApplicationS;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;77E;E;E;S;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Align RightS;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;20E;E;E;S;16;Smart Copy/PasteD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;2;92E;E;E;S;4;ViewS;6;DeleteS;11;SuperscriptS;8;MinimizeS;19;Hide NewApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;3;110E;E;E;S;11;Paste StyleD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;72E;E;E;S;4;FileS;18;Customize Toolbar…S;5;CloseS;27;Check Grammar With SpellingS;11;Paste RulerS;13;Page Setup...S;9;SubscriptS;8;Show AllS;10;Clear MenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;107E;E;E;S;7;JustifyD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;56E;E;E;S;20;{{0, 0}, {491, 363}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;86E;E;E;S;4;UndoS;12;Preferences…S;19;Quit NewApplicationS;4;SaveS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;57E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;3;113E;E;E;S;10;Select AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;3;158E;E;E;S;12;Smart QuotesS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;52E;E;E;S;9;UnderlineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;156E;E;E;S;3;CutS;5;PasteS;8;Save As…S;7;TightenS;6;BiggerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;129E;E;E;S;14;Start SpeakingS;7;Use AllS;15;Revert to SavedS;5;LowerS;3;NewS;19;NewApplication HelpS;10;Show RulerS;9;Find NextS;5;Open…S;19;toggleToolbarShown:S;29;centerSelectionInVisibleArea:S;13;stopSpeaking:S;22;toggleGrammarChecking:S;22;hideOtherApplications:S;19;useStandardKerning:S;14;loosenKerning:S;13;saveDocument:S;15;showGuessPanel:S;31;runToolbarCustomizationPalette:S;5;undo:S;4;cut:S;7;delete:S;22;revertDocumentToSaved:S;9;copyFont:S;15;tightenKerning:S;21;orderFrontColorPanel:S;10;underline:S;12;alignCenter:S;9;showHelp:S;29;orderFrontStandardAboutPanel:S;12;performZoom:S;15;saveDocumentAs:S;14;lowerBaseline:S;22;unhideAllApplications:S;15;turnOffKerning:S;10;pasteFont:S;12;superscript:S;10;terminate:S;16;useAllLigatures:S;33;toggleAutomaticQuoteSubstitution:S;6;paste:S;30;toggleContinuousSpellChecking:S;9;unscript:S;6;print:S;21;useStandardLigatures:S;19;performMiniaturize:S;21;clearRecentDocuments:S;29;toggleAutomaticLinkDetection:S;10;subscript:S;10;selectAll:S;11;pasteRuler:S;14;checkSpelling:S;10;alignLeft:S;5;copy:S;5;hide:S;15;arrangeInFront:S;23;performFindPanelAction:S;12;toggleRuler:S;13;openDocument:S;5;redo:S;14;startSpeaking:S;24;toggleSmartInsertDelete:S;12;newDocument:S;8;delegateS;14;runPageLayout:S;9;theWindowS;17;turnOffLigatures:S;14;raiseBaseline:S;11;alignRight:S;10;dataSourceS;13;performClose:S;10;copyRuler:S;15;alignJustified:S;21;{{1, 16}, {476, 348}}S;20;{{0, 0}, {476, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;818E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;820E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;821E;D;K;6;CP$UIDd;3;822E;E;E;f;10;0.66666669d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file From 0356c6e62207c5cae69a7bbbcc7d913aaa6de30d Mon Sep 17 00:00:00 2001 From: Marc Nijdam Date: Tue, 7 Jul 2009 10:34:34 -0700 Subject: [PATCH 083/244] Reordered a bit and added separator --- .../JavaScript Objective-J.tmbundle/info.plist | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/info.plist b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/info.plist index f5f1b9036..b7c519f74 100644 --- a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/info.plist +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/info.plist @@ -8,14 +8,31 @@ Tom Robinson description <a href="http://cappuccino.org/">Cappuccino</a> is an open source framework that makes it easy to build desktop-caliber applications that run in a web browser. + mainMenu + + items + + 96C39647-4346-4750-9F96-58070F24EDE6 + AA41BEF8-5F81-4A5A-85DE-2E81A112778B + 85B0746B-AE1C-47B3-8B9A-2B9A95F4C71E + ------------------------------------ + 36FD3695-1051-401E-8536-89FB9CEEEAB4 + 033BC36A-97DA-4F48-9ACB-B58C80D1A689 + + submenus + + name JavaScript Objective-J ordering 58D4B98A-2110-423E-9C80-CC9E202816E7 + 85A46AFC-5552-4CE5-BDA0-ED34F0398399 96C39647-4346-4750-9F96-58070F24EDE6 AA41BEF8-5F81-4A5A-85DE-2E81A112778B 85B0746B-AE1C-47B3-8B9A-2B9A95F4C71E + 36FD3695-1051-401E-8536-89FB9CEEEAB4 + 033BC36A-97DA-4F48-9ACB-B58C80D1A689 uuid 1FB3D538-84E1-4002-AA46-5705529A27E1 From cc90f2e5f07f29f50d6b331528a4f30c9ed501fc Mon Sep 17 00:00:00 2001 From: Marc Nijdam Date: Mon, 6 Jul 2009 15:02:19 -0700 Subject: [PATCH 084/244] Added run in browser/refresh browser commands for project level view of run application --- ...n Document in Running Browser(s).tmCommand | 65 +++++++++++++++++++ .../Refresh Running Browser(s).tmCommand | 51 +++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Commands/Open Document in Running Browser(s).tmCommand create mode 100644 Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Commands/Refresh Running Browser(s).tmCommand diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Commands/Open Document in Running Browser(s).tmCommand b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Commands/Open Document in Running Browser(s).tmCommand new file mode 100644 index 000000000..a85993ae3 --- /dev/null +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Commands/Open Document in Running Browser(s).tmCommand @@ -0,0 +1,65 @@ + + + + + beforeRunningCommand + nop + command + #!/usr/bin/env ruby -wKU +# +# Open Document in Running Browser(s) +# v3 - November 22, 2007 +# +# Now supports multiple running versions of a single browser along +# with a range of new/old browsers. Bring back support for Firefox. +# +# Options: Set TM_PROJECT_SITEURL in your TM Project Window Info Button +# in the following form: "http://example.com/" + +require "#{ENV['TM_SUPPORT_PATH']}/lib/escape.rb" + +if ENV['TM_PROJECT_SITEURL'] + url = "#{ENV['TM_PROJECT_SITEURL']}" + ENV['TM_FILEPATH'].sub(/^#{Regexp.escape(ENV['TM_PROJECT_DIRECTORY'])}\//, '') +else + url = "file://#{ENV['TM_PROJECT_DIRECTORY']}/index.html" +end + +proclist = `ps -x -o command` +active = [] +os = `defaults read /System/Library/CoreServices/SystemVersion ProductVersion` + +browsers = %w[ Safari OmniWeb Camino Shiira firefox-bin Xyle\ scope Opera Internet\ Explorer flock-bin iCab Sunrise seamonkey-bin navigator-bin ].join('|') + +# Build paths to each active browser +# +# Notes: +# - 'WebKit' look ahead is to rule it out so we can use the working +# rule below. +# - 'LaunchCFMApp' portion is so iCab works. +active = proclist.scan(%r{^(?:/.*LaunchCFMApp )?(/.*\.app)(?=/Contents/MacOS/(?:#{browsers})\b(?!\s-WebKit))}) + +# Special check for WebKit as it appears as Safari +# Note: Only supports one running instance of WebKit, picked at random. +if proclist =~ %r{/Contents/MacOS/Safari.*-WebKit(DeveloperExtras|ScriptDebuggerEnabled)} + active << "WebKit" +end + +# TODO: Change when Leopard Only +# On Leopard use the -g option to open in background. +if os =~ /^10\.(5|6)/ + active.each {|p| `open -g -a #{e_sh(p)} #{e_sh(url)}` } +else + active.each {|p| `open -a #{e_sh(p)} #{e_sh(url)}` } +end + input + none + name + Open Document in Running Browser(s) + output + discard + scope + source.js.objj + uuid + 36FD3695-1051-401E-8536-89FB9CEEEAB4 + + diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Commands/Refresh Running Browser(s).tmCommand b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Commands/Refresh Running Browser(s).tmCommand new file mode 100644 index 000000000..9b85e3197 --- /dev/null +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Commands/Refresh Running Browser(s).tmCommand @@ -0,0 +1,51 @@ + + + + + beforeRunningCommand + nop + command + ### Refresh All Active Browsers - OmniWeb, Safari, Firefox & IE +### v1.0. 2005-03-29 +### + +# Check if Internet Explorer is running, if so refresh +ps -xc|grep -sq "Internet Explorer" && osascript -e 'tell app "Internet Explorer"' -e 'activate' -e 'OpenURL "JavaScript:window.location.reload();" toWindow -1' -e 'end tell' + +# Check if OmniWeb is running, if so refresh +ps -xc|grep -sq OmniWeb && osascript -e 'tell app "OmniWeb"' -e 'activate' -e 'reload first browser' -e 'end tell' + +# Check if Firefox is running, if so refresh +ps -xc|grep -sqi firefox && osascript <<'APPLESCRIPT' + tell app "Firefox" to activate + tell app "System Events" + if UI elements enabled then + keystroke "r" using command down + -- Fails if System Preferences > Universal access > "Enable access for assistive devices" is not on + else + tell app "Firefox" to Get URL "JavaScript:window.location.reload();" inside window 1 + -- Fails if Firefox is set to open URLs from external apps in new tabs. + end if + end tell +APPLESCRIPT + +# Check if Safari is running, if so refresh +ps -xc|grep -sq Safari && osascript -e 'tell app "Safari"' -e 'activate' -e 'do JavaScript "window.location.reload();" in first document' -e 'end tell' + +# Check if Camino is running, if so refresh +ps -xc|grep -sq Camino && osascript -e 'tell app "Camino"' -e 'activate' -e 'tell app "System Events" to keystroke "r" using {command down}' -e 'end tell' + + input + none + keyEquivalent + @r + name + Refresh Running Browser(s) + output + discard + scope + source.js.objj + uuid + 033BC36A-97DA-4F48-9ACB-B58C80D1A689 + + From 8e3ac66a2d018f2e99acff007ad4c70f6cf3e481 Mon Sep 17 00:00:00 2001 From: Marc Nijdam Date: Mon, 6 Jul 2009 14:34:10 -0700 Subject: [PATCH 085/244] Added '_' as allowed characted in implementation, protocol and interface names --- .../Syntaxes/Objective-J.tmLanguage | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Syntaxes/Objective-J.tmLanguage b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Syntaxes/Objective-J.tmLanguage index a1ced269f..b750cb206 100644 --- a/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Syntaxes/Objective-J.tmLanguage +++ b/Tools/Editors/TextMate/JavaScript Objective-J.tmbundle/Syntaxes/Objective-J.tmLanguage @@ -21,7 +21,7 @@ begin - ((@)(interface|protocol))(?!.+;)\s+([A-Za-z][A-Za-z0-9]*)\s*((:)(?:\s*)([A-Za-z][A-Za-z0-9]*))?(\s|\n)? + ((@)(interface|protocol))(?!.+;)\s+([_A-Za-z][_A-Za-z0-9]*)\s*((:)(?:\s*)([_A-Za-z][_A-Za-z0-9]*))?(\s|\n)? captures 1 @@ -84,7 +84,7 @@ begin - ((@)(implementation))\s+([A-Za-z][A-Za-z0-9]*)\s*(?::\s*([A-Za-z][A-Za-z0-9]*))? + ((@)(implementation))\s+([_A-Za-z][_A-Za-z0-9]*)\s*(?::\s*([_A-Za-z][_A-Za-z0-9]*))? captures 1 From 215619e6e294889ab8b73f9326a50ac76f1874da Mon Sep 17 00:00:00 2001 From: Marc Nijdam Date: Fri, 10 Jul 2009 02:49:25 +0800 Subject: [PATCH 086/244] Initial nib2cib work on collectionview Signed-off-by: Francisco Ryan Tolmasky I --- AppKit/CPCollectionView.j | 15 ++++-- Tools/nib2cib/NSAppKit.j | 1 + Tools/nib2cib/NSCollectionView.j | 84 ++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 Tools/nib2cib/NSCollectionView.j diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 325175309..88afdc80a 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -735,10 +735,11 @@ var CPCollectionViewMinItemSizeKey = @"CPCollectionViewMinItemSizeKey", _cachedItems = []; _itemSize = CGSizeMakeZero(); + _minItemSize = [aCoder decodeSizeForKey:CPCollectionViewMinItemSizeKey]; _maxItemSize = [aCoder decodeSizeForKey:CPCollectionViewMaxItemSizeKey]; - - _verticalMargin = [aCoder decodeSizeForKey:CPCollectionViewVerticalMarginKey]; + _verticalMargin = [aCoder decodeFloatForKey:CPCollectionViewVerticalMarginKey]; + _tileWidth = -1.0; _selectionIndexes = [CPIndexSet indexSet]; @@ -751,10 +752,14 @@ var CPCollectionViewMinItemSizeKey = @"CPCollectionViewMinItemSizeKey", { [super encodeWithCoder:aCoder]; - [aCoder encodeSize:_minItemSize forKey:CPCollectionViewMinItemSizeKey]; - [aCoder encodeSize:_maxItemSize forKey:CPCollectionViewMaxItemSizeKey]; + if (_minItemSize != nil) + [aCoder encodeSize:_minItemSize forKey:CPCollectionViewMinItemSizeKey]; + + if (_maxItemSize != nil) + [aCoder encodeSize:_maxItemSize forKey:CPCollectionViewMaxItemSizeKey]; - [aCoder encodeSize:_verticalMargin forKey:CPCollectionViewVerticalMarginKey]; + if (_verticalMargin != nil) + [aCoder encodeFloat:_verticalMargin forKey:CPCollectionViewVerticalMarginKey]; } @end diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index 5e13cb706..5fc83b30f 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -26,6 +26,7 @@ @import "NSClipView.j" @import "NSColor.j" @import "NSColorWell.j" +@import "NSCollectionView.j" @import "NSControl.j" @import "NSCustomObject.j" @import "NSCustomResource.j" diff --git a/Tools/nib2cib/NSCollectionView.j b/Tools/nib2cib/NSCollectionView.j new file mode 100644 index 000000000..153edee4e --- /dev/null +++ b/Tools/nib2cib/NSCollectionView.j @@ -0,0 +1,84 @@ +/* + * NSCollectionView.j + * nib2cib + * + * Created by Marc Nijdam. + * Copyright 2009, imadjine, LLC. + * + * 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 CPCollectionView (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + if (self = [super NS_initWithCoder:aCoder]) + { + _maxNumberOfRows = [aCoder decodeIntForKey:@"NSMaxNumberOfGridRows"]; + _maxNumberOfColumns = [aCoder decodeIntForKey:@"NSMaxNumberOfGridColumns"]; + + _isSelectable = [aCoder decodeBoolForKey:@"NSSelectable"]; + _allowsMultipleSelection = [aCoder decodeBoolForKey:@"NSAllowsMultipleSelection"]; + + } + + return self; +} + +@end + +@implementation NSCollectionView : CPCollectionView +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPCollectionView class]; +} + +@end + + +@implementation CPCollectionViewItem (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + return [super init]; +} + +@end + +@implementation NSCollectionViewItem : CPCollectionViewItem +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPCollectionViewItem class]; +} + +@end \ No newline at end of file From 9c226ae5743a7e6039fcaf1ccb1ea36a3f7bd98d Mon Sep 17 00:00:00 2001 From: Marc Nijdam Date: Thu, 16 Jul 2009 08:35:29 +0800 Subject: [PATCH 087/244] Ensuring all instance variables initialized to same values as initWithFrame: on coder init Signed-off-by: Francisco Ryan Tolmasky I --- AppKit/CPCollectionView.j | 14 ++++++++------ Tools/nib2cib/NSCollectionView.j | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 88afdc80a..e5c72c8eb 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -736,13 +736,16 @@ var CPCollectionViewMinItemSizeKey = @"CPCollectionViewMinItemSizeKey", _itemSize = CGSizeMakeZero(); - _minItemSize = [aCoder decodeSizeForKey:CPCollectionViewMinItemSizeKey]; - _maxItemSize = [aCoder decodeSizeForKey:CPCollectionViewMaxItemSizeKey]; + _minItemSize = [aCoder decodeSizeForKey:CPCollectionViewMinItemSizeKey] || CGSizeMakeZero(); + _maxItemSize = [aCoder decodeSizeForKey:CPCollectionViewMaxItemSizeKey] || CGSizeMakeZero(); _verticalMargin = [aCoder decodeFloatForKey:CPCollectionViewVerticalMarginKey]; _tileWidth = -1.0; _selectionIndexes = [CPIndexSet indexSet]; + + _allowsEmptySelection = YES; + _isSelectable = YES; } return self; @@ -752,14 +755,13 @@ var CPCollectionViewMinItemSizeKey = @"CPCollectionViewMinItemSizeKey", { [super encodeWithCoder:aCoder]; - if (_minItemSize != nil) + if (!CGSizeEqualToSize(_minItemSize, CGSizeMakeZero())) [aCoder encodeSize:_minItemSize forKey:CPCollectionViewMinItemSizeKey]; - if (_maxItemSize != nil) + if (!CGSizeEqualToSize(_maxItemSize, CGSizeMakeZero())) [aCoder encodeSize:_maxItemSize forKey:CPCollectionViewMaxItemSizeKey]; - if (_verticalMargin != nil) - [aCoder encodeFloat:_verticalMargin forKey:CPCollectionViewVerticalMarginKey]; + [aCoder encodeFloat:_verticalMargin forKey:CPCollectionViewVerticalMarginKey]; } @end diff --git a/Tools/nib2cib/NSCollectionView.j b/Tools/nib2cib/NSCollectionView.j index 153edee4e..bb0ef9091 100644 --- a/Tools/nib2cib/NSCollectionView.j +++ b/Tools/nib2cib/NSCollectionView.j @@ -26,6 +26,21 @@ - (id)NS_initWithCoder:(CPCoder)aCoder { + _items = []; + _content = []; + + _cachedItems = []; + + _itemSize = CGSizeMakeZero(); + _minItemSize = CGSizeMakeZero(); + _maxItemSize = CGSizeMakeZero(); + + _verticalMargin = 5.0; + _tileWidth = -1.0; + + _selectionIndexes = [CPIndexSet indexSet]; + _allowsEmptySelection = YES; + if (self = [super NS_initWithCoder:aCoder]) { _maxNumberOfRows = [aCoder decodeIntForKey:@"NSMaxNumberOfGridRows"]; @@ -33,7 +48,6 @@ _isSelectable = [aCoder decodeBoolForKey:@"NSSelectable"]; _allowsMultipleSelection = [aCoder decodeBoolForKey:@"NSAllowsMultipleSelection"]; - } return self; From 9b99457871fecc86bd500e83b54d7fa82d56e025 Mon Sep 17 00:00:00 2001 From: tlrobinson Date: Mon, 20 Jul 2009 18:16:17 -0700 Subject: [PATCH 088/244] Preliminary typechecking version of objj_msgSend, and preprocessor support. --- Objective-J/preprocess.js | 23 +++++++++-- Objective-J/runtime.js | 81 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 4 deletions(-) diff --git a/Objective-J/preprocess.js b/Objective-J/preprocess.js index 0032ed203..f09af79f1 100644 --- a/Objective-J/preprocess.js +++ b/Objective-J/preprocess.js @@ -578,12 +578,15 @@ objj_preprocessor.prototype.method = function(tokens) var buffer = new objj_stringBuffer(), token, selector = "", - parameters = []; + parameters = [], + types = [null]; while((token = tokens.skip_whitespace()) && token != TOKEN_OPEN_BRACE) { if (token == TOKEN_COLON) { + var type = ""; + // Colons are part of the selector name selector += token; @@ -592,18 +595,30 @@ objj_preprocessor.prototype.method = function(tokens) if (token == TOKEN_OPEN_PARENTHESIS) { // Swallow parameter/return type. Perhaps later we can use this for debugging? - while((token = tokens.skip_whitespace()) && token != TOKEN_CLOSE_PARENTHESIS) ; + while((token = tokens.skip_whitespace()) && token != TOKEN_CLOSE_PARENTHESIS) + type += token; token = tokens.skip_whitespace(); } + // Add the type. If it's empty, add null instead. + types[parameters.length+1] = type || null; + // Since this follows a colon, this must be the parameter name. parameters[parameters.length] = token; } else if (token == TOKEN_OPEN_PARENTHESIS) + { + var type = ""; + // Since :( is handled above, this must be the return type, just swallow it. - while((token = tokens.skip_whitespace()) && token != TOKEN_CLOSE_PARENTHESIS) ; + while((token = tokens.skip_whitespace()) && token != TOKEN_CLOSE_PARENTHESIS) + type += token; + + // types[0] is the return argument + types[0] = type || null; + } // Argument list ", ..." else if (token == TOKEN_COMMA) @@ -640,7 +655,7 @@ objj_preprocessor.prototype.method = function(tokens) CONCAT(buffer, ")\n{ with(self)\n{"); CONCAT(buffer, this.preprocess(tokens, NULL, TOKEN_CLOSE_BRACE, TOKEN_OPEN_BRACE)); - CONCAT(buffer, "}\n})"); + CONCAT(buffer, "}\n},"+types.toSource()+")"); return buffer; } diff --git a/Objective-J/runtime.js b/Objective-J/runtime.js index 365ab725a..fa6fb2273 100644 --- a/Objective-J/runtime.js +++ b/Objective-J/runtime.js @@ -542,3 +542,84 @@ function sel_registerName(aName) { return aName; } + + +// Type checking version of objj_msgSend: + +function objj_msgSendTypeCheck(/*id*/ aReceiver, /*SEL*/ aSelector) +{ + if (aReceiver == nil) + return nil; + + CLASS_GET_METHOD_IMPLEMENTATION(var implementation, aReceiver.isa, aSelector); + + var types = method.types; + + for (var i = 2; i < arguments.length; i++) + { + try + { + runtimeTypeCheck(types[i-1], arguments[i]); + } + catch (e) + { + objj_fprintf(warning_stream, "Type check failure: "+ + "aReceiver="+String(aReceiver).substring(0,100)+", "+ + "aSelector="+String(aSelector).substring(0,100)+", "+ + "argument #"+(i-2)+": " + e); + } + } + + var result = implementation.apply(aReceiver, arguments); + + try + { + runtimeTypeCheck(types[0], result); + } + catch (e) + { + objj_fprintf(warning_stream, "Type check failure: "+ + "aReceiver="+String(aReceiver).substring(0,100)+", "+ + "aSelector="+String(aSelector).substring(0,100)+", "+ + "return value: " + e); + } + + return result; +} + +function runtimeTypeCheck(typeName, actual) +{ + var objjClass; + + if (!typeName) + { + return; + } + if (typeName === "id") + { + return; + } + else if (typeName === "void") + { + if (actual === undefined) + return; + } + else if (objjClass = objj_getClass(typeName)) + { + if (actual && actual.isa) + { + var theClass = actual.isa; + for(; theClass; theClass = theClass.super_class) + if (theClass === objjClass) + return; + } + } + else + { + return; + } + + throw("Expected " + typeName + ", was [" + actual +"]"); +} + +objj_msgSend = objj_msgSendTypeCheck; From d7b679dc786f6942bec01d8420876b1d90172715 Mon Sep 17 00:00:00 2001 From: tlrobinson Date: Mon, 20 Jul 2009 18:39:37 -0700 Subject: [PATCH 089/244] * Move type checking to debug.js. * Use JSON.stringify for serializing types array. * Print Objective-J objects' names instead of descriptions to prevent inf recursion. --- Objective-J/debug.js | 81 +++++++++++++++++++++++++++++++++++++++ Objective-J/preprocess.js | 2 +- Objective-J/runtime.js | 81 --------------------------------------- 3 files changed, 82 insertions(+), 82 deletions(-) diff --git a/Objective-J/debug.js b/Objective-J/debug.js index cbc5fd447..dfaa573b2 100644 --- a/Objective-J/debug.js +++ b/Objective-J/debug.js @@ -171,3 +171,84 @@ function objj_profileEnd() return objj_profile_cleanup(); } + + +// Type checking version of objj_msgSend: + +function objj_msgSendTypeCheck(/*id*/ aReceiver, /*SEL*/ aSelector) +{ + if (aReceiver == nil) + return nil; + + CLASS_GET_METHOD_IMPLEMENTATION(var implementation, aReceiver.isa, aSelector); + + var types = method.types; + + for (var i = 2; i < arguments.length; i++) + { + try + { + runtimeTypeCheck(types[i-1], arguments[i]); + } + catch (e) + { + objj_fprintf(warning_stream, "Type check failure: "+ + "aReceiver="+(aReceiver.isa ? "<"+aReceiver.isa.name+">" : String(aReceiver).substring(0,100))+", "+ + "aSelector="+String(aSelector).substring(0,100)+", "+ + "argument #"+(i-2)+": " + e); + } + } + + var result = implementation.apply(aReceiver, arguments); + + try + { + runtimeTypeCheck(types[0], result); + } + catch (e) + { + objj_fprintf(warning_stream, "Type check failure: "+ + "aReceiver="+(aReceiver.isa ? "<"+aReceiver.isa.name+">" : String(aReceiver).substring(0,100))+", "+ + "aSelector="+String(aSelector).substring(0,100)+", "+ + "return value: " + e); + } + + return result; +} + +function runtimeTypeCheck(typeName, actual) +{ + var objjClass; + + if (!typeName) + { + return; + } + if (typeName === "id") + { + return; + } + else if (typeName === "void") + { + if (actual === undefined) + return; + } + else if (objjClass = objj_getClass(typeName)) + { + if (actual && actual.isa) + { + var theClass = actual.isa; + for(; theClass; theClass = theClass.super_class) + if (theClass === objjClass) + return; + } + } + else + { + return; + } + + throw("Expected " + typeName + ", was [" + ((actual && actual.isa) ? "<"+actual.isa.name+">" : actual) +"]"); +} + +objj_msgSend = objj_msgSendTypeCheck; diff --git a/Objective-J/preprocess.js b/Objective-J/preprocess.js index f09af79f1..473c70f4b 100644 --- a/Objective-J/preprocess.js +++ b/Objective-J/preprocess.js @@ -655,7 +655,7 @@ objj_preprocessor.prototype.method = function(tokens) CONCAT(buffer, ")\n{ with(self)\n{"); CONCAT(buffer, this.preprocess(tokens, NULL, TOKEN_CLOSE_BRACE, TOKEN_OPEN_BRACE)); - CONCAT(buffer, "}\n},"+types.toSource()+")"); + CONCAT(buffer, "}\n},"+JSON.stringify(types)+")"); return buffer; } diff --git a/Objective-J/runtime.js b/Objective-J/runtime.js index fa6fb2273..365ab725a 100644 --- a/Objective-J/runtime.js +++ b/Objective-J/runtime.js @@ -542,84 +542,3 @@ function sel_registerName(aName) { return aName; } - - -// Type checking version of objj_msgSend: - -function objj_msgSendTypeCheck(/*id*/ aReceiver, /*SEL*/ aSelector) -{ - if (aReceiver == nil) - return nil; - - CLASS_GET_METHOD_IMPLEMENTATION(var implementation, aReceiver.isa, aSelector); - - var types = method.types; - - for (var i = 2; i < arguments.length; i++) - { - try - { - runtimeTypeCheck(types[i-1], arguments[i]); - } - catch (e) - { - objj_fprintf(warning_stream, "Type check failure: "+ - "aReceiver="+String(aReceiver).substring(0,100)+", "+ - "aSelector="+String(aSelector).substring(0,100)+", "+ - "argument #"+(i-2)+": " + e); - } - } - - var result = implementation.apply(aReceiver, arguments); - - try - { - runtimeTypeCheck(types[0], result); - } - catch (e) - { - objj_fprintf(warning_stream, "Type check failure: "+ - "aReceiver="+String(aReceiver).substring(0,100)+", "+ - "aSelector="+String(aSelector).substring(0,100)+", "+ - "return value: " + e); - } - - return result; -} - -function runtimeTypeCheck(typeName, actual) -{ - var objjClass; - - if (!typeName) - { - return; - } - if (typeName === "id") - { - return; - } - else if (typeName === "void") - { - if (actual === undefined) - return; - } - else if (objjClass = objj_getClass(typeName)) - { - if (actual && actual.isa) - { - var theClass = actual.isa; - for(; theClass; theClass = theClass.super_class) - if (theClass === objjClass) - return; - } - } - else - { - return; - } - - throw("Expected " + typeName + ", was [" + actual +"]"); -} - -objj_msgSend = objj_msgSendTypeCheck; From 745e24d2f5a9368da0c1b64227fa626c78577d45 Mon Sep 17 00:00:00 2001 From: tlrobinson Date: Mon, 20 Jul 2009 18:42:54 -0700 Subject: [PATCH 090/244] Rename objj_msgSendTypeCheck to objj_msgSend_TypeCheck to match others --- Objective-J/debug.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Objective-J/debug.js b/Objective-J/debug.js index dfaa573b2..59563e4fa 100644 --- a/Objective-J/debug.js +++ b/Objective-J/debug.js @@ -175,7 +175,7 @@ function objj_profileEnd() // Type checking version of objj_msgSend: -function objj_msgSendTypeCheck(/*id*/ aReceiver, /*SEL*/ aSelector) +function objj_msgSend_TypeCheck(/*id*/ aReceiver, /*SEL*/ aSelector) { if (aReceiver == nil) return nil; @@ -251,4 +251,4 @@ function runtimeTypeCheck(typeName, actual) throw("Expected " + typeName + ", was [" + ((actual && actual.isa) ? "<"+actual.isa.name+">" : actual) +"]"); } -objj_msgSend = objj_msgSendTypeCheck; +objj_msgSend = objj_msgSend_TypeCheck; From 4865d6b20f47f490002c7b684d6f24a73b18531b Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 20 Jul 2009 20:37:19 -0700 Subject: [PATCH 091/244] Fixed an issue with dependent keys in KVO only working for composed properties, and also made the "frame" key on views dependent on a view's frame origin and frame size. Reviewed by me. --- AppKit/CPView.j | 15 +++++++++++++ Foundation/CPKeyValueObserving.j | 33 +++++++++++++--------------- Tests/Foundation/CPKVOTest.j | 37 ++++++++++++++++++++++++++++++-- 3 files changed, 65 insertions(+), 20 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 7862fea77..0121e9f6b 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -209,6 +209,11 @@ var DOMElementPrototype = nil, CachedNotificationCenter = [CPNotificationCenter defaultCenter]; } ++ (CPSet)keyPathsForValuesAffectingFrame +{ + return [CPSet setWithObjects:@"frameOrigin", @"frameSize"]; +} + - (id)init { return [self initWithFrame:CGRectMakeZero()]; @@ -623,6 +628,16 @@ var DOMElementPrototype = nil, return _CGRectMakeCopy(_frame); } +- (CGPoint)frameOrigin +{ + return _CGPointMakeCopy(_frame.origin); +} + +- (CGSize)frameSize +{ + return _CGSizeMakeCopy(_frame.size); +} + /*! Moves the center of the receiver's frame to the provided point. The point is defined in the superview's coordinate system. The method posts a CPViewFrameDidChangeNotification to the default notification center if the receiver diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 189bf803a..7a1d575ae 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -68,8 +68,8 @@ + (CPSet)keyPathsForValuesAffectingValueForKey:(CPString)aKey { - var capitalizedKey = aKey.charAt(0).toUpperCase()+aKey.substring(1); - selector = "keyPathsForValuesAffectingValueFor"+capitalizedKey; + var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substring(1); + selector = "keyPathsForValuesAffecting" + capitalizedKey; if ([[self class] respondsToSelector:selector]) return objj_msgSend([self class], selector); @@ -202,17 +202,12 @@ var KVOProxyMap = [CPDictionary dictionary], var theMethod = class_getInstanceMethod(_nativeClass, theSelector); class_addMethod(_targetObject.isa, theSelector, theReplacementMethod(aKey, theMethod), ""); - - found = true; } } - if (found) - return; + var affectingKeys = [[_nativeClass keyPathsForValuesAffectingValueForKey:aKey] allObjects]; - var composedOfKeys = [[_nativeClass keyPathsForValuesAffectingValueForKey:aKey] allObjects]; - - if (!composedOfKeys) + if (![affectingKeys count]) return; var dependentKeysForClass = [DependentKeysMap objectForKey:[_nativeClass UID]]; @@ -223,19 +218,21 @@ var KVOProxyMap = [CPDictionary dictionary], [DependentKeysMap setObject:dependentKeysForClass forKey:[_nativeClass UID]]; } - for (var i=0, count=composedOfKeys.length; i Date: Mon, 20 Jul 2009 20:41:15 -0700 Subject: [PATCH 092/244] Fixed an issue with CPTextField not allowing select all from API, and also made editing field editor take on the alignment properties of the host textfield. Reviewed by me. --- AppKit/CPTextField.j | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 9c44c1f69..24ee21442 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -570,6 +570,15 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); element.style.font = [[self currentValueForThemeAttribute:@"font"] cssString]; element.style.zIndex = 1000; + switch ([self alignment]) + { + case CPCenterTextAlignment: element.style.textAlign = "center"; + break; + case CPRightTextAlignment: element.style.textAlign = "right"; + break; + default: element.style.textAlign = "left"; + } + var contentRect = [self contentRectForBounds:[self bounds]]; element.style.top = _CGRectGetMinY(contentRect) + "px"; @@ -763,8 +772,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); #if PLATFORM(DOM) var element = [self _inputElement]; - if (element.parentNode == _DOMElement && ([self isEditable] || [self isSelectable])) - element.select(); + if (element.parentNode === _DOMElement && ([self isEditable] || [self isSelectable])) + window.setTimeout(function() { element.select(); }, 0); #endif } From 48f0aa0b780317ba17412ca3402c773b88fe18ef Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 22 Jul 2009 10:43:59 -0700 Subject: [PATCH 093/244] Fix for menuDidClose: sometimes not being sent, and other times being sent after the menu item action (it should be sent before). Reviewed by me. --- AppKit/CPMenu.j | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/AppKit/CPMenu.j b/AppKit/CPMenu.j index 4940bcd96..79ca0e9d2 100644 --- a/AppKit/CPMenu.j +++ b/AppKit/CPMenu.j @@ -684,11 +684,6 @@ var _CPMenuBarVisible = NO, [_CPMenuWindow poolMenuWindow:aMenuWindow]; - var delegate = [menu delegate]; - - if ([delegate respondsToSelector:@selector(menuDidClose:)]) - [delegate menuDidClose:menu]; - if([aMenuItem isEnabled]) [CPApp sendAction:[aMenuItem action] to:[aMenuItem target] from:aMenuItem]; } @@ -1259,23 +1254,23 @@ var STICKY_TIME_INTERVAL = 500, [menu _highlightItemAtIndex:CPNotFound]; - // Clear these now so its faster next time around. - [_menuView setMenu:nil]; - [self orderOut:self]; - - if (_sessionDelegate && _didEndSelector) - objj_msgSend(_sessionDelegate, _didEndSelector, self, highlightedItem); - - [[CPNotificationCenter defaultCenter] - postNotificationName:CPMenuDidEndTrackingNotification - object:menu]; - + var delegate = [menu delegate]; if ([delegate respondsToSelector:@selector(menuDidClose:)]) [delegate menuDidClose:menu]; - + + if (_sessionDelegate && _didEndSelector) + objj_msgSend(_sessionDelegate, _didEndSelector, self, highlightedItem); + + [[CPNotificationCenter defaultCenter] + postNotificationName:CPMenuDidEndTrackingNotification + object:menu]; + + // Clear these now so its faster next time around. + [_menuView setMenu:nil]; + return; } From 12d03a51288e8b9ab6fcfaed15c68fac087de880 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 22 Jul 2009 19:34:44 -0700 Subject: [PATCH 094/244] Fix for custom objects. Reviewed by me. --- AppKit/Cib/_CPCibCustomObject.j | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/AppKit/Cib/_CPCibCustomObject.j b/AppKit/Cib/_CPCibCustomObject.j index 631efbc3d..1422aa96d 100644 --- a/AppKit/Cib/_CPCibCustomObject.j +++ b/AppKit/Cib/_CPCibCustomObject.j @@ -47,10 +47,21 @@ var _CPCibCustomObjectClassName = @"_CPCibCustomObjectClassName"; { var theClass = CPClassFromString(_className); -#if DEBUG + // Hey this is us! + if (theClass === [self class]) + { + _className = @"CPObject"; + + return self; + } + if (!theClass) + { +#if DEBUG CPLog("Unknown class \"" + _className + "\" in cib file"); #endif + theClass = [CPObject class]; + } if (theClass === [CPApplication class]) return [CPApplication sharedApplication]; From 3ff945663f1033b31914da29d87a3ee7af4894dc Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Thu, 23 Jul 2009 13:24:33 -0700 Subject: [PATCH 095/244] Refactored objj_msgSend debug hooks --- Objective-J/debug.js | 344 +++++++++++++++++++++++-------------------- 1 file changed, 185 insertions(+), 159 deletions(-) diff --git a/Objective-J/debug.js b/Objective-J/debug.js index 59563e4fa..e01fbcb7a 100644 --- a/Objective-J/debug.js +++ b/Objective-J/debug.js @@ -1,103 +1,207 @@ -function objj_backtrace_format(aReceiver, aSelector) +// formatting helpers + +function objj_debug_object_format(aReceiver) { - return "[<" + GETMETA(aReceiver).name + " " + (typeof sprintf == "function" ? sprintf("%#08x", aReceiver.__address) : aReceiver.__address.toString(16)) + "> " + aSelector + "]"; + return (aReceiver && aReceiver.isa) ? sprintf("<%s %#08x>", GETMETA(aReceiver).name, aReceiver.__address) : String(aReceiver); } -function objj_msgSend_Backtrace(/*id*/ aReceiver, /*SEL*/ aSelector) +function objj_debug_message_format(aReceiver, aSelector) { - if (aReceiver == nil) - return nil; + return sprintf("[%s %s]", objj_debug_object_format(aReceiver), aSelector); +} - objj_debug_backtrace.push(objj_backtrace_format(aReceiver, aSelector)); - try +// save the original msgSend implementations so we can restore them later +var objj_msgSend_original = objj_msgSend, + objj_msgSendSuper_original = objj_msgSendSuper; + + +// decorator management functions + +// reset to default objj_msgSend* implementations +function objj_msgSend_reset() +{ + objj_msgSend = objj_msgSend_original; + objj_msgSendSuper = objj_msgSendSuper_original; +} + +// decorate both objj_msgSend and objj_msgSendSuper +function objj_msgSend_decorate() +{ + for (var i = 0; i < arguments.length; i++) { - var result = class_getMethodImplementation(aReceiver.isa, aSelector).apply(aReceiver, arguments); + objj_msgSend = arguments[i](objj_msgSend); + objj_msgSendSuper = arguments[i](objj_msgSendSuper); } - catch (anException) - { - CPLog.error("Exception " + anException + " in " + objj_backtrace_format(aReceiver, aSelector)); - objj_debug_print_backtrace(); - } - - objj_debug_backtrace.pop(); - - return result; } -function objj_msgSendSuper_Backtrace(/*id*/ aSuper, /*SEL*/ aSelector) +// reset then decorate both objj_msgSend and objj_msgSendSuper +function objj_msgSend_set_decorators() { - objj_debug_backtrace.push(objj_backtrace_format(aSuper.receiver, aSelector)); - var super_class = aSuper.super_class; - - arguments[0] = aSuper.receiver; - - try - { - var result = class_getMethodImplementation(super_class, aSelector).apply(aSuper.receiver, arguments); - } - catch (anException) - { - CPLog.error("Exception " + anException + " in " + objj_backtrace_format(aSuper.receiver, aSelector)); - objj_debug_print_backtrace(); - } - - objj_debug_backtrace.pop(); - - return result; + objj_msgSend_reset(); + objj_msgSend_decorate.apply(null, arguments); } -function objj_msgSend_Profile(/*id*/ aReceiver, /*SEL*/ aSelector) + +// backtrace decorator + +var objj_backtrace = []; +function objj_backtrace_decorator(msgSend) { - if (aReceiver == nil) - return nil; - - // profiling book keeping - var profileRecord = { - parent : objj_debug_profile, - receiver : GETMETA(aReceiver).name, - selector : aSelector, - calls : [] + return function(aReceiverOrSuper, aSelector) + { + var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper); + + // push the receiver and selector onto the backtrace stack + objj_backtrace.push({ receiver: aReceiver, selector : aSelector }); + try + { + return msgSend.apply(null, arguments); + } + catch (anException) + { + // print the exception and backtrace + objj_fprintf(warning_stream, "Exception " + anException + " in " + objj_debug_message_format(aReceiver, aSelector)); + for (var i = 0; i < objj_backtrace.length; i++) + objj_fprintf(warning_stream, objj_debug_message_format(objj_backtrace[i].receiver, objj_backtrace[i].selector)); + } + finally + { + // make sure to always pop + objj_backtrace.pop(); + } } - objj_debug_profile.calls.push(profileRecord); - objj_debug_profile = profileRecord; - profileRecord.start = new Date(); - - var result = class_getMethodImplementation(aReceiver.isa, aSelector).apply(aReceiver, arguments); - - profileRecord.end = new Date(); - objj_debug_profile = profileRecord.parent; - - return result; } -function objj_msgSendSuper_Profile(/*id*/ aSuper, /*SEL*/ aSelector) +// type checking decorator + +var objj_typechecks_reported = {}; +function objj_typecheck_decorator(msgSend) { - // profiling book keeping - var profileRecord = { - parent : objj_debug_profile, - receiver : GETMETA(aReceiver).name, - selector : aSelector, - calls : [] + return function(aReceiverOrSuper, aSelector) + { + var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper); + + if (!aReceiver) + return msgSend.apply(null, arguments); + + var types = aReceiver.isa.method_dtable[aSelector].types; + for (var i = 2; i < arguments.length; i++) + { + try + { + objj_debug_typecheck(types[i-1], arguments[i]); + } + catch (e) + { + var key = [GETMETA(aReceiver).name, aSelector, i, e].join(";"); + if (!objj_typechecks_reported[key]) { + objj_typechecks_reported[key] = true; + objj_fprintf(warning_stream, "Type check failed on argument " + (i-2) + " of " + objj_debug_message_format(aReceiver, aSelector) + ": " + e); + } + } + } + + var result = msgSend.apply(null, arguments); + + try + { + objj_debug_typecheck(types[0], result); + } + catch (e) + { + var key = [GETMETA(aReceiver).name, aSelector, "ret", e].join(";"); + if (!objj_typechecks_reported[key]) { + objj_typechecks_reported[key] = true; + objj_fprintf(warning_stream, "Type check failed on return val of " + objj_debug_message_format(aReceiver, aSelector) + ": " + e); + } + } + + return result; } - objj_debug_profile.calls.push(profileRecord); - objj_debug_profile = profileRecord; - profileRecord.start = new Date(); - - var super_class = aSuper.super_class; - - arguments[0] = aSuper.receiver; - - var result = class_getMethodImplementation(super_class, aSelector).apply(aSuper.receiver, arguments); - - profileRecord.end = new Date(); - objj_debug_profile = profileRecord.parent; - - return result; } -var objj_msgSend_Standard = objj_msgSend, - objj_msgSendSuper_Standard = objj_msgSendSuper; +// type checking logic: +function objj_debug_typecheck(expectedType, object) +{ + var objjClass; + + if (!expectedType) + { + return; + } + else if (expectedType === "id") + { + if (object !== undefined) + return; + } + else if (expectedType === "void") + { + if (object === undefined) + return; + } + else if (objjClass = objj_getClass(expectedType)) + { + if (object === nil) + { + return; + } + else if (object.isa) + { + var theClass = object.isa; + for (; theClass; theClass = theClass.super_class) + if (theClass === objjClass) + return; + } + } + else + { + return; + } + + var actualType; + if (object === null) + actualType = "null"; + else if (object === undefined) + actualType = "void"; + else if (object.isa) + actualType = GETMETA(object).name; + else + actualType = typeof object; + + throw ("expected=" + expectedType + ", actual=" + actualType); +} + +// profile decorator +/* +function objj_debug_profile(msgSend) +{ + return function(aReceiverOrSuper, aSelector) + { + var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper); + + // profiling book keeping + var profileRecord = { + parent : objj_debug_profile, + receiver : aReceiver && GETMETA(aReceiver).name, + selector : aSelector, + calls : [] + } + objj_debug_profile.calls.push(profileRecord); + objj_debug_profile = profileRecord; + profileRecord.start = new Date(); + + try + { + return msgSend.apply(null, arguments); + } + finally + { + profileRecord.end = new Date(); + objj_debug_profile = profileRecord.parent; + } + } +} // FIXME: This could be much better. var objj_debug_backtrace; @@ -171,84 +275,6 @@ function objj_profileEnd() return objj_profile_cleanup(); } +*/ - -// Type checking version of objj_msgSend: - -function objj_msgSend_TypeCheck(/*id*/ aReceiver, /*SEL*/ aSelector) -{ - if (aReceiver == nil) - return nil; - - CLASS_GET_METHOD_IMPLEMENTATION(var implementation, aReceiver.isa, aSelector); - - var types = method.types; - - for (var i = 2; i < arguments.length; i++) - { - try - { - runtimeTypeCheck(types[i-1], arguments[i]); - } - catch (e) - { - objj_fprintf(warning_stream, "Type check failure: "+ - "aReceiver="+(aReceiver.isa ? "<"+aReceiver.isa.name+">" : String(aReceiver).substring(0,100))+", "+ - "aSelector="+String(aSelector).substring(0,100)+", "+ - "argument #"+(i-2)+": " + e); - } - } - - var result = implementation.apply(aReceiver, arguments); - - try - { - runtimeTypeCheck(types[0], result); - } - catch (e) - { - objj_fprintf(warning_stream, "Type check failure: "+ - "aReceiver="+(aReceiver.isa ? "<"+aReceiver.isa.name+">" : String(aReceiver).substring(0,100))+", "+ - "aSelector="+String(aSelector).substring(0,100)+", "+ - "return value: " + e); - } - - return result; -} - -function runtimeTypeCheck(typeName, actual) -{ - var objjClass; - - if (!typeName) - { - return; - } - if (typeName === "id") - { - return; - } - else if (typeName === "void") - { - if (actual === undefined) - return; - } - else if (objjClass = objj_getClass(typeName)) - { - if (actual && actual.isa) - { - var theClass = actual.isa; - for(; theClass; theClass = theClass.super_class) - if (theClass === objjClass) - return; - } - } - else - { - return; - } - - throw("Expected " + typeName + ", was [" + ((actual && actual.isa) ? "<"+actual.isa.name+">" : actual) +"]"); -} - -objj_msgSend = objj_msgSend_TypeCheck; +objj_msgSend_set_decorators(objj_typecheck_decorator, objj_backtrace_decorator); From 88be473da432591e4b95cf4dde52713e6d874915 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Thu, 23 Jul 2009 14:14:34 -0700 Subject: [PATCH 096/244] Fixed bug in type check logic, added ability to print stack traces on type check errors --- Objective-J/debug.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Objective-J/debug.js b/Objective-J/debug.js index e01fbcb7a..fddd7fed7 100644 --- a/Objective-J/debug.js +++ b/Objective-J/debug.js @@ -46,6 +46,12 @@ function objj_msgSend_set_decorators() // backtrace decorator var objj_backtrace = []; + +function objj_backtrace_print(stream) { + for (var i = 0; i < objj_backtrace.length; i++) + objj_fprintf(stream, objj_debug_message_format(objj_backtrace[i].receiver, objj_backtrace[i].selector)); +} + function objj_backtrace_decorator(msgSend) { return function(aReceiverOrSuper, aSelector) @@ -62,8 +68,7 @@ function objj_backtrace_decorator(msgSend) { // print the exception and backtrace objj_fprintf(warning_stream, "Exception " + anException + " in " + objj_debug_message_format(aReceiver, aSelector)); - for (var i = 0; i < objj_backtrace.length; i++) - objj_fprintf(warning_stream, objj_debug_message_format(objj_backtrace[i].receiver, objj_backtrace[i].selector)); + objj_backtrace_print(warning_stream); } finally { @@ -75,7 +80,9 @@ function objj_backtrace_decorator(msgSend) // type checking decorator -var objj_typechecks_reported = {}; +var objj_typechecks_reported = {}, + objj_typecheck_prints_backtrace = false; + function objj_typecheck_decorator(msgSend) { return function(aReceiverOrSuper, aSelector) @@ -98,6 +105,8 @@ function objj_typecheck_decorator(msgSend) if (!objj_typechecks_reported[key]) { objj_typechecks_reported[key] = true; objj_fprintf(warning_stream, "Type check failed on argument " + (i-2) + " of " + objj_debug_message_format(aReceiver, aSelector) + ": " + e); + if (objj_typecheck_prints_backtrace) + objj_backtrace_fprint(warning_stream); } } } @@ -114,6 +123,8 @@ function objj_typecheck_decorator(msgSend) if (!objj_typechecks_reported[key]) { objj_typechecks_reported[key] = true; objj_fprintf(warning_stream, "Type check failed on return val of " + objj_debug_message_format(aReceiver, aSelector) + ": " + e); + if (objj_typecheck_prints_backtrace) + objj_backtrace_fprint(warning_stream); } } @@ -146,7 +157,7 @@ function objj_debug_typecheck(expectedType, object) { return; } - else if (object.isa) + else if (object && object.isa) { var theClass = object.isa; for (; theClass; theClass = theClass.super_class) From 4824f22e3ce0880d526338751e6a1ec0c7402baa Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 24 Jul 2009 11:22:32 -0700 Subject: [PATCH 097/244] Fix for super not working for class methods. Closes #227. Reviewed by me. --- Objective-J/preprocess.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Objective-J/preprocess.js b/Objective-J/preprocess.js index 0032ed203..47218a9ca 100644 --- a/Objective-J/preprocess.js +++ b/Objective-J/preprocess.js @@ -170,6 +170,7 @@ var objj_preprocessor = function(aString, aSourceFile, aBundle, flags) { this._currentClass = ""; this._currentSuperClass = ""; + this._currentSuperMetaClass = ""; this._file = aSourceFile; this._fragments = []; @@ -177,6 +178,7 @@ var objj_preprocessor = function(aString, aSourceFile, aBundle, flags) this._tokens = new objj_lexer(aString); this._flags = flags; this._bundle = aBundle; + this._classMethod = false; this.preprocess(this._tokens, this._preprocessed); //alert(this._preprocessed + ""); @@ -262,8 +264,7 @@ objj_preprocessor.prototype.brackets = function(/*objj_lexer*/ tokens, /*objj_st if (tuples[0][0].atoms[0] == TOKEN_SUPER) { CONCAT(aStringBuffer, "objj_msgSendSuper("); - CONCAT(aStringBuffer, "{ receiver:self, super_class:" + this._currentSuperClass + " }"); - + CONCAT(aStringBuffer, "{ receiver:self, super_class:" + (this._classMethod ? this._currentSuperMetaClass : this._currentSuperClass ) + " }"); } else { @@ -350,7 +351,7 @@ objj_preprocessor.prototype.implementation = function(tokens, /*objj_stringBuffe category = NO, class_name = tokens.skip_whitespace(), superclass_name = "Nil", - + instance_methods = new objj_stringBuffer(), class_methods = new objj_stringBuffer(); @@ -358,6 +359,7 @@ objj_preprocessor.prototype.implementation = function(tokens, /*objj_stringBuffe objj_exception_throw(new objj_exception(OBJJParseException, "*** Expected class name, found \"" + class_name + "\".")); this._currentSuperClass = NULL; + this._currentSuperMetaClass = NULL; this._currentClass = class_name; // If we reach an open parenthesis, we are declaring a category. @@ -376,12 +378,18 @@ objj_preprocessor.prototype.implementation = function(tokens, /*objj_stringBuffe CONCAT(buffer, "var meta_class = the_class.isa;"); var superclass_name = dictionary_getValue(SUPER_CLASSES, class_name); - + // FIXME: We should have a better solution for this case, although it's actually not much slower than the real case. if (!superclass_name) + { this._currentSuperClass = "objj_getClass(\"" + class_name + "\").super_class"; + this._currentSuperMetaClass = "objj_getMetaClass(\"" + class_name + "\").super_class"; + } else + { this._currentSuperClass = "objj_getClass(\"" + superclass_name + "\")"; + this._currentSuperMetaClass = "objj_getMeraClass(\"" + superclass_name + "\")"; + } } else { @@ -394,7 +402,9 @@ objj_preprocessor.prototype.implementation = function(tokens, /*objj_stringBuffe objj_exception_throw(new objj_exception(OBJJParseException, "*** Expected class name, found \"" + token + "\".")); superclass_name = token; + this._currentSuperClass = "objj_getClass(\"" + superclass_name + "\")"; + this._currentSuperMetaClass = "objj_getMetaClass(\"" + superclass_name + "\")"; dictionary_setValue(SUPER_CLASSES, class_name, superclass_name); @@ -503,6 +513,8 @@ objj_preprocessor.prototype.implementation = function(tokens, /*objj_stringBuffe { if (token == TOKEN_PLUS) { + this._classMethod = true; + if (IS_NOT_EMPTY(class_methods)) CONCAT(class_methods, ", "); @@ -511,6 +523,8 @@ objj_preprocessor.prototype.implementation = function(tokens, /*objj_stringBuffe else if (token == TOKEN_MINUS) { + this._classMethod = false; + if (IS_NOT_EMPTY(instance_methods)) CONCAT(instance_methods, ", "); From 57ee7bcfce4a4a46116c3859671426c93e38503d Mon Sep 17 00:00:00 2001 From: cacaodev Date: Thu, 16 Jul 2009 01:53:04 +0800 Subject: [PATCH 098/244] Fixed bug reported by Paul Tomlin http://groups.google.com/group/objectivej/browse_thread/thread/e4bc41026a8f100f/6b14f3b74189df18 Signed-off-by: Francisco Ryan Tolmasky I --- AppKit/CPSearchField.j | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j index 8adc431aa..d4c575197 100644 --- a/AppKit/CPSearchField.j +++ b/AppKit/CPSearchField.j @@ -143,8 +143,7 @@ var CPSearchFieldSearchImage = nil, // Managing Buttons /*! Sets the button used to display the search-button image - @param button - @param The search button. + @param button The search button. */ - (void)setSearchButton:(CPButton)button { @@ -567,7 +566,7 @@ var CPSearchFieldSearchImage = nil, - (void)_showMenu:(id)sender { - if(_searchMenu == nil) + if(_searchMenu == nil || ![self isEnabled]) return; [super selectText:nil]; @@ -690,13 +689,15 @@ var CPSearchButtonKey = @"CPSearchButtonKey", self = [super initWithCoder:coder]; _searchButton = [coder decodeObjectForKey:CPSearchButtonKey]; - _searchButton = [coder decodeObjectForKey:CPCancelButtonKey]; + _cancelButton = [coder decodeObjectForKey:CPCancelButtonKey]; _recentsAutosaveName = [coder decodeObjectForKey:CPRecentsAutosaveNameKey]; _sendsWholeSearchString = [coder decodeBoolForKey:CPSendsWholeSearchStringKey]; _sendsSearchStringImmediately = [coder decodeBoolForKey:CPSendsSearchStringImmediatelyKey]; _maximumRecents = [coder decodeIntForKey:CPMaximumRecentsKey]; [self setSearchMenuTemplate:[coder decodeObjectForKey:CPSearchMenuTemplateKey]]; - + [self resetCancelButton]; + [self setDelegate:self]; + return self; } From 5829c8b6820113264fde7b3cb15e61ceb3a12afd Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Fri, 24 Jul 2009 22:49:18 -0700 Subject: [PATCH 099/244] Fix an issue where removing all items from a CPPopUpButton caused an exception. --- AppKit/CPPopUpButton.j | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index acaecb870..47d7e2176 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -204,7 +204,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); */ - (CPMenuItem)selectedItem { - if (_selectedIndex < 0) + if (_selectedIndex < 0 || _selectedIndex > [self numberOfItems] - 1) return nil; return [_menu itemAtIndex:_selectedIndex]; @@ -550,7 +550,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)synchronizeTitleAndSelectedItem { var item = nil; - +debugger; if ([self pullsDown]) { var items = [_menu itemArray]; @@ -628,13 +628,15 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); { var numberOfItems = [self numberOfItems]; - if (numberOfItems <= _selectedIndex) + if (numberOfItems <= _selectedIndex && numberOfItems > 0) [self selectItemAtIndex:numberOfItems - 1]; + else + [self synchronizeTitleAndSelectedItem]; } - (void)mouseDown:(CPEvent)anEvent { - if (![self isEnabled]) + if (![self isEnabled] || ![self numberOfItems]) return; [self highlight:YES]; From 82cfc5f994ed2ee645a6068fabdc487e377121a3 Mon Sep 17 00:00:00 2001 From: Geoffrey Grosenbach Date: Sun, 5 Jul 2009 22:26:41 -0700 Subject: [PATCH 100/244] Created initial test for CPSegmentedControl --- Tests/AppKit/CPSegmentedControlTest.j | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Tests/AppKit/CPSegmentedControlTest.j diff --git a/Tests/AppKit/CPSegmentedControlTest.j b/Tests/AppKit/CPSegmentedControlTest.j new file mode 100644 index 000000000..ffd794113 --- /dev/null +++ b/Tests/AppKit/CPSegmentedControlTest.j @@ -0,0 +1,33 @@ +@import + +// TODO: Maybe create one test file for each tracking mode so they can be tested separately without confusion. +@implementation CPSegmentedControlTest : OJTestCase +{ + CPSegmentedControlTest _segmentedControl; +} + +- (void)setUp +{ + _segmentedControl = [[CPSegmentedControl alloc] initWithFrame:CGRectMakeZero()]; + [_segmentedControl setSegmentCount:3]; +} + +- (void)testMakeCPSegmentedControlInstance +{ + [self assertNotNull:_segmentedControl]; +} + +- (void)testDefaultsToSelectOneTrackingMode +{ + [self assert:[_segmentedControl trackingMode] equals:CPSegmentSwitchTrackingSelectOne]; +} + +- (void)testSelectsOneSegmentStartingAtBlankState +{ + [self assert:[_segmentedControl selectedSegment] equals:-1]; + [_segmentedControl setSelectedSegment:1]; + [self assert:[_segmentedControl selectedSegment] equals:1]; +} + +@end + From 8382bb1ae85dc9a1e0828f2169231b7c98d411c8 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 25 Jul 2009 16:47:30 -0700 Subject: [PATCH 101/244] Beginnings of Platform reorg. Reviewed by me. --- AppKit/CPApplication.j | 9 +- AppKit/CPMenu.j | 2 +- AppKit/CPStringDrawing.j | 76 +- AppKit/CPWindow/CPWindow.j | 1 + AppKit/Platform/CPPlatform.j | 27 + AppKit/Platform/CPPlatformString.j | 104 +++ AppKit/Platform/CPPlatformWindow.j | 101 +++ AppKit/Platform/DOM/CPDOMWindowBridge.j | 965 +------------------- AppKit/Platform/DOM/_CPBrowserWindow.j | 10 + AppKit/Platform/DOM/_CPDOMWindow.j | 1063 +++++++++++++++++++++++ 10 files changed, 1335 insertions(+), 1023 deletions(-) create mode 100644 AppKit/Platform/CPPlatform.j create mode 100644 AppKit/Platform/CPPlatformString.j create mode 100644 AppKit/Platform/CPPlatformWindow.j create mode 100644 AppKit/Platform/DOM/_CPBrowserWindow.j create mode 100644 AppKit/Platform/DOM/_CPDOMWindow.j diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index f150bb026..f7c9962b8 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -29,6 +29,8 @@ @import "CPDocumentController.j" @import "CPThemeBlend.j" @import "CPCibLoading.j" +@import "CPPlatform.j" + var CPMainCibFile = @"CPMainCibFile", CPMainCibFileHumanFriendly = @"Main cib file base name"; @@ -805,7 +807,7 @@ var _CPAppBootstrapperActions = nil; + (void)actions { - return [@selector(loadDefaultTheme), @selector(loadMainCibFile)]; + return [@selector(bootstrapPlatform), @selector(loadDefaultTheme), @selector(loadMainCibFile)]; } + (void)performActions @@ -824,6 +826,11 @@ var _CPAppBootstrapperActions = nil; [CPApp run]; } ++ (BOOL)bootstrapPlatform +{ + return [CPPlatform bootstrap]; +} + + (BOOL)loadDefaultTheme { var blend = [[CPThemeBlend alloc] initWithContentsOfURL:[[CPBundle bundleForClass:[CPApplication class]] pathForResource:@"Aristo.blend"]]; diff --git a/AppKit/CPMenu.j b/AppKit/CPMenu.j index 79ca0e9d2..46e415468 100644 --- a/AppKit/CPMenu.j +++ b/AppKit/CPMenu.j @@ -119,7 +119,7 @@ var _CPMenuBarVisible = NO, // FIXME: There must be a better way to do this. #if PLATFORM(DOM) - [[CPDOMWindowBridge sharedDOMWindowBridge] _bridgeResizeEvent:nil]; + [window.platformWindow resizeEvent:nil]; #endif } diff --git a/AppKit/CPStringDrawing.j b/AppKit/CPStringDrawing.j index 61b4fda70..dec7bde1c 100644 --- a/AppKit/CPStringDrawing.j +++ b/AppKit/CPStringDrawing.j @@ -22,13 +22,9 @@ @import -#include "CoreGraphics/CGGeometry.h" -#include "Platform/Platform.h" +@import "CPPlatformString.j" -var CPStringReferenceElement = nil, - CPStringDefaultFont = nil; - @implementation CPString (CPStringDrawing) /*! @@ -46,75 +42,7 @@ var CPStringReferenceElement = nil, - (CGSize)sizeWithFont:(CPFont)aFont inWidth:(float)aWidth { -#if PLATFORM(DOM) - if (!CPStringReferenceElement) - { - CPStringReferenceElement = document.createElement("span"); - - var style = CPStringReferenceElement.style; - - style.position = "absolute"; - style.whiteSpace = "pre"; - style.visibility = "visible"; - style.padding = "0px"; - style.margin = "0px"; - - style.left = "-100000px"; - style.top = "-100000px"; - style.zIndex = "10000"; - style.background = "red"; - - document.getElementsByTagName("body")[0].appendChild(CPStringReferenceElement); - } - - if (!aFont) - { - if (!CPStringDefaultFont) - CPStringDefaultFont = [CPFont systemFontOfSize:12.0]; - - aFont = CPStringDefaultFont; - } - - var style = CPStringReferenceElement.style; - - if (aWidth === NULL) - { - style.width = ""; - style.whiteSpace = "pre"; - } - - else - { - style.width = ROUND(aWidth) + "px"; - - if (document.attachEvent) - style.wordWrap = "break-word"; - - else - { - style.whiteSpace = "-o-pre-wrap"; - style.whiteSpace = "-pre-wrap"; - style.whiteSpace = "-moz-pre-wrap"; - style.whiteSpace = "pre-wrap"; - } - } - - style.font = [aFont cssString]; - - if (CPFeatureIsCompatible(CPJavascriptInnerTextFeature)) - CPStringReferenceElement.innerText = self; - - else if (CPFeatureIsCompatible(CPJavascriptTextContentFeature)) - CPStringReferenceElement.textContent = self; - - return _CGSizeMake(CPStringReferenceElement.clientWidth, CPStringReferenceElement.clientHeight); -#endif - return _CGSizeMakeZero(); -} - -+ (void)_resetSize -{ - CPStringReferenceElement = nil; + return [CPPlatformString sizeOfString:self withFont:aFont forWidth:aWidth]; } @end diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 48a9968c6..b3499c575 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -27,6 +27,7 @@ @import "CGGeometry.j" @import "CPAnimation.j" @import "CPResponder.j" +@import "CPPlatformWindow.j" #include "../Platform/Platform.h" #include "../Platform/DOM/CPDOMDisplayServer.h" diff --git a/AppKit/Platform/CPPlatform.j b/AppKit/Platform/CPPlatform.j new file mode 100644 index 000000000..e7db6ddb1 --- /dev/null +++ b/AppKit/Platform/CPPlatform.j @@ -0,0 +1,27 @@ + +@import + +#include "Platform.h" + + +@implementation CPPlatform : CPObject +{ +} + ++ (void)bootstrap +{ +#if PLATFORM(DOM) + var body = document.getElementsByTagName("body")[0]; + + body.innerHTML = ""; // Get rid of anything that might be lingering in the body element. + body.style.overflow = "hidden"; + + if (document.documentElement) + document.documentElement.style.overflow = "hidden"; +#endif + + [CPPlatformString bootstrap]; + window.firstWindow = [[CPPlatformWindow alloc] _init]; +} + +@end diff --git a/AppKit/Platform/CPPlatformString.j b/AppKit/Platform/CPPlatformString.j new file mode 100644 index 000000000..24e91d152 --- /dev/null +++ b/AppKit/Platform/CPPlatformString.j @@ -0,0 +1,104 @@ + + +@import + +#include "../CoreGraphics/CGGeometry.h" +#include "Platform.h" + + +#if PLATFORM(DOM) +var DOMIFrameElement = nil, + DOMSpanElement = nil, + DefaultFont = nil; +#endif + +@implementation CPPlatformString : CPObject +{ +} + ++ (void)bootstrap +{ +#if PLATFORM(DOM) + DOMIFrameElement = document.createElement("iframe"); + + DOMIFrameElement.name = name = "iframe_" + FLOOR(RAND() * 10000); + DOMIFrameElement.style.position = "absolute"; + DOMIFrameElement.style.left = "-100px"; + DOMIFrameElement.style.top = "-100px"; + DOMIFrameElement.style.width = "1px"; + DOMIFrameElement.style.height = "1px"; + DOMIFrameElement.style.borderWidth = "0px"; + DOMIFrameElement.style.background = "blue"; + DOMIFrameElement.style.overflow = "hidden"; + DOMIFrameElement.style.zIndex = 100000000000; + + document.getElementsByTagName("body")[0].appendChild(DOMIFrameElement); + + var DOMIFrameDocument = (DOMIFrameElement.contentDocument || DOMIFrameElement.contentWindow.document); + + DOMIFrameDocument.write(""); + DOMIFrameDocument.close(); + + DOMSpanElement = DOMIFrameDocument.createElement("span"); + + DOMSpanElement.style.position = "absolute"; + DOMSpanElement.style.whiteSpace = "pre"; + DOMSpanElement.style.visibility = "visible"; + DOMSpanElement.style.padding = "0px"; + DOMSpanElement.style.margin = "0px"; + DOMSpanElement.style.background = "red"; + + DOMIFrameDocument.getElementsByTagName("body")[0].appendChild(DOMSpanElement); +#endif +} + ++ (CGSize)sizeOfString:(CPString)aString withFont:(CPFont)aFont forWidth:(float)aWidth +{ +#if PLATFORM(DOM) + if (!aFont) + { + if (!DefaultFont) + DefaultFont = [CPFont systemFontOfSize:12.0]; + + aFont = DefaultFont; + } + + var style = DOMSpanElement.style; + + if (aWidth === NULL) + { + style.width = ""; + style.whiteSpace = "pre"; + } + + else + { + style.width = ROUND(aWidth) + "px"; + + if (document.attachEvent) + style.wordWrap = "break-word"; + + else + { + style.whiteSpace = "-o-pre-wrap"; + style.whiteSpace = "-pre-wrap"; + style.whiteSpace = "-moz-pre-wrap"; + style.whiteSpace = "pre-wrap"; + } + } + + style.font = [aFont cssString]; + + if (CPFeatureIsCompatible(CPJavascriptInnerTextFeature)) + DOMSpanElement.innerText = aString; + + else if (CPFeatureIsCompatible(CPJavascriptTextContentFeature)) + DOMSpanElement.textContent = aString; + + return _CGSizeMake(DOMSpanElement.clientWidth, DOMSpanElement.clientHeight); +#else + return _CGSizeMakeZero(); +#endif +} + +@end diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j new file mode 100644 index 000000000..04e35b808 --- /dev/null +++ b/AppKit/Platform/CPPlatformWindow.j @@ -0,0 +1,101 @@ + +@import + +#import "Platform.h" +#import "../CoreGraphics/CGGeometry.h" + + +var PlatformWindowClass = NULL; + +@implementation CPPlatformWindow : CPObject +{ + CGRect _contentRect; +} + ++ (void)_setPlatformWindowClass:(Class)aClass +{ + PlatformWindowClass = aClass; +} + ++ (Class)_platformWindowClass +{ + return PlatformWindowClass; +} + ++ (id)alloc +{ + if (self === [CPPlatformWindow class]) + return [PlatformWindowClass alloc]; + + return [super alloc]; +} + +- (id)initWithContentRect:(CGRect)aRect +{ + self = [super init]; + + if (self) + _contentRect = _CGRectMakeCopy(aRect); + + return self; +} + +- (id)init +{ + return [self initWithContentRect:_CGRectMake(0.0, 0.0, 400.0, 500.0)]; +} + +- (CGRect)contentRect +{ + return _CGRectMakeCopy(_contentRect); +} + +- (void)setContentRect:(CGRect)aRect +{ + if (!aRect || _CGRectEqualToRect(_contentRect, aRect)) + return; + + [self setContentOrigin:aRect.origin]; + [self setContentSize:aRect.size]; +} + +- (void)setContentOrigin:(CGPoint)aPoint +{ + var origin = _contentRect.origin; + + if (!aPoint || _CGPointEqualToPoint(origin, aPoint)) + return; + + origin.x = aPoint.x; + origin.y = aPoint.y; + + [self updateNativeContentOrigin]; +} + +- (void)setContentSize:(CGSize)aSize +{ + var size = _contentRect.size; + + if (!aSize || _CGSizeEqualToSize(size, aSize)) + return; + + var delta = _CGSizeMake(aSize.width - size.width, aSize.height - size.height); + + size.width = aSize.width; + size.height = aSize.height; + + [self updateNativeContentSize]; +} + +- (void)updateFromNativeContentRect +{ + [self setContentRect:[self nativeContentRect]]; +} + +@end + +#if PLATFORM(BROWSER) +@import "_CPBrowserWindow.j" +#else +[CPPlatformWindow _setPlatformWindowClass:[CPPlatformWindow class]]; +#endif diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index 6b6c57d29..78f6fe640 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -26,7 +26,6 @@ @import "CPEvent.j" @import "CPCompatibility.j" -@import "CPDOMWindowLayer.j" #import "../../CoreGraphics/CGGeometry.h" @@ -42,168 +41,26 @@ var CPDOMWindowGetFrame, @implementation CPDOMWindowBridge : CPObject { - CPArray _orderedWindows; - CPWindow _mouseDownWindow; - - DOMWindow _DOMWindow; - DOMElement _DOMBodyElement; - DOMElement _DOMFocusElement; - - CPArray _windowLevels; - CPDictionary _windowLayers; - - CPRect _frame; - CPRect _contentBounds; - - BOOL _mouseIsDown; - CPTimeInterval _lastMouseUp; - CPTimeInterval _lastMouseDown; - - JSObject _charCodes; - unsigned _keyCode; - - BOOL _DOMEventMode; - - // Native Pasteboard Support - DOMElement _DOMPasteboardElement; - CPEvent _pasteboardKeyDownEvent; - - CPString _overriddenEventType; } /*! - Returns the shared DOMWindowBridge. + Returns the shared DOMWindowBridge. */ + (id)sharedDOMWindowBridge { if (!CPSharedDOMWindowBridge) - CPSharedDOMWindowBridge = [[CPDOMWindowBridge alloc] _initWithDOMWindow:window]; - + CPSharedDOMWindowBridge = [[CPDOMWindowBridge alloc] _init]; + return CPSharedDOMWindowBridge; } -- (id)initWithFrame:(CPRect)aFrame -{ - alert("unimplemented"); -} - /* @ignore */ -- (id)_initWithDOMWindow:(DOMWindow)aDOMWindow +- (id)_init//_initWithDOMWindow:(DOMWindow)aDOMWindow { self = [super init]; - + if (self) { - _DOMWindow = aDOMWindow; - - _windowLevels = []; - _windowLayers = [CPDictionary dictionary]; - - // Do this before getting the frame of the window, because if not it will be wrong in IE. - _DOMBodyElement = document.getElementsByTagName("body")[0]; - _DOMBodyElement.innerHTML = ""; // Get rid of anything that might be lingering in the body element. - _DOMBodyElement.style.overflow = "hidden"; - _DOMBodyElement.style.webkitTouchCallout = "none"; - - [CPString _resetSize]; - - if (document.documentElement) - document.documentElement.style.overflow = "hidden"; - - _frame = CPDOMWindowGetFrame(_DOMWindow); - _contentBounds = CGRectMake(0.0, 0.0, CPRectGetWidth(_frame), CPRectGetHeight(_frame)); - - _DOMFocusElement = document.createElement("input"); - _DOMFocusElement.style.position = "absolute"; - _DOMFocusElement.style.zIndex = "-1000"; - _DOMFocusElement.style.opacity = "0"; - _DOMFocusElement.style.filter = "alpha(opacity=0)"; - _DOMBodyElement.appendChild(_DOMFocusElement); - - // Create Native Pasteboard handler. - _DOMPasteboardElement = document.createElement("input"); - _DOMPasteboardElement.style.position = "absolute"; - _DOMPasteboardElement.style.top = "-10000px"; - _DOMPasteboardElement.style.zIndex = "99"; - - _DOMBodyElement.appendChild(_DOMPasteboardElement); - - // Make sure the pastboard element is blurred. - _DOMPasteboardElement.blur(); - - _charCodes = {}; - - // - var theClass = [self class], - - keyEventSelector = @selector(_bridgeKeyEvent:), - keyEventImplementation = class_getMethodImplementation(theClass, keyEventSelector), - keyEventCallback = function (anEvent) { keyEventImplementation(self, nil, anEvent); }, - - mouseEventSelector = @selector(_bridgeMouseEvent:), - mouseEventImplementation = class_getMethodImplementation(theClass, mouseEventSelector), - mouseEventCallback = function (anEvent) { mouseEventImplementation(self, nil, anEvent); }, - - scrollEventSelector = @selector(_bridgeScrollEvent:), - scrollEventImplementation = class_getMethodImplementation(theClass, scrollEventSelector), - scrollEventCallback = function (anEvent) { scrollEventImplementation(self, nil, anEvent); }, - - resizeEventSelector = @selector(_bridgeResizeEvent:), - resizeEventImplementation = class_getMethodImplementation(theClass, resizeEventSelector), - resizeEventCallback = function (anEvent) { resizeEventImplementation(self, nil, anEvent); }, - - touchEventSelector = @selector(_bridgeTouchEvent:), - touchEventImplementation = class_getMethodImplementation(theClass, touchEventSelector), - touchEventCallback = function (anEvent) { touchEventImplementation(self, nil, anEvent); }, - - theDocument = _DOMWindow.document; - - if (document.addEventListener) - { - _DOMWindow.addEventListener("resize", resizeEventCallback, NO); - - theDocument.addEventListener(CPDOMEventMouseUp, mouseEventCallback, NO); - theDocument.addEventListener(CPDOMEventMouseDown, mouseEventCallback, NO); - theDocument.addEventListener(CPDOMEventMouseMoved, mouseEventCallback, NO); - - theDocument.addEventListener(CPDOMEventKeyUp, keyEventCallback, NO); - theDocument.addEventListener(CPDOMEventKeyDown, keyEventCallback, NO); - theDocument.addEventListener(CPDOMEventKeyPress, keyEventCallback, NO); - - - theDocument.addEventListener(CPDOMEventTouchStart, touchEventCallback, NO); - theDocument.addEventListener(CPDOMEventTouchEnd, touchEventCallback, NO); - theDocument.addEventListener(CPDOMEventTouchMove, touchEventCallback, NO); - theDocument.addEventListener(CPDOMEventTouchCancel, touchEventCallback, NO); - - //FIXME: does firefox really need a different value? - _DOMWindow.addEventListener("DOMMouseScroll", scrollEventCallback, NO); - _DOMWindow.addEventListener(CPDOMEventScrollWheel, scrollEventCallback, NO); - } - else if(document.attachEvent) - { - _DOMWindow.attachEvent("onresize", resizeEventCallback); - - theDocument.attachEvent("on" + CPDOMEventMouseUp, mouseEventCallback); - theDocument.attachEvent("on" + CPDOMEventMouseDown, mouseEventCallback); - theDocument.attachEvent("on" + CPDOMEventMouseMoved, mouseEventCallback); - theDocument.attachEvent("on" + CPDOMEventDoubleClick, mouseEventCallback); - - theDocument.attachEvent("on" + CPDOMEventKeyUp, keyEventCallback); - theDocument.attachEvent("on" + CPDOMEventKeyDown, keyEventCallback); - theDocument.attachEvent("on" + CPDOMEventKeyPress, keyEventCallback); - - _DOMWindow.onmousewheel = scrollEventCallback; - theDocument.onmousewheel = scrollEventCallback; - - theDocument.body.ondrag = function () { return NO; }; - theDocument.body.onselectstart = function () { return window.event.srcElement == _DOMPasteboardElement; }; - } - - ExcludedDOMElements["INPUT"] = YES; - ExcludedDOMElements["SELECT"] = YES; - ExcludedDOMElements["TEXTAREA"] = YES; - ExcludedDOMElements["OPTION"] = YES; } return self; @@ -211,13 +68,13 @@ var CPDOMWindowGetFrame, - (CPRect)frame { - return CGRectMakeCopy(_frame); + return [self contentRect]; } - (CGRect)visibleFrame { - var frame = [self frame]; - + var frame = [self contentBounds]; + frame.origin = CGPointMakeZero(); if ([CPMenu menuBarVisible]) @@ -233,828 +90,42 @@ var CPDOMWindowGetFrame, - (CPRect)contentBounds { - return CPRectCreateCopy(_contentBounds); + var contentBounds = [window.firstWindow contentRect]; + contentBounds.origin = CGPointMake(0,0); + + return contentBounds; } - (CPArray)orderedWindowsAtLevel:(int)aLevel { - var layer = [self layerAtLevel:aLevel create:NO]; - - if (!layer) - return []; - - return [layer orderedWindows]; + return [window.firstWindow orderedWindowsAtLevel:aLevel]; } - (CPDOMWindowLayer)layerAtLevel:(int)aLevel create:(BOOL)aFlag { - var layer = [_windowLayers objectForKey:aLevel]; - - // If the layer doesn't currently exist, and the create flag is true, - // create the layer. - if (!layer && aFlag) - { - layer = [[CPDOMWindowLayer alloc] initWithLevel:aLevel]; - - [_windowLayers setObject:layer forKey:aLevel]; - - // Find the nearest layer. This is similar to a binary search, - // only we know we won't find the value. - var low = 0, - high = _windowLevels.length - 1, - middle; - - while (low <= high) - { - middle = FLOOR((low + high) / 2); - - if (_windowLevels[middle] > aLevel) - high = middle - 1; - else - low = middle + 1; - } - - [_windowLevels insertObject:aLevel atIndex:_windowLevels[middle] > aLevel ? middle : middle + 1]; - layer._DOMElement.style.zIndex = aLevel; - _DOMBodyElement.appendChild(layer._DOMElement); - } - - return layer; + return [window.firstWindow layerAtLevel:aLevel create:aFlag]; } - (void)order:(CPWindowOrderingMode)aPlace window:(CPWindow)aWindow relativeTo:(CPWindow)otherWindow { - // Grab the appropriate level for the layer, and create it if - // necessary (if we are not simply removing the window). - var layer = [self layerAtLevel:[aWindow level] create:aPlace != CPWindowOut]; - - // Ignore otherWindow, simply remove this window from it's level. - // If layer is nil, this will be a no-op. - if (aPlace == CPWindowOut) - return [layer removeWindow:aWindow]; - - // Place the window at the appropriate index. - [layer insertWindow:aWindow atIndex:(otherWindow ? (aPlace == CPWindowAbove ? otherWindow._index + 1 : otherWindow._index) : CPNotFound)]; + return [window.firstWindow order:aPlace window:aWindow relativeTo:otherWindow]; } /* @ignore */ - (id)_dragHitTest:(CPPoint)aPoint pasteboard:(CPPasteboard)aPasteboard { - var levels = _windowLevels, - layers = _windowLayers, - levelCount = levels.length; - - while (levelCount--) - { - // Skip any windows above or at the dragging level. - if (levels[levelCount] >= CPDraggingWindowLevel) - continue; - - var windows = [layers objectForKey:levels[levelCount]]._windows, - windowCount = windows.length; - - while (windowCount--) - { - var theWindow = windows[windowCount]; - - if ([theWindow containsPoint:aPoint]) - return [theWindow _dragHitTest:aPoint pasteboard:aPasteboard]; - } - } - - return nil; + return [window.firstWindow _dragHitTest:aPoint pasteboard:aPasteboard]; } /* @ignore */ - (void)_propagateCurrentDOMEvent:(BOOL)aFlag { - StopDOMEventPropagation = !aFlag; + return [window.firstWindow _propagateCurrentDOMEvent:aFlag]; } - (CPWindow)hitTest:(CPPoint)location { - var levels = _windowLevels, - layers = _windowLayers, - levelCount = levels.length, - theWindow = nil; - - while (levelCount-- && !theWindow) - { - var windows = [layers objectForKey:levels[levelCount]]._windows, - windowCount = windows.length; - - while (windowCount-- && !theWindow) - { - var candidateWindow = windows[windowCount]; - - if (!candidateWindow._ignoresMouseEvents && [candidateWindow containsPoint:location]) - theWindow = candidateWindow; - } - } - - return theWindow; + return [window.firstWindow hitTest:location]; } @end - -var CPDOMWindowGetFrame = function(_DOMWindow) -{ - var frame = nil;//CGRectMakeZero(); - - // We will rarely be able to get all this information, but we do the best we can: - if (_DOMWindow.outerWidth) - frame = CGRectMake(0, 0, _DOMWindow.outerWidth, _DOMWindow.outerHeight); - - else /*if(self.outerWidth)*/ - frame = CGRectMake(0, 0, -1, -1); - - if (window.screenTop) - frame.origin = CGPointMake(_DOMWindow.screenLeft, _DOMWindow.screenTop, 0); - - else if (window.screenX) - frame.origin = CGPointMake(_DOMWindow.screenX, _DOMWindow.screenY, 0); - - // Safari, Mozilla, Firefox, and Opera - if (_DOMWindow.innerWidth) - frame.size = CGSizeMake(_DOMWindow.innerWidth, _DOMWindow.innerHeight); - - // Internet Explorer 6 in Strict Mode - else if (document.documentElement && document.documentElement.clientWidth) - frame.size = CGSizeMake(_DOMWindow.document.documentElement.clientWidth, _DOMWindow.document.documentElement.clientHeight); - - // Internet Explorer X - else - frame.size = CGSizeMake(_DOMWindow.document.body.clientWidth, _DOMWindow.document.body.clientHeight); - - return frame; -} - -//right now we hard code q, w, r and t as keys to propogate -//these aren't normal keycodes, they are with modifier key codes -//might be mac only, we should investigate futher later. -var KeyCodesToPrevent = {}, - CharacterKeysToPrevent = {}, - KeyCodesWithoutKeyPressEvents = { '8':1, '9':1, '16':1, '37':1, '38':1, '39':1, '40':1, '46':1, '33':1, '34':1 }; - -var CTRL_KEY_CODE = 17; - -@implementation CPDOMWindowBridge (Events) - -/*! - When using command (mac) or control (windows), keys are propagated to the browser by default. - To prevent a character key from propagating (to prevent its default action, and instead use it - in your own application), use these methods. These methods are additive -- the list builds until you clear it. - - @param characters a list of characters to stop propagating keypresses to the browser. -*/ -- (void)preventCharacterKeysFromPropagating:(CPArray)characters -{ - for(var i=characters.length; i>0; i--) - CharacterKeysToPrevent[""+characters[i-1].toLowerCase()] = YES; -} - -/*! - @param character a character to stop propagating keypresses to the browser. -*/ -- (void)preventCharacterKeyFromPropagating:(CPString)character -{ - CharacterKeysToPrevent[character.toLowerCase()] = YES; -} - -/*! - Clear the list of characters for which we are not sending keypresses to the browser. -*/ -- (void)clearCharacterKeysToPreventFromPropagating -{ - CharacterKeysToPrevent = {}; -} - -/*! - Prevent these keyCodes from sending their keypresses to the browser. - @param keyCodes an array of keycodes to prevent propagation. -*/ -- (void)preventKeyCodesFromPropagating:(CPArray)keyCodes -{ - for(var i=keyCodes.length; i>0; i--) - KeyCodesToPrevent[keyCodes[i-1]] = YES; -} - -/*! - Prevent this keyCode from sending its key events to the browser. - @param keyCode a keycode to prevent propagation. -*/ -- (void)preventKeyCodeFromPropagating:(CPString)keyCode -{ - KeyCodesToPrevent[keyCode] = YES; -} - -/*! - Clear the list of keyCodes for which we are not sending keypresses to the browser. -*/ -- (void)clearKeyCodesToPreventFromPropagating -{ - KeyCodesToPrevent = {}; -} - -/* @ignore */ -- (void)_bridgeMouseEvent:(DOMEvent)aDOMEvent -{ - var theType = _overriddenEventType || aDOMEvent.type; - - // IE's event order is down, up, up, dblclick, so we have create these events artificially. - if (theType === CPDOMEventDoubleClick) - { - _overriddenEventType = CPDOMEventMouseDown; - [self _bridgeMouseEvent:aDOMEvent]; - - _overriddenEventType = CPDOMEventMouseUp; - [self _bridgeMouseEvent:aDOMEvent]; - - _overriddenEventType = nil; - - return; - } - -#ifndef DEBUG - try - { -#endif - var event, - location = _CGPointMake(aDOMEvent.clientX, aDOMEvent.clientY), - timestamp = aDOMEvent.timeStamp ? aDOMEvent.timeStamp : new Date(), - sourceElement = (aDOMEvent.target || aDOMEvent.srcElement), - windowNumber = 0, - modifierFlags = (aDOMEvent.shiftKey ? CPShiftKeyMask : 0) | - (aDOMEvent.ctrlKey ? CPControlKeyMask : 0) | - (aDOMEvent.altKey ? CPAlternateKeyMask : 0) | - (aDOMEvent.metaKey ? CPCommandKeyMask : 0); - - StopDOMEventPropagation = YES; - - if (_mouseDownWindow) - windowNumber = [_mouseDownWindow windowNumber]; - else - { - var theWindow = [self hitTest:location]; - - if ((aDOMEvent.type === CPDOMEventMouseDown) && theWindow) - _mouseDownWindow = theWindow; - - windowNumber = [theWindow windowNumber]; - } - - if (windowNumber) - { - var windowFrame = CPApp._windows[windowNumber]._frame; - - location.x -= _CGRectGetMinX(windowFrame); - location.y -= _CGRectGetMinY(windowFrame); - } - - switch (theType) - { - case CPDOMEventMouseUp: if(_mouseIsDown) - { - event = _CPEventFromNativeMouseEvent(aDOMEvent, CPLeftMouseUp, location, modifierFlags, timestamp, windowNumber, nil, -1, CPDOMEventGetClickCount(_lastMouseUp, timestamp, location), 0); - - _mouseIsDown = NO; - _lastMouseUp = event; - _mouseDownWindow = nil; - } - - if(_DOMEventMode) - { - _DOMEventMode = NO; - return; - } - - break; - - case CPDOMEventMouseDown: if (ExcludedDOMElements[sourceElement.tagName] && sourceElement != _DOMFocusElement) - { - _DOMEventMode = YES; - _mouseIsDown = YES; - - //fake a down and up event so that event tracking mode will work correctly - [CPApp sendEvent:[CPEvent mouseEventWithType:CPLeftMouseDown location:location modifierFlags:modifierFlags - timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:-1 - clickCount:CPDOMEventGetClickCount(_lastMouseDown, timestamp, location) pressure:0]]; - - [CPApp sendEvent:[CPEvent mouseEventWithType:CPLeftMouseUp location:location modifierFlags:modifierFlags - timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:-1 - clickCount:CPDOMEventGetClickCount(_lastMouseDown, timestamp, location) pressure:0]]; - - return; - } - - event = _CPEventFromNativeMouseEvent(aDOMEvent, CPLeftMouseDown, location, modifierFlags, timestamp, windowNumber, nil, -1, CPDOMEventGetClickCount(_lastMouseDown, timestamp, location), 0); - - _mouseIsDown = YES; - _lastMouseDown = event; - - break; - - case CPDOMEventMouseMoved: if (_DOMEventMode) - return; - - event = _CPEventFromNativeMouseEvent(aDOMEvent, _mouseIsDown ? CPLeftMouseDragged : CPMouseMoved, location, modifierFlags, timestamp, windowNumber, nil, -1, 1, 0); - - break; - } - - if (event) - { - event._DOMEvent = aDOMEvent; - - [CPApp sendEvent:event]; - } - - if (StopDOMEventPropagation) - CPDOMEventStop(aDOMEvent); - - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; -#ifndef DEBUG - } - catch (anException) - { - objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); - } -#endif -} - -/* @ignore */ -- (void)_bridgeKeyEvent:(DOMEvent)aDOMEvent -{ -#ifndef DEBUG - try - { -#endif - var event, - timestamp = aDOMEvent.timeStamp ? aDOMEvent.timeStamp : new Date(), - sourceElement = (aDOMEvent.target || aDOMEvent.srcElement), - windowNumber = [[CPApp keyWindow] windowNumber], - modifierFlags = (aDOMEvent.shiftKey ? CPShiftKeyMask : 0) | - (aDOMEvent.ctrlKey ? CPControlKeyMask : 0) | - (aDOMEvent.altKey ? CPAlternateKeyMask : 0) | - (aDOMEvent.metaKey ? CPCommandKeyMask : 0); - - if (ExcludedDOMElements[sourceElement.tagName] && sourceElement != _DOMFocusElement && sourceElement != _DOMPasteboardElement) - return; - - //We want to stop propagation if this is a command key AND this character or keycode has been added to our blacklist - StopDOMEventPropagation = !(modifierFlags & (CPControlKeyMask | CPCommandKeyMask)) || - CharacterKeysToPrevent[String.fromCharCode(aDOMEvent.keyCode || aDOMEvent.charCode).toLowerCase()] || - KeyCodesToPrevent[aDOMEvent.keyCode]; - - var isNativePasteEvent = NO, - isNativeCopyOrCutEvent = NO; - - switch (aDOMEvent.type) - { - case CPDOMEventKeyDown: // Grab and store the keycode now since it is correct and consistent at this point. - _keyCode = aDOMEvent.keyCode; - - var characters = String.fromCharCode(_keyCode).toLowerCase(); - - // If this could be a native PASTE event, then we need to further examine it before - // sending a CPEvent. Select our element to see if anything gets pasted in it. - if (characters == "v" && (modifierFlags & CPPlatformActionKeyMask)) - { - _DOMPasteboardElement.select(); - _DOMPasteboardElement.value = ""; - - isNativePasteEvent = YES; - } - - // Normally we return now because we let keypress send the actual CPEvent keyDown event, since we don't have - // a complete set of information yet. - - // However, of this could be a native COPY event, we need to let the normal event-process take place so it - // can capture our internal Cappuccino pasteboard. - else if ((characters == "c" || characters == "x") && (modifierFlags & CPPlatformActionKeyMask)) - isNativeCopyOrCutEvent = YES; - - // Also, certain browsers (IE and Safari), have broken keyboard supportwhere they don't send keypresses for certain events. - // So, allow the keypress event to handle the event if we are not a browser with broken (remedial) key support... - else if (!CPFeatureIsCompatible(CPJavascriptRemedialKeySupport)) - return; - - // Or, if this is not one of those special keycodes, and also not a ctrl+event - else if (!KeyCodesWithoutKeyPressEvents[_keyCode] && (_keyCode == CTRL_KEY_CODE || !(modifierFlags & CPControlKeyMask))) - return; - - // If this is in fact our broke state, continue to keypress and send the keydown. - case CPDOMEventKeyPress: - // If the source of this event is our pasteboard element, then simply let it continue - // as normal, so that the paste event can successfully complete. - if ((aDOMEvent.target || aDOMEvent.srcElement) == _DOMPasteboardElement) - return; - - var keyCode = _keyCode, - charCode = aDOMEvent.keyCode || aDOMEvent.charCode, - isARepeat = (_charCodes[keyCode] != nil); - - _charCodes[keyCode] = charCode; - - var characters = String.fromCharCode(charCode), - charactersIgnoringModifiers = characters.toLowerCase(); - - event = [CPEvent keyEventWithType:CPKeyDown location:location modifierFlags:modifierFlags - timestamp:timestamp windowNumber:windowNumber context:nil - characters:characters charactersIgnoringModifiers:charactersIgnoringModifiers isARepeat:isARepeat keyCode:keyCode]; - - if (isNativePasteEvent) - { - _pasteboardKeyDownEvent = event; - - window.setNativeTimeout(function () { [self _checkPasteboardElement] }, 0); - - return; - } - - break; - - case CPDOMEventKeyUp: var keyCode = aDOMEvent.keyCode, - charCode = _charCodes[keyCode]; - - _charCodes[keyCode] = nil; - - var characters = String.fromCharCode(charCode), - charactersIgnoringModifiers = characters.toLowerCase(); - - if (!(modifierFlags & CPShiftKeyMask)) - characters = charactersIgnoringModifiers; - - event = [CPEvent keyEventWithType:CPKeyUp location:location modifierFlags:modifierFlags - timestamp: timestamp windowNumber:windowNumber context:nil - characters:characters charactersIgnoringModifiers:charactersIgnoringModifiers isARepeat:NO keyCode:keyCode]; - break; - } - - if (event) - { - event._DOMEvent = aDOMEvent; - - [CPApp sendEvent:event]; - - if (isNativeCopyOrCutEvent) - { - var pasteboard = [CPPasteboard generalPasteboard], - types = [pasteboard types]; - - // If this is a native copy event, then check if the pasteboard has anything in it. - if (types.length) - { - if ([types indexOfObjectIdenticalTo:CPStringPboardType] != CPNotFound) - _DOMPasteboardElement.value = [pasteboard stringForType:CPStringPboardType]; - else - _DOMPasteboardElement.value = [pasteboard _generateStateUID]; - - _DOMPasteboardElement.select(); - - window.setNativeTimeout(function() { [self _clearPasteboardElement]; }, 0); - } - - return; - } - } - - if (StopDOMEventPropagation) - CPDOMEventStop(aDOMEvent); - - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; -#ifndef DEBUG - } - catch (anException) - { - objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); - } -#endif -} - -/* @ignore */ -- (void)_bridgeScrollEvent:(DOMEvent)aDOMEvent -{ - if(!aDOMEvent) - aDOMEvent = window.event; - -#ifndef DEBUG - try - { -#endif - if (CPFeatureIsCompatible(CPJavaScriptMouseWheelValues_8_15)) - { - var x = 0.0, - y = 0.0, - element = aDOMEvent.target; - - while (element.nodeType !== 1) - element = element.parentNode; - - if (element.offsetParent) - { - do - { - x += element.offsetLeft; - y += element.offsetTop; - - } while (element = element.offsetParent); - } - - var location = _CGPointMake((x + ((aDOMEvent.clientX - 8) / 15)), (y + ((aDOMEvent.clientY - 8) / 15)));} - else - var location = _CGPointMake(aDOMEvent.clientX, aDOMEvent.clientY); - - var deltaX = 0.0, - deltaY = 0.0, - windowNumber = 0, - timestamp = aDOMEvent.timeStamp ? aDOMEvent.timeStamp : new Date(), - modifierFlags = (aDOMEvent.shiftKey ? CPShiftKeyMask : 0) | - (aDOMEvent.ctrlKey ? CPControlKeyMask : 0) | - (aDOMEvent.altKey ? CPAlternateKeyMask : 0) | - (aDOMEvent.metaKey ? CPCommandKeyMask : 0); - - StopDOMEventPropagation = YES; - - windowNumber = [[self hitTest:location] windowNumber]; - - if (!windowNumber) - return; - - var windowFrame = CPApp._windows[windowNumber]._frame; - - location.x -= CGRectGetMinX(windowFrame); - location.y -= CGRectGetMinY(windowFrame); - - if(typeof aDOMEvent.wheelDeltaX != "undefined") - { - deltaX = aDOMEvent.wheelDeltaX / 120.0; - deltaY = aDOMEvent.wheelDeltaY / 120.0; - } - - else if (aDOMEvent.wheelDelta) - deltaY = aDOMEvent.wheelDelta / 120.0; - - else if (aDOMEvent.detail) - deltaY = -aDOMEvent.detail / 3.0; - - else - return; - - if(!CPFeatureIsCompatible(CPJavaScriptNegativeMouseWheelValues)) - { - deltaX = -deltaX; - deltaY = -deltaY; - } - - var event = [CPEvent mouseEventWithType:CPScrollWheel location:location modifierFlags:modifierFlags - timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0 ]; - - event._DOMEvent = aDOMEvent; - event._deltaX = deltaX; - event._deltaY = deltaY; - - [CPApp sendEvent:event]; - - if (StopDOMEventPropagation) - CPDOMEventStop(aDOMEvent); - - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; -#ifndef DEBUG - } - catch (anException) - { - objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); - } -#endif -} - -/* @ignore */ -- (void)_bridgeResizeEvent:(DOMEvent)aDOMEvent -{ -#ifndef DEBUG - try - { -#endif - // FIXME: This is not the right way to do this. - // We should pay attention to mouse down and mouse up in conjunction with this. - //window.liveResize = YES; - - var oldSize = _frame.size; - - // window.liveResize = YES? - _frame = CPDOMWindowGetFrame(_DOMWindow); - _contentBounds.size = CGSizeCreateCopy(_frame.size); - - var levels = _windowLevels, - layers = _windowLayers, - levelCount = levels.length; - - while (levelCount--) - { - var windows = [layers objectForKey:levels[levelCount]]._windows, - windowCount = windows.length; - - while (windowCount--) - [windows[windowCount] resizeWithOldBridgeSize:oldSize]; - } - - //window.liveResize = NO; - - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; -#ifndef DEBUG - } - catch (anException) - { - objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); - } -#endif -} - -// DOM event properties used in mouse bridge code - -// type -// clientX -// clientY -// timestamp -// target/srcElement -// shiftKey,ctrlKey,altKey,metaKey - -/* @ignore */ -- (void)_bridgeTouchEvent:(DOMEvent)aDOMEvent -{ -#ifndef DEBUG - try - { -#endif - if (aDOMEvent.touches && (aDOMEvent.touches.length == 1 || (aDOMEvent.touches.length == 0 && aDOMEvent.changedTouches.length == 1))) - { - var newEvent = {}; - - switch(aDOMEvent.type) - { - case CPDOMEventTouchStart: newEvent.type = CPDOMEventMouseDown; - break; - case CPDOMEventTouchEnd: newEvent.type = CPDOMEventMouseUp; - break; - case CPDOMEventTouchMove: newEvent.type = CPDOMEventMouseMoved; - break; - case CPDOMEventTouchCancel: newEvent.type = CPDOMEventMouseUp; - break; - } - - var touch = aDOMEvent.touches.length ? aDOMEvent.touches[0] : aDOMEvent.changedTouches[0]; - - newEvent.clientX = touch.clientX; - newEvent.clientY = touch.clientY; - - newEvent.timestamp = aDOMEvent.timestamp; - newEvent.target = aDOMEvent.target; - - newEvent.shiftKey = newEvent.ctrlKey = newEvent.altKey = newEvent.metaKey = false; - - newEvent.preventDefault = function(){if(aDOMEvent.preventDefault) aDOMEvent.preventDefault()}; - newEvent.stopPropagation = function(){if(aDOMEvent.stopPropagation) aDOMEvent.stopPropagation()}; - - [self _bridgeMouseEvent:newEvent]; - - return; - } - else - { - if (aDOMEvent.preventDefault) - aDOMEvent.preventDefault(); - - if (aDOMEvent.stopPropagation) - aDOMEvent.stopPropagation(); - } -#ifndef DEBUG - } - catch (anException) - { - objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); - } -#endif - // handle touch cases specifically -} - -/* @ignore */ -- (void)_checkPasteboardElement -{ -#ifndef DEBUG - try - { -#endif - var value = _DOMPasteboardElement.value; - - if ([value length]) - { - var pasteboard = [CPPasteboard generalPasteboard]; - - if ([pasteboard _stateUID] != value) - { - [pasteboard declareTypes:[CPStringPboardType] owner:self]; - - [pasteboard setString:value forType:CPStringPboardType]; - } - } - - [self _clearPasteboardElement]; - - [CPApp sendEvent:_pasteboardKeyDownEvent]; - - _pasteboardKeyDownEvent = nil; - - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; -#ifndef DEBUG - } - catch (anException) - { - objj_exception_report(anException, {path:@"CPDOMWindowBridge.j"}); - } -#endif -} - -/* @ignore */ -- (void)_clearPasteboardElement -{ - _DOMPasteboardElement.value = ""; - _DOMPasteboardElement.blur(); -} - -@end - -var CLICK_SPACE_DELTA = 5.0, - CLICK_TIME_DELTA = (typeof document != "undefined" && document.addEventListener) ? 350.0 : 1000.0; - -var CPDOMEventGetClickCount = function(aComparisonEvent, aTimestamp, aLocation) -{ - if (!aComparisonEvent) - return 1; - - var comparisonLocation = [aComparisonEvent locationInWindow]; - - return (aTimestamp - [aComparisonEvent timestamp] < CLICK_TIME_DELTA && - ABS(comparisonLocation.x - aLocation.x) < CLICK_SPACE_DELTA && - ABS(comparisonLocation.y - aLocation.y) < CLICK_SPACE_DELTA) ? [aComparisonEvent clickCount] + 1 : 1; -} - -var CPDOMEventStop = function(aDOMEvent) -{ - // IE Model - aDOMEvent.cancelBubble = true; - aDOMEvent.returnValue = false; - - // W3C Model - if (aDOMEvent.preventDefault) - aDOMEvent.preventDefault(); - - if (aDOMEvent.stopPropagation) - aDOMEvent.stopPropagation(); - - if (aDOMEvent.type === CPDOMEventMouseDown) - { - CPSharedDOMWindowBridge._DOMFocusElement.focus(); - CPSharedDOMWindowBridge._DOMFocusElement.blur(); - } -} - -function CPWindowObjectList() -{ - var bridge = [CPDOMWindowBridge sharedDOMWindowBridge], - levels = bridge._windowLevels, - layers = bridge._windowLayers, - levelCount = levels.length, - windowObjects = []; - - while (levelCount--) - { - var windows = [layers objectForKey:levels[levelCount]]._windows, - windowCount = windows.length; - - while (windowCount--) - windowObjects.push(windows[windowCount]); - } - - return windowObjects; -} - -function CPWindowList() -{ - var bridge = [CPDOMWindowBridge sharedDOMWindowBridge], - levels = bridge._windowLevels, - layers = bridge._windowLayers, - levelCount = levels.length, - windowNumbers = []; - - while (levelCount--) - { - var windows = [layers objectForKey:levels[levelCount]]._windows, - windowCount = windows.length; - - while (windowCount--) - windowNumbers.push([windows[windowCount] windowNumber]); - } - - return windowNumbers; -} diff --git a/AppKit/Platform/DOM/_CPBrowserWindow.j b/AppKit/Platform/DOM/_CPBrowserWindow.j new file mode 100644 index 000000000..57a97de1c --- /dev/null +++ b/AppKit/Platform/DOM/_CPBrowserWindow.j @@ -0,0 +1,10 @@ + +@import "_CPDOMWindow.j" + + +@implementation _CPBrowserWindow : _CPDOMWindow +{ +} +@end + +[CPPlatformWindow _setPlatformWindowClass:[_CPBrowserWindow class]]; diff --git a/AppKit/Platform/DOM/_CPDOMWindow.j b/AppKit/Platform/DOM/_CPDOMWindow.j new file mode 100644 index 000000000..d8a3b2c0b --- /dev/null +++ b/AppKit/Platform/DOM/_CPDOMWindow.j @@ -0,0 +1,1063 @@ +/* + * _CPDOMWindow.j + * AppKit + * + * 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 +@import + +@import "CPEvent.j" +@import "CPCompatibility.j" + +@import "CPDOMWindowLayer.j" + +@import "CPPlatformWindow.j" + +#import "../../CoreGraphics/CGGeometry.h" + + +var DoubleClick = "dblclick", + MouseDown = "mousedown", + MouseUp = "mouseup", + MouseMove = "mousemove", + MouseDrag = "mousedrag", + KeyUp = "keyup", + KeyDown = "keydown", + KeyPress = "keypress", + Copy = "copy", + Paste = "paste", + Resize = "resize", + ScrollWheel = "mousewheel", + TouchStart = "touchstart", + TouchMove = "touchmove", + TouchEnd = "touchend", + TouchCancel = "touchcancel"; + +var ExcludedDOMElements = []; + +ExcludedDOMElements["INPUT"] = YES; +ExcludedDOMElements["SELECT"] = YES; +ExcludedDOMElements["TEXTAREA"] = YES; +ExcludedDOMElements["OPTION"] = YES; + +// Define up here so compressor knows about em. +var CPDOMEventGetClickCount, + CPDOMEventStop; + +//right now we hard code q, w, r and t as keys to propogate +//these aren't normal keycodes, they are with modifier key codes +//might be mac only, we should investigate futher later. +var KeyCodesToPrevent = {}, + CharacterKeysToPrevent = {}, + KeyCodesWithoutKeyPressEvents = { '8':1, '9':1, '16':1, '37':1, '38':1, '39':1, '40':1, '46':1, '33':1, '34':1 }; + +var CTRL_KEY_CODE = 17; + +@implementation _CPDOMWindow : CPPlatformWindow +{ + DOMWindow _DOMWindow; + + DOMElement _DOMBodyElement; + DOMElement _DOMFocusElement; + + CPArray _windowLevels; + CPDictionary _windowLayers; + + BOOL _mouseIsDown; + CPWindow _mouseDownWindow; + CPTimeInterval _lastMouseUp; + CPTimeInterval _lastMouseDown; + + JSObject _charCodes; + unsigned _keyCode; + + BOOL _DOMEventMode; + + // Native Pasteboard Support + DOMElement _DOMPasteboardElement; + CPEvent _pasteboardKeyDownEvent; + + CPString _overriddenEventType; +} + +- (id)_init +{ + self = [super init]; + + if (self) + { + _DOMWindow = window; + + [self registerDOMWindow]; + [self updateFromNativeContentRect]; + + _charCodes = {}; + + _windowLevels = []; + _windowLayers = [CPDictionary dictionary]; + } + + return self; +} + +- (id)initWithContentRect:(CGRect)aRect +{ + self = [super initWithContentRect:aRect]; + + if (self) + { + _windowLevels = []; + _windowLayers = [CPDictionary dictionary]; + + _charCodes = {}; + } + + return self; +} + +- (CGRect)nativeContentRect +{ + if (!_DOMWindow) + return [self contentRect]; + + var contentRect = _CGRectMakeZero(); + + if (window.screenTop) + contentRect.origin = _CGPointMake(_DOMWindow.screenLeft, _DOMWindow.screenTop); + + else if (window.screenX) + contentRect.origin = _CGPointMake(_DOMWindow.screenX, _DOMWindow.screenY); + + // Safari, Mozilla, Firefox, and Opera + if (_DOMWindow.innerWidth) + contentRect.size = _CGSizeMake(_DOMWindow.innerWidth, _DOMWindow.innerHeight); + + // Internet Explorer 6 in Strict Mode + else if (document.documentElement && document.documentElement.clientWidth) + contentRect.size = _CGSizeMake(_DOMWindow.document.documentElement.clientWidth, _DOMWindow.document.documentElement.clientHeight); + + // Internet Explorer X + else + contentRect.size = _CGSizeMake(_DOMWindow.document.body.clientWidth, _DOMWindow.document.body.clientHeight); + + return contentRect; +} + +- (void)updateNativeContentOrigin +{ + if (!_DOMWindow) + return; + + var origin = [self contentRect].origin, + nativeOrigin = [self nativeContentRect].origin; + + _DOMWindow.moveBy(origin.x - nativeOrigin.x, origin.y - nativeOrigin.y); +} + +- (void)updateNativeContentSize +{ + if (!_DOMWindow) + return; + + var size = [self contentRect].size, + nativeSize = [self nativeContentRect].size; + + _DOMWindow.resizeBy(size.width - nativeSize.width, size.height - nativeSize.height); +} + +- (void)orderBack:(id)aSender +{ + if (_DOMWindow) + _DOMWindow.blur(); +} + +- (void)registerDOMWindow +{ + var theDocument = _DOMWindow.document; + + _DOMBodyElement = theDocument.getElementsByTagName("body")[0]; + + _DOMBodyElement.webkitTouchCallout = "none"; + + _DOMFocusElement = theDocument.createElement("input"); + + _DOMFocusElement.style.position = "absolute"; + _DOMFocusElement.style.zIndex = "-1000"; + _DOMFocusElement.style.opacity = "0"; + _DOMFocusElement.style.filter = "alpha(opacity=0)"; + + _DOMBodyElement.appendChild(_DOMFocusElement); + + // Create Native Pasteboard handler. + _DOMPasteboardElement = theDocument.createElement("input"); + + _DOMPasteboardElement.style.position = "absolute"; + _DOMPasteboardElement.style.top = "-10000px"; + _DOMPasteboardElement.style.zIndex = "99"; + + _DOMBodyElement.appendChild(_DOMPasteboardElement); + + // Make sure the pastboard element is blurred. + _DOMPasteboardElement.blur(); + + var theClass = [self class], + + resizeEventSelector = @selector(resizeEvent:), + resizeEventImplementation = class_getMethodImplementation(theClass, resizeEventSelector), + resizeEventCallback = function (anEvent) { resizeEventImplementation(self, nil, anEvent); }, + + keyEventSelector = @selector(keyEvent:), + keyEventImplementation = class_getMethodImplementation(theClass, keyEventSelector), + keyEventCallback = function (anEvent) { keyEventImplementation(self, nil, anEvent); }, + + mouseEventSelector = @selector(mouseEvent:), + mouseEventImplementation = class_getMethodImplementation(theClass, mouseEventSelector), + mouseEventCallback = function (anEvent) { mouseEventImplementation(self, nil, anEvent); }, + + scrollEventSelector = @selector(scrollEvent:), + scrollEventImplementation = class_getMethodImplementation(theClass, scrollEventSelector), + scrollEventCallback = function (anEvent) { scrollEventImplementation(self, nil, anEvent); }, + + touchEventSelector = @selector(touchEvent:), + touchEventImplementation = class_getMethodImplementation(theClass, touchEventSelector), + touchEventCallback = function (anEvent) { touchEventImplementation(self, nil, anEvent); }; + + if (theDocument.addEventListener) + { + theDocument.addEventListener("mouseup", mouseEventCallback, NO); + theDocument.addEventListener("mousedown", mouseEventCallback, NO); + theDocument.addEventListener("mousemove", mouseEventCallback, NO); + + theDocument.addEventListener("keyup", keyEventCallback, NO); + theDocument.addEventListener("keydown", keyEventCallback, NO); + theDocument.addEventListener("keypress", keyEventCallback, NO); + + theDocument.addEventListener("touchstart", touchEventCallback, NO); + theDocument.addEventListener("touchend", touchEventCallback, NO); + theDocument.addEventListener("touchmove", touchEventCallback, NO); + theDocument.addEventListener("touchcancel", touchEventCallback, NO); + + _DOMWindow.addEventListener("resize", resizeEventCallback, NO); + + _DOMWindow.addEventListener("beforeunload", function() + { + [self updateFromNativeContentRect]; + + theDocument.removeEventListener("mouseup", mouseEventCallback, NO); + theDocument.removeEventListener("mousedown", mouseEventCallback, NO); + theDocument.removeEventListener("mousemove", mouseEventCallback, NO); + + theDocument.removeEventListener("keyup", keyEventCallback, NO); + theDocument.removeEventListener("keydown", keyEventCallback, NO); + theDocument.removeEventListener("keypress", keyEventCallback, NO); + + theDocument.removeEventListener("touchstart", touchEventCallback, NO); + theDocument.removeEventListener("touchend", touchEventCallback, NO); + theDocument.removeEventListener("touchmove", touchEventCallback, NO); + + _DOMWindow.removeEventListener("resize", resizeEventCallback, NO); + + //FIXME: does firefox really need a different value? + _DOMWindow.removeEventListener("DOMMouseScroll", scrollEventCallback, NO); + _DOMWindow.removeEventListener("mousewheel", scrollEventCallback, NO); + + //_DOMWindow.removeEventListener("beforeunload", this, NO); + + self._DOMWindow = nil; + }, NO); + } + else + { + theDocument.attachEvent("onmouseup", mouseEventCallback); + theDocument.attachEvent("onmousedown", mouseEventCallback); + theDocument.attachEvent("onmousemove", mouseEventCallback); + theDocument.attachEvent("ondblclick", mouseEventCallback); + + theDocument.attachEvent("onkeyup", keyEventCallback); + theDocument.attachEvent("onkeydown", keyEventCallback); + theDocument.attachEvent("onkeypress", keyEventCallback); + + _DOMWindow.attachEvent("onresize", resizeEventCallback); + + _DOMWindow.onmousewheel = scrollEventCallback; + theDocument.onmousewheel = scrollEventCallback; + + theDocument.body.ondrag = function () { return NO; }; + theDocument.body.onselectstart = function () { return _DOMWindow.event.srcElement === _DOMPasteboardElement; }; + + _DOMWindow.attachEvent("onbeforeunload", function() + { + [self updateFromNativeContentRect]; + + theDocument.removeEvent("onmouseup", mouseEventCallback); + theDocument.removeEvent("onmousedown", mouseEventCallback); + theDocument.removeEvent("onmousemove", mouseEventCallback); + theDocument.removeEvent("ondblclick", mouseEventCallback); + + theDocument.removeEvent("onkeyup", keyEventCallback); + theDocument.removeEvent("onkeydown", keyEventCallback); + theDocument.removeEvent("onkeypress", keyEventCallback); + + _DOMWindow.removeEvent("onresize", resizeEventCallback); + + _DOMWindow.onmousewheel = NULL; + theDocument.onmousewheel = NULL; + + theDocument.body.ondrag = NULL; + theDocument.body.onselectstart = NULL; + + //_DOMWindow.removeEvent("beforeunload", this); + + self._DOMWindow = nil; + }, NO); + } +} + +- (void)orderFront:(id)aSender +{ + if (_DOMWindow) + return _DOMWindow.focus(); + + _DOMWindow = window.open("", "", "menubar=no,location=no,resizable=yes,scrollbars=no,status=no,left=" + _CGRectGetMinX(_contentRect) + ",top=" + _CGRectGetMinY(_contentRect) + ",width=" + _CGRectGetWidth(_contentRect) + ",height=" + _CGRectGetHeight(_contentRect)); + + [self registerDOMWindow]; +} + +- (void)orderOut:(id)aSender +{ + _DOMWindow.close(); +} + +- (void)keyEvent:(DOMEvent)aDOMEvent +{ + var event, + timestamp = aDOMEvent.timeStamp ? aDOMEvent.timeStamp : new Date(), + sourceElement = (aDOMEvent.target || aDOMEvent.srcElement), + windowNumber = [[CPApp keyWindow] windowNumber], + modifierFlags = (aDOMEvent.shiftKey ? CPShiftKeyMask : 0) | + (aDOMEvent.ctrlKey ? CPControlKeyMask : 0) | + (aDOMEvent.altKey ? CPAlternateKeyMask : 0) | + (aDOMEvent.metaKey ? CPCommandKeyMask : 0); + + if (ExcludedDOMElements[sourceElement.tagName] && sourceElement != _DOMFocusElement && sourceElement != _DOMPasteboardElement) + return; + + //We want to stop propagation if this is a command key AND this character or keycode has been added to our blacklist + StopDOMEventPropagation = !(modifierFlags & (CPControlKeyMask | CPCommandKeyMask)) || + CharacterKeysToPrevent[String.fromCharCode(aDOMEvent.keyCode || aDOMEvent.charCode).toLowerCase()] || + KeyCodesToPrevent[aDOMEvent.keyCode]; + + var isNativePasteEvent = NO, + isNativeCopyOrCutEvent = NO; + + switch (aDOMEvent.type) + { + case "keydown": // Grab and store the keycode now since it is correct and consistent at this point. + _keyCode = aDOMEvent.keyCode; + + var characters = String.fromCharCode(_keyCode).toLowerCase(); + + // If this could be a native PASTE event, then we need to further examine it before + // sending a CPEvent. Select our element to see if anything gets pasted in it. + if (characters == "v" && (modifierFlags & CPPlatformActionKeyMask)) + { + _DOMPasteboardElement.select(); + _DOMPasteboardElement.value = ""; + + isNativePasteEvent = YES; + } + + // Normally we return now because we let keypress send the actual CPEvent keyDown event, since we don't have + // a complete set of information yet. + + // However, of this could be a native COPY event, we need to let the normal event-process take place so it + // can capture our internal Cappuccino pasteboard. + else if ((characters == "c" || characters == "x") && (modifierFlags & CPPlatformActionKeyMask)) + isNativeCopyOrCutEvent = YES; + + // Also, certain browsers (IE and Safari), have broken keyboard supportwhere they don't send keypresses for certain events. + // So, allow the keypress event to handle the event if we are not a browser with broken (remedial) key support... + else if (!CPFeatureIsCompatible(CPJavascriptRemedialKeySupport)) + return; + + // Or, if this is not one of those special keycodes, and also not a ctrl+event + else if (!KeyCodesWithoutKeyPressEvents[_keyCode] && (_keyCode == CTRL_KEY_CODE || !(modifierFlags & CPControlKeyMask))) + return; + + // If this is in fact our broke state, continue to keypress and send the keydown. + case "keypress": // If the source of this event is our pasteboard element, then simply let it continue + // as normal, so that the paste event can successfully complete. + if ((aDOMEvent.target || aDOMEvent.srcElement) == _DOMPasteboardElement) + return; + + var keyCode = _keyCode, + charCode = aDOMEvent.keyCode || aDOMEvent.charCode, + isARepeat = (_charCodes[keyCode] != nil); + + _charCodes[keyCode] = charCode; + + var characters = String.fromCharCode(charCode), + charactersIgnoringModifiers = characters.toLowerCase(); + + event = [CPEvent keyEventWithType:CPKeyDown location:location modifierFlags:modifierFlags + timestamp:timestamp windowNumber:windowNumber context:nil + characters:characters charactersIgnoringModifiers:charactersIgnoringModifiers isARepeat:isARepeat keyCode:keyCode]; + + if (isNativePasteEvent) + { + _pasteboardKeyDownEvent = event; + + window.setNativeTimeout(function () { [self _checkPasteboardElement] }, 0); + + return; + } + + break; + + case "keyup": var keyCode = aDOMEvent.keyCode, + charCode = _charCodes[keyCode]; + + _charCodes[keyCode] = nil; + + var characters = String.fromCharCode(charCode), + charactersIgnoringModifiers = characters.toLowerCase(); + + if (!(modifierFlags & CPShiftKeyMask)) + characters = charactersIgnoringModifiers; + + event = [CPEvent keyEventWithType:CPKeyUp location:location modifierFlags:modifierFlags + timestamp: timestamp windowNumber:windowNumber context:nil + characters:characters charactersIgnoringModifiers:charactersIgnoringModifiers isARepeat:NO keyCode:keyCode]; + break; + } + + if (event) + { + event._DOMEvent = aDOMEvent; + + [CPApp sendEvent:event]; + + if (isNativeCopyOrCutEvent) + { + var pasteboard = [CPPasteboard generalPasteboard], + types = [pasteboard types]; + + // If this is a native copy event, then check if the pasteboard has anything in it. + if (types.length) + { + if ([types indexOfObjectIdenticalTo:CPStringPboardType] != CPNotFound) + _DOMPasteboardElement.value = [pasteboard stringForType:CPStringPboardType]; + else + _DOMPasteboardElement.value = [pasteboard _generateStateUID]; + + _DOMPasteboardElement.select(); + + window.setNativeTimeout(function() { [self _clearPasteboardElement]; }, 0); + } + + return; + } + } + + if (StopDOMEventPropagation) + CPDOMEventStop(aDOMEvent); + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + +} + +- (void)scrollEvent:(DOMEvent)aDOMEvent +{ + if(!aDOMEvent) + aDOMEvent = window.event; + + if (CPFeatureIsCompatible(CPJavaScriptMouseWheelValues_8_15)) + { + var x = 0.0, + y = 0.0, + element = aDOMEvent.target; + + while (element.nodeType !== 1) + element = element.parentNode; + + if (element.offsetParent) + { + do + { + x += element.offsetLeft; + y += element.offsetTop; + + } while (element = element.offsetParent); + } + + var location = _CGPointMake((x + ((aDOMEvent.clientX - 8) / 15)), (y + ((aDOMEvent.clientY - 8) / 15))); + } + else + var location = _CGPointMake(aDOMEvent.clientX, aDOMEvent.clientY); + + var deltaX = 0.0, + deltaY = 0.0, + windowNumber = 0, + timestamp = aDOMEvent.timeStamp ? aDOMEvent.timeStamp : new Date(), + modifierFlags = (aDOMEvent.shiftKey ? CPShiftKeyMask : 0) | + (aDOMEvent.ctrlKey ? CPControlKeyMask : 0) | + (aDOMEvent.altKey ? CPAlternateKeyMask : 0) | + (aDOMEvent.metaKey ? CPCommandKeyMask : 0); + + StopDOMEventPropagation = YES; + + windowNumber = [[self hitTest:location] windowNumber]; + + if (!windowNumber) + return; + + var windowFrame = CPApp._windows[windowNumber]._frame; + + location.x -= CGRectGetMinX(windowFrame); + location.y -= CGRectGetMinY(windowFrame); + + if(typeof aDOMEvent.wheelDeltaX != "undefined") + { + deltaX = aDOMEvent.wheelDeltaX / 120.0; + deltaY = aDOMEvent.wheelDeltaY / 120.0; + } + + else if (aDOMEvent.wheelDelta) + deltaY = aDOMEvent.wheelDelta / 120.0; + + else if (aDOMEvent.detail) + deltaY = -aDOMEvent.detail / 3.0; + + else + return; + + if(!CPFeatureIsCompatible(CPJavaScriptNegativeMouseWheelValues)) + { + deltaX = -deltaX; + deltaY = -deltaY; + } + + var event = [CPEvent mouseEventWithType:CPScrollWheel location:location modifierFlags:modifierFlags + timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0 ]; + + event._DOMEvent = aDOMEvent; + event._deltaX = deltaX; + event._deltaY = deltaY; + + [CPApp sendEvent:event]; + + if (StopDOMEventPropagation) + CPDOMEventStop(aDOMEvent); + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +} + +- (void)resizeEvent:(DOMEvent)aDOMEvent +{ + // FIXME: This is not the right way to do this. + // We should pay attention to mouse down and mouse up in conjunction with this. + //window.liveResize = YES; + + var oldSize = [self contentRect].size; + + [self updateFromNativeContentRect]; + + var levels = _windowLevels, + layers = _windowLayers, + levelCount = levels.length; + + while (levelCount--) + { + var windows = [layers objectForKey:levels[levelCount]]._windows, + windowCount = windows.length; + + while (windowCount--) + [windows[windowCount] resizeWithOldBridgeSize:oldSize]; + } + + //window.liveResize = NO; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +} + +- (void)touchEvent:(DOMEvent)aDOMEvent +{ + if (aDOMEvent.touches && (aDOMEvent.touches.length == 1 || (aDOMEvent.touches.length == 0 && aDOMEvent.changedTouches.length == 1))) + { + var newEvent = {}; + + switch(aDOMEvent.type) + { + case CPDOMEventTouchStart: newEvent.type = CPDOMEventMouseDown; + break; + case CPDOMEventTouchEnd: newEvent.type = CPDOMEventMouseUp; + break; + case CPDOMEventTouchMove: newEvent.type = CPDOMEventMouseMoved; + break; + case CPDOMEventTouchCancel: newEvent.type = CPDOMEventMouseUp; + break; + } + + var touch = aDOMEvent.touches.length ? aDOMEvent.touches[0] : aDOMEvent.changedTouches[0]; + + newEvent.clientX = touch.clientX; + newEvent.clientY = touch.clientY; + + newEvent.timestamp = aDOMEvent.timestamp; + newEvent.target = aDOMEvent.target; + + newEvent.shiftKey = newEvent.ctrlKey = newEvent.altKey = newEvent.metaKey = false; + + newEvent.preventDefault = function(){if(aDOMEvent.preventDefault) aDOMEvent.preventDefault()}; + newEvent.stopPropagation = function(){if(aDOMEvent.stopPropagation) aDOMEvent.stopPropagation()}; + + [self _bridgeMouseEvent:newEvent]; + + return; + } + else + { + if (aDOMEvent.preventDefault) + aDOMEvent.preventDefault(); + + if (aDOMEvent.stopPropagation) + aDOMEvent.stopPropagation(); + } + // handle touch cases specifically +} + +- (void)mouseEvent:(DOMEvent)aDOMEvent +{ + var type = _overriddenEventType || aDOMEvent.type; + + // IE's event order is down, up, up, dblclick, so we have create these events artificially. + if (type === CPDOMEventDoubleClick) + { + _overriddenEventType = CPDOMEventMouseDown; + [self _bridgeMouseEvent:aDOMEvent]; + + _overriddenEventType = CPDOMEventMouseUp; + [self _bridgeMouseEvent:aDOMEvent]; + + _overriddenEventType = nil; + + return; + } + + var event, + location = _CGPointMake(aDOMEvent.clientX, aDOMEvent.clientY), + timestamp = aDOMEvent.timeStamp ? aDOMEvent.timeStamp : new Date(), + sourceElement = (aDOMEvent.target || aDOMEvent.srcElement), + windowNumber = 0, + modifierFlags = (aDOMEvent.shiftKey ? CPShiftKeyMask : 0) | + (aDOMEvent.ctrlKey ? CPControlKeyMask : 0) | + (aDOMEvent.altKey ? CPAlternateKeyMask : 0) | + (aDOMEvent.metaKey ? CPCommandKeyMask : 0); + + StopDOMEventPropagation = YES; + + if (_mouseDownWindow) + windowNumber = [_mouseDownWindow windowNumber]; + + else + { + var theWindow = [self hitTest:location]; + + if ((aDOMEvent.type === CPDOMEventMouseDown) && theWindow) + _mouseDownWindow = theWindow; + + windowNumber = [theWindow windowNumber]; + } + + if (windowNumber) + { + var windowFrame = CPApp._windows[windowNumber]._frame; + + location.x -= _CGRectGetMinX(windowFrame); + location.y -= _CGRectGetMinY(windowFrame); + } + + if (type === "mouseup") + { + if(_mouseIsDown) + { + event = _CPEventFromNativeMouseEvent(aDOMEvent, CPLeftMouseUp, location, modifierFlags, timestamp, windowNumber, nil, -1, CPDOMEventGetClickCount(_lastMouseUp, timestamp, location), 0); + + _mouseIsDown = NO; + _lastMouseUp = event; + _mouseDownWindow = nil; + } + + if(_DOMEventMode) + { + _DOMEventMode = NO; + return; + } + } + + else if (type === "mousedown") + { + if (ExcludedDOMElements[sourceElement.tagName] && sourceElement != _DOMFocusElement) + { + _DOMEventMode = YES; + _mouseIsDown = YES; + + //fake a down and up event so that event tracking mode will work correctly + [CPApp sendEvent:[CPEvent mouseEventWithType:CPLeftMouseDown location:location modifierFlags:modifierFlags + timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:-1 + clickCount:CPDOMEventGetClickCount(_lastMouseDown, timestamp, location) pressure:0]]; + + [CPApp sendEvent:[CPEvent mouseEventWithType:CPLeftMouseUp location:location modifierFlags:modifierFlags + timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:-1 + clickCount:CPDOMEventGetClickCount(_lastMouseDown, timestamp, location) pressure:0]]; + + return; + } + + event = _CPEventFromNativeMouseEvent(aDOMEvent, CPLeftMouseDown, location, modifierFlags, timestamp, windowNumber, nil, -1, CPDOMEventGetClickCount(_lastMouseDown, timestamp, location), 0); + + _mouseIsDown = YES; + _lastMouseDown = event; + } + + else // if (type === "mousemove") + { + if (_DOMEventMode) + return; + + event = _CPEventFromNativeMouseEvent(aDOMEvent, _mouseIsDown ? CPLeftMouseDragged : CPMouseMoved, location, modifierFlags, timestamp, windowNumber, nil, -1, 1, 0); + } + + if (event) + { + event._DOMEvent = aDOMEvent; + + [CPApp sendEvent:event]; + } + + if (StopDOMEventPropagation) + CPDOMEventStop(aDOMEvent); + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +} + + (CPArray)orderedWindowsAtLevel:(int)aLevel +{ + var layer = [self layerAtLevel:aLevel create:NO]; + + if (!layer) + return []; + + return [layer orderedWindows]; +} + +- (CPDOMWindowLayer)layerAtLevel:(int)aLevel create:(BOOL)aFlag +{ + var layer = [_windowLayers objectForKey:aLevel]; + + // If the layer doesn't currently exist, and the create flag is true, + // create the layer. + if (!layer && aFlag) + { + layer = [[CPDOMWindowLayer alloc] initWithLevel:aLevel]; + + [_windowLayers setObject:layer forKey:aLevel]; + + // Find the nearest layer. This is similar to a binary search, + // only we know we won't find the value. + var low = 0, + high = _windowLevels.length - 1, + middle; + + while (low <= high) + { + middle = FLOOR((low + high) / 2); + + if (_windowLevels[middle] > aLevel) + high = middle - 1; + else + low = middle + 1; + } + + [_windowLevels insertObject:aLevel atIndex:_windowLevels[middle] > aLevel ? middle : middle + 1]; + layer._DOMElement.style.zIndex = aLevel; + _DOMBodyElement.appendChild(layer._DOMElement); + } + + return layer; +} + +- (void)order:(CPWindowOrderingMode)aPlace window:(CPWindow)aWindow relativeTo:(CPWindow)otherWindow +{ + // Grab the appropriate level for the layer, and create it if + // necessary (if we are not simply removing the window). + var layer = [self layerAtLevel:[aWindow level] create:aPlace != CPWindowOut]; + + // Ignore otherWindow, simply remove this window from it's level. + // If layer is nil, this will be a no-op. + if (aPlace == CPWindowOut) + return [layer removeWindow:aWindow]; + + // Place the window at the appropriate index. + [layer insertWindow:aWindow atIndex:(otherWindow ? (aPlace == CPWindowAbove ? otherWindow._index + 1 : otherWindow._index) : CPNotFound)]; +} + +/* @ignore */ +- (id)_dragHitTest:(CPPoint)aPoint pasteboard:(CPPasteboard)aPasteboard +{ + var levels = _windowLevels, + layers = _windowLayers, + levelCount = levels.length; + + while (levelCount--) + { + // Skip any windows above or at the dragging level. + if (levels[levelCount] >= CPDraggingWindowLevel) + continue; + + var windows = [layers objectForKey:levels[levelCount]]._windows, + windowCount = windows.length; + + while (windowCount--) + { + var theWindow = windows[windowCount]; + + if ([theWindow containsPoint:aPoint]) + return [theWindow _dragHitTest:aPoint pasteboard:aPasteboard]; + } + } + + return nil; +} + +/* @ignore */ +- (void)_propagateCurrentDOMEvent:(BOOL)aFlag +{ + StopDOMEventPropagation = !aFlag; +} + +- (CPWindow)hitTest:(CPPoint)location +{ + var levels = _windowLevels, + layers = _windowLayers, + levelCount = levels.length, + theWindow = nil; + + while (levelCount-- && !theWindow) + { + var windows = [layers objectForKey:levels[levelCount]]._windows, + windowCount = windows.length; + + while (windowCount-- && !theWindow) + { + var candidateWindow = windows[windowCount]; + + if (!candidateWindow._ignoresMouseEvents && [candidateWindow containsPoint:location]) + theWindow = candidateWindow; + } + } + + return theWindow; +} + +- (void)_checkPasteboardElement +{ + var value = _DOMPasteboardElement.value; + + if ([value length]) + { + var pasteboard = [CPPasteboard generalPasteboard]; + + if ([pasteboard _stateUID] != value) + { + [pasteboard declareTypes:[CPStringPboardType] owner:self]; + + [pasteboard setString:value forType:CPStringPboardType]; + } + } + + [self _clearPasteboardElement]; + + [CPApp sendEvent:_pasteboardKeyDownEvent]; + + _pasteboardKeyDownEvent = nil; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +} + +- (void)_clearPasteboardElement +{ + _DOMPasteboardElement.value = ""; + _DOMPasteboardElement.blur(); +} + +/*! + When using command (mac) or control (windows), keys are propagated to the browser by default. + To prevent a character key from propagating (to prevent its default action, and instead use it + in your own application), use these methods. These methods are additive -- the list builds until you clear it. + + @param characters a list of characters to stop propagating keypresses to the browser. +*/ +- (void)preventCharacterKeysFromPropagating:(CPArray)characters +{ + for(var i=characters.length; i>0; i--) + CharacterKeysToPrevent[""+characters[i-1].toLowerCase()] = YES; +} + +/*! + @param character a character to stop propagating keypresses to the browser. +*/ +- (void)preventCharacterKeyFromPropagating:(CPString)character +{ + CharacterKeysToPrevent[character.toLowerCase()] = YES; +} + +/*! + Clear the list of characters for which we are not sending keypresses to the browser. +*/ +- (void)clearCharacterKeysToPreventFromPropagating +{ + CharacterKeysToPrevent = {}; +} + +/*! + Prevent these keyCodes from sending their keypresses to the browser. + @param keyCodes an array of keycodes to prevent propagation. +*/ +- (void)preventKeyCodesFromPropagating:(CPArray)keyCodes +{ + for(var i=keyCodes.length; i>0; i--) + KeyCodesToPrevent[keyCodes[i-1]] = YES; +} + +/*! + Prevent this keyCode from sending its key events to the browser. + @param keyCode a keycode to prevent propagation. +*/ +- (void)preventKeyCodeFromPropagating:(CPString)keyCode +{ + KeyCodesToPrevent[keyCode] = YES; +} + +/*! + Clear the list of keyCodes for which we are not sending keypresses to the browser. +*/ +- (void)clearKeyCodesToPreventFromPropagating +{ + KeyCodesToPrevent = {}; +} + + +@end + +var CPEventClass = [CPEvent class]; + +var _CPEventFromNativeMouseEvent = function(aNativeEvent, anEventType, aPoint, modifierFlags, aTimestamp, aWindowNumber, aGraphicsContext, anEventNumber, aClickCount, aPressure) +{ + aNativeEvent.isa = CPEventClass; + + aNativeEvent._type = anEventType; + aNativeEvent._location = aPoint; + aNativeEvent._modifierFlags = modifierFlags; + aNativeEvent._timestamp = aTimestamp; + aNativeEvent._windowNumber = aWindowNumber; + aNativeEvent._window = nil; + aNativeEvent._context = aGraphicsContext; + aNativeEvent._eventNumber = anEventNumber; + aNativeEvent._clickCount = aClickCount; + aNativeEvent._pressure = aPressure; + + return aNativeEvent; +} + +var CLICK_SPACE_DELTA = 5.0, + CLICK_TIME_DELTA = (typeof document != "undefined" && document.addEventListener) ? 350.0 : 1000.0; + +var CPDOMEventGetClickCount = function(aComparisonEvent, aTimestamp, aLocation) +{ + if (!aComparisonEvent) + return 1; + + var comparisonLocation = [aComparisonEvent locationInWindow]; + + return (aTimestamp - [aComparisonEvent timestamp] < CLICK_TIME_DELTA && + ABS(comparisonLocation.x - aLocation.x) < CLICK_SPACE_DELTA && + ABS(comparisonLocation.y - aLocation.y) < CLICK_SPACE_DELTA) ? [aComparisonEvent clickCount] + 1 : 1; +} + +var CPDOMEventStop = function(aDOMEvent) +{ + // IE Model + aDOMEvent.cancelBubble = true; + aDOMEvent.returnValue = false; + + // W3C Model + if (aDOMEvent.preventDefault) + aDOMEvent.preventDefault(); + + if (aDOMEvent.stopPropagation) + aDOMEvent.stopPropagation(); + + if (aDOMEvent.type === CPDOMEventMouseDown) + { + CPSharedDOMWindowBridge._DOMFocusElement.focus(); + CPSharedDOMWindowBridge._DOMFocusElement.blur(); + } +} + +function CPWindowObjectList() +{ + var bridge = [CPDOMWindowBridge sharedDOMWindowBridge], + levels = bridge._windowLevels, + layers = bridge._windowLayers, + levelCount = levels.length, + windowObjects = []; + + while (levelCount--) + { + var windows = [layers objectForKey:levels[levelCount]]._windows, + windowCount = windows.length; + + while (windowCount--) + windowObjects.push(windows[windowCount]); + } + + return windowObjects; +} + +function CPWindowList() +{ + var bridge = [CPDOMWindowBridge sharedDOMWindowBridge], + levels = bridge._windowLevels, + layers = bridge._windowLayers, + levelCount = levels.length, + windowNumbers = []; + + while (levelCount--) + { + var windows = [layers objectForKey:levels[levelCount]]._windows, + windowCount = windows.length; + + while (windowCount--) + windowNumbers.push([windows[windowCount] windowNumber]); + } + + return windowNumbers; +} From e69d770583c3d0db987717fb110e9fad84f58bd7 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 25 Jul 2009 17:10:48 -0700 Subject: [PATCH 102/244] Further deprecation of CPDOMWindowBridge. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 77 +++++-------------------- AppKit/Platform/CPPlatformWindow.j | 26 +++++++++ AppKit/Platform/DOM/CPDOMWindowBridge.j | 14 +---- AppKit/Platform/DOM/_CPDOMWindow.j | 12 ++-- 4 files changed, 49 insertions(+), 80 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index b3499c575..3c0134cb5 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -236,6 +236,8 @@ var CPWindowSaveImage = nil, */ @implementation CPWindow : CPResponder { + CPPlatformWindow _platformWindow; + int _windowNumber; unsigned _styleMask; CGRect _frame; @@ -290,7 +292,7 @@ var CPWindowSaveImage = nil, #if PLATFORM(DOM) DOMElement _DOMElement; #endif - CPDOMWindowBridge _bridge; + unsigned _autoresizingMask; BOOL _delegateRespondsToWindowWillReturnUndoManagerSelector; @@ -329,37 +331,13 @@ CPTexturedBackgroundWindowMask @return the initialized window */ - (id)initWithContentRect:(CGRect)aContentRect styleMask:(unsigned int)aStyleMask -{ -#if PLATFORM(DOM) - return [self initWithContentRect:aContentRect styleMask:aStyleMask bridge:[CPDOMWindowBridge sharedDOMWindowBridge]]; -#else - return [self initWithContentRect:aContentRect styleMask:aStyleMask bridge:nil]; -#endif -} - -/*! - Initializes the window. The method also takes a style bit mask made up - of any of the following values: -
-CPBorderlessWindowMask
-CPTitledWindowMask
-CPClosableWindowMask
-CPMiniaturizableWindowMask
-CPResizableWindowMask
-CPTexturedBackgroundWindowMask
-
- @param aContentRect the size and location of the window in screen space - @param aStyleMask a style mask - @param aBridge a DOM-Window bridge object - @return the initialized window - @ignore -*/ -- (id)initWithContentRect:(CGRect)aContentRect styleMask:(unsigned int)aStyleMask bridge:(CPDOMWindowBridge)aBridge { self = [super init]; if (self) { + _platformWindow = window.firstWindow; + _isFullBridge = NO; _registeredDraggedTypes = [CPSet set]; _registeredDraggedTypesArray = []; @@ -403,8 +381,6 @@ CPTexturedBackgroundWindowMask CPDOMDisplayServerAppendChild(_DOMElement, _windowView._DOMElement); #endif - [self setBridge:aBridge]; - [self setNextResponder:CPApp]; [self setHasShadow:aStyleMask !== CPBorderlessWindowMask]; @@ -504,7 +480,7 @@ CPTexturedBackgroundWindowMask [self setLevel:CPBackgroundWindowLevel]; [self setHasShadow:NO]; [self setAutoresizingMask:CPWindowWidthSizable | CPWindowHeightSizable]; - [self setFrame:[_bridge visibleFrame]]; + [self setFrame:[_platformWindow usableContentFrame]]; } else { @@ -650,7 +626,7 @@ CPTexturedBackgroundWindowMask */ - (void)orderFront:(id)aSender { - [_bridge order:CPWindowAbove window:self relativeTo:nil]; + [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; } /* @@ -660,7 +636,7 @@ CPTexturedBackgroundWindowMask */ - (void)orderBack:(id)aSender { - //[_bridge order:CPWindowBelow + //[_platformWindow order:CPWindowBelow } /*! @@ -672,7 +648,7 @@ CPTexturedBackgroundWindowMask if ([_delegate respondsToSelector:@selector(windowWillClose:)]) [_delegate windowWillClose:self]; - [_bridge order:CPWindowOut window:self relativeTo:nil]; + [_platformWindow order:CPWindowOut window:self relativeTo:nil]; if ([CPApp keyWindow] == self) { @@ -689,7 +665,7 @@ CPTexturedBackgroundWindowMask */ - (void)orderWindow:(CPWindowOrderingMode)aPlace relativeTo:(int)otherWindowNumber { - [_bridge order:aPlace window:self relativeTo:CPApp._windows[otherWindowNumber]]; + [_platformWindow order:aPlace window:self relativeTo:CPApp._windows[otherWindowNumber]]; } /*! @@ -1154,9 +1130,9 @@ CPTexturedBackgroundWindowMask - (void)center { var size = [self frame].size, - bridgeSize = [_bridge contentBounds].size; + containerSize = [_platformWindow contentBounds].size; - [self setFrameOrigin:CGPointMake((bridgeSize.width - size.width) / 2.0, (bridgeSize.height - size.height) / 2.0)]; + [self setFrameOrigin:CGPointMake((containerSize.width - size.width) / 2.0, (containerSize.height - size.height) / 2.0)]; } /*! @@ -1641,7 +1617,7 @@ CPTexturedBackgroundWindowMask [_windowView noteToolbarChanged]; if (_isFullBridge) - newFrame = [_bridge visibleFrame]; + newFrame = [_platformWindow usableContentFrame]; else { newFrame = CGRectMakeCopy([self frame]); @@ -1708,7 +1684,7 @@ CPTexturedBackgroundWindowMask [self _setAttachedSheetFrameOrigin]; // Place this window above ourselves. - [_bridge order:CPWindowAbove window:aSheet relativeTo:self]; + [_platformWindow order:CPWindowAbove window:aSheet relativeTo:self]; } /*! @@ -1929,39 +1905,18 @@ var keyViewComparator = function(a, b, context) @implementation CPWindow (BridgeSupport) -/* - Sets the DOM-Window bridge for this window. - @ignore -*/ -- (void)setBridge:(CPDOMWindowBridge)aBridge -{ - if (_bridge == aBridge) - return; - - if (_bridge) - { - [self orderOut:self]; - // FIXME: If the bridge changes, then we have to recreate all of our subviews' DOM Elements. - } - - _bridge = aBridge; - - if ([self isFullBridge]) - [self setFrame:[aBridge contentBounds]]; -} - /* @ignore */ - (void)resizeWithOldBridgeSize:(CGSize)aSize { if ([self isFullBridge]) - return [self setFrame:[_bridge visibleFrame]]; + return [self setFrame:[_platformWindow usableContentFrame]]; if (_autoresizingMask == CPWindowNotSizable) return; - var frame = [_bridge contentBounds], + var frame = [_platformWindow contentBounds], newFrame = CGRectMakeCopy(_frame), dX = (CGRectGetWidth(frame) - aSize.width) / (((_autoresizingMask & CPWindowMinXMargin) ? 1 : 0) + (_autoresizingMask & CPWindowWidthSizable ? 1 : 0) + (_autoresizingMask & CPWindowMaxXMargin ? 1 : 0)), diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index 04e35b808..74fecdb4d 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -50,6 +50,32 @@ var PlatformWindowClass = NULL; return _CGRectMakeCopy(_contentRect); } +- (CGRect)contentBounds +{ + var contentBounds = [self contentRect]; + + contentBounds.origin = _CGPointMakeZero(); + + return contentBounds; +} + +- (void)usableContentFrame +{ + var frame = [self contentBounds]; + + frame.origin = CGPointMakeZero(); + + if ([CPMenu menuBarVisible]) + { + var menuBarHeight = [[CPApp mainMenu] menuBarHeight]; + + frame.origin.y += menuBarHeight; + frame.size.height -= menuBarHeight; + } + + return frame; +} + - (void)setContentRect:(CGRect)aRect { if (!aRect || _CGRectEqualToRect(_contentRect, aRect)) diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index 78f6fe640..f6afe1168 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -73,19 +73,7 @@ var CPDOMWindowGetFrame, - (CGRect)visibleFrame { - var frame = [self contentBounds]; - - frame.origin = CGPointMakeZero(); - - if ([CPMenu menuBarVisible]) - { - var menuBarHeight = [[CPApp mainMenu] menuBarHeight]; - - frame.origin.y += menuBarHeight; - frame.size.height -= menuBarHeight; - } - - return frame; + return [window.firstWindow usableContentFrame]; } - (CPRect)contentBounds diff --git a/AppKit/Platform/DOM/_CPDOMWindow.j b/AppKit/Platform/DOM/_CPDOMWindow.j index d8a3b2c0b..38b18faa2 100644 --- a/AppKit/Platform/DOM/_CPDOMWindow.j +++ b/AppKit/Platform/DOM/_CPDOMWindow.j @@ -477,7 +477,7 @@ var CTRL_KEY_CODE = 17; } if (StopDOMEventPropagation) - CPDOMEventStop(aDOMEvent); + CPDOMEventStop(aDOMEvent, self); [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; @@ -564,7 +564,7 @@ var CTRL_KEY_CODE = 17; [CPApp sendEvent:event]; if (StopDOMEventPropagation) - CPDOMEventStop(aDOMEvent); + CPDOMEventStop(aDOMEvent, self); [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; } @@ -753,7 +753,7 @@ var CTRL_KEY_CODE = 17; } if (StopDOMEventPropagation) - CPDOMEventStop(aDOMEvent); + CPDOMEventStop(aDOMEvent, self); [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; } @@ -1002,7 +1002,7 @@ var CPDOMEventGetClickCount = function(aComparisonEvent, aTimestamp, aLocation) ABS(comparisonLocation.y - aLocation.y) < CLICK_SPACE_DELTA) ? [aComparisonEvent clickCount] + 1 : 1; } -var CPDOMEventStop = function(aDOMEvent) +var CPDOMEventStop = function(aDOMEvent, aPlatformWindow) { // IE Model aDOMEvent.cancelBubble = true; @@ -1017,8 +1017,8 @@ var CPDOMEventStop = function(aDOMEvent) if (aDOMEvent.type === CPDOMEventMouseDown) { - CPSharedDOMWindowBridge._DOMFocusElement.focus(); - CPSharedDOMWindowBridge._DOMFocusElement.blur(); + aPlatformWindow._DOMFocusElement.focus(); + aPlatformWindow._DOMFocusElement.blur(); } } From ae7fbad2b977607082b65fa15c15a159049a36a0 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 01:34:16 -0700 Subject: [PATCH 103/244] Fix for dom layer. Reviewed by me. --- AppKit/Platform/DOM/CPDOMWindowLayer.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/Platform/DOM/CPDOMWindowLayer.j b/AppKit/Platform/DOM/CPDOMWindowLayer.j index bb5c5c882..3d6f3dede 100644 --- a/AppKit/Platform/DOM/CPDOMWindowLayer.j +++ b/AppKit/Platform/DOM/CPDOMWindowLayer.j @@ -115,7 +115,7 @@ aWindow._isVisible = YES; if ([aWindow isFullBridge]) - [aWindow setFrame:[aWindow._bridge visibleFrame]]; + [aWindow setFrame:[aWindow._platformWindow usableContentFrame]]; } } From d53207efd511b7994c08f669d5a97ccebf6942ce Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 12:52:24 -0700 Subject: [PATCH 104/244] Furhter platform window support. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 3 +++ AppKit/Platform/CPPlatformWindow.j | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 3c0134cb5..b83b7446e 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -626,6 +626,9 @@ CPTexturedBackgroundWindowMask */ - (void)orderFront:(id)aSender { + if (![_platformWindow isVisible]) + [_platformWindow orderFront:self]; + [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; } diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index 74fecdb4d..d9beb54e6 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -118,6 +118,14 @@ var PlatformWindowClass = NULL; [self setContentRect:[self nativeContentRect]]; } +- (BOOL)isVisible +{ +#if PLATFORM(DOM) + return _DOMWindow !== NULL; +#endif + return NO; +} + @end #if PLATFORM(BROWSER) From 4f4a488762705769be6a608ffb4830567dfa6795 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 15:28:41 -0700 Subject: [PATCH 105/244] Remove debugger command in CPPopUpButton that breaks Release builds. Reviewed by me. --- AppKit/CPPopUpButton.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index 47d7e2176..526a1cb4d 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -550,7 +550,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)synchronizeTitleAndSelectedItem { var item = nil; -debugger; + if ([self pullsDown]) { var items = [_menu itemArray]; From 5ce96b45bb8ca28f3424bf8ddfb06d8745e08af1 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 26 Jul 2009 22:46:22 -0700 Subject: [PATCH 106/244] Slight performance improvement and memory improvement by moving the storage of KVO proxy objects. --- Foundation/CPKeyValueObserving.j | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 7a1d575ae..5c57449a2 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -58,7 +58,7 @@ if (!anObserver || !aPath) return; - [[KVOProxyMap objectForKey:[self UID]] _removeObserver:anObserver forKeyPath:aPath]; + [self[KVOProxyKey] _removeObserver:anObserver forKeyPath:aPath]; } + (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey @@ -98,12 +98,9 @@ CPKeyValueChangeInsertion = 2; CPKeyValueChangeRemoval = 3; CPKeyValueChangeReplacement = 4; -//convenience -var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld; - -// Map of real objects to their KVO proxy -var KVOProxyMap = [CPDictionary dictionary], - DependentKeysMap = [CPDictionary dictionary]; +var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, + DependentKeysMap = [CPDictionary dictionary], + KVOProxyKey = "$KVOPROXY"; //rule of thumb: _ methods are called on the real proxy object, others are called on the "fake" proxy object (aka the real object) @@ -119,7 +116,7 @@ var KVOProxyMap = [CPDictionary dictionary], + (id)proxyForObject:(CPObject)anObject { - var proxy = [KVOProxyMap objectForKey:[anObject UID]]; + var proxy = anObject[KVOProxyKey]; if (proxy) return proxy; @@ -128,7 +125,7 @@ var KVOProxyMap = [CPDictionary dictionary], [proxy _replaceClass]; - [KVOProxyMap setObject:proxy forKey:[anObject UID]]; + anObject[KVOProxyKey] = proxy; return proxy; } @@ -205,9 +202,10 @@ var KVOProxyMap = [CPDictionary dictionary], } } - var affectingKeys = [[_nativeClass keyPathsForValuesAffectingValueForKey:aKey] allObjects]; + var affectingKeys = [[_nativeClass keyPathsForValuesAffectingValueForKey:aKey] allObjects], + affectingKeysCount = affectingKeys ? affectingKeys.length : 0; - if (![affectingKeys count]) + if (!affectingKeysCount) return; var dependentKeysForClass = [DependentKeysMap objectForKey:[_nativeClass UID]]; @@ -218,11 +216,9 @@ var KVOProxyMap = [CPDictionary dictionary], [DependentKeysMap setObject:dependentKeysForClass forKey:[_nativeClass UID]]; } - var count = [affectingKeys count]; - - while (count--) + while (affectingKeysCount--) { - var affectingKey = affectingKeys[count], + var affectingKey = affectingKeys[affectingKeysCount], affectedKeys = [dependentKeysForClass objectForKey:affectingKey]; if (!affectedKeys) @@ -288,7 +284,7 @@ var KVOProxyMap = [CPDictionary dictionary], if (![_observersForKey count]) { _targetObject.isa = _nativeClass; //restore the original class - [KVOProxyMap removeObjectForKey:[_targetObject UID]]; + delete _targetObject[KVOProxyKey]; } } @@ -360,7 +356,7 @@ var KVOProxyMap = [CPDictionary dictionary], } var observers = [[_observersForKey objectForKey:aKey] allValues], - count = [observers count]; + count = observers ? observers.length : 0; while (count--) { @@ -425,7 +421,7 @@ var KVOProxyMap = [CPDictionary dictionary], - (Class)class { - return [KVOProxyMap objectForKey:[self UID]]._nativeClass; + return self[KVOProxyKey]._nativeClass; } - (Class)superclass From 43706041658e36ef8338c0c0bf515bad1c7d0bba Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 26 Jul 2009 23:40:52 -0700 Subject: [PATCH 107/244] Remove several CPDictionaries in favor of Objects, about a 15% performance gain. --- Foundation/CPKeyValueObserving.j | 47 ++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 5c57449a2..897702537 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -99,7 +99,7 @@ CPKeyValueChangeRemoval = 3; CPKeyValueChangeReplacement = 4; var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, - DependentKeysMap = [CPDictionary dictionary], + DependentKeysMap = {}, KVOProxyKey = "$KVOPROXY"; //rule of thumb: _ methods are called on the real proxy object, others are called on the "fake" proxy object (aka the real object) @@ -110,7 +110,8 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, id _targetObject; Class _nativeClass; CPDictionary _changesForKey; - CPDictionary _observersForKey; + Object _observersForKey; + int _observersForKeyLength; CPSet _replacedKeys; } @@ -136,9 +137,10 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, _targetObject = aTarget; _nativeClass = [aTarget class]; - _observersForKey = [CPDictionary dictionary]; - _changesForKey = [CPDictionary dictionary]; _replacedKeys = [CPSet set]; + _observersForKey = {}; + _changesForKey = {}; + _observersForKeyLength = 0; return self; } @@ -208,23 +210,23 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, if (!affectingKeysCount) return; - var dependentKeysForClass = [DependentKeysMap objectForKey:[_nativeClass UID]]; + var dependentKeysForClass = DependentKeysMap[[_nativeClass UID]]; if (!dependentKeysForClass) { - dependentKeysForClass = [CPDictionary new]; - [DependentKeysMap setObject:dependentKeysForClass forKey:[_nativeClass UID]]; + dependentKeysForClass = {}; + DependentKeysMap[[_nativeClass UID]] = dependentKeysForClass; } while (affectingKeysCount--) { var affectingKey = affectingKeys[affectingKeysCount], - affectedKeys = [dependentKeysForClass objectForKey:affectingKey]; + affectedKeys = dependentKeysForClass[affectingKey]; if (!affectedKeys) { affectedKeys = [CPSet new]; - [dependentKeysForClass setObject:affectedKeys forKey:affectingKey]; + dependentKeysForClass[affectingKey] = affectedKeys; } [affectedKeys addObject:aKey]; @@ -244,12 +246,13 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, else [self _replaceSetterForKey:aPath]; - var observers = [_observersForKey objectForKey:aPath]; + var observers = _observersForKey[aPath]; if (!observers) { observers = [CPDictionary dictionary]; - [_observersForKey setObject:observers forKey:aPath]; + _observersForKey[aPath] = observers; + _observersForKeyLength++; } [observers setObject:_CPKVOInfoMake(anObserver, options, aContext, forwarder) forKey:[anObserver UID]]; @@ -268,7 +271,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, - (void)_removeObserver:(id)anObserver forKeyPath:(CPString)aPath { - var observers = [_observersForKey objectForKey:aPath]; + var observers = _observersForKey[aPath]; if (aPath.indexOf('.') != CPNotFound) { @@ -279,9 +282,12 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, [observers removeObjectForKey:[anObserver UID]]; if (![observers count]) - [_observersForKey removeObjectForKey:aPath]; + { + _observersForKeyLength--; + delete _observersForKey[aPath]; + } - if (![_observersForKey count]) + if (!_observersForKeyLength) { _targetObject.isa = _nativeClass; //restore the original class delete _targetObject[KVOProxyKey]; @@ -292,7 +298,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, - (void)_sendNotificationsForKey:(CPString)aKey changeOptions:(CPDictionary)changeOptions isBefore:(BOOL)isBefore { - var changes = [_changesForKey objectForKey:aKey]; + var changes = _changesForKey[aKey]; if (isBefore) { @@ -324,7 +330,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, [changes setObject:1 forKey:CPKeyValueChangeNotificationIsPriorKey]; - [_changesForKey setObject:changes forKey:aKey]; + _changesForKey[aKey] = changes; } else { @@ -355,7 +361,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, } } - var observers = [[_observersForKey objectForKey:aKey] allValues], + var observers = [_observersForKey[aKey] allValues], count = observers ? observers.length : 0; while (count--) @@ -368,7 +374,12 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, [observerInfo.observer observeValueForKeyPath:aKey ofObject:_targetObject change:changes context:observerInfo.context]; } - var keysComposedOfKey = [[[DependentKeysMap objectForKey:[_nativeClass UID]] objectForKey:aKey] allObjects]; + var dependentKeysMap = DependentKeysMap[[_nativeClass UID]]; + + if (!dependentKeysMap) + return; + + var keysComposedOfKey = [dependentKeysMap[aKey] allObjects]; if (!keysComposedOfKey) return; From 0ef4e9bca5901602b9edc7519c54b48eccea3049 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 26 Jul 2009 23:56:18 -0700 Subject: [PATCH 108/244] store dependent keys on the class object itself, rather than in a global map. --- Foundation/CPKeyValueObserving.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 897702537..a2c3fc2d5 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -99,7 +99,7 @@ CPKeyValueChangeRemoval = 3; CPKeyValueChangeReplacement = 4; var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, - DependentKeysMap = {}, + DependentKeysKey = "$KVODEPENDENT", KVOProxyKey = "$KVOPROXY"; //rule of thumb: _ methods are called on the real proxy object, others are called on the "fake" proxy object (aka the real object) @@ -210,12 +210,12 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, if (!affectingKeysCount) return; - var dependentKeysForClass = DependentKeysMap[[_nativeClass UID]]; + var dependentKeysForClass = _nativeClass[DependentKeysKey]; if (!dependentKeysForClass) { dependentKeysForClass = {}; - DependentKeysMap[[_nativeClass UID]] = dependentKeysForClass; + _nativeClass[DependentKeysKey] = dependentKeysForClass; } while (affectingKeysCount--) @@ -374,7 +374,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, [observerInfo.observer observeValueForKeyPath:aKey ofObject:_targetObject change:changes context:observerInfo.context]; } - var dependentKeysMap = DependentKeysMap[[_nativeClass UID]]; + var dependentKeysMap = _nativeClass[DependentKeysKey]; if (!dependentKeysMap) return; From 756885fd534ad66720678bd37c6b0bb2a452449f Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 15:28:41 -0700 Subject: [PATCH 109/244] Remove debugger command in CPPopUpButton that breaks Release builds. Reviewed by me. --- AppKit/CPPopUpButton.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index 47d7e2176..526a1cb4d 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -550,7 +550,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)synchronizeTitleAndSelectedItem { var item = nil; -debugger; + if ([self pullsDown]) { var items = [_menu itemArray]; From d2b1df88e8a28ea1fc53109609d7427fa96898c7 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 15:50:37 -0700 Subject: [PATCH 110/244] FIx for drag and drop without CPDOMWindowBridge. Reviewed by me. --- AppKit/CPDragServer.j | 11 +++++++++-- AppKit/CPWindow/CPWindow.j | 15 ++++++++++++--- AppKit/Platform/DOM/_CPDOMWindow.j | 3 +++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/AppKit/CPDragServer.j b/AppKit/CPDragServer.j index f39524a61..39c4900fb 100644 --- a/AppKit/CPDragServer.j +++ b/AppKit/CPDragServer.j @@ -26,6 +26,7 @@ @import #import "CoreGraphics/CGGeometry.h" +#import "Platform/Platform.h" #define DRAGGING_WINDOW(anObject) ([anObject isKindOfClass:[CPWindow class]] ? anObject : [anObject window]) @@ -241,14 +242,20 @@ var CPDragServerUpdateDragging = function(anEvent) - (void)dragView:(CPView)aView fromWindow:(CPWindow)aWindow at:(CGPoint)viewLocation offset:(CGSize)mouseOffset event:(CPEvent)anEvent pasteboard:(CPPasteboard)aPasteboard source:(id)aSourceObject slideBack:(BOOL)slideBack { var eventLocation = [anEvent locationInWindow]; - + CPDragServerView = aView; CPDragServerSource = aSourceObject; CPDragServerWindow = aWindow; CPDragServerOffset = CPPointMake(eventLocation.x - viewLocation.x, eventLocation.y - viewLocation.y); CPDragServerPasteboard = [CPPasteboard pasteboardWithName:CPDragPboard];//aPasteboard; - [_dragWindow setFrameSize:CGSizeMakeCopy([[CPDOMWindowBridge sharedDOMWindowBridge] frame].size)]; +#if PLATFORM(BROWSER) + var platformWindow = [aWindow platformWindow]; + + [_dragWindow setPlatformWindow:platformWindow]; + [_dragWindow setFrameSize:[platformWindow contentBounds]]; +#endif + [_dragWindow orderFront:self]; [aView setFrameOrigin:viewLocation]; diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index b83b7446e..dcc7fc2c9 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -395,6 +395,17 @@ CPTexturedBackgroundWindowMask return self; } +- (CPPlatformWindow)platformWindow +{ + return _platformWindow; +} + +- (void)setPlatformWindow:(CPPlatformWindow)aPlatformWindow +{ + // FIXME: already visible. + _platformWindow = aPlatformWindow; +} + /*! @ignore */ @@ -626,9 +637,7 @@ CPTexturedBackgroundWindowMask */ - (void)orderFront:(id)aSender { - if (![_platformWindow isVisible]) - [_platformWindow orderFront:self]; - + [_platformWindow orderFront:self]; [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; } diff --git a/AppKit/Platform/DOM/_CPDOMWindow.j b/AppKit/Platform/DOM/_CPDOMWindow.j index 38b18faa2..1605ef941 100644 --- a/AppKit/Platform/DOM/_CPDOMWindow.j +++ b/AppKit/Platform/DOM/_CPDOMWindow.j @@ -254,6 +254,9 @@ var CTRL_KEY_CODE = 17; theDocument.addEventListener("touchmove", touchEventCallback, NO); theDocument.addEventListener("touchcancel", touchEventCallback, NO); + _DOMWindow.addEventListener("DOMMouseScroll", scrollEventCallback, NO); + _DOMWindow.addEventListener("mousewheel", scrollEventCallback, NO); + _DOMWindow.addEventListener("resize", resizeEventCallback, NO); _DOMWindow.addEventListener("beforeunload", function() From 4d179b1db70661cf589727016901c444b0a617b5 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 16:19:09 -0700 Subject: [PATCH 111/244] Remove global references to first window. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 2 +- AppKit/Platform/CPPlatform.j | 2 +- AppKit/Platform/CPPlatformWindow.j | 22 +++++++++++++++++++++- AppKit/Platform/DOM/CPDOMWindowBridge.j | 16 ++++++++-------- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index dcc7fc2c9..417f2fc9e 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -336,7 +336,7 @@ CPTexturedBackgroundWindowMask if (self) { - _platformWindow = window.firstWindow; + [self setPlatformWindow:[CPPlatformWindow primaryPlatformWindow]]; _isFullBridge = NO; _registeredDraggedTypes = [CPSet set]; diff --git a/AppKit/Platform/CPPlatform.j b/AppKit/Platform/CPPlatform.j index e7db6ddb1..8a75b53ab 100644 --- a/AppKit/Platform/CPPlatform.j +++ b/AppKit/Platform/CPPlatform.j @@ -21,7 +21,7 @@ #endif [CPPlatformString bootstrap]; - window.firstWindow = [[CPPlatformWindow alloc] _init]; + [CPPlatformWindow setPrimaryPlatformWindow:[[CPPlatformWindow alloc] _init]]; } @end diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index d9beb54e6..e0abdf130 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -5,13 +5,33 @@ #import "../CoreGraphics/CGGeometry.h" -var PlatformWindowClass = NULL; +var PlatformWindowClass = NULL, + PrimaryPlatformWindow = NULL; @implementation CPPlatformWindow : CPObject { CGRect _contentRect; } ++ (CPPlatformWindow)primaryPlatformWindow +{ + return PrimaryPlatformWindow; +} + ++ (void)setPrimaryPlatformWindow:(CPPlatformWindow)aPlatformWindow +{ + PrimaryPlatformWindow = aPlatformWindow; +} +/* ++ (BOOL)supportsMultipleWindows +{ +#if PLATFORM(BROWSER) + return YES; +#else + return NO; +#endif +} +*/ + (void)_setPlatformWindowClass:(Class)aClass { PlatformWindowClass = aClass; diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index f6afe1168..ac3352666 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -73,12 +73,12 @@ var CPDOMWindowGetFrame, - (CGRect)visibleFrame { - return [window.firstWindow usableContentFrame]; + return [[CPPlatformWindow primaryPlatformWindow] usableContentFrame]; } - (CPRect)contentBounds { - var contentBounds = [window.firstWindow contentRect]; + var contentBounds = [[CPPlatformWindow primaryPlatformWindow] contentRect]; contentBounds.origin = CGPointMake(0,0); return contentBounds; @@ -86,34 +86,34 @@ var CPDOMWindowGetFrame, - (CPArray)orderedWindowsAtLevel:(int)aLevel { - return [window.firstWindow orderedWindowsAtLevel:aLevel]; + return [[CPPlatformWindow primaryPlatformWindow] orderedWindowsAtLevel:aLevel]; } - (CPDOMWindowLayer)layerAtLevel:(int)aLevel create:(BOOL)aFlag { - return [window.firstWindow layerAtLevel:aLevel create:aFlag]; + return [[CPPlatformWindow primaryPlatformWindow] layerAtLevel:aLevel create:aFlag]; } - (void)order:(CPWindowOrderingMode)aPlace window:(CPWindow)aWindow relativeTo:(CPWindow)otherWindow { - return [window.firstWindow order:aPlace window:aWindow relativeTo:otherWindow]; + return [[CPPlatformWindow primaryPlatformWindow] order:aPlace window:aWindow relativeTo:otherWindow]; } /* @ignore */ - (id)_dragHitTest:(CPPoint)aPoint pasteboard:(CPPasteboard)aPasteboard { - return [window.firstWindow _dragHitTest:aPoint pasteboard:aPasteboard]; + return [[CPPlatformWindow primaryPlatformWindow] _dragHitTest:aPoint pasteboard:aPasteboard]; } /* @ignore */ - (void)_propagateCurrentDOMEvent:(BOOL)aFlag { - return [window.firstWindow _propagateCurrentDOMEvent:aFlag]; + return [[CPPlatformWindow primaryPlatformWindow] _propagateCurrentDOMEvent:aFlag]; } - (CPWindow)hitTest:(CPPoint)location { - return [window.firstWindow hitTest:location]; + return [[CPPlatformWindow primaryPlatformWindow] hitTest:location]; } @end From fa5352ad40a8352e28c2f376133d801556ebe378 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 17:56:25 -0700 Subject: [PATCH 112/244] Fix for drag and drop with platform windows. Reviewed by me. --- AppKit/CPDragServer.j | 3 +- AppKit/CPFlashView.j | 8 +- AppKit/Platform/CPPlatformWindow.j | 85 +++++++++++-------- ...{_CPDOMWindow.j => CPPlatformWindow+DOM.j} | 61 +++---------- AppKit/Platform/DOM/_CPBrowserWindow.j | 10 --- 5 files changed, 68 insertions(+), 99 deletions(-) rename AppKit/Platform/DOM/{_CPDOMWindow.j => CPPlatformWindow+DOM.j} (96%) delete mode 100644 AppKit/Platform/DOM/_CPBrowserWindow.j diff --git a/AppKit/CPDragServer.j b/AppKit/CPDragServer.j index 39c4900fb..337c13a99 100644 --- a/AppKit/CPDragServer.j +++ b/AppKit/CPDragServer.j @@ -252,8 +252,9 @@ var CPDragServerUpdateDragging = function(anEvent) #if PLATFORM(BROWSER) var platformWindow = [aWindow platformWindow]; + // FIXME: We should just have the window be the size of the view and move the window around. [_dragWindow setPlatformWindow:platformWindow]; - [_dragWindow setFrameSize:[platformWindow contentBounds]]; + [_dragWindow setFrameSize:[platformWindow contentBounds].size]; #endif [_dragWindow orderFront:self]; diff --git a/AppKit/CPFlashView.j b/AppKit/CPFlashView.j index 874614b7a..5d3f983a4 100644 --- a/AppKit/CPFlashView.j +++ b/AppKit/CPFlashView.j @@ -20,10 +20,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPDOMWindowBridge.j" @import "CPFlashMovie.j" @import "CPView.j" + /*! @ingroup appkit */ @@ -96,17 +96,17 @@ - (void)mouseDragged:(CPEvent)anEvent { - [[CPDOMWindowBridge sharedDOMWindowBridge] _propagateCurrentDOMEvent:YES]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; } - (void)mouseDown:(CPEvent)anEvent { - [[CPDOMWindowBridge sharedDOMWindowBridge] _propagateCurrentDOMEvent:YES]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; } - (void)mouseUp:(CPEvent)anEvent { - [[CPDOMWindowBridge sharedDOMWindowBridge] _propagateCurrentDOMEvent:YES]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; } @end diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index e0abdf130..abc76e29b 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -5,12 +5,37 @@ #import "../CoreGraphics/CGGeometry.h" -var PlatformWindowClass = NULL, - PrimaryPlatformWindow = NULL; +var PrimaryPlatformWindow = NULL; @implementation CPPlatformWindow : CPObject { CGRect _contentRect; + +#if PLATFORM(DOM) + DOMWindow _DOMWindow; + + DOMElement _DOMBodyElement; + DOMElement _DOMFocusElement; + + CPArray _windowLevels; + CPDictionary _windowLayers; + + BOOL _mouseIsDown; + CPWindow _mouseDownWindow; + CPTimeInterval _lastMouseUp; + CPTimeInterval _lastMouseDown; + + Object _charCodes; + unsigned _keyCode; + + BOOL _DOMEventMode; + + // Native Pasteboard Support + DOMElement _DOMPasteboardElement; + CPEvent _pasteboardKeyDownEvent; + + CPString _overriddenEventType; +#endif } + (CPPlatformWindow)primaryPlatformWindow @@ -22,41 +47,23 @@ var PlatformWindowClass = NULL, { PrimaryPlatformWindow = aPlatformWindow; } -/* -+ (BOOL)supportsMultipleWindows -{ -#if PLATFORM(BROWSER) - return YES; -#else - return NO; -#endif -} -*/ -+ (void)_setPlatformWindowClass:(Class)aClass -{ - PlatformWindowClass = aClass; -} - -+ (Class)_platformWindowClass -{ - return PlatformWindowClass; -} - -+ (id)alloc -{ - if (self === [CPPlatformWindow class]) - return [PlatformWindowClass alloc]; - - return [super alloc]; -} - (id)initWithContentRect:(CGRect)aRect { self = [super init]; if (self) + { _contentRect = _CGRectMakeCopy(aRect); +#if PLATFORM(DOM) + _windowLevels = []; + _windowLayers = [CPDictionary dictionary]; + + _charCodes = {}; +#endif + } + return self; } @@ -137,19 +144,25 @@ var PlatformWindowClass = NULL, { [self setContentRect:[self nativeContentRect]]; } - +/* - (BOOL)isVisible { -#if PLATFORM(DOM) - return _DOMWindow !== NULL; -#endif return NO; } +/* ++ (BOOL)supportsMultipleWindows +{ +#if PLATFORM(BROWSER) + return YES; +#else + return NO; +#endif +} +*/ + @end #if PLATFORM(BROWSER) -@import "_CPBrowserWindow.j" -#else -[CPPlatformWindow _setPlatformWindowClass:[CPPlatformWindow class]]; +@import "CPPlatformWindow+DOM.j" #endif diff --git a/AppKit/Platform/DOM/_CPDOMWindow.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j similarity index 96% rename from AppKit/Platform/DOM/_CPDOMWindow.j rename to AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 1605ef941..cd948e004 100644 --- a/AppKit/Platform/DOM/_CPDOMWindow.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -70,32 +70,7 @@ var KeyCodesToPrevent = {}, var CTRL_KEY_CODE = 17; -@implementation _CPDOMWindow : CPPlatformWindow -{ - DOMWindow _DOMWindow; - - DOMElement _DOMBodyElement; - DOMElement _DOMFocusElement; - - CPArray _windowLevels; - CPDictionary _windowLayers; - - BOOL _mouseIsDown; - CPWindow _mouseDownWindow; - CPTimeInterval _lastMouseUp; - CPTimeInterval _lastMouseDown; - - JSObject _charCodes; - unsigned _keyCode; - - BOOL _DOMEventMode; - - // Native Pasteboard Support - DOMElement _DOMPasteboardElement; - CPEvent _pasteboardKeyDownEvent; - - CPString _overriddenEventType; -} +@implementation CPPlatformWindow (DOM) - (id)_init { @@ -104,6 +79,7 @@ var CTRL_KEY_CODE = 17; if (self) { _DOMWindow = window; + _contentRect = _CGRectMakeZero(); [self registerDOMWindow]; [self updateFromNativeContentRect]; @@ -117,21 +93,6 @@ var CTRL_KEY_CODE = 17; return self; } -- (id)initWithContentRect:(CGRect)aRect -{ - self = [super initWithContentRect:aRect]; - - if (self) - { - _windowLevels = []; - _windowLayers = [CPDictionary dictionary]; - - _charCodes = {}; - } - - return self; -} - - (CGRect)nativeContentRect { if (!_DOMWindow) @@ -333,6 +294,11 @@ var CTRL_KEY_CODE = 17; } } +- (BOOL)isVisible +{ + return _DOMWindow !== NULL; +} + - (void)orderFront:(id)aSender { if (_DOMWindow) @@ -918,7 +884,7 @@ var CTRL_KEY_CODE = 17; @param characters a list of characters to stop propagating keypresses to the browser. */ -- (void)preventCharacterKeysFromPropagating:(CPArray)characters ++ (void)preventCharacterKeysFromPropagating:(CPArray)characters { for(var i=characters.length; i>0; i--) CharacterKeysToPrevent[""+characters[i-1].toLowerCase()] = YES; @@ -927,7 +893,7 @@ var CTRL_KEY_CODE = 17; /*! @param character a character to stop propagating keypresses to the browser. */ -- (void)preventCharacterKeyFromPropagating:(CPString)character ++ (void)preventCharacterKeyFromPropagating:(CPString)character { CharacterKeysToPrevent[character.toLowerCase()] = YES; } @@ -935,7 +901,7 @@ var CTRL_KEY_CODE = 17; /*! Clear the list of characters for which we are not sending keypresses to the browser. */ -- (void)clearCharacterKeysToPreventFromPropagating ++ (void)clearCharacterKeysToPreventFromPropagating { CharacterKeysToPrevent = {}; } @@ -944,7 +910,7 @@ var CTRL_KEY_CODE = 17; Prevent these keyCodes from sending their keypresses to the browser. @param keyCodes an array of keycodes to prevent propagation. */ -- (void)preventKeyCodesFromPropagating:(CPArray)keyCodes ++ (void)preventKeyCodesFromPropagating:(CPArray)keyCodes { for(var i=keyCodes.length; i>0; i--) KeyCodesToPrevent[keyCodes[i-1]] = YES; @@ -954,7 +920,7 @@ var CTRL_KEY_CODE = 17; Prevent this keyCode from sending its key events to the browser. @param keyCode a keycode to prevent propagation. */ -- (void)preventKeyCodeFromPropagating:(CPString)keyCode ++ (void)preventKeyCodeFromPropagating:(CPString)keyCode { KeyCodesToPrevent[keyCode] = YES; } @@ -962,12 +928,11 @@ var CTRL_KEY_CODE = 17; /*! Clear the list of keyCodes for which we are not sending keypresses to the browser. */ -- (void)clearKeyCodesToPreventFromPropagating ++ (void)clearKeyCodesToPreventFromPropagating { KeyCodesToPrevent = {}; } - @end var CPEventClass = [CPEvent class]; diff --git a/AppKit/Platform/DOM/_CPBrowserWindow.j b/AppKit/Platform/DOM/_CPBrowserWindow.j deleted file mode 100644 index 57a97de1c..000000000 --- a/AppKit/Platform/DOM/_CPBrowserWindow.j +++ /dev/null @@ -1,10 +0,0 @@ - -@import "_CPDOMWindow.j" - - -@implementation _CPBrowserWindow : _CPDOMWindow -{ -} -@end - -[CPPlatformWindow _setPlatformWindowClass:[_CPBrowserWindow class]]; From a34e23fa1cf880677f514f18a1f734d4ccc6c0ab Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 18:12:50 -0700 Subject: [PATCH 113/244] Removed CPDOMWindowBridge dependency in CPTextField. Reviewed by me. --- AppKit/CPTextField.j | 2 +- AppKit/Platform/CPPlatformWindow.j | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 24ee21442..c80b975b1 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -597,7 +597,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); //post CPControlTextDidBeginEditingNotification [self textDidBeginEditing:[CPNotification notificationWithName:CPControlTextDidBeginEditingNotification object:self userInfo:nil]]; - [[CPDOMWindowBridge sharedDOMWindowBridge] _propagateCurrentDOMEvent:YES]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; CPTextFieldInputIsActive = YES; diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index abc76e29b..1aec29a90 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -16,24 +16,24 @@ var PrimaryPlatformWindow = NULL; DOMElement _DOMBodyElement; DOMElement _DOMFocusElement; - + CPArray _windowLevels; CPDictionary _windowLayers; - + BOOL _mouseIsDown; CPWindow _mouseDownWindow; CPTimeInterval _lastMouseUp; CPTimeInterval _lastMouseDown; - + Object _charCodes; unsigned _keyCode; - + BOOL _DOMEventMode; - + // Native Pasteboard Support DOMElement _DOMPasteboardElement; CPEvent _pasteboardKeyDownEvent; - + CPString _overriddenEventType; #endif } From 92594a7ef990e6bba55e2079e9d5536b512c4142 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 18:26:47 -0700 Subject: [PATCH 114/244] Removed references from CPWindow and CPPlatformWindow to CPDOMWindowBridge. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 1 - AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 417f2fc9e..86a9f5dff 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -2086,5 +2086,4 @@ function _CPWindowFullBridgeSessionMake(aWindowView, aContentRect, hasShadow, aL @import "_CPBorderlessWindowView.j" @import "_CPBorderlessBridgeWindowView.j" @import "CPDragServer.j" -@import "CPDOMWindowBridge.j" @import "CPView.j" diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index cd948e004..4630ae210 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -992,9 +992,9 @@ var CPDOMEventStop = function(aDOMEvent, aPlatformWindow) function CPWindowObjectList() { - var bridge = [CPDOMWindowBridge sharedDOMWindowBridge], - levels = bridge._windowLevels, - layers = bridge._windowLayers, + var platformWindow = [CPPlatformWindow primaryPlatformWindow], + levels = platformWindow._windowLevels, + layers = platformWindow._windowLayers, levelCount = levels.length, windowObjects = []; @@ -1012,9 +1012,9 @@ function CPWindowObjectList() function CPWindowList() { - var bridge = [CPDOMWindowBridge sharedDOMWindowBridge], - levels = bridge._windowLevels, - layers = bridge._windowLayers, + var platformWindow = [CPPlatformWindow primaryPlatformWindow], + levels = platformWindow._windowLevels, + layers = platformWindow._windowLayers, levelCount = levels.length, windowNumbers = []; From 2e37945b4f9680d30c4a3fbba094191a39c9e22a Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 26 Jul 2009 18:49:41 -0700 Subject: [PATCH 115/244] Removed remaining references to CPDOMWindowBridge. Reviewed by me. --- AppKit/CPDragServer.j | 4 ++-- AppKit/CPMenu.j | 10 +++++----- AppKit/CPView.j | 2 +- AppKit/CPWindow/_CPWindowView.j | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/AppKit/CPDragServer.j b/AppKit/CPDragServer.j index 337c13a99..60a23f06e 100644 --- a/AppKit/CPDragServer.j +++ b/AppKit/CPDragServer.j @@ -112,7 +112,7 @@ var CPDragServerUpdateDragging = function(anEvent) bridgeLocation = [[anEvent window] convertBaseToBridge:location]; // We have to convert base to bridge since the drag event comes from the source window, not the drag window. - var draggingDestination = [[CPDOMWindowBridge sharedDOMWindowBridge] _dragHitTest:bridgeLocation pasteboard:CPDragServerPasteboard]; + var draggingDestination = [[CPPlatformWindow primaryPlatformWindow] _dragHitTest:bridgeLocation pasteboard:CPDragServerPasteboard]; CPDragServerLocation = [DRAGGING_WINDOW(draggingDestination) convertBridgeToBase:bridgeLocation]; @@ -326,7 +326,7 @@ var CPDragServerUpdateDragging = function(anEvent) return nil; // We don't need to do this because the only place this gets called -// -_dragHitTest: in CPDOMWindowBridge does this already. Perhaps to +// -_dragHitTest: in CPPlatformWindow does this already. Perhaps to // be safe? // if (![self containsPoint:aPoint]) // return nil; diff --git a/AppKit/CPMenu.j b/AppKit/CPMenu.j index 46e415468..8e7ab43e1 100644 --- a/AppKit/CPMenu.j +++ b/AppKit/CPMenu.j @@ -119,7 +119,7 @@ var _CPMenuBarVisible = NO, // FIXME: There must be a better way to do this. #if PLATFORM(DOM) - [window.platformWindow resizeEvent:nil]; + [[CPPlatformWindow primaryPlatformWindow] resizeEvent:nil]; #endif } @@ -1078,7 +1078,7 @@ var STICKY_TIME_INTERVAL = 500, { _unconstrainedFrame = CGRectMakeCopy([self frame]); - var screenBounds = CGRectInset([[CPDOMWindowBridge sharedDOMWindowBridge] contentBounds], 5.0, 5.0), + var screenBounds = CGRectInset([[self platformWindow] contentBounds], 5.0, 5.0), constrainedFrame = CGRectIntersection(_unconstrainedFrame, screenBounds), menuViewOrigin = [self convertBaseToBridge:CGPointMake(LEFT_MARGIN, TOP_MARGIN)]; @@ -1158,7 +1158,7 @@ var STICKY_TIME_INTERVAL = 500, if (type == CPPeriodic) { - var constrainedBounds = CGRectInset([[CPDOMWindowBridge sharedDOMWindowBridge] contentBounds], 5.0, 5.0); + var constrainedBounds = CGRectInset([[self platformWindow] contentBounds], 5.0, 5.0); if (_scrollingState == _CPMenuWindowScrollingStateUp) { @@ -1447,9 +1447,9 @@ var _CPMenuBarWindowBackgroundColor = nil, - (id)init { - var bridgeWidth = CGRectGetWidth([[CPDOMWindowBridge sharedDOMWindowBridge] contentBounds]); + var platformWindowWidth = CGRectGetWidth([[CPPlatformWindow primaryPlatformWindow] contentBounds]); - self = [super initWithContentRect:CGRectMake(0.0, 0.0, bridgeWidth, MENUBAR_HEIGHT) styleMask:CPBorderlessWindowMask]; + self = [super initWithContentRect:CGRectMake(0.0, 0.0, platformWindowWidth, MENUBAR_HEIGHT) styleMask:CPBorderlessWindowMask]; if (self) { diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 0121e9f6b..289e69fe3 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -970,7 +970,7 @@ var DOMElementPrototype = nil, { _fullScreenModeState = _CPViewFullScreenModeStateMake(self); - var fullScreenWindow = [[CPWindow alloc] initWithContentRect:[[CPDOMWindowBridge sharedDOMWindowBridge] contentBounds] styleMask:CPBorderlessWindowMask]; + var fullScreenWindow = [[CPWindow alloc] initWithContentRect:[[CPPlatformWindow primaryPlatformWindow] contentBounds] styleMask:CPBorderlessWindowMask]; [fullScreenWindow setLevel:CPScreenSaverWindowLevel]; [fullScreenWindow setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; diff --git a/AppKit/CPWindow/_CPWindowView.j b/AppKit/CPWindow/_CPWindowView.j index 7bbfaf22b..fe2d1ca4d 100644 --- a/AppKit/CPWindow/_CPWindowView.j +++ b/AppKit/CPWindow/_CPWindowView.j @@ -145,7 +145,7 @@ var _CPWindowViewResizeIndicatorImage = nil; var visibleFrame = _cachedScreenFrame; if (!visibleFrame) - visibleFrame = [[CPDOMWindowBridge sharedDOMWindowBridge] visibleFrame]; + visibleFrame = [[CPPlatformWindow primaryPlatformWindow] usableContentFrame]; var restrictedPoint = CGPointMake(0, 0); @@ -167,7 +167,7 @@ var _CPWindowViewResizeIndicatorImage = nil; else if (type === CPLeftMouseDown) { _mouseDraggedPoint = [[self window] convertBaseToBridge:[anEvent locationInWindow]]; - _cachedScreenFrame = [[CPDOMWindowBridge sharedDOMWindowBridge] visibleFrame]; + _cachedScreenFrame = [[CPPlatformWindow primaryPlatformWindow] usableContentFrame]; } else if (type === CPLeftMouseDragged) { From 865a2b513f4220f1a983b4955c28d6271c745eac Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 26 Jul 2009 22:46:22 -0700 Subject: [PATCH 116/244] Slight performance improvement and memory improvement by moving the storage of KVO proxy objects. --- Foundation/CPKeyValueObserving.j | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 7a1d575ae..5c57449a2 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -58,7 +58,7 @@ if (!anObserver || !aPath) return; - [[KVOProxyMap objectForKey:[self UID]] _removeObserver:anObserver forKeyPath:aPath]; + [self[KVOProxyKey] _removeObserver:anObserver forKeyPath:aPath]; } + (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey @@ -98,12 +98,9 @@ CPKeyValueChangeInsertion = 2; CPKeyValueChangeRemoval = 3; CPKeyValueChangeReplacement = 4; -//convenience -var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld; - -// Map of real objects to their KVO proxy -var KVOProxyMap = [CPDictionary dictionary], - DependentKeysMap = [CPDictionary dictionary]; +var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, + DependentKeysMap = [CPDictionary dictionary], + KVOProxyKey = "$KVOPROXY"; //rule of thumb: _ methods are called on the real proxy object, others are called on the "fake" proxy object (aka the real object) @@ -119,7 +116,7 @@ var KVOProxyMap = [CPDictionary dictionary], + (id)proxyForObject:(CPObject)anObject { - var proxy = [KVOProxyMap objectForKey:[anObject UID]]; + var proxy = anObject[KVOProxyKey]; if (proxy) return proxy; @@ -128,7 +125,7 @@ var KVOProxyMap = [CPDictionary dictionary], [proxy _replaceClass]; - [KVOProxyMap setObject:proxy forKey:[anObject UID]]; + anObject[KVOProxyKey] = proxy; return proxy; } @@ -205,9 +202,10 @@ var KVOProxyMap = [CPDictionary dictionary], } } - var affectingKeys = [[_nativeClass keyPathsForValuesAffectingValueForKey:aKey] allObjects]; + var affectingKeys = [[_nativeClass keyPathsForValuesAffectingValueForKey:aKey] allObjects], + affectingKeysCount = affectingKeys ? affectingKeys.length : 0; - if (![affectingKeys count]) + if (!affectingKeysCount) return; var dependentKeysForClass = [DependentKeysMap objectForKey:[_nativeClass UID]]; @@ -218,11 +216,9 @@ var KVOProxyMap = [CPDictionary dictionary], [DependentKeysMap setObject:dependentKeysForClass forKey:[_nativeClass UID]]; } - var count = [affectingKeys count]; - - while (count--) + while (affectingKeysCount--) { - var affectingKey = affectingKeys[count], + var affectingKey = affectingKeys[affectingKeysCount], affectedKeys = [dependentKeysForClass objectForKey:affectingKey]; if (!affectedKeys) @@ -288,7 +284,7 @@ var KVOProxyMap = [CPDictionary dictionary], if (![_observersForKey count]) { _targetObject.isa = _nativeClass; //restore the original class - [KVOProxyMap removeObjectForKey:[_targetObject UID]]; + delete _targetObject[KVOProxyKey]; } } @@ -360,7 +356,7 @@ var KVOProxyMap = [CPDictionary dictionary], } var observers = [[_observersForKey objectForKey:aKey] allValues], - count = [observers count]; + count = observers ? observers.length : 0; while (count--) { @@ -425,7 +421,7 @@ var KVOProxyMap = [CPDictionary dictionary], - (Class)class { - return [KVOProxyMap objectForKey:[self UID]]._nativeClass; + return self[KVOProxyKey]._nativeClass; } - (Class)superclass From 64b81cfcdb932b9768a9ddb5496a3e90d0af1624 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 26 Jul 2009 23:40:52 -0700 Subject: [PATCH 117/244] Remove several CPDictionaries in favor of Objects, about a 15% performance gain. --- Foundation/CPKeyValueObserving.j | 47 ++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 5c57449a2..897702537 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -99,7 +99,7 @@ CPKeyValueChangeRemoval = 3; CPKeyValueChangeReplacement = 4; var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, - DependentKeysMap = [CPDictionary dictionary], + DependentKeysMap = {}, KVOProxyKey = "$KVOPROXY"; //rule of thumb: _ methods are called on the real proxy object, others are called on the "fake" proxy object (aka the real object) @@ -110,7 +110,8 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, id _targetObject; Class _nativeClass; CPDictionary _changesForKey; - CPDictionary _observersForKey; + Object _observersForKey; + int _observersForKeyLength; CPSet _replacedKeys; } @@ -136,9 +137,10 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, _targetObject = aTarget; _nativeClass = [aTarget class]; - _observersForKey = [CPDictionary dictionary]; - _changesForKey = [CPDictionary dictionary]; _replacedKeys = [CPSet set]; + _observersForKey = {}; + _changesForKey = {}; + _observersForKeyLength = 0; return self; } @@ -208,23 +210,23 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, if (!affectingKeysCount) return; - var dependentKeysForClass = [DependentKeysMap objectForKey:[_nativeClass UID]]; + var dependentKeysForClass = DependentKeysMap[[_nativeClass UID]]; if (!dependentKeysForClass) { - dependentKeysForClass = [CPDictionary new]; - [DependentKeysMap setObject:dependentKeysForClass forKey:[_nativeClass UID]]; + dependentKeysForClass = {}; + DependentKeysMap[[_nativeClass UID]] = dependentKeysForClass; } while (affectingKeysCount--) { var affectingKey = affectingKeys[affectingKeysCount], - affectedKeys = [dependentKeysForClass objectForKey:affectingKey]; + affectedKeys = dependentKeysForClass[affectingKey]; if (!affectedKeys) { affectedKeys = [CPSet new]; - [dependentKeysForClass setObject:affectedKeys forKey:affectingKey]; + dependentKeysForClass[affectingKey] = affectedKeys; } [affectedKeys addObject:aKey]; @@ -244,12 +246,13 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, else [self _replaceSetterForKey:aPath]; - var observers = [_observersForKey objectForKey:aPath]; + var observers = _observersForKey[aPath]; if (!observers) { observers = [CPDictionary dictionary]; - [_observersForKey setObject:observers forKey:aPath]; + _observersForKey[aPath] = observers; + _observersForKeyLength++; } [observers setObject:_CPKVOInfoMake(anObserver, options, aContext, forwarder) forKey:[anObserver UID]]; @@ -268,7 +271,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, - (void)_removeObserver:(id)anObserver forKeyPath:(CPString)aPath { - var observers = [_observersForKey objectForKey:aPath]; + var observers = _observersForKey[aPath]; if (aPath.indexOf('.') != CPNotFound) { @@ -279,9 +282,12 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, [observers removeObjectForKey:[anObserver UID]]; if (![observers count]) - [_observersForKey removeObjectForKey:aPath]; + { + _observersForKeyLength--; + delete _observersForKey[aPath]; + } - if (![_observersForKey count]) + if (!_observersForKeyLength) { _targetObject.isa = _nativeClass; //restore the original class delete _targetObject[KVOProxyKey]; @@ -292,7 +298,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, - (void)_sendNotificationsForKey:(CPString)aKey changeOptions:(CPDictionary)changeOptions isBefore:(BOOL)isBefore { - var changes = [_changesForKey objectForKey:aKey]; + var changes = _changesForKey[aKey]; if (isBefore) { @@ -324,7 +330,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, [changes setObject:1 forKey:CPKeyValueChangeNotificationIsPriorKey]; - [_changesForKey setObject:changes forKey:aKey]; + _changesForKey[aKey] = changes; } else { @@ -355,7 +361,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, } } - var observers = [[_observersForKey objectForKey:aKey] allValues], + var observers = [_observersForKey[aKey] allValues], count = observers ? observers.length : 0; while (count--) @@ -368,7 +374,12 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, [observerInfo.observer observeValueForKeyPath:aKey ofObject:_targetObject change:changes context:observerInfo.context]; } - var keysComposedOfKey = [[[DependentKeysMap objectForKey:[_nativeClass UID]] objectForKey:aKey] allObjects]; + var dependentKeysMap = DependentKeysMap[[_nativeClass UID]]; + + if (!dependentKeysMap) + return; + + var keysComposedOfKey = [dependentKeysMap[aKey] allObjects]; if (!keysComposedOfKey) return; From 59bec06e6e295817de069b05c471d41aad1506f5 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 27 Jul 2009 12:04:41 -0700 Subject: [PATCH 118/244] Removed CPDOMWindowBridge file. Reviewed by me. --- AppKit/Platform/DOM/CPDOMWindowBridge.j | 119 ------------------------ 1 file changed, 119 deletions(-) delete mode 100644 AppKit/Platform/DOM/CPDOMWindowBridge.j diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j deleted file mode 100644 index ac3352666..000000000 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ /dev/null @@ -1,119 +0,0 @@ -/* - * CPDOMWindowBridge.j - * AppKit - * - * 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 -@import - -@import "CPEvent.j" -@import "CPCompatibility.j" - - -#import "../../CoreGraphics/CGGeometry.h" - - -CPSharedDOMWindowBridge = nil; - -var ExcludedDOMElements = []; - -// Define up here so compressor knows about em. -var CPDOMWindowGetFrame, - CPDOMEventGetClickCount, - CPDOMEventStop; - -@implementation CPDOMWindowBridge : CPObject -{ -} - -/*! - Returns the shared DOMWindowBridge. -*/ -+ (id)sharedDOMWindowBridge -{ - if (!CPSharedDOMWindowBridge) - CPSharedDOMWindowBridge = [[CPDOMWindowBridge alloc] _init]; - - return CPSharedDOMWindowBridge; -} - -/* @ignore */ -- (id)_init//_initWithDOMWindow:(DOMWindow)aDOMWindow -{ - self = [super init]; - - if (self) - { - } - - return self; -} - -- (CPRect)frame -{ - return [self contentRect]; -} - -- (CGRect)visibleFrame -{ - return [[CPPlatformWindow primaryPlatformWindow] usableContentFrame]; -} - -- (CPRect)contentBounds -{ - var contentBounds = [[CPPlatformWindow primaryPlatformWindow] contentRect]; - contentBounds.origin = CGPointMake(0,0); - - return contentBounds; -} - -- (CPArray)orderedWindowsAtLevel:(int)aLevel -{ - return [[CPPlatformWindow primaryPlatformWindow] orderedWindowsAtLevel:aLevel]; -} - -- (CPDOMWindowLayer)layerAtLevel:(int)aLevel create:(BOOL)aFlag -{ - return [[CPPlatformWindow primaryPlatformWindow] layerAtLevel:aLevel create:aFlag]; -} - -- (void)order:(CPWindowOrderingMode)aPlace window:(CPWindow)aWindow relativeTo:(CPWindow)otherWindow -{ - return [[CPPlatformWindow primaryPlatformWindow] order:aPlace window:aWindow relativeTo:otherWindow]; -} - -/* @ignore */ -- (id)_dragHitTest:(CPPoint)aPoint pasteboard:(CPPasteboard)aPasteboard -{ - return [[CPPlatformWindow primaryPlatformWindow] _dragHitTest:aPoint pasteboard:aPasteboard]; -} - -/* @ignore */ -- (void)_propagateCurrentDOMEvent:(BOOL)aFlag -{ - return [[CPPlatformWindow primaryPlatformWindow] _propagateCurrentDOMEvent:aFlag]; -} - -- (CPWindow)hitTest:(CPPoint)location -{ - return [[CPPlatformWindow primaryPlatformWindow] hitTest:location]; -} - -@end From c0400d636242ddda2ccf6bdb1b2956a9dbfada4d Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 27 Jul 2009 13:16:31 -0700 Subject: [PATCH 119/244] Fix a bug where press was clobbering CPApplication arguments. Also changed line endings to Mac/Unix from Windows. --- AppKit/CPApplication.j | 12 +- Tools/press/main.j | 1170 ++++++++++++++++++++-------------------- 2 files changed, 593 insertions(+), 589 deletions(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index f150bb026..dd71a604c 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -772,14 +772,18 @@ function CPApplicationMain(args, namedArgs) [principalClass sharedApplication]; //FIXME? - if (!args && !namedArgs) + if (!args) { - var args = [CPApp arguments], - searchParams = window.location.search.substring(1).split("&"); - namedArgs = [CPDictionary dictionary]; + var args = [CPApp arguments]; if([args containsObject:"debug"]) CPLogRegister(CPLogPopup); + } + + if (!namedArgs) + { + var searchParams = window.location.search.substring(1).split("&"); + namedArgs = [CPDictionary dictionary]; for(var i=0; i - -@import "objj-analysis-tools.j" - -var defaultMain = "main.j", - defaultFrameworks = "Frameworks"; - -var usageMessage = -"Usage: press root_directory output_directory [options]\n\ - --main path The relative path (from root_directory) to the main file (default: 'main.j')\n\ - --frameworks path The relative path (from root_directory) to the frameworks directory (default: 'Frameworks')\n\ - --platforms Platform names, colon separated (default: 'browser:objj')\n\ - --png Run pngcrush on all PNGs (pngcrush must be installed!)\n\ - --flatten Flatten all code into a single Application.js file and attempt add script tag to index.html (useful for Adobe AIR and CDN deployment)\n\ - --nostrip Don't strip any files\n\ - --v Verbose"; - -function main() -{ - var rootDirectory = null, - outputDirectory = null, - mainFilename = null, - frameworksDirectory = null, - platforms = ['browser', 'objj'], - optimizePNG = false, - flatten = false, - noStrip = false, - verbose = false; - - var usageError = false; - while (system.args.length && !usageError) - { - var arg = system.args.shift(); - switch(arg) - { - case "--main": - if (system.args.length) - mainFilename = system.args.shift(); - else - usageError = true; - break; - case "--frameworks": - if (system.args.length) - frameworksDirectory = system.args.shift().replace(/\/$/, ""); - else - usageError = true; - break; - case "--platforms": - if (system.args.length) - platforms = system.args.shift().split(":"); - else - usageError = true; - break; - case "--png": - optimizePNG = true; - break; - case "--flatten": - flatten = true; - break; - case "--nostrip": - noStrip = true; - break; - case "--v": - verbose = true; - break; - default: - if (rootDirectory == null) - rootDirectory = arg.replace(/\/$/, ""); - else if (outputDirectory == null) - outputDirectory = arg.replace(/\/$/, ""); - else - usageError = true; - } - } - - if (verbose) - CPLogRegister(CPLogPrint); - else - CPLogRegisterRange(CPLogPrint, "fatal", "info"); - - if (usageError || rootDirectory == null || outputDirectory == null || !platforms.length) - { - print(usageMessage); - return; - } - - rootDirectory = absolutePath(rootDirectory); - - // determine main and frameworks paths - var mainPath = rootDirectory + "/" + (mainFilename || defaultMain), - frameworksPath = rootDirectory + "/" + (frameworksDirectory || defaultFrameworks); - - CPLog.info("Application root: " + rootDirectory); - CPLog.info("Output directory: " + outputDirectory); - CPLog.info("Main file: " + mainPath) - CPLog.info("Frameworks: " + frameworksPath); - - // get a Rhino context - var cx = Packages.org.mozilla.javascript.Context.getCurrentContext(), - scope = makeObjjScope(cx); - - // set OBJJ_INCLUDE_PATHS to include the frameworks path - scope.OBJJ_INCLUDE_PATHS = [frameworksPath]; - scope.OBJJ_PLATFORMS = platforms; - - // flattening bookkeeping. keep track of the bundles and evaled code (in the correct order!) - var bundleArchives = [], - evaledFragments = []; - - scope.objj_search.prototype.didReceiveBundleResponseOriginal = scope.objj_search.prototype.didReceiveBundleResponse; - scope.objj_search.prototype.didReceiveBundleResponse = function(aResponse) { - //CPLog.trace("RESPONSE: " + aResponse); - - var __fakeResponse = { - success : aResponse.success, - filePath : pathRelativeTo(aResponse.filePath, rootDirectory) - }; - - if (aResponse.success) - { - var xmlOutput = new Packages.java.io.ByteArrayOutputStream(); - outputTransformer(xmlOutput, aResponse.xml, "UTF-8"); - //__fakeResponse.xml = String(xmlOutput.toString()); - __fakeResponse.text = CPPropertyListCreate280NorthData(CPPropertyListCreateFromXMLData({ string:String(xmlOutput.toString())})).string; - //CPLog.trace("SERIALIZED: " + __fakeResponse.xml.substring(0,100)); - } - - bundleArchives.push(__fakeResponse); - - this.didReceiveBundleResponseOriginal.apply(this, arguments); - } - - // phase 1: get global defines - CPLog.error("PHASE 1: Loading application..."); - - var globals = findGlobalDefines(cx, scope, mainPath, evaledFragments); - - // coalesce the results - var dependencies = coalesceGlobalDefines(globals); - - // Log - CPLog.trace("Global defines:"); - for (var i in dependencies) - CPLog.trace(" " + i + " => " + dependencies[i]); - - // phase 2: walk the dependency tree (both imports and references) to determine exactly which files need to be included - CPLog.error("PHASE 2: Walk dependency tree..."); - - var requiredFiles = {}; - - if (noStrip) - { - // all files are required. no need for analysis - requiredFiles = scope.objj_files; - } - else - { - if (!scope.objj_files[mainPath]) - { - CPLog.error("Root file not loaded!"); - return; - } - - CPLog.warn("Analyzing dependencies..."); - - var context = { - scope : scope, - dependencies : dependencies, - processedFiles : {}, - ignoreFrameworkImports : true, - importCallback : function(importing, imported) { - requiredFiles[imported] = true; - }, - referenceCallback : function(referencing, referenced) { - requiredFiles[referenced] = true; - } - } - - requiredFiles[mainPath] = true; - traverseDependencies(context, scope.objj_files[mainPath]); - - var count = 0, - total = 0; - for (var path in scope.objj_files) - { - if (requiredFiles[path]) - { - CPLog.debug("Included: " + path); - count++; - } - else - { - CPLog.info("Excluded: " + path); - } - total++; - } - CPLog.warn("Total required files: " + count + " out of " + total); - - // FIXME: sprite images - //for (var i in context.bundleImages) - //{ - // var images = context.bundleImages[i]; - // - // CPLog.debug("Bundle images for " + i); - // for (var j in images) - // CPLog.trace(j + " = " + images[j]); - //} - } - - var outputFiles = {}; - - if (flatten) - { - // phase 3a: build single Application.js file (and modified index.html) - CPLog.error("PHASE 3a: Flattening..."); - - var applicationJS = [], - indexHTML = readFile(rootDirectory + "/index.html"); - - // shim for faking bundle stuff. kind of a giant hack. - var fakeDidReceiveBundleResponse = function(aResponse) - { - var bundle = new objj_bundle(); - - bundle.path = aResponse.filePath; - - if (aResponse.success) - { - var data = new objj_data(); - data.string = aResponse.text; - bundle.info = CPPropertyListCreateFrom280NorthData(data); - //bundle.info = CPPropertyListCreateFromXMLData({ string : aResponse.xml }); - } - else - bundle.info = new objj_dictionary(); - - objj_bundles[aResponse.filePath] = bundle; - } - - // add fake bundle response bookkeeping - applicationJS.push("var __fakeDidReceiveBundleResponse = " + String(fakeDidReceiveBundleResponse)); - applicationJS.push("var __fakeBundleArchives = " + JSON.stringify(bundleArchives) + ";"); - applicationJS.push("for (var i = 0; i < __fakeBundleArchives.length; i++) __fakeDidReceiveBundleResponse(__fakeBundleArchives[i]);") - - // add each fragment, wrapped in a function, along with OBJJ_CURRENT_BUNDLE bookkeeping - for (var i = 0; i < evaledFragments.length; i++) - { - if (requiredFiles[evaledFragments[i].file.path]) - { - applicationJS.push("(function() {"); - applicationJS.push("var OBJJ_CURRENT_BUNDLE = objj_bundles['"+pathRelativeTo(evaledFragments[i].bundle.path, rootDirectory)+"'];"); - applicationJS.push(evaledFragments[i].info); - applicationJS.push("})();"); - } - else - { - CPLog.info("Stripping " + evaledFragments[i].file.path); - } - } - - // call main once the page has loaded - applicationJS.push( - "if (window.addEventListener) \ - window.addEventListener('load', main, false); \ - else if (window.attachEvent) \ - window.attachEvent('onload', main);" - ); - - // comment out any OBJJ_MAIN_FILE defintions or objj_import() calls - indexHTML = indexHTML.replace(/(\bOBJJ_MAIN_FILE\s*=|\bobjj_import\s*\()/g, '//$&'); - - // add a script tag for Application.js at the very end of the block - indexHTML = indexHTML.replace(/([ \t]*)(<\/head>)/, '$1 \n$1$2'); - - // output Application.js and index.html - outputFiles[rootDirectory + "/Application.js"] = applicationJS.join("\n"); - outputFiles[rootDirectory + "/index.html"] = indexHTML; - } - else - { - // phase 3b: rebuild .sj files with correct imports, copy .j files - CPLog.error("PHASE 3b: Rebuild .sj"); - - var bundles = {}; - - for (var path in requiredFiles) - { - var file = scope.objj_files[path], - filename = basename(path), - directory = dirname(path); - - if (file.path != path) - CPLog.warn("Sanity check failed (file path): " + file.path + " vs. " + path); - - if (file.bundle) - { - var bundleDirectory = dirname(file.bundle.path); - - if (!bundles[file.bundle.path]) - bundles[file.bundle.path] = file.bundle; - - if (bundleDirectory != directory) - CPLog.warn("Sanity check failed (directory path): " + directory + " vs. " + bundleDirectory); - - // if it's in a .sj - var dict = file.bundle.info, - replacedFiles = [dict objectForKey:"CPBundleReplacedFiles"]; - if (replacedFiles && [replacedFiles containsObject:filename]) - { - // compute the platform used for this bundle - var platform = "", - bundlePlatforms = [dict objectForKey:"CPBundlePlatforms"]; - - if (bundlePlatforms) - { - platform = [bundlePlatforms firstObjectCommonWithArray:scope.OBJJ_PLATFORMS]; - if (platform) - platform = platform + ".platform/"; - } - - var staticPath = bundleDirectory + "/" + platform + [dict objectForKey:"CPBundleExecutable"]; - if (!outputFiles[staticPath]) - { - outputFiles[staticPath] = []; - outputFiles[staticPath].push("@STATIC;1.0;"); - } - outputFiles[staticPath].push("p;"); - outputFiles[staticPath].push(filename.length+";"); - outputFiles[staticPath].push(filename); - - for (var i = 0; i < file.fragments.length; i++) - { - if (file.fragments[i].type & FRAGMENT_CODE) - { - outputFiles[staticPath].push("c;"); - outputFiles[staticPath].push(file.fragments[i].info.length+";"); - outputFiles[staticPath].push(file.fragments[i].info); - } - else if (file.fragments[i].type & FRAGMENT_FILE) - { - var ignoreFragment = false; - if (file.fragments[i].conditionallyIgnore) - { - var importPath = findImportInObjjFiles(scope, file.fragments[i]); - if (!importPath || !requiredFiles[importPath]) - { - ignoreFragment = true; - } - } - - if (!ignoreFragment) - { - if (file.fragments[i].type & FRAGMENT_LOCAL) - { - var relativePath = pathRelativeTo(file.fragments[i].info, directory) - - outputFiles[staticPath].push("i;"); - outputFiles[staticPath].push(relativePath.length+";"); - outputFiles[staticPath].push(relativePath); - } - else - { - outputFiles[staticPath].push("I;"); - outputFiles[staticPath].push(file.fragments[i].info.length+";"); - outputFiles[staticPath].push(file.fragments[i].info); - } - } - else - CPLog.info("Ignoring import fragment " + file.fragments[i].info + " in " + path); - } - else - CPLog.error("Unknown fragment type"); - } - } - // always output individual .j files - else - { - outputFiles[path] = file.contents; - } - } - else - CPLog.warn("No bundle for " + path) - } - - // phase 3.5: fix bundle plists - CPLog.error("PHASE 3.5: fix bundle plists"); - - for (var path in bundles) - { - var directory = dirname(path), - dict = bundles[path].info, - replacedFiles = [dict objectForKey:"CPBundleReplacedFiles"]; - - CPLog.info("Modifying .sj: " + path); - - if (replacedFiles) - { - var newReplacedFiles = []; - [dict setObject:newReplacedFiles forKey:"CPBundleReplacedFiles"]; - - for (var i = 0; i < replacedFiles.length; i++) - { - var replacedFilePath = directory + "/" + replacedFiles[i] - if (!requiredFiles[replacedFilePath]) - { - CPLog.info("Removing: " + replacedFiles[i]); - } - else - { - //CPLog.info("Keeping: " + replacedFiles[i]); - newReplacedFiles.push(replacedFiles[i]); - } - } - } - outputFiles[path] = CPPropertyListCreateXMLData(dict).string; - } - } - - // phase 4: copy everything and write out the new files - CPLog.error("PHASE 4: copy to output"); - - var rootDirectoryFile = new Packages.java.io.File(rootDirectory), - outputDirectoryFile = new Packages.java.io.File(outputDirectory); - - // FIXME: intelligently copy only what we need (Resources directories?) - copyDirectory(rootDirectoryFile, outputDirectoryFile, optimizePNG); - - for (var path in outputFiles) - { - var file = new java.io.File(outputDirectoryFile, pathRelativeTo(path, rootDirectory)); - - var parent = file.getParentFile(); - if (!parent.exists()) - { - CPLog.warn(parent + " doesn't exist, creating directories."); - parent.mkdirs(); - } - - CPLog.info("Writing out " + file); - - var writer = new java.io.BufferedWriter(new java.io.FileWriter(file)); - - if (typeof outputFiles[path] == "string") - writer.write(outputFiles[path]); - else - writer.write(outputFiles[path].join("")); - - writer.close(); - } -} - -// Helper Utilities - -// TODO: moved elsewhere? - -function copyDirectory(src, dst, optimizePNG) -{ - CPLog.trace("Copying directory " + src); - - dst.mkdirs(); - - var files = src.listFiles(); - for (var i = 0; i < files.length; i++) - { - if (files[i].isFile()) - copyFile(files[i], new Packages.java.io.File(dst, files[i].getName()), optimizePNG); - else if (files[i].isDirectory()) - copyDirectory(files[i], new Packages.java.io.File(dst, files[i].getName()), optimizePNG); - } -} - -function copyFile(src, dst, optimizePNG) -{ - if (optimizePNG && (/.png$/).test(src.getName())) - { - CPLog.warn("Optimizing .png " + src); - exec(["pngcrush", "-rem", "alla", "-reduce", /*"-brute",*/ src.getAbsolutePath(), dst.getAbsolutePath()]); - } - else - { - CPLog.trace("Copying file " + src); - - var input = (new Packages.java.io.FileInputStream(src)).getChannel(), - output = (new Packages.java.io.FileOutputStream(dst)).getChannel(); - - input.transferTo(0, input.size(), output); - - input.close(); - output.close(); - } -} - -function dirname(path) -{ - return path.substring(0, path.lastIndexOf("/")); -} - -function basename(path) -{ - return path.substring(path.lastIndexOf("/") + 1); -} - -function absolutePath(path) -{ - return String((new Packages.java.io.File(path)).getCanonicalPath()); -} - -function pathRelativeTo(target, relativeTo) -{ - var components = [], - targetParts = target.split("/"), - relativeParts = relativeTo ? relativeTo.split("/") : []; - - var i = 0; - while (i < targetParts.length) - { - if (targetParts[i] != relativeParts[i]) - break; - i++; - } - - for (var j = i; j < relativeParts.length; j++) - components.push(".."); - - for (var j = i; j < targetParts.length; j++) - components.push(targetParts[j]); - - var result = components.join("/"); - - return result; -} - -function exec() -{ - var printOutput = false; - - var runtime = Packages.java.lang.Runtime.getRuntime() - var p = runtime.exec.apply(runtime, arguments); - - var stdout = new Packages.java.io.BufferedReader(new Packages.java.io.InputStreamReader(p.getInputStream())), - stdoutString = "", - stderr = new Packages.java.io.BufferedReader(new Packages.java.io.InputStreamReader(p.getErrorStream())), - stderrString = ""; - - var done = false; - while (!done) - { - done = true; - if (s = stdout.readLine()) - { - stdoutString += s; - if (printOutput) - CPLog.info("exec: " + s); - done = false; - } - if (s = stderr.readLine()) - { - stderrString += s; - //if (printOutput) - CPLog.warn("exec: " + s); - done = false; - } - } - - var code = p.waitFor(); - - return { code : code, stdout : stdoutString, stderr : stderrString }; -} - -function outputTransformer(os, document, encoding, standalone) -{ - var domSource = new Packages.javax.xml.transform.dom.DOMSource(document); - var streamResult = new Packages.javax.xml.transform.stream.StreamResult(os); - var tf = Packages.javax.xml.transform.TransformerFactory.newInstance(); - - var serializer = tf.newTransformer(); - serializer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.VERSION, "1.0"); - serializer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.INDENT, "yes"); - if (encoding) - serializer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.ENCODING, encoding); - if (standalone) - serializer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.STANDALONE, (standalone ? "yes" : "no")); - - String(serializer.transform(domSource, streamResult)); -} +@import + +@import "objj-analysis-tools.j" + +var defaultMain = "main.j", + defaultFrameworks = "Frameworks"; + +var usageMessage = +"Usage: press root_directory output_directory [options]\n\ + --main path The relative path (from root_directory) to the main file (default: 'main.j')\n\ + --frameworks path The relative path (from root_directory) to the frameworks directory (default: 'Frameworks')\n\ + --platforms Platform names, colon separated (default: 'browser:objj')\n\ + --png Run pngcrush on all PNGs (pngcrush must be installed!)\n\ + --flatten Flatten all code into a single Application.js file and attempt add script tag to index.html (useful for Adobe AIR and CDN deployment)\n\ + --nostrip Don't strip any files\n\ + --v Verbose"; + +function main() +{ + var rootDirectory = null, + outputDirectory = null, + mainFilename = null, + frameworksDirectory = null, + platforms = ['browser', 'objj'], + optimizePNG = false, + flatten = false, + noStrip = false, + verbose = false; + + var usageError = false; + while (system.args.length && !usageError) + { + var arg = system.args.shift(); + switch(arg) + { + case "--main": + if (system.args.length) + mainFilename = system.args.shift(); + else + usageError = true; + break; + case "--frameworks": + if (system.args.length) + frameworksDirectory = system.args.shift().replace(/\/$/, ""); + else + usageError = true; + break; + case "--platforms": + if (system.args.length) + platforms = system.args.shift().split(":"); + else + usageError = true; + break; + case "--png": + optimizePNG = true; + break; + case "--flatten": + flatten = true; + break; + case "--nostrip": + noStrip = true; + break; + case "--v": + verbose = true; + break; + default: + if (rootDirectory == null) + rootDirectory = arg.replace(/\/$/, ""); + else if (outputDirectory == null) + outputDirectory = arg.replace(/\/$/, ""); + else + usageError = true; + } + } + + if (verbose) + CPLogRegister(CPLogPrint); + else + CPLogRegisterRange(CPLogPrint, "fatal", "info"); + + if (usageError || rootDirectory == null || outputDirectory == null || !platforms.length) + { + print(usageMessage); + return; + } + + rootDirectory = absolutePath(rootDirectory); + + // determine main and frameworks paths + var mainPath = rootDirectory + "/" + (mainFilename || defaultMain), + frameworksPath = rootDirectory + "/" + (frameworksDirectory || defaultFrameworks); + + CPLog.info("Application root: " + rootDirectory); + CPLog.info("Output directory: " + outputDirectory); + CPLog.info("Main file: " + mainPath) + CPLog.info("Frameworks: " + frameworksPath); + + // get a Rhino context + var cx = Packages.org.mozilla.javascript.Context.getCurrentContext(), + scope = makeObjjScope(cx); + + // set OBJJ_INCLUDE_PATHS to include the frameworks path + scope.OBJJ_INCLUDE_PATHS = [frameworksPath]; + scope.OBJJ_PLATFORMS = platforms; + + // flattening bookkeeping. keep track of the bundles and evaled code (in the correct order!) + var bundleArchives = [], + evaledFragments = []; + + scope.objj_search.prototype.didReceiveBundleResponseOriginal = scope.objj_search.prototype.didReceiveBundleResponse; + scope.objj_search.prototype.didReceiveBundleResponse = function(aResponse) { + //CPLog.trace("RESPONSE: " + aResponse); + + var __fakeResponse = { + success : aResponse.success, + filePath : pathRelativeTo(aResponse.filePath, rootDirectory) + }; + + if (aResponse.success) + { + var xmlOutput = new Packages.java.io.ByteArrayOutputStream(); + outputTransformer(xmlOutput, aResponse.xml, "UTF-8"); + //__fakeResponse.xml = String(xmlOutput.toString()); + __fakeResponse.text = CPPropertyListCreate280NorthData(CPPropertyListCreateFromXMLData({ string:String(xmlOutput.toString())})).string; + //CPLog.trace("SERIALIZED: " + __fakeResponse.xml.substring(0,100)); + } + + bundleArchives.push(__fakeResponse); + + this.didReceiveBundleResponseOriginal.apply(this, arguments); + } + + // phase 1: get global defines + CPLog.error("PHASE 1: Loading application..."); + + var globals = findGlobalDefines(cx, scope, mainPath, evaledFragments); + + // coalesce the results + var dependencies = coalesceGlobalDefines(globals); + + // Log + CPLog.trace("Global defines:"); + for (var i in dependencies) + CPLog.trace(" " + i + " => " + dependencies[i]); + + // phase 2: walk the dependency tree (both imports and references) to determine exactly which files need to be included + CPLog.error("PHASE 2: Walk dependency tree..."); + + var requiredFiles = {}; + + if (noStrip) + { + // all files are required. no need for analysis + requiredFiles = scope.objj_files; + } + else + { + if (!scope.objj_files[mainPath]) + { + CPLog.error("Root file not loaded!"); + return; + } + + CPLog.warn("Analyzing dependencies..."); + + var context = { + scope : scope, + dependencies : dependencies, + processedFiles : {}, + ignoreFrameworkImports : true, + importCallback : function(importing, imported) { + requiredFiles[imported] = true; + }, + referenceCallback : function(referencing, referenced) { + requiredFiles[referenced] = true; + } + } + + requiredFiles[mainPath] = true; + traverseDependencies(context, scope.objj_files[mainPath]); + + var count = 0, + total = 0; + for (var path in scope.objj_files) + { + if (requiredFiles[path]) + { + CPLog.debug("Included: " + path); + count++; + } + else + { + CPLog.info("Excluded: " + path); + } + total++; + } + CPLog.warn("Total required files: " + count + " out of " + total); + + // FIXME: sprite images + //for (var i in context.bundleImages) + //{ + // var images = context.bundleImages[i]; + // + // CPLog.debug("Bundle images for " + i); + // for (var j in images) + // CPLog.trace(j + " = " + images[j]); + //} + } + + var outputFiles = {}; + + if (flatten) + { + // phase 3a: build single Application.js file (and modified index.html) + CPLog.error("PHASE 3a: Flattening..."); + + var applicationJS = [], + indexHTML = readFile(rootDirectory + "/index.html"); + + // shim for faking bundle stuff. kind of a giant hack. + var fakeDidReceiveBundleResponse = function(aResponse) + { + var bundle = new objj_bundle(); + + bundle.path = aResponse.filePath; + + if (aResponse.success) + { + var data = new objj_data(); + data.string = aResponse.text; + bundle.info = CPPropertyListCreateFrom280NorthData(data); + //bundle.info = CPPropertyListCreateFromXMLData({ string : aResponse.xml }); + } + else + bundle.info = new objj_dictionary(); + + objj_bundles[aResponse.filePath] = bundle; + } + + // add fake bundle response bookkeeping + applicationJS.push("var __fakeDidReceiveBundleResponse = " + String(fakeDidReceiveBundleResponse)); + applicationJS.push("var __fakeBundleArchives = " + JSON.stringify(bundleArchives) + ";"); + applicationJS.push("for (var i = 0; i < __fakeBundleArchives.length; i++) __fakeDidReceiveBundleResponse(__fakeBundleArchives[i]);") + + // add each fragment, wrapped in a function, along with OBJJ_CURRENT_BUNDLE bookkeeping + for (var i = 0; i < evaledFragments.length; i++) + { + if (requiredFiles[evaledFragments[i].file.path]) + { + applicationJS.push("(function() {"); + applicationJS.push("var OBJJ_CURRENT_BUNDLE = objj_bundles['"+pathRelativeTo(evaledFragments[i].bundle.path, rootDirectory)+"'];"); + applicationJS.push(evaledFragments[i].info); + applicationJS.push("})();"); + } + else + { + CPLog.info("Stripping " + evaledFragments[i].file.path); + } + } + + // call main once the page has loaded + applicationJS.push( + "if (window.addEventListener) \ + window.addEventListener('load', function(){main()}, false); \ + else if (window.attachEvent) \ + window.attachEvent('onload', function(){main()});" + ); + + // comment out any OBJJ_MAIN_FILE defintions or objj_import() calls + indexHTML = indexHTML.replace(/(\bOBJJ_MAIN_FILE\s*=|\bobjj_import\s*\()/g, '//$&'); + + // add a script tag for Application.js at the very end of the block + indexHTML = indexHTML.replace(/([ \t]*)(<\/head>)/, '$1 \n$1$2'); + + // output Application.js and index.html + outputFiles[rootDirectory + "/Application.js"] = applicationJS.join("\n"); + outputFiles[rootDirectory + "/index.html"] = indexHTML; + } + else + { + // phase 3b: rebuild .sj files with correct imports, copy .j files + CPLog.error("PHASE 3b: Rebuild .sj"); + + var bundles = {}; + + for (var path in requiredFiles) + { + var file = scope.objj_files[path], + filename = basename(path), + directory = dirname(path); + + if (file.path != path) + CPLog.warn("Sanity check failed (file path): " + file.path + " vs. " + path); + + if (file.bundle) + { + var bundleDirectory = dirname(file.bundle.path); + + if (!bundles[file.bundle.path]) + bundles[file.bundle.path] = file.bundle; + + if (bundleDirectory != directory) + CPLog.warn("Sanity check failed (directory path): " + directory + " vs. " + bundleDirectory); + + // if it's in a .sj + var dict = file.bundle.info, + replacedFiles = [dict objectForKey:"CPBundleReplacedFiles"]; + if (replacedFiles && [replacedFiles containsObject:filename]) + { + // compute the platform used for this bundle + var platform = "", + bundlePlatforms = [dict objectForKey:"CPBundlePlatforms"]; + + if (bundlePlatforms) + { + platform = [bundlePlatforms firstObjectCommonWithArray:scope.OBJJ_PLATFORMS]; + if (platform) + platform = platform + ".platform/"; + } + + var staticPath = bundleDirectory + "/" + platform + [dict objectForKey:"CPBundleExecutable"]; + if (!outputFiles[staticPath]) + { + outputFiles[staticPath] = []; + outputFiles[staticPath].push("@STATIC;1.0;"); + } + outputFiles[staticPath].push("p;"); + outputFiles[staticPath].push(filename.length+";"); + outputFiles[staticPath].push(filename); + + for (var i = 0; i < file.fragments.length; i++) + { + if (file.fragments[i].type & FRAGMENT_CODE) + { + outputFiles[staticPath].push("c;"); + outputFiles[staticPath].push(file.fragments[i].info.length+";"); + outputFiles[staticPath].push(file.fragments[i].info); + } + else if (file.fragments[i].type & FRAGMENT_FILE) + { + var ignoreFragment = false; + if (file.fragments[i].conditionallyIgnore) + { + var importPath = findImportInObjjFiles(scope, file.fragments[i]); + if (!importPath || !requiredFiles[importPath]) + { + ignoreFragment = true; + } + } + + if (!ignoreFragment) + { + if (file.fragments[i].type & FRAGMENT_LOCAL) + { + var relativePath = pathRelativeTo(file.fragments[i].info, directory) + + outputFiles[staticPath].push("i;"); + outputFiles[staticPath].push(relativePath.length+";"); + outputFiles[staticPath].push(relativePath); + } + else + { + outputFiles[staticPath].push("I;"); + outputFiles[staticPath].push(file.fragments[i].info.length+";"); + outputFiles[staticPath].push(file.fragments[i].info); + } + } + else + CPLog.info("Ignoring import fragment " + file.fragments[i].info + " in " + path); + } + else + CPLog.error("Unknown fragment type"); + } + } + // always output individual .j files + else + { + outputFiles[path] = file.contents; + } + } + else + CPLog.warn("No bundle for " + path) + } + + // phase 3.5: fix bundle plists + CPLog.error("PHASE 3.5: fix bundle plists"); + + for (var path in bundles) + { + var directory = dirname(path), + dict = bundles[path].info, + replacedFiles = [dict objectForKey:"CPBundleReplacedFiles"]; + + CPLog.info("Modifying .sj: " + path); + + if (replacedFiles) + { + var newReplacedFiles = []; + [dict setObject:newReplacedFiles forKey:"CPBundleReplacedFiles"]; + + for (var i = 0; i < replacedFiles.length; i++) + { + var replacedFilePath = directory + "/" + replacedFiles[i] + if (!requiredFiles[replacedFilePath]) + { + CPLog.info("Removing: " + replacedFiles[i]); + } + else + { + //CPLog.info("Keeping: " + replacedFiles[i]); + newReplacedFiles.push(replacedFiles[i]); + } + } + } + outputFiles[path] = CPPropertyListCreateXMLData(dict).string; + } + } + + // phase 4: copy everything and write out the new files + CPLog.error("PHASE 4: copy to output"); + + var rootDirectoryFile = new Packages.java.io.File(rootDirectory), + outputDirectoryFile = new Packages.java.io.File(outputDirectory); + + // FIXME: intelligently copy only what we need (Resources directories?) + copyDirectory(rootDirectoryFile, outputDirectoryFile, optimizePNG); + + for (var path in outputFiles) + { + var file = new java.io.File(outputDirectoryFile, pathRelativeTo(path, rootDirectory)); + + var parent = file.getParentFile(); + if (!parent.exists()) + { + CPLog.warn(parent + " doesn't exist, creating directories."); + parent.mkdirs(); + } + + CPLog.info("Writing out " + file); + + var writer = new java.io.BufferedWriter(new java.io.FileWriter(file)); + + if (typeof outputFiles[path] == "string") + writer.write(outputFiles[path]); + else + writer.write(outputFiles[path].join("")); + + writer.close(); + } +} + +// Helper Utilities + +// TODO: moved elsewhere? + +function copyDirectory(src, dst, optimizePNG) +{ + CPLog.trace("Copying directory " + src); + + dst.mkdirs(); + + var files = src.listFiles(); + for (var i = 0; i < files.length; i++) + { + if (files[i].isFile()) + copyFile(files[i], new Packages.java.io.File(dst, files[i].getName()), optimizePNG); + else if (files[i].isDirectory()) + copyDirectory(files[i], new Packages.java.io.File(dst, files[i].getName()), optimizePNG); + } +} + +function copyFile(src, dst, optimizePNG) +{ + if (optimizePNG && (/.png$/).test(src.getName())) + { + CPLog.warn("Optimizing .png " + src); + exec(["pngcrush", "-rem", "alla", "-reduce", /*"-brute",*/ src.getAbsolutePath(), dst.getAbsolutePath()]); + } + else + { + CPLog.trace("Copying file " + src); + + var input = (new Packages.java.io.FileInputStream(src)).getChannel(), + output = (new Packages.java.io.FileOutputStream(dst)).getChannel(); + + input.transferTo(0, input.size(), output); + + input.close(); + output.close(); + } +} + +function dirname(path) +{ + return path.substring(0, path.lastIndexOf("/")); +} + +function basename(path) +{ + return path.substring(path.lastIndexOf("/") + 1); +} + +function absolutePath(path) +{ + return String((new Packages.java.io.File(path)).getCanonicalPath()); +} + +function pathRelativeTo(target, relativeTo) +{ + var components = [], + targetParts = target.split("/"), + relativeParts = relativeTo ? relativeTo.split("/") : []; + + var i = 0; + while (i < targetParts.length) + { + if (targetParts[i] != relativeParts[i]) + break; + i++; + } + + for (var j = i; j < relativeParts.length; j++) + components.push(".."); + + for (var j = i; j < targetParts.length; j++) + components.push(targetParts[j]); + + var result = components.join("/"); + + return result; +} + +function exec() +{ + var printOutput = false; + + var runtime = Packages.java.lang.Runtime.getRuntime() + var p = runtime.exec.apply(runtime, arguments); + + var stdout = new Packages.java.io.BufferedReader(new Packages.java.io.InputStreamReader(p.getInputStream())), + stdoutString = "", + stderr = new Packages.java.io.BufferedReader(new Packages.java.io.InputStreamReader(p.getErrorStream())), + stderrString = ""; + + var done = false; + while (!done) + { + done = true; + if (s = stdout.readLine()) + { + stdoutString += s; + if (printOutput) + CPLog.info("exec: " + s); + done = false; + } + if (s = stderr.readLine()) + { + stderrString += s; + //if (printOutput) + CPLog.warn("exec: " + s); + done = false; + } + } + + var code = p.waitFor(); + + return { code : code, stdout : stdoutString, stderr : stderrString }; +} + +function outputTransformer(os, document, encoding, standalone) +{ + var domSource = new Packages.javax.xml.transform.dom.DOMSource(document); + var streamResult = new Packages.javax.xml.transform.stream.StreamResult(os); + var tf = Packages.javax.xml.transform.TransformerFactory.newInstance(); + + var serializer = tf.newTransformer(); + serializer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.VERSION, "1.0"); + serializer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.INDENT, "yes"); + if (encoding) + serializer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.ENCODING, encoding); + if (standalone) + serializer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.STANDALONE, (standalone ? "yes" : "no")); + + String(serializer.transform(domSource, streamResult)); +} From 5ccc638bafbf22ca44d237e7965979c6f67c57f2 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 27 Jul 2009 15:55:53 -0700 Subject: [PATCH 120/244] Add resources for CPButton disabled state. Closes #152. --- .gitignore | 2 +- .../Resources/button-bezel-disabled-center.png | Bin 0 -> 148 bytes .../Resources/button-bezel-disabled-left.png | Bin 0 -> 221 bytes .../Resources/button-bezel-disabled-right.png | Bin 0 -> 217 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 12 ++++++++++++ 5 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png create mode 100644 AppKit/Themes/Aristo/Resources/button-bezel-disabled-left.png create mode 100644 AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png diff --git a/.gitignore b/.gitignore index 71e257752..b72055ed9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,5 @@ Frameworks Build Demos -Aristo +./Aristo WebSite diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png new file mode 100644 index 0000000000000000000000000000000000000000..7f143a3de420f9d7c4e33a1f9560c7bf8b328130 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6`6UuIEGZ*O1ihZJfHdS_xJauXY8x}eeA%O_xJ7Dmi_<# v-#Iel$o>8G9}5b*7D`q|6H_V+Po~-c71evXIEGZ*O1iVVT;G_Px!G1gn!!;1^#A|=WtT2llCxy# zQpp=PZb-~%U}}5x=n+r-|9`1JzP*)ZKE1#G|Bl8PjBE~35)Kl243k^~9hWhj@Vb?~ zuv78`(*lJ*zkYwuXNzz!WK2D8U;l5;!|Utg6Q(Xuxby$l*X%TfYpkyxFmf0$Bzopr0C0a->Hq)$ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6db8a99ddb64e24a16fa26f4cb11baa95eebc71d GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6;*q>IEGZ*O1iVVJfE4F`LMdeK87Rgk!#khk*NFo>*)6{ zFN1fdpPy%FSo`~1@5A@^_wzh@^oZyG|NrJGKfk}1XXatJc}K?~a0f$2@46-(#tBom zTz3*SHeg9${PO&~d;mi&>uQF=xP3L8L4}P^53vTkFs@;IblPDLzrq2AIN5nCV#>O5 QfX-m>boFyt=akR{0OL$m1ONa4 literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 72efe57a9..7eeefa96d 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -53,6 +53,14 @@ [_CPCibCustomResource imageResourceWithName:"default-button-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)], [_CPCibCustomResource imageResourceWithName:"default-button-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)] ] + isVertical:NO]], + + disabledBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-right.png" size:CGSizeMake(4.0, 24.0)] + ] isVertical:NO]]; [button setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateBordered]; @@ -65,6 +73,10 @@ [button setValue:highlightedBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateHighlighted]; [button setValue:CGInsetMake(0.0, 5.0, 0.0, 5.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; + [button setValue:[CPColor colorWithCalibratedWhite:0.6 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled]; + [button setValue:disabledBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDisabled]; + [button setValue:disabledBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDefault|CPThemeStateDisabled]; + [button setValue:defaultBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDefault]; [button setValue:defaultHighlightedBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateHighlighted|CPThemeStateDefault]; [button setValue:[CPColor colorWithCalibratedRed:13.0/255.0 green:51.0/255.0 blue:70.0/255.0 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDefault]; From 38e2ca3589dc8145875303ebf95c6460df5e7308 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 27 Jul 2009 16:20:12 -0700 Subject: [PATCH 121/244] Add pushed states to checkboxes. --- .../Resources/check-box-bezel-highlighted.png | Bin 0 -> 289 bytes .../check-box-bezel-selected-highlighted.png | Bin 0 -> 625 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 12 ++++++++++++ 3 files changed, 12 insertions(+) create mode 100644 AppKit/Themes/Aristo/Resources/check-box-bezel-highlighted.png create mode 100644 AppKit/Themes/Aristo/Resources/check-box-bezel-selected-highlighted.png diff --git a/AppKit/Themes/Aristo/Resources/check-box-bezel-highlighted.png b/AppKit/Themes/Aristo/Resources/check-box-bezel-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..51e26047ed49054e9342608b94dbb105acfbef03 GIT binary patch literal 289 zcmV++0p9+JP)7A!xpaaDJ8+SyO@Cp1U%@N!B% nH%+6!7MJQ7!3NyH@g=|j?m@g!*4HD100000NkvXXu0mjfDY$mp literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/check-box-bezel-selected-highlighted.png b/AppKit/Themes/Aristo/Resources/check-box-bezel-selected-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2a5f089f9e1368b34fabd484f3b0f71ab6f1bc GIT binary patch literal 625 zcmV-%0*?KOP)TX%iFd zBok9>Vqz>Ye%DmcU*bl^wR;z$bkl|Y0Z|GSM8SeVP=cUa10oizAc|N5wMmF=(j>L* z%)JxOooYj=je6mQx#yhcd~nb7-F{lc|D4II7f1T~*{zP?mzm=@8rg1;E|FrrKp{Bd z*;7`%(a@~bmRG_P2g1Q?@kj_>mG!K8_udrN!L&WGgD?UE1`|SD@p&|SF4tjmu`Bpt z_AOq$nMEKP$FON&Y%F(3!bY{x?pg7BwTu^q0tUk|=(>*cXUFlw5(eWm2PN1Qv~3Id z$B&=|4KVKj&YeEtCTOnJp$N_)6G+WW-$A?G+PX^>@-tY23XeaC(Zqg4_nEF;atfz8 zZQH?8Z3$oJOL+3&KCBJy+TImkWBywOddNU1;K$L-5!WsyIf6GUG#bnBnGU>#7ZzYb@EutXr&8FMn?o{@fa7#X;*YB;+pgK%G89GG=FDa@n?VlW0n$p#wrdJ4 z$W*i0hGoePoWDxO$#~+XnQ+9-_G(KbU7)1qKm3&y(nHeqp8^a3j3Yrkr)lZY00000 LNkvXXu0mjfRSFw& literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 7eeefa96d..7be96d1cb 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -386,6 +386,16 @@ [ [_CPCibCustomResource imageResourceWithName:"check-box-bezel-selected.png" size:CGSizeMake(15.0, 16.0)], nil, nil ] + isVertical:NO]), + bezelColorSelectedHighlighted = PatternColor([[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"check-box-bezel-selected-highlighted.png" size:CGSizeMake(15.0, 16.0)], nil, nil + ] + isVertical:NO]), + bezelColorHighlighted = PatternColor([[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"check-box-bezel-highlighted.png" size:CGSizeMake(15.0, 16.0)], nil, nil + ] isVertical:NO]); [button setValue:CPLeftTextAlignment forThemeAttribute:@"alignment" inState:CPThemeStateBordered]; @@ -393,6 +403,8 @@ [button setValue:CGInsetMake(0.0, 0.0, 0.0, 20.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; [button setValue:bezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; [button setValue:bezelColorSelected forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected]; + [button setValue:bezelColorSelectedHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected | CPThemeStateHighlighted]; + [button setValue:bezelColorHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; [button setValue:CGSizeMake(0.0, 17.0) forThemeAttribute:@"min-size"]; From 241cc2ac0662d16a0c157ca5d80b4a8e0a31b7ed Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 27 Jul 2009 16:38:30 -0700 Subject: [PATCH 122/244] Add highlighted states to radio buttons. --- .../Aristo/Resources/radio-bezel-highlighted.png | Bin 0 -> 657 bytes .../radio-bezel-selected-highlighted.png | Bin 0 -> 856 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 12 ++++++++++++ 3 files changed, 12 insertions(+) create mode 100644 AppKit/Themes/Aristo/Resources/radio-bezel-highlighted.png create mode 100644 AppKit/Themes/Aristo/Resources/radio-bezel-selected-highlighted.png diff --git a/AppKit/Themes/Aristo/Resources/radio-bezel-highlighted.png b/AppKit/Themes/Aristo/Resources/radio-bezel-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..6f16d4803dc09c53440bd6bb9daceeb44a075e84 GIT binary patch literal 657 zcmV;C0&e|@P)(64bSYw|=%4W0IJRZ+yzu)h5xm;p8 zor=X`v4LK%-@s%tiB_v68jVJ?QmNdH$KyY#N>7GxIBZfBjw+nZRM6AJJAk1d7 z@cDdRZ1Nm`J>+X0ess}j^a(87TCdk)G#Ux`|1bC+SqZn>eF*hW>4Hl12=Orj6bMde zDFiLhBaB8PNpd7HfZ#TF*~->ZT#vq+>?er~8%|o`4qA)rL8P#sBoadEz>0%jwH7y= z&1T(gChOsFc#Oafn7r1SOeO+-C)*=l;@sak9F7BqrL}n6wOZ{J`#Eez%*drwD)j-w zcGYIHolDT~_XVc*Q!<(4>HLx@2hvth@eRXv56@N{-6ptyq1)|>PN&n#=krJ9a`^|H z$?9cVl}e>fv)TL@3c@Lu#e@)RNM*=5icmFxmw;v7&6Fa?Hc^H?P~ r`zhE{Wl#wu)iR0ZDo%Y*{s=Gt6nP)hJ$xo_Xk&gq;nrz`8g^L-rN_j%vvyyv_x1Ai~}_M^aA!C>rWdA^-xxmJX-Uy!cP zYN|4I=h~TP#0TvqFnc$BgF`j$2H&vPRoU&Sv_XZn1j%+t?7f0x-&RWs7jSmV?&z`J0$=zK9z&na1m#G%?z3T3* z-R~!F#6r~RP;Rxr(TpdA*^%>omt3>>LS%5dJSDX&W}eq4$&b1_lW~N`nx^8YYit$>H&y zU|7b)lTu-f_Jt&gkVwRnZ^j?qOhq^5s3|_>GbPi;Q}-POJM)BIPF|Ui-_!X) idm@w1UNldB3orl)cAzkx4FaeD0000 Date: Mon, 27 Jul 2009 16:51:05 -0700 Subject: [PATCH 123/244] remove opacity from disabled buttons -- otherwise its unusable on dark backgrounds --- .../Resources/button-bezel-disabled-center.png | Bin 148 -> 131 bytes .../Resources/button-bezel-disabled-left.png | Bin 221 -> 211 bytes .../Resources/button-bezel-disabled-right.png | Bin 217 -> 202 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png index 7f143a3de420f9d7c4e33a1f9560c7bf8b328130..2f25f525283ff733a1593882ccea06a1ee43bc02 100644 GIT binary patch delta 77 zcmV-T0J8s-0fPaM83+OZ006YE0F99$C^{ucL_t(|+G4tQ?;gYN-@lna`2YX^1o6Lr j|A0n-7HNq==oL_t(|+RTo-4Fe$%L>F#Dg3IWF)NQ#E+XWr1@JR^~0f^7~ zu!L)1qzUFt^0?OeaL&EF_hgJAu-3jq2$XZCS}P%A>?wqRF~+ahS_2}26`W%iFb#JT zr95Jc@D*SHz=f)|$vyv{01E&B07*qoM6N<$f+2W7 AasU7T delta 156 zcmV;N0Av5t0o?(RNq>JyL_t(|+G5fiwgFckn`xt?>cgQju-0000< KMNUMnLSTZizeukD diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png index 6db8a99ddb64e24a16fa26f4cb11baa95eebc71d..92127238afebd7d57e158ce012f798af02fd27b4 100644 GIT binary patch delta 137 zcmV;40CxY`0m=c8Nq=lfL_t(|+RTtU4uBvKM2E24SkEExRvZFqLP-J*pB17O7S_7e zzLzN`Bb;+Ar35o?*4kB+Qn9ZEJ#GB rm@o#$7+aI~9!jYRyD?@t1Q-D1v!!ISH+lU400007uL_t(|+G5 Date: Mon, 27 Jul 2009 16:57:16 -0700 Subject: [PATCH 124/244] Add disabled states to CPRadioButton --- .../Aristo/Resources/radio-bezel-disabled.png | Bin 0 -> 640 bytes .../Resources/radio-bezel-selected-disabled.png | Bin 0 -> 799 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 12 ++++++++++++ 3 files changed, 12 insertions(+) create mode 100644 AppKit/Themes/Aristo/Resources/radio-bezel-disabled.png create mode 100644 AppKit/Themes/Aristo/Resources/radio-bezel-selected-disabled.png diff --git a/AppKit/Themes/Aristo/Resources/radio-bezel-disabled.png b/AppKit/Themes/Aristo/Resources/radio-bezel-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..76d3c79d7dc05616b0bcedc2fb69a7288347c3dd GIT binary patch literal 640 zcmV-`0)PF9P) z&csR7jb^;bo%`Oq_uO~y-17wCh2(NMvE6QeZ?#wS@Ua#A<-1D6Nml)sEO|4ej zlx6wC@AvPhswxBm0Y@#%a&$VK3iJ8AXxsKtGMTKpIMKZwH-5#ksA<|xG#V9{L=;7W z9Lqh=>1SM}QrUK^lKIJGGTL&vyapL z@%$$?^siwUTPV$QlF4L3DqIpT0%$gy%`+tFj>lt9lL1G_-a9b-oOu2O3y$t!FgO_w zhXw=4h1ZmRsL}8DPl3}*rP9oKJNbMbV^?Be>~1U;`-ydmJYak7=*eQ!G^yoYuXn2J z`VF|%&1SQfLwmGifi!(MuA#??MB*FT+XELq!L2||RMEjC{@_LDB}wWasa~yC?f+ge zo&eeV0k^NihLJ=C*bh4=4KRrZwg5Y11I5>kw`lY)2b=BAPbyamMaH1_OEve~=8}}n2??w{FVj<6}Oxe*CSksvDa((69 zlbM;BxD}(c{$z9OmxX37+Lk%q?bwho4HO+bUPlR`?E2sb{4|`eWt%+mQ&CSiR z?AISt0qD!UT^-}+`ujjPZEyvHT{mis^iS)gC%X@;YgY(Ic#XPiH>WxS!Cnj{yB)($ zzyShV8;>P$9IM#b2?qwGbPh`5c_x#&ip#!AF&G#bd+0dM9nE$cfd74U)H6*7knw=i z(+?5Hb^!U?B@?6jj|Yp;E5QApQ}P zNG*)zumBYVZqk(1PgxA42UbtAF@9P8*rtypL#OgQ;Wcb#EQBS=gZRUQvSD`i08@1Y z)xmcwZF)Gew+OE(ilRyx2T>GRjIm>b?%qD|>jD&9!`$G15=6@;Lg1l9%n47&iDgvZ z<2-11YRbitQRr|IAaPD(YV=Z@o^wtN3xwB@0heL$)^oj-hQVz%nx|5!Hu|khJl6%m z{nvzNNXISjZaoWXl~S!*Z5W;=)k+z7t-Nu#v+fITUfbtBnmcxqk0H|??K(GZiS`7<2Vdn zA?7DuM!!+^`F!3_r_-B&irP+oJCPik<*t1lOY;n--b7Cr#pnP+|Gih-Tf`%LM+V!u zT#o;Bi}4EBaU3U6E@0FLaqK!O0U0Cp3eF331e78%_~%p5d{5{q{H{c^xd~-~f=Dqq d`JVg|U;r{P;N`sT!fOBk002ovPDHLkV1i2qZ6W{w literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index a047ab9f4..41295e976 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -364,6 +364,16 @@ [_CPCibCustomResource imageResourceWithName:"radio-bezel-selected-highlighted.png" size:CGSizeMake(17.0, 17.0)], nil, nil ] isVertical:NO]), + bezelColorSelectedDisabled = PatternColor([[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"radio-bezel-selected-disabled.png" size:CGSizeMake(17.0, 17.0)], nil, nil + ] + isVertical:NO]), + bezelColorDisabled = PatternColor([[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"radio-bezel-disabled.png" size:CGSizeMake(17.0, 17.0)], nil, nil + ] + isVertical:NO]), bezelColorHighlighted = PatternColor([[CPThreePartImage alloc] initWithImageSlices: [ [_CPCibCustomResource imageResourceWithName:"radio-bezel-highlighted.png" size:CGSizeMake(17.0, 17.0)], nil, nil @@ -377,6 +387,8 @@ [button setValue:bezelColorSelected forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected]; [button setValue:bezelColorSelectedHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected | CPThemeStateHighlighted]; [button setValue:bezelColorHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; + [button setValue:bezelColorDisabled forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled]; + [button setValue:bezelColorSelectedDisabled forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled | CPThemeStateSelected]; [button setValue:CGSizeMake(0.0, 17.0) forThemeAttribute:@"min-size"]; From a05ecd27593472b66990b8e14e0ccc3bd5763431 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 27 Jul 2009 17:03:34 -0700 Subject: [PATCH 125/244] Add disabled state for check boxes --- .../Aristo/Resources/check-box-bezel-disabled.png | Bin 0 -> 296 bytes .../check-box-bezel-selected-disabled.png | Bin 0 -> 598 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 12 ++++++++++++ 3 files changed, 12 insertions(+) create mode 100644 AppKit/Themes/Aristo/Resources/check-box-bezel-disabled.png create mode 100644 AppKit/Themes/Aristo/Resources/check-box-bezel-selected-disabled.png diff --git a/AppKit/Themes/Aristo/Resources/check-box-bezel-disabled.png b/AppKit/Themes/Aristo/Resources/check-box-bezel-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..c1246094f5d3a50c1843b0f42d467975dfccb94a GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+g!3HExhN-duDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MW;Mn978H@9hqdv*JL2lCjaFiLm+bz(;>ziGQG{x>Yo_m zI;LjqVf4J-CM+P7J44`ut$u@UbN#37vHR+BKh0USiiJUDrDZAi>B_+DSIn&f&vj1g zc}{v#a!+UCV~bbYa836b}oMZyFGK3Phs@YP&kVX2Ex%SJ-uBR6+~CG{TZ8u0$amd~D#~No s4;$zln)lpM=JmdKI;Vst015GR<^TWy literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/check-box-bezel-selected-disabled.png b/AppKit/Themes/Aristo/Resources/check-box-bezel-selected-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..fea5c786c0a9dda267d9068b3efa34b05493286d GIT binary patch literal 598 zcmV-c0;&CpP)f^napN8O?EeG zl8v>&rp1E4!v{g%eG~jy3jPBhMDay@@S$j=2C4-qM$iPMrrk7cn(Zb#AI@$~NbMJ1 zI0JL%o_p?{J42LG_#b=r{N?RlfB&)T6z-C(pMiZ8^C!_bz9*z|E+R@P5riWVa+NWL z(Hjzut*=|4bMqjCpuSW`@+Kw~ zCA{OFHS(^9o69R`cRJV!0tCGtvNqFwW>KpxB1>r+H#>7OQBLe?sf?I&Y;XTg_l9ZW ziXLOZai=k-$g>&C6(4cTvA2H!D@#zVE}S?&K~_qhI`pg8!Q(MXM*si- literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 41295e976..bde1704c8 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -416,6 +416,16 @@ [_CPCibCustomResource imageResourceWithName:"check-box-bezel-selected-highlighted.png" size:CGSizeMake(15.0, 16.0)], nil, nil ] isVertical:NO]), + bezelColorSelectedDisabled = PatternColor([[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"check-box-bezel-selected-disabled.png" size:CGSizeMake(15.0, 16.0)], nil, nil + ] + isVertical:NO]), + bezelColorDisabled = PatternColor([[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"check-box-bezel-disabled.png" size:CGSizeMake(15.0, 16.0)], nil, nil + ] + isVertical:NO]), bezelColorHighlighted = PatternColor([[CPThreePartImage alloc] initWithImageSlices: [ [_CPCibCustomResource imageResourceWithName:"check-box-bezel-highlighted.png" size:CGSizeMake(15.0, 16.0)], nil, nil @@ -429,6 +439,8 @@ [button setValue:bezelColorSelected forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected]; [button setValue:bezelColorSelectedHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected | CPThemeStateHighlighted]; [button setValue:bezelColorHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; + [button setValue:bezelColorDisabled forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled]; + [button setValue:bezelColorSelectedDisabled forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled | CPThemeStateSelected]; [button setValue:CGSizeMake(0.0, 17.0) forThemeAttribute:@"min-size"]; From 41dc660140e4b4d7b6b4f0fe39273816859c950e Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 27 Jul 2009 18:19:34 -0700 Subject: [PATCH 126/244] Added support for document cibs. Reviewed by me. --- AppKit/CPDocument.j | 17 ++-- AppKit/CPWindowController.j | 161 +++++++++++++++++++++++++++++------- 2 files changed, 139 insertions(+), 39 deletions(-) diff --git a/AppKit/CPDocument.j b/AppKit/CPDocument.j index b39506c37..145d937d5 100644 --- a/AppKit/CPDocument.j +++ b/AppKit/CPDocument.j @@ -90,7 +90,9 @@ var CPDocumentUntitledCount = 0; CPDocuments should be used to represent this. */ @implementation CPDocument : CPResponder -{ +{ + CPWindow _window; // For outlet purposes. + CPURL _fileURL; CPString _fileType; CPArray _windowControllers; @@ -228,9 +230,10 @@ var CPDocumentUntitledCount = 0; */ - (void)makeWindowControllers { - var controller = [[CPWindowController alloc] initWithWindowCibName:nil]; - - [self addWindowController:controller]; + var windowCibName = [self windowCibName]; + + if (windowCibName) + [self addWindowController:[[CPWindowController alloc] initWithWindowCibName:windowCibName owner:self]]; } /*! @@ -250,7 +253,7 @@ var CPDocumentUntitledCount = 0; { [_windowControllers addObject:aWindowController]; - if ([aWindowController document] != self) + if ([aWindowController document] !== self) { [aWindowController setNextResponder:self]; [aWindowController setDocument:self]; @@ -295,7 +298,7 @@ var CPDocumentUntitledCount = 0; Called after aWindowController loads the document's Nib file. @param aWindowController the controller that loaded the Nib file */ -- (void)windowControllerDidLoadNib:(CPWindowController)aWindowController +- (void)windowControllerDidLoadCib:(CPWindowController)aWindowController { } @@ -303,7 +306,7 @@ var CPDocumentUntitledCount = 0; Called before aWindowController will load the document's Nib file. @param aWindowController the controller that will load the Nib file */ -- (void)windowControllerWillLoadNib:(CPWindowController)aWindowController +- (void)windowControllerWillLoadCib:(CPWindowController)aWindowController { } diff --git a/AppKit/CPWindowController.j b/AppKit/CPWindowController.j index 35bc94c90..8ee836374 100644 --- a/AppKit/CPWindowController.j +++ b/AppKit/CPWindowController.j @@ -41,10 +41,22 @@ */ @implementation CPWindowController : CPResponder { - id _owner; CPWindow _window; + CPDocument _document; + BOOL _shouldCloseDocument; + + id _cibOwner; CPString _windowCibName; + CPString _windowCibPath; + + BOOL _isWindowLoading; + BOOL _shouldDisplayWindowWhenLoaded; +} + +- (id)init +{ + return [self initWithWindow:nil]; } /*! @@ -55,14 +67,15 @@ - (id)initWithWindow:(CPWindow)aWindow { self = [super init]; - + if (self) { [self setWindow:aWindow]; - + [self setShouldCloseDocument:NO]; + [self setNextResponder:CPApp]; } - + return self; } @@ -84,37 +97,78 @@ */ - (id)initWithWindowCibName:(CPString)aWindowCibName owner:(id)anOwner { - self = [super init]; - + self = [self initWithWindow:nil]; + if (self) { - _owner = anOwner; + _cibOwner = anOwner; _windowCibName = aWindowCibName; - - [self setNextResponder:CPApp]; } - + + return self; +} + +- (id)initWithWindowCibPath:(CPString)aWindowCibPath owner:(id)anOwner +{ + self = [self initWithWindow:nil]; + + if (self) + { + _cibOwner = anOwner; + _windowCibPath = aWindowCibPath; + } + return self; } /*! Loads the window */ -- (void)loadWindow +- (BOOL)loadWindow { - [self windowWillLoad]; - //FIXME: ACTUALLY LOAD WINDOW!!! - [self setWindow:CPApp._keyWindow = [[CPWindow alloc] initWithContentRect:CPRectMakeZero() styleMask:CPBorderlessBridgeWindowMask|CPTitledWindowMask|CPClosableWindowMask|CPResizableWindowMask]]; - + if ([self isWindowLoaded]) + return YES; + + if (![self isWindowLoading]) + { + _isWindowLoading = YES; + + [self windowWillLoad]; + + [CPBundle loadCibFile:[self windowCibPath] + externalNameTable:[CPDictionary dictionaryWithObject:_cibOwner forKey:CPCibOwner] + loadDelegate:self]; + } + + return NO; +} + +- (void)cibDidFinishLoading:(CPCib)aCib +{ + if (_window === nil && _document !== nil && _cibOwner === _document) + [self setWindow:[_document valueForKey:@"window"]]; + + [self synchronizeWindowTitleWithDocumentName]; + [self windowDidLoad]; + + if (_shouldDisplayWindowWhenLoaded) + [self showWindow:self]; } /*! Shows the window. @param aSender the object requesting the show */ -- (CFAction)showWindow:(id)aSender +- (@action)showWindow:(id)aSender { + if (![self loadWindow]) + { + _shouldDisplayWindowWhenLoaded = YES; + + return; + } + var theWindow = [self window]; if ([theWindow respondsToSelector:@selector(becomesKeyOnlyIfNeeded)] && [theWindow becomesKeyOnlyIfNeeded]) @@ -129,7 +183,12 @@ */ - (BOOL)isWindowLoaded { - return _window; + return _window !== nil; +} + +- (BOOL)isWindowLoading +{ + return _isWindowLoading; } /*! @@ -149,8 +208,10 @@ */ - (void)setWindow:(CPWindow)aWindow { + [_window setWindowController:nil]; + _window = aWindow; - + [_window setWindowController:self]; [_window setNextResponder:self]; } @@ -160,8 +221,8 @@ */ - (void)windowDidLoad { - [_document windowControllerDidLoadNib:self]; - + [_document windowControllerDidLoadCib:self]; + [self synchronizeWindowTitleWithDocumentName]; } @@ -170,7 +231,7 @@ */ - (void)windowWillLoad { - [_document windowControllerWillLoadNib:self]; + [_document windowControllerWillLoadCib:self]; } /*! @@ -179,17 +240,17 @@ */ - (void)setDocument:(CPDocument)aDocument { - if (_document == aDocument) + if (_document === aDocument) return; - + var defaultCenter = [CPNotificationCenter defaultCenter]; - + if (_document) { [defaultCenter removeObserver:self name:CPDocumentWillSaveNotification object:_document]; - + [defaultCenter removeObserver:self name:CPDocumentDidSaveNotification object:_document]; @@ -198,16 +259,16 @@ name:CPDocumentDidFailToSaveNotification object:_document]; } - + _document = aDocument; - + if (_document) { [defaultCenter addObserver:self selector:@selector(_documentWillSave:) name:CPDocumentWillSaveNotification object:_document]; - + [defaultCenter addObserver:self selector:@selector(_documentDidSave:) name:CPDocumentDidSaveNotification @@ -217,10 +278,10 @@ selector:@selector(_documentDidFailToSave:) name:CPDocumentDidFailToSaveNotification object:_document]; - + [self setDocumentEdited:[_document isDocumentEdited]]; - } - + } + [self synchronizeWindowTitleWithDocumentName]; } @@ -259,6 +320,42 @@ [[self window] setDocumentEdited:isEdited]; } +- (void)close +{ + [[self window] close]; +} + +- (void)setShouldCloseDocument:(BOOL)shouldCloseDocument +{ + _shouldCloseDocument = shouldCloseDocument; +} + +- (BOOL)shouldCloseDocument +{ + return _shouldCloseDocument; +} + +- (id)owner +{ + return _cibOwner; +} + +- (CPString)windowCibName +{ + if (_windowCibName) + return _windowCibName; + + return [[_windowCibPath lastPathComponent] stringByDeletingPathExtension]; +} + +- (CPString)windowCibPath +{ + if (_windowCibPath) + return _windowCibPath; + + return [[CPBundle bundleForClass:[_cibOwner class]] pathForResource:_windowCibName + @".cib"]; +} + // Setting and Getting Window Attributes /*! @@ -268,7 +365,7 @@ { if (!_document || !_window) return; - + // [_window setRepresentedFilename:]; [_window setTitle:[self windowTitleForDocumentDisplayName:[_document displayName]]]; } From 5bc92b686b4fae706bc12b8bb96b8ba2a30e1fb8 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 27 Jul 2009 18:42:04 -0700 Subject: [PATCH 127/244] Slight fix to new CPWindowController mechanics. Reviewed by me. --- AppKit/CPWindowController.j | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AppKit/CPWindowController.j b/AppKit/CPWindowController.j index 8ee836374..f60abcfe2 100644 --- a/AppKit/CPWindowController.j +++ b/AppKit/CPWindowController.j @@ -74,6 +74,9 @@ [self setShouldCloseDocument:NO]; [self setNextResponder:CPApp]; + + if (aWindow) + [self windowDidLoad]; } return self; From b5e84342ac0c602aa0a500a6e0dd09bab45d79a9 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 27 Jul 2009 18:43:46 -0700 Subject: [PATCH 128/244] Fix for documentation error. Closes #208. --- AppKit/CPImage.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j index 4962912bf..94e1eb533 100644 --- a/AppKit/CPImage.j +++ b/AppKit/CPImage.j @@ -187,9 +187,9 @@ function CPImageInBundle(aFilename, aSize, aBundle) } /*! - Returns YES if the image data has already been loaded. + Returns the load status, which will be CPImageLoadStatusCompleted if the image data has already been loaded. */ -- (BOOL)loadStatus +- (unsigned)loadStatus { return _loadStatus; } From b50067e39eff167a8e30accdcfd17c288d5d170b Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 27 Jul 2009 22:41:47 -0700 Subject: [PATCH 129/244] Add a trim function to CPString. --- Foundation/CPString.j | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Foundation/CPString.j b/Foundation/CPString.j index 9f3cb1930..a12dd2236 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -62,7 +62,8 @@ var CPStringRegexSpecialCharacters = [ '/', '.', '*', '+', '?', '|', '$', '^', '(', ')', '[', ']', '{', '}', '\\' ], - CPStringRegexEscapeExpression = new RegExp("(\\" + CPStringRegexSpecialCharacters.join("|\\") + ")", 'g'); + CPStringRegexEscapeExpression = new RegExp("(\\" + CPStringRegexSpecialCharacters.join("|\\") + ")", 'g'), + CPStringRegexTrimWhitespace = new RegExp("(^\\s+|\\s+$)", 'g'); /*! @class CPString @@ -421,6 +422,13 @@ var CPStringRegexSpecialCharacters = [ return '' + substring(0, range.location) + replacement + substring(range.location + range.length, self.length); } +/*! + Returns a new string with leading and trailing whitespace trimmed +*/ +- (CPString)stringByTrimmingWhitespace +{ + return self.replace(CPStringRegexTrimWhitespace, ""); +} // Identifying and comparing strings From 6a9804939e038ae8b72fe656505dd789c4154e65 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 27 Jul 2009 22:43:01 -0700 Subject: [PATCH 130/244] More removal of "bridge". Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 153 ++++++++++++--------- AppKit/Platform/CPPlatformWindow.j | 9 ++ AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 2 +- 3 files changed, 96 insertions(+), 68 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 86a9f5dff..c7c7f8f35 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -236,69 +236,69 @@ var CPWindowSaveImage = nil, */ @implementation CPWindow : CPResponder { - CPPlatformWindow _platformWindow; + CPPlatformWindow _platformWindow; - int _windowNumber; - unsigned _styleMask; - CGRect _frame; - int _level; - BOOL _isVisible; - BOOL _isAnimating; - BOOL _hasShadow; - BOOL _isMovableByWindowBackground; + int _windowNumber; + unsigned _styleMask; + CGRect _frame; + int _level; + BOOL _isVisible; + BOOL _isAnimating; + BOOL _hasShadow; + BOOL _isMovableByWindowBackground; - BOOL _isDocumentEdited; - BOOL _isDocumentSaving; + BOOL _isDocumentEdited; + BOOL _isDocumentSaving; - CPImageView _shadowView; + CPImageView _shadowView; - CPView _windowView; - CPView _contentView; - CPView _toolbarView; + CPView _windowView; + CPView _contentView; + CPView _toolbarView; - CPArray _mouseEnteredStack; - CPView _leftMouseDownView; - CPView _rightMouseDownView; + CPArray _mouseEnteredStack; + CPView _leftMouseDownView; + CPView _rightMouseDownView; - CPToolbar _toolbar; - CPResponder _firstResponder; - CPResponder _initialFirstResponder; - id _delegate; + CPToolbar _toolbar; + CPResponder _firstResponder; + CPResponder _initialFirstResponder; + id _delegate; - CPString _title; + CPString _title; - BOOL _acceptsMouseMovedEvents; - BOOL _ignoresMouseEvents; + BOOL _acceptsMouseMovedEvents; + BOOL _ignoresMouseEvents; - CPWindowController _windowController; + CPWindowController _windowController; - CGSize _minSize; - CGSize _maxSize; + CGSize _minSize; + CGSize _maxSize; - CPUndoManager _undoManager; - CPURL _representedURL; + CPUndoManager _undoManager; + CPURL _representedURL; - CPSet _registeredDraggedTypes; - CPArray _registeredDraggedTypesArray; - CPCountedSet _inclusiveRegisteredDraggedTypes; + CPSet _registeredDraggedTypes; + CPArray _registeredDraggedTypesArray; + CPCountedSet _inclusiveRegisteredDraggedTypes; - CPButton _defaultButton; - BOOL _defaultButtonEnabled; + CPButton _defaultButton; + BOOL _defaultButtonEnabled; - BOOL _autorecalculatesKeyViewLoop; - BOOL _keyViewLoopIsDirty; + BOOL _autorecalculatesKeyViewLoop; + BOOL _keyViewLoopIsDirty; // Bridge Support #if PLATFORM(DOM) - DOMElement _DOMElement; + DOMElement _DOMElement; #endif - unsigned _autoresizingMask; + unsigned _autoresizingMask; - BOOL _delegateRespondsToWindowWillReturnUndoManagerSelector; + BOOL _delegateRespondsToWindowWillReturnUndoManagerSelector; - BOOL _isFullBridge; - _CPWindowFullBridgeSession _fullBridgeSession; + BOOL _isFullPlatformWindow; + _CPWindowFullPlatformWindowSession _fullPlatformWindowSession; } /* @@ -338,7 +338,7 @@ CPTexturedBackgroundWindowMask { [self setPlatformWindow:[CPPlatformWindow primaryPlatformWindow]]; - _isFullBridge = NO; + _isFullPlatformWindow = NO; _registeredDraggedTypes = [CPSet set]; _registeredDraggedTypesArray = []; @@ -375,7 +375,9 @@ CPTexturedBackgroundWindowMask _DOMElement.style.visibility = "visible"; _DOMElement.style.zIndex = 0; +#if 0 CPDOMDisplayServerSetStyleLeftTop(_DOMElement, NULL, _CGRectGetMinX(_frame), _CGRectGetMinY(_frame)); +#endif CPDOMDisplayServerSetStyleSize(_DOMElement, 1, 1); CPDOMDisplayServerAppendChild(_DOMElement, _windowView._DOMElement); @@ -386,7 +388,7 @@ CPTexturedBackgroundWindowMask [self setHasShadow:aStyleMask !== CPBorderlessWindowMask]; if (aStyleMask & CPBorderlessBridgeWindowMask) - [self setFullBridge:YES]; + [self setFullPlatformWindow:YES]; _defaultButtonEnabled = YES; _keyViewLoopIsDirty = YES; @@ -420,7 +422,7 @@ CPTexturedBackgroundWindowMask return _CPStandardWindowView; } -+ (Class)_windowViewClassForFullBridgeStyleMask:(unsigned)aStyleMask ++ (Class)_windowViewClassForFullPlatformWindowStyleMask:(unsigned)aStyleMask { return _CPBorderlessBridgeWindowView; } @@ -470,21 +472,24 @@ CPTexturedBackgroundWindowMask #endif } -- (void)setFullBridge:(BOOL)shouldBeFullBridge +- (void)setFullPlatformWindow:(BOOL)shouldBeFullPlatformWindow { - shouldBeFullBridge = !!shouldBeFullBridge; - - if (_isFullBridge === shouldBeFullBridge) + if (![_platformWindow supportsFullPlatformWindows]) return; - _isFullBridge = shouldBeFullBridge; + shouldBeFullPlatformWindow = !!shouldBeFullPlatformWindow; - if (_isFullBridge) + if (_isFullPlatformWindow === shouldBeFullPlatformWindow) + return; + + _isFullPlatformWindow = shouldBeFullPlatformWindow; + + if (_isFullPlatformWindow) { - _fullBridgeSession = _CPWindowFullBridgeSessionMake(_windowView, [self contentRectForFrameRect:[self frame]], [self hasShadow], [self level]); + _fullPlatformWindowSession = _CPWindowFullPlatformWindowSessionMake(_windowView, [self contentRectForFrameRect:[self frame]], [self hasShadow], [self level]); - var fullBridgeWindowViewClass = [[self class] _windowViewClassForFullBridgeStyleMask:_styleMask], - windowView = [[fullBridgeWindowViewClass alloc] initWithFrame:CGRectMakeZero() styleMask:_styleMask]; + var fullPlatformWindowViewClass = [[self class] _windowViewClassForFullPlatformWindowStyleMask:_styleMask], + windowView = [[fullPlatformWindowViewClass alloc] initWithFrame:CGRectMakeZero() styleMask:_styleMask]; [self _setWindowView:windowView]; @@ -495,21 +500,21 @@ CPTexturedBackgroundWindowMask } else { - var windowView = _fullBridgeSession.windowView; + var windowView = _fullPlatformWindowSession.windowView; [self _setWindowView:windowView]; - [self setLevel:_fullBridgeSession.level]; - [self setHasShadow:_fullBridgeSession.hasShadow]; + [self setLevel:_fullPlatformWindowSession.level]; + [self setHasShadow:_fullPlatformWindowSession.hasShadow]; [self setAutoresizingMask:CPWindowNotSizable]; - [self setFrame:[windowView frameRectForContentRect:_fullBridgeSession.contentRect]]; + [self setFrame:[windowView frameRectForContentRect:_fullPlatformWindowSession.contentRect]]; } } -- (BOOL)isFullBridge +- (BOOL)isFullPlatformWindow { - return _isFullBridge; + return _isFullPlatformWindow; } /*! @@ -601,7 +606,7 @@ CPTexturedBackgroundWindowMask origin.x = anOrigin.x; origin.y = anOrigin.y; - + #if PLATFORM(DOM) CPDOMDisplayServerSetStyleLeftTop(_DOMElement, NULL, origin.x, origin.y); #endif @@ -621,9 +626,9 @@ CPTexturedBackgroundWindowMask return; _frame.size = aSize; - + [_windowView setFrameSize:aSize]; - + if (_hasShadow) [_shadowView setFrameSize:_CGSizeMake(SHADOW_MARGIN_LEFT + aSize.width + SHADOW_MARGIN_RIGHT, SHADOW_MARGIN_BOTTOM + aSize.height + SHADOW_MARGIN_TOP + SHADOW_DISTANCE)]; @@ -1628,7 +1633,7 @@ CPTexturedBackgroundWindowMask [_windowView noteToolbarChanged]; - if (_isFullBridge) + if (_isFullPlatformWindow) newFrame = [_platformWindow usableContentFrame]; else { @@ -1920,9 +1925,9 @@ var keyViewComparator = function(a, b, context) /* @ignore */ -- (void)resizeWithOldBridgeSize:(CGSize)aSize +- (void)resizeWithOldPlatformWindowSize:(CGSize)aSize { - if ([self isFullBridge]) + if ([self isFullPlatformWindow]) return [self setFrame:[_platformWindow usableContentFrame]]; if (_autoresizingMask == CPWindowNotSizable) @@ -2024,6 +2029,20 @@ var keyViewComparator = function(a, b, context) @end +@implementation CPWindow (Deprecated) + +- (void)setFullBridge:(BOOL)shouldBeFullBridge +{ + [self setFullPlatformWindow:shouldBeFullBridge]; +} + +- (BOOL)isFullBridge +{ + return [self isFullPlatformWindow]; +} + +@end + var interpolate = function(fromValue, toValue, progress) { return fromValue + (toValue - fromValue) * progress; @@ -2075,7 +2094,7 @@ var interpolate = function(fromValue, toValue, progress) @end -function _CPWindowFullBridgeSessionMake(aWindowView, aContentRect, hasShadow, aLevel) +function _CPWindowFullPlatformWindowSessionMake(aWindowView, aContentRect, hasShadow, aLevel) { return { windowView:aWindowView, contentRect:aContentRect, hasShadow:hasShadow, level:aLevel }; } diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index 1aec29a90..8a6bd2ea5 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -161,6 +161,15 @@ var PrimaryPlatformWindow = NULL; } */ +- (BOOL)supportsFullPlatformWindows +{ +#if PLATFORM(BROWSER) + return YES; +#else + return NO; +#endif +} + @end #if PLATFORM(BROWSER) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 4630ae210..0730971c4 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -558,7 +558,7 @@ var CTRL_KEY_CODE = 17; windowCount = windows.length; while (windowCount--) - [windows[windowCount] resizeWithOldBridgeSize:oldSize]; + [windows[windowCount] resizeWithOldPlatformWindowSize:oldSize]; } //window.liveResize = NO; From bbda6e6e77e6d694eaa7c779cb5c8232311d29bc Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 27 Jul 2009 23:28:10 -0700 Subject: [PATCH 131/244] Added the images for CPSearchField. Closes #205. --- .../CPSearchField/CPSearchFieldCancel.png | Bin 0 -> 956 bytes .../CPSearchField/CPSearchFieldCancelPressed.png | Bin 0 -> 976 bytes .../Resources/CPSearchField/CPSearchFieldFind.png | Bin 0 -> 958 bytes .../CPSearchField/CPSearchFieldSearch.png | Bin 0 -> 938 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 AppKit/Resources/CPSearchField/CPSearchFieldCancel.png create mode 100644 AppKit/Resources/CPSearchField/CPSearchFieldCancelPressed.png create mode 100644 AppKit/Resources/CPSearchField/CPSearchFieldFind.png create mode 100644 AppKit/Resources/CPSearchField/CPSearchFieldSearch.png diff --git a/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png b/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png new file mode 100644 index 0000000000000000000000000000000000000000..fc32eabb36e7a94ebbf753b53e14a5442009e98f GIT binary patch literal 956 zcmV;t14I0YP)4Tx0C)kdlEF(GK@`TnO%N4}m7<>aAYvi5Yu12XBt~tK<`80vReFiDYZ7qR zWp|AV9{d|T2!&E873rn)Xz3}?OMCDjVr$#~Lcxp3_M08j^w8kN2XFT`-+uFE=FI}h zeA)BX5&#@G^ovh(`irGyz4IqD^x-}R@VG1jZ@N&()6yoczSGS(9hJ4(nA*v`J{JVE z6b=0q#aYQKic69=LocMKDp^#^7I}x9@=L`T@_TY`Me!%eD~i8Lu8WGCdrmf7tL6fU zF7kwB2ZEd>3o8%~`GEY=an@NsNyLcoe9lddkcVVnqzKe6fT=h1@3pk0kHCiK{E~oVz0Ui5Mbh!w0J_K%lMA7w86x|$h?O#CSN^JP` z*vo@x$K3EOV|8X#9XR0`81WtbpH*LCmjS$M0Ne_m?EBPZTzIBOfcr#L$Jyl1=57x?aD=2!hE#U@+!>|B%WVD7J{7S5NNI&v6; zfi%-Z28-&h`4!_6?EM+xTjNXptyKPv(B6uBIJ53;`?X3n)TjBU+bMnC6^~MS+At>Z z2Vfh63TsRr3;+NC32;bRa{vGf6951U69E94oEQKA0fk9KK~y*q?Nm!j#6S>@9|i?c z{OtUJieA72=weL3iAScBOEXFxSsFo0!2tX-e1TzE)@7l{pW3ZZ#-z)G$V-9K zx9guT%EB?BgVhd?SE`O51lVz%IF4V^G`+TM`$mX--@i+e zJa*kK*i126oEP)4Tx0C)kdlFv&UK@`Woo3t3QNR6%MJ&2?b%bGP1FC{;qMeHHO6l-sB@)O*3 z*=(W(5B?1v1VIX=MZAbdi>H8>_TZt2t*!nQ3SLCk@9YrLLqjipFwAG(eCN%3Zw3g* zN{+J}0$|ymTX>b#-!8t>2Yw-p5sV^=nUZKanSA~=C4KDX2Q;~LIw@oI5%qHqySxz4 z;uJioDNajXQe2e0>Ny@Yb;+V$DwEgAakp5=k@v{MHN{^fFDd>ixh-n)>^a%6%MBX{ zMaZdgr76g1vM4u&MgB}qS=I{Uhc3x6;kY~-en1|Vec?=NUjZ*ZP_xWky z&o?p6bd$i*cF%Wx9`s5Zi!`fdA_%7q9Rd%xeE)g@7RndkhNBUW`^7P^cqreGk!VIqkI^^V-dbc%gF zBYf)|w?9hHpXOE8g8t-IocC^{R`>J_e{m(Q&)VX7Tu&Ir4DJEBm3{0~5vi4t#sg&dixi{>d?n zk^Qv-jUf+MKztP}gE_$bCvXd5@CZa3RCp67955@MG>jMc&%n79AD5i)ZGc^1f_~OS zzyj}}*7=xlim$%~rWk9t+lyRv(|pWfF3tK@eP5RfY(mpL7EgRBKVa$UV)!dOt7b9e=^U1ezQk3+RJlar(kA z%)b)ky#ng{1}f{Ple!@Jw_Ifx8+~Y>a2@aoP3+B3KVH=uTv;TzdMDew*Q9gMsL1zczV0000P000&U1^@s6HNQ8u0005cX+uL$Nkc;* zP;zf(X>4Tx0C)kdlFv&UK@`Woo3t3QNR6%MJ&2?b%bGP1FC{;qMeHHO6l-sB@)O*3 z*=(W(5B?1v1VIX=MZAbdi>H8>_TZt2t*!nQ3SLCk@9YrLLqjipFwAG(eCN%3Zw3g* zN{+J}0$|ymTX>b#-!8t>2Yw-p5sV^=nUZKanSA~=C4KDX2Q;~LIw@oI5%qHqySxz4 z;uJioDNajXQe2e0>Ny@Yb;+V$DwEgAakp5=k@v{MHN{^fFDd>ixh-n)>^a%6%MBX{ zMaZdgr76g1vM4u&MgB}qS=I{Uhc3x6;kY~-en1|Vec?=NUjZ*ZP_xWky z&o?p6bd$i*cF%Wx9`s5Zi!`fdA_%7q9Rd%xeE)g@7RndkhNBUW`^7P^cqreGk!VIqkI^^V-dbc%gF zBYf)|w?9hHpXOE8g8t-IocC^{R`>J_e{m(Q&)VX7Tu&Ir4DJEBm3{0?N`=nC;`jZ_f z$Wpa?JZeFAYgav=2cVil7kGGd#f*%)krelmX(@i*XpPVGgEYAz0Tj zw!<+TKu#6McvwX@xMyHbd{_)&zz%jbX6Q4z@*gf~Ss3o7&C{Z-ERL^_yhxB!x&sZs5T}a z61WjpiFO0;!5J8^3QXk3I1klO56!R)_n=NP!^d9(B*_z(Ln(x(e_-wbOfm{JunXhh zD~wfAB|7{5J)zH6u7c6m<$4`j!HTxv2)z>%07*qoM6N<$f_iwhwEzGB literal 0 HcmV?d00001 diff --git a/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png b/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png new file mode 100644 index 0000000000000000000000000000000000000000..77434b8a2085c5acbb0550b101eb53945dc405f3 GIT binary patch literal 938 zcmV;b16BNqP)P000&U1^@s6HNQ8u0005qX+uL$Nkc;* zP;zf(X>4Tx0C)kdlEF(GK@`TnO%N4}m7<>aAYvi5Yu12XBt~tK<`80vReFiDYZ7qR zWp|AV9{d|T2!&E873rn)Xz3}?OMCDjVr$#~Lcxp3_M08j^w8kN2XFT`-+uFE=FI}h zeA)BX5&#@G^ovh(`irGyz4IqD^x-}R@VG1jZ@N&()6yoczSGS(9hJ4(nA*v`J{JVE z6b=0q#aYQKic69=LocMKDp^#^7I}x9@=L`T@_TY`Me!%eD~i8Lu8WGCdrmf7tL6fU zF7kwB2ZEd>3o8%~`GEY=an@NsNyLcoe9lddkcVVnqzKe6fT=h1@3pk0kHCiK{E~oVz0Ui5Mbh!w0J_K%lMA7w86x|$h?O#CSN^JP` z*vo@x$K3EOV|8X#9XR0`81WtbpH*LCmjS$M0Ne_m?EBPZTzIBOfcr#L$Jyl1=57x?aD=2!hE#U@+!>|B%WVD7J{7S5NNI&v6; zfi%-Z28-&h`4!_6?EM+xTjNXptyKPv(B6uBIJ53;`?X3n)TjBU+bMnC6^~MS+At>Z z2Vfh63TsRr3;+NC32;bRa{vGf6951U69E94oEQKA0dq-2K~zW$?UPF@MNt@rk4thd z5;2vc6a&SS!c6%Cet|zCKSuZi2Fj&OOcde_)EUbych8fx>ZrB%KAp&bx1RH@z1FwB zwcc;U>4@U^&L2a=#pVtshjAo6a0J^z!upu<)u8-ePvjKYsgi~i8r%o87yGIZg9?< z??EpN!5AFDBV;P&Bqnw#71gG*QkTbfkLNles{Mg4sJQ{IJf{G3mC z9*03VhYEbFbfv>#n1^=A>k7;D$)YXL2C2V7eN{7d{fL8%vwnH{1A&xA#t!r~1poj5 M07*qoM6N<$g1!c_9RL6T literal 0 HcmV?d00001 From fbf559043e9278bf73074bf1253710424ee319f5 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 28 Jul 2009 21:10:16 -0700 Subject: [PATCH 132/244] Fixed accidentally committed #if 0. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index c7c7f8f35..65976f471 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -374,10 +374,8 @@ CPTexturedBackgroundWindowMask _DOMElement.style.position = "absolute"; _DOMElement.style.visibility = "visible"; _DOMElement.style.zIndex = 0; - -#if 0 + CPDOMDisplayServerSetStyleLeftTop(_DOMElement, NULL, _CGRectGetMinX(_frame), _CGRectGetMinY(_frame)); -#endif CPDOMDisplayServerSetStyleSize(_DOMElement, 1, 1); CPDOMDisplayServerAppendChild(_DOMElement, _windowView._DOMElement); From 856373adecc9f3b02b7b55edbc1309a8f889b6fb Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Wed, 29 Jul 2009 18:57:18 -0700 Subject: [PATCH 133/244] Added status code checks to abort Rake early. --- AppKit/Rakefile | 1 + Objective-J/Rakefile | 4 +--- Rakefile | 7 +++++++ Tools/Rake/lib/objective-j/bundletask.rb | 3 +++ Tools/capp/Templates/ThemeDescriptor/Rakefile | 1 + common.rb | 5 +++-- 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/AppKit/Rakefile b/AppKit/Rakefile index f4f3d30cc..a93beb55c 100644 --- a/AppKit/Rakefile +++ b/AppKit/Rakefile @@ -53,6 +53,7 @@ file_d $THEME_PRODUCT => ThemeFiles << $ENVIRONMENT_PRODUCT do puts str end end + rake abort if ($? != 0) end task :build => [:build_subprojects, :AppKit, $ENVIRONMENT_PRODUCT, $THEME_PRODUCT, $ENVIRONMENT_THEME_PRODUCT] diff --git a/Objective-J/Rakefile b/Objective-J/Rakefile index f0f1782ac..dca4d0725 100644 --- a/Objective-J/Rakefile +++ b/Objective-J/Rakefile @@ -55,9 +55,7 @@ def platform_flags(*platforms) end def build_product(path, flags) - IO.popen("gcc #{flags} -E -x c -P -", "w+") do |preprocessor| - Files.select { |name| name.match(/\.js$/) }.each do |fileName| preprocessor.puts IO.read(fileName) end @@ -67,8 +65,8 @@ def build_product(path, flags) File.open(path, "w") do |file| file.write(IO.read("header.txt") + preprocessor.read) end - end + rake abort if ($? != 0) end task :build => [:Products, $ENVIRONMENT_PRODUCT, :build_subprojects] diff --git a/Rakefile b/Rakefile index 4f0a3da62..e06fdf743 100644 --- a/Rakefile +++ b/Rakefile @@ -86,7 +86,9 @@ file_d $STARTER_DOWNLOAD_APPLICATION => [$TOOLS_DOWNLOAD_ENV] do rm_rf($STARTER_DOWNLOAD_APPLICATION) mkdir_p($STARTER_DOWNLOAD) + system %{capp gen #{$STARTER_DOWNLOAD_APPLICATION} -t Application --noconfig } + rake abort if ($? != 0) # No tools means no objective-j gem rm(File.join($STARTER_DOWNLOAD_APPLICATION, 'Rakefile')) @@ -103,7 +105,9 @@ task :install => [:tools_download] do else prefix = '' end + system %{cd #{$TOOLS_DOWNLOAD} && sudo sh ./install-tools #{prefix} } + rake abort if ($? != 0) end task :test => [:build] do @@ -122,6 +126,8 @@ end task :docs do if executable_exists? "doxygen" system %{doxygen #{$DOXYGEN_CONFIG} } + rake abort if ($? != 0) + rm_rf $DOCUMENTATION_BUILD mv "debug.txt", "Documentation" mv "Documentation", $DOCUMENTATION_BUILD @@ -133,6 +139,7 @@ end task :submodules do if executable_exists? "git" system %{git submodule init && git submodule update} + rake abort if ($? != 0) else puts "Git not installed" rake abort diff --git a/Tools/Rake/lib/objective-j/bundletask.rb b/Tools/Rake/lib/objective-j/bundletask.rb index eeee33003..5fe26e939 100644 --- a/Tools/Rake/lib/objective-j/bundletask.rb +++ b/Tools/Rake/lib/objective-j/bundletask.rb @@ -390,6 +390,7 @@ module ObjectiveJ puts str end end + rake abort if ($? != 0) end { 'copy' => include_nibs, 'copied_resources' => [copied_resource] } @@ -424,6 +425,7 @@ module ObjectiveJ puts str end end + rake abort if ($? != 0) end enhance([frameworks_path]) @@ -510,6 +512,7 @@ module ObjectiveJ puts str end end + rake abort if ($? != 0) end BundleTask.compact(build_path) if needs_compact diff --git a/Tools/capp/Templates/ThemeDescriptor/Rakefile b/Tools/capp/Templates/ThemeDescriptor/Rakefile index c88a1aeae..9421af8e1 100644 --- a/Tools/capp/Templates/ThemeDescriptor/Rakefile +++ b/Tools/capp/Templates/ThemeDescriptor/Rakefile @@ -16,6 +16,7 @@ file_d $BLEND_PRODUCT => ['ThemeDescriptors.j'] do puts str end end + rake abort if ($? != 0) end task :default => [$BLEND_PRODUCT] diff --git a/common.rb b/common.rb index 1ae320f40..eeb3ac534 100644 --- a/common.rb +++ b/common.rb @@ -77,8 +77,8 @@ end def subrake(directories, task_name) directories.each do |directory| if (File.directory?(directory) && File.file?(File.join(directory, "Rakefile"))) - ok = system(%{cd #{directory} && #{$serialized_env} #{$0} #{task_name}}) - rake abort unless ok + system(%{cd #{directory} && #{$serialized_env} #{$0} #{task_name}}) + rake abort if ($? != 0) else puts "warning: subrake missing: " + directory +" (this is not necessarily an error, "+directory+" may be optional)" end @@ -147,4 +147,5 @@ task :clobberall => ['clobber-all'] def spawn_rake(task_name) system %{#{$serialized_env} #{$0} #{task_name}} + rake abort if ($? != 0) end From 0876653ae3fe9016ef950fd640bb0a1762bf82c1 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 29 Jul 2009 19:06:06 -0700 Subject: [PATCH 134/244] Only include debug.js in DEBUG mode for Objective-J. Reviewed by me. --- Objective-J/Rakefile | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/Objective-J/Rakefile b/Objective-J/Rakefile index f0f1782ac..c57bb8edc 100644 --- a/Objective-J/Rakefile +++ b/Objective-J/Rakefile @@ -17,18 +17,11 @@ $RHINO_FILE = File.join($PRODUCT, 'rhino.platform', 'Objective-J.js' task :Products => [$BROWSER_FILE, $RHINO_FILE, $LICENSE_PRODUCT] -Files = [ 'constants.js', - 'utilities.js', - 'json2.js', - 'runtime.js', - 'dictionary.js', - 'plist.js', - 'file.js', - 'exception.js', - 'preprocess.js', - 'evaluate.js', - 'debug.js', - 'bootstrap.js']; +Files = FileList['constants.js', 'utilities.js', 'json2.js', 'runtime.js', 'dictionary.js', 'plist.js', 'file.js', 'exception.js', 'preprocess.js', 'evaluate.js', 'bootstrap.js'] + +if $CONFIGURATION == 'Debug' + Files.add('debug.js') +end file_d $BROWSER_FILE => Files do |t| build_product(t.name, platform_flags(ObjectiveJ::Platform::Browser, ObjectiveJ::Platform::ObjJ)) From 2bb6da51327d27dd51d1b30c53729cd1e5761ddb Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Wed, 29 Jul 2009 19:21:17 -0700 Subject: [PATCH 135/244] Undoing this so Ross stops complaining. --- Tools/Rake/lib/objective-j/bundletask.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/Rake/lib/objective-j/bundletask.rb b/Tools/Rake/lib/objective-j/bundletask.rb index 5fe26e939..95b77e138 100644 --- a/Tools/Rake/lib/objective-j/bundletask.rb +++ b/Tools/Rake/lib/objective-j/bundletask.rb @@ -390,7 +390,7 @@ module ObjectiveJ puts str end end - rake abort if ($? != 0) + #rake abort if ($? != 0) end { 'copy' => include_nibs, 'copied_resources' => [copied_resource] } From 3b8664e6ff977308ef67769de873f5ab27fa993c Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Wed, 29 Jul 2009 19:23:32 -0700 Subject: [PATCH 136/244] Disable typechecking by default --- Objective-J/debug.js | 107 -------------------------------------- Objective-J/preprocess.js | 8 ++- 2 files changed, 6 insertions(+), 109 deletions(-) diff --git a/Objective-J/debug.js b/Objective-J/debug.js index fddd7fed7..bd23ab7ae 100644 --- a/Objective-J/debug.js +++ b/Objective-J/debug.js @@ -182,110 +182,3 @@ function objj_debug_typecheck(expectedType, object) throw ("expected=" + expectedType + ", actual=" + actualType); } - -// profile decorator -/* -function objj_debug_profile(msgSend) -{ - return function(aReceiverOrSuper, aSelector) - { - var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper); - - // profiling book keeping - var profileRecord = { - parent : objj_debug_profile, - receiver : aReceiver && GETMETA(aReceiver).name, - selector : aSelector, - calls : [] - } - objj_debug_profile.calls.push(profileRecord); - objj_debug_profile = profileRecord; - profileRecord.start = new Date(); - - try - { - return msgSend.apply(null, arguments); - } - finally - { - profileRecord.end = new Date(); - objj_debug_profile = profileRecord.parent; - } - } -} - -// FIXME: This could be much better. -var objj_debug_backtrace; - -function objj_backtrace_set_enabled(enabled) -{ - if (enabled) - { - objj_debug_backtrace = []; - objj_msgSend = objj_msgSend_Backtrace; - objj_msgSendSuper = objj_msgSendSuper_Backtrace; - } - else - { - objj_msgSend = objj_msgSend_Standard; - objj_msgSendSuper = objj_msgSendSuper_Standard; - } -} - -function objj_debug_print_backtrace() -{ - alert(objj_debug_backtrace_string()); -} - -function objj_debug_backtrace_string() -{ - return objj_debug_backtrace ? objj_debug_backtrace.join("\n") : ""; -} - -var objj_debug_profile = null, - objj_currently_profiling = false, - objj_profile_cleanup; - -function objj_profile(title) -{ - if (objj_currently_profiling) - return; - - var objj_msgSend_profile_saved = objj_msgSend, - objj_msgSendSuper_profile_saved = objj_msgSendSuper; - - objj_msgSend = objj_msgSend_Profile; - objj_msgSendSuper = objj_msgSendSuper_Profile; - - var root = { calls: [] }; - objj_debug_profile = root; - - var context = { - start : new Date(), - title : title, - profile : root - }; - - objj_profile_cleanup = function() { - objj_msgSend = objj_msgSend_profile_saved; - objj_msgSendSuper = objj_msgSendSuper_profile_saved; - context.end = new Date(); - return context; - } - - objj_currently_profiling = true; -} - -function objj_profileEnd() -{ - if (!objj_currently_profiling) - return; - - objj_debug_profile = null; - objj_currently_profiling = false; - - return objj_profile_cleanup(); -} -*/ - -objj_msgSend_set_decorators(objj_typecheck_decorator, objj_backtrace_decorator); diff --git a/Objective-J/preprocess.js b/Objective-J/preprocess.js index 0dd3cc93f..07de33827 100644 --- a/Objective-J/preprocess.js +++ b/Objective-J/preprocess.js @@ -20,7 +20,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -var OBJJ_PREPROCESSOR_DEBUG_SYMBOLS = 1 << 0; +var OBJJ_PREPROCESSOR_DEBUG_SYMBOLS = 1 << 0, + OBJJ_PREPROCESSOR_TYPE_SIGNATURES = 1 << 1; function objj_preprocess(/*String*/ aString, /*objj_bundle*/ aBundle, /*objj_file*/ aSourceFile, /*unsigned*/ flags) { @@ -669,7 +670,10 @@ objj_preprocessor.prototype.method = function(tokens) CONCAT(buffer, ")\n{ with(self)\n{"); CONCAT(buffer, this.preprocess(tokens, NULL, TOKEN_CLOSE_BRACE, TOKEN_OPEN_BRACE)); - CONCAT(buffer, "}\n},"+JSON.stringify(types)+")"); + CONCAT(buffer, "}\n}"); + if (this._flags & OBJJ_PREPROCESSOR_TYPE_SIGNATURES) + CONCAT(buffer, ","+JSON.stringify(types)); + CONCAT(buffer, ")"); return buffer; } From 0c349a8d7f67b185747290595dbd666fb841408d Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Wed, 29 Jul 2009 20:23:40 -0700 Subject: [PATCH 137/244] Add option to enable type checking in index-debug.html. --- Objective-J/debug.js | 4 ++-- Objective-J/preprocess.js | 3 ++- .../capp/Templates/Application/index-debug.html | 17 ++++++++++++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Objective-J/debug.js b/Objective-J/debug.js index bd23ab7ae..2c7624464 100644 --- a/Objective-J/debug.js +++ b/Objective-J/debug.js @@ -106,7 +106,7 @@ function objj_typecheck_decorator(msgSend) objj_typechecks_reported[key] = true; objj_fprintf(warning_stream, "Type check failed on argument " + (i-2) + " of " + objj_debug_message_format(aReceiver, aSelector) + ": " + e); if (objj_typecheck_prints_backtrace) - objj_backtrace_fprint(warning_stream); + objj_backtrace_print(warning_stream); } } } @@ -124,7 +124,7 @@ function objj_typecheck_decorator(msgSend) objj_typechecks_reported[key] = true; objj_fprintf(warning_stream, "Type check failed on return val of " + objj_debug_message_format(aReceiver, aSelector) + ": " + e); if (objj_typecheck_prints_backtrace) - objj_backtrace_fprint(warning_stream); + objj_backtrace_print(warning_stream); } } diff --git a/Objective-J/preprocess.js b/Objective-J/preprocess.js index 07de33827..ad96215f9 100644 --- a/Objective-J/preprocess.js +++ b/Objective-J/preprocess.js @@ -671,7 +671,8 @@ objj_preprocessor.prototype.method = function(tokens) CONCAT(buffer, ")\n{ with(self)\n{"); CONCAT(buffer, this.preprocess(tokens, NULL, TOKEN_CLOSE_BRACE, TOKEN_OPEN_BRACE)); CONCAT(buffer, "}\n}"); - if (this._flags & OBJJ_PREPROCESSOR_TYPE_SIGNATURES) + // TODO: actually use OBJJ_PREPROCESSOR_TYPE_SIGNATURES flag instead of tying to OBJJ_PREPROCESSOR_DEBUG_SYMBOLS + if (this._flags & OBJJ_PREPROCESSOR_DEBUG_SYMBOLS) //OBJJ_PREPROCESSOR_TYPE_SIGNATURES) CONCAT(buffer, ","+JSON.stringify(types)); CONCAT(buffer, ")"); diff --git a/Tools/capp/Templates/Application/index-debug.html b/Tools/capp/Templates/Application/index-debug.html index 5ebc00c9a..54b8f7fbe 100644 --- a/Tools/capp/Templates/Application/index-debug.html +++ b/Tools/capp/Templates/Application/index-debug.html @@ -21,7 +21,22 @@ - + + +