From d7b5382c32e85add3367a631cb6de2aaf48c3db0 Mon Sep 17 00:00:00 2001 From: Sergio Felix Date: Mon, 13 May 2013 01:02:50 -0500 Subject: [PATCH 001/278] Fixed: CPTabView will now update its tabs labels when the layoutSubviews method is called. Fixes 1926 --- AppKit/CPTabView.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index b6874a01b..e2c0cb983 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -379,6 +379,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, [_box setFrame:CGRectMake(0, origin, CGRectGetWidth(aFrame), CGRectGetHeight(aFrame) - segmentedHeight / 2)]; + [self _updateItems]; [self _repositionTabs]; } } From 8d7c47a5e4c729f4b981d1551d77be639c68c403 Mon Sep 17 00:00:00 2001 From: "Glenn L. Austin" Date: Fri, 28 Jun 2013 10:26:44 -0700 Subject: [PATCH 002/278] Fixed: Remove explicit use of Mac OS X 10.5 SDK, replace with "latest OS X" The fontinfo and imagesize Xcode projects still explicitly refer to using the Mac OS X 10.5 SDK, while all other Xcode projects simply refer to the latest Mac OS X SDK, with no explicit OS version. This change modifies these two projects to mirror other Xcode projects in the project. Fixes #1957 --- Tools/fontinfo/fontinfo.xcodeproj/project.pbxproj | 5 ++--- Tools/imagesize/imagesize.xcodeproj/project.pbxproj | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Tools/fontinfo/fontinfo.xcodeproj/project.pbxproj b/Tools/fontinfo/fontinfo.xcodeproj/project.pbxproj index 87275d658..942253827 100644 --- a/Tools/fontinfo/fontinfo.xcodeproj/project.pbxproj +++ b/Tools/fontinfo/fontinfo.xcodeproj/project.pbxproj @@ -172,7 +172,7 @@ ); PREBINDING = NO; PRODUCT_NAME = fontinfo; - SDKROOT = macosx10.5; + SDKROOT = macosx; SYMROOT = "$(CAPP_BUILD)/Debug/CommonJS/cappuccino/bin"; }; name = Debug; @@ -186,7 +186,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = fontinfo; - SDKROOT = macosx10.5; + SDKROOT = macosx; }; name = Release; }; @@ -199,7 +199,6 @@ E1D3CF6E12AFEE3900CBB79E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = 10.5; }; name = Release; }; diff --git a/Tools/imagesize/imagesize.xcodeproj/project.pbxproj b/Tools/imagesize/imagesize.xcodeproj/project.pbxproj index 6aaea8579..3a8193e9b 100644 --- a/Tools/imagesize/imagesize.xcodeproj/project.pbxproj +++ b/Tools/imagesize/imagesize.xcodeproj/project.pbxproj @@ -170,7 +170,6 @@ ); PREBINDING = NO; PRODUCT_NAME = imagesize; - SDKROOT = macosx10.5; SYMROOT = "$(CAPP_BUILD)/Debug/CommonJS/cappuccino/bin"; }; name = Debug; @@ -187,7 +186,6 @@ ONLY_ACTIVE_ARCH = NO; PREBINDING = NO; PRODUCT_NAME = imagesize; - SDKROOT = macosx10.5; }; name = Release; }; @@ -201,7 +199,6 @@ E1D3CF6E12AFEE3900CBB79E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = 10.5; PRODUCT_NAME = imagesize; }; name = Release; From d176dd06239bebf3c5b1157d3e713c8b71eb06f5 Mon Sep 17 00:00:00 2001 From: Udo Schneider Date: Sat, 7 Dec 2013 13:19:00 +0100 Subject: [PATCH 003/278] Fixed: CPNumber>>numberWithBool: breaks CPComparisonPredicate Commit df2be92 breaks CPComparisonPredicate if one side of the comparison is a property which returns a BOOL. CPPredicateParser parses literal BOOLs (YES/NO) into 0/1 using CPNumber>>numberWithBool:. CPComparisonPredicate however does not cast a BOOL from a property using numberWithBool:. E.g. [[YES,NO] filteredArrayUsingPredicate:[CPPredicate predicateWithFormat:'self = YES']] used to return [true], now it returns []. This fix addresses the issue by "typecasting" the lhs/rhs values to numbers using CPNumber>>numberWithBool: if they are of type boolean. Fixes #2028 --- Foundation/CPPredicate/CPComparisonPredicate.j | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Foundation/CPPredicate/CPComparisonPredicate.j b/Foundation/CPPredicate/CPComparisonPredicate.j index a7843308e..f2cfb3172 100644 --- a/Foundation/CPPredicate/CPComparisonPredicate.j +++ b/Foundation/CPPredicate/CPComparisonPredicate.j @@ -374,6 +374,9 @@ var CPComparisonPredicateModifier, var leftValue = [_left expressionValueWithObject:object context:variables], rightValue = [_right expressionValueWithObject:object context:variables]; + leftValue = (typeof leftValue == "boolean") ? [CPNumber numberWithBool:leftValue] : leftValue; + rightValue = (typeof rightValue == "boolean") ? [CPNumber numberWithBool:rightValue] : rightValue; + if (_modifier == CPDirectPredicateModifier) return [self _evaluateValue:leftValue rightValue:rightValue]; else From a1ea371c732edce4e4ad57a86e8a6c4d03507b07 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 10 Jan 2014 12:26:52 +0100 Subject: [PATCH 004/278] NEW: CPCoding for CPAttributedString --- Foundation/CPAttributedString.j | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index beee46e8d..799e34d07 100644 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -816,6 +816,42 @@ //do nothing (says cocotron and gnustep) } +- (id)initWithCoder:(id)aCoder +{ + self = [self init]; + if (self != nil) + { + _string=[aCoder decodeObjectForKey:"_string"]; + var decoded_ranges = [aCoder decodeObjectForKey:"ranges"], + decoded_attribs = [aCoder decodeObjectForKey:"attributes"]; + _rangeEntries=[]; + + var i, l= decoded_ranges.length; + for(i = 0; i < l; i++) + { + _rangeEntries.push(makeRangeEntry(decoded_ranges[i], decoded_attribs[i])); + } + } + return self; +} + +- (void)encodeWithCoder:(id)aCoder +{ + [aCoder encodeObject:_string forKey:"_string"]; + + var ranges_for_encoding = [], + dicts_for_encoding = []; + + var i, l = _rangeEntries.length; + for(i = 0; i < l; i++) + { + ranges_for_encoding.push(_rangeEntries[i].range); + dicts_for_encoding.push(_rangeEntries[i].attributes); + } + [aCoder encodeObject:ranges_for_encoding forKey:"ranges"]; + [aCoder encodeObject:dicts_for_encoding forKey:"attributes"]; +} + @end /*! From 93b48ba9731184e582c1fa7be5cb58a7cb090815 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 17 Jan 2014 09:51:46 +0100 Subject: [PATCH 005/278] Fixed: support for dates (CPDatePicker) in CPPredicateEditor Before this commit, row templates and views belo,ging to them were copied via archiving/unarchiving. This was causing problems when the view was not completely CPCoding compliant, like for CPDatePicker. With this commit, template views use CPCopying (-copy method) when available. Also added CPCopying for CPDatePicker as a category in CPPredicateEditor. Test: in CPPredicateEditorTest, on the right panel, choose a keypath, operator, and select 'Dates' in the popup for the right expression. Fixes #2041 --- .../CPPredicateEditorRowTemplate.j | 62 +- .../CPPredicateEditorCibTest/AppController.j | 8 +- .../Resources/MainMenu.cib | 2 +- .../Resources/MainMenu.xib | 6096 +++-------------- 4 files changed, 992 insertions(+), 5176 deletions(-) diff --git a/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j b/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j index d34bfef58..194d27e56 100644 --- a/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j +++ b/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j @@ -27,8 +27,7 @@ @import "CPMenuItem.j" @import "CPTextField.j" -// NOTE: CPDatePicker is not implemented yet -@class CPDatePicker +@import "CPDatePicker.j" CPUndefinedAttributeType = 0; @@ -488,7 +487,36 @@ CPTransformableAttributeType = 1800; - (id)copy { - return [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:self]]; + var views = [CPArray array]; + + var copy = [[[self class] alloc] init]; + [copy _setTemplateType:_templateType]; + [copy _setOptions:_predicateOptions]; + [copy _setModifier:_predicateModifier]; + [copy _setLeftAttributeType:_leftAttributeType]; + [copy _setRightAttributeType:_rightAttributeType]; + [copy setLeftIsWildcard:_leftIsWildcard]; + [copy setRightIsWildcard:_rightIsWildcard]; + + [_views enumerateObjectsUsingBlock:function(aView, idx, stop) + { + var vcopy; + + if ([aView implementsSelector:@selector(copy)]) + { + vcopy = [aView copy]; + } + else + { + vcopy = [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:aView]]; + } + + [views addObject:vcopy]; + }]; + + [copy setTemplateViews:views]; + + return copy; } + (id)_operatorsForAttributeType:(CPAttributeType)attributeType @@ -680,7 +708,7 @@ CPTransformableAttributeType = 1800; view = [[CPCheckBox alloc] initWithFrame:CGRectMake(0, 0, 50, 26)]; } else if (attributeType == CPDateAttributeType) - view = [[CPDatePicker alloc] initWithFrame:CGRectMake(0, 0, 150, 26)]; + view = [[CPDatePicker alloc] initWithFrame:CGRectMake(0, 0, 180, 26)]; else return nil; @@ -797,5 +825,31 @@ var CPPredicateTemplateTypeKey = @"CPPredicateTemplateType", [coder encodeObject:_views forKey:CPPredicateTemplateViewsKey]; } +@end + +// Copy support for built-in types +@implementation CPDatePicker (CPCopying) + +- (id)copy +{ + var ret = [[[self class] alloc] initWithFrame:[self frame]]; + + [ret setTextFont:[self textFont]]; + [ret setMinDate:[self minDate]]; + [ret setMaxDate:[self maxDate]]; + [ret setTimeInterval:[self timeInterval]]; + [ret setDatePickerMode:[self datePickerMode]]; + [ret setDatePickerElements:[self datePickerElements]]; + [ret setDatePickerStyle:[self datePickerStyle]]; + [ret setLocale:[self locale]]; + [ret setDateValue:[self dateValue]]; + [ret setBackgroundColor:[self backgroundColor]]; + [ret setDrawsBackground:[self drawsBackground]]; + [ret setBordered:[self isBordered]]; + [ret _init]; + + return ret; +} + @end /*! @endcond */ diff --git a/Tests/Manual/CPPredicateEditorCibTest/AppController.j b/Tests/Manual/CPPredicateEditorCibTest/AppController.j index d648e7f74..4a46e8bc0 100644 --- a/Tests/Manual/CPPredicateEditorCibTest/AppController.j +++ b/Tests/Manual/CPPredicateEditorCibTest/AppController.j @@ -13,7 +13,7 @@ { CPWindow window; CPPredicateEditor predicateEditor; - + CPTableView leftTable; CPTableView rightTable; CPPopUpButton rightExpressionsType; @@ -28,7 +28,7 @@ + (void)initialize { var transformer = [[PredicateTransformer alloc] init]; - [CPValueTransformer setValueTransformer:transformer forName:@"PredicateTransformer"]; + [CPValueTransformer setValueTransformer:transformer forName:@"PredicateTransformer"]; } - (void)awakeFromCib @@ -109,7 +109,7 @@ template = [[CPPredicateEditorRowTemplate alloc] initWithLeftExpressions:leftExpressions rightExpressionAttributeType:CPStringAttributeType modifier:0 operators:operators options:0]; else if (type == 1) template = [[CPPredicateEditorRowTemplate alloc] initWithLeftExpressions:leftExpressions rightExpressionAttributeType:CPInteger16AttributeType modifier:0 operators:operators options:0]; - else if (type ==2) + else if (type == 2) { var rightExpressions = [CPMutableArray array], count = [rightConstants count]; @@ -121,6 +121,8 @@ template = [[CPPredicateEditorRowTemplate alloc] initWithLeftExpressions:leftExpressions rightExpressions:rightExpressions modifier:0 operators:operators options:0]; } + else if (type == 3) + template = [[CPPredicateEditorRowTemplate alloc] initWithLeftExpressions:leftExpressions rightExpressionAttributeType:CPDateAttributeType modifier:0 operators:operators options:0]; var templates = [[predicateEditor rowTemplates] arrayByAddingObject:template]; [predicateEditor setRowTemplates:templates]; diff --git a/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.cib b/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.cib index 9977f32bf..ae37f3145 100644 --- a/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.cib +++ b/Tests/Manual/CPPredicateEditorCibTest/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;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;27E;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;2;38E;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;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;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;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;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;104E;D;K;6;CP$UIDd;3;105E;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;106E;D;K;6;CP$UIDd;3;108E;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;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;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;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;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;231E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;240E;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;262E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;1;0E;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;1;0E;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;1;0E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;151E;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;152E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;108E;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;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;291E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;301E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;302E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;297E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;295E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;297E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;267E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;297E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;240E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;297E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;291E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;297E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;276E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;297E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;264E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;297E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;231E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;240E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;267E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;267E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;276E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;276E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;313E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;118E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;176E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;170E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;319E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;172E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;321E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;322E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;323E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;175E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;324E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;325E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;106E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;327E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;329E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;330E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;331E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;333E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;334E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;336E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;337E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;339E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;341E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;342E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;343E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;183E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;345E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;346E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;347E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;348E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;349E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;222E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;350E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;223E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;351E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;224E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;352E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;225E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;227E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;354E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;228E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;355E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;229E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;357E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;216E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;358E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;218E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;219E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;360E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;210E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;361E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;362E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;212E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;363E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;213E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;364E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;214E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;365E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;205E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;206E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;367E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;207E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;368E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;370E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;371E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;372E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;262E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;240E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;373E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;272E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;374E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;285E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;283E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;282E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;284E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;287E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;288E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;286E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;291E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;376E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;280E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;377E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;289E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;295E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;297E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;378E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;103E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;240E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;299E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;379E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;380E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;381E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;383E;E;D;K;6;$classD;K;6;CP$UIDd;3;103E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;296E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;299E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;379E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;380E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;381E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;301E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;385E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;386E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;387E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;388E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;391E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;392E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;397E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;399E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;400E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;117E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;400E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;401E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;402E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;403E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;404E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;405E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;407E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;410E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;411E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;411E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;412E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;413E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;414E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;405E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;415E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;416E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;416E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;417E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;419E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;134E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;420E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;421E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;422E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;423E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;424E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;425E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;426E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;427E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;428E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;429E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;430E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;431E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;432E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;434E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;435E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;145E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;436E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;437E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;439E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;440E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;435E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;441E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;442E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;443E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;444E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;445E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;448E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;449E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;145E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;451E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;452E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;152E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;452E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;453E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;454E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;456E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;457E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;458E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;460E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;460E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;461E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;462E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;162E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;464E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;465E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;451E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;448E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;439E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;440E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;435E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;469E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;167E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;469E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;470E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;471E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;472E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;473E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;474E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;435E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;475E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;476E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;478E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;479E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;480E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;481E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;174E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;481E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;482E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;483E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;484E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;174E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;485E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;486E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;435E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;487E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;488E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;489E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;182E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;490E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;491E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;492E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;182E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;493E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;415E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;182E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;495E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;186E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;495E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;496E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;497E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;497E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;498E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;499E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;500E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;493E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;502E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;504E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;505E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;506E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;507E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;439E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;508E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;509E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;510E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;511E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;512E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;198E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;512E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;513E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;514E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;515E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;516E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;517E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;518E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;518E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;519E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;514E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;515E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;520E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;521E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;209E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;522E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;514E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;523E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;524E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;525E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;526E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;527E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;528E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;529E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;432E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;415E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;530E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;430E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;415E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;531E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;389E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;221E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;531E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;532E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;533E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;221E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;534E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;535E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;221E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;536E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;537E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;538E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;221E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;539E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;393E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;540E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;541E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;221E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;432E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;542E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;543E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;221E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;430E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;542E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;230E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;544E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;545E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;546E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;547E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;548E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;549E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;388E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;233E;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;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;551E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;552E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;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;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;554E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;555E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;556E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;558E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;560E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;237E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;238E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;561E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;393E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;395E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;393E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;562E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;447E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;550E;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;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;235E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;563E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;564E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;235E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;568E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;235E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;569E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;550E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;393E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;570E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;235E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;571E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;572E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;235E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;568E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;235E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;573E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;550E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;395E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;450E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPPredicateEditorK;8;$classesA;S;17;CPPredicateEditorS;12;CPRuleEditorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;239E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;560E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;574E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;574E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;575E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;560E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;577E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;3;393E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;3;395E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;3;393E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;3;578E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;3;579E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;3;439E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;3;580E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;3;581E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;3;582E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;3;583E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;3;584E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;3;585E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;1;0E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;3;586E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;3;588E;K;20;CPPredicateTemplatesD;K;6;CP$UIDd;3;589E;E;D;K;10;$classnameS;28;CPPredicateEditorRowTemplateK;8;$classesA;S;28;CPPredicateEditorRowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;241E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;447E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;550E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;550E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;550E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;550E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;395E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;395E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;590E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;591E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;592E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;243E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;447E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;594E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;243E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;450E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;595E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;596E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;246E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;241E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;450E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;550E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;550E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;550E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;597E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;395E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;393E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;598E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;599E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;600E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;249E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;602E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;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;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;249E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;604E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;605E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;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;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;252E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;510E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;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;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;252E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;608E;E;D;K;6;$classD;K;6;CP$UIDd;3;241E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;450E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;550E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;550E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;550E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;609E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;395E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;393E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;610E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;611E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;612E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;613E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;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;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;614E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;615E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;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;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;447E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;617E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;618E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;619E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;620E;K;16;$aimage-positionD;K;6;CP$UIDd;3;550E;K;6;$afontD;K;6;CP$UIDd;3;622E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;447E;K;7;$aimageD;K;6;CP$UIDd;3;624E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;450E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;508E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;625E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;550E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;550E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;5;CPBoxK;8;$classesA;S;5;CPBoxS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;263E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;626E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;627E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;628E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;629E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;550E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$acontent-marginD;K;6;CP$UIDd;3;632E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;550E;K;14;$aborder-widthD;K;6;CP$UIDd;3;550E;K;18;$abackground-colorD;K;6;CP$UIDd;3;634E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;510E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;450E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;635E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;550E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;637E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;638E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;639E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;558E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;640E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;271E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;270E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;561E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;393E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;393E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;393E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;641E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;447E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;550E;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;266E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;640E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;642E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;642E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;640E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;643E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;644E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;12;$agrid-colorD;K;6;CP$UIDd;3;645E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;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;646E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;647E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;550E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;510E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;395E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;393E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;393E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;393E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;393E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;648E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;645E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;550E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;393E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;268E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;649E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;650E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;651E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;653E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;654E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;439E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;395E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;393E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;265E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;655E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;656E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;265E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;568E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;265E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;573E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;550E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;395E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;657E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;265E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;658E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;659E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;265E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;568E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;265E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;569E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;550E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;393E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;660E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;661E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;662E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;619E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;620E;K;16;$aimage-positionD;K;6;CP$UIDd;3;550E;K;6;$afontD;K;6;CP$UIDd;3;622E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;447E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;450E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;508E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;625E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;550E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;550E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;663E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;638E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;664E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;558E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;665E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;274E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;275E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;561E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;561E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;393E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;393E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;393E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;666E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;447E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;550E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;273E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;658E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;659E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;273E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;568E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;273E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;569E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;550E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;393E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;660E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;273E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;655E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;656E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;273E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;568E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;273E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;573E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;550E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;395E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;657E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;266E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;665E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;642E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;642E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;665E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;643E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;644E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;12;$agrid-colorD;K;6;CP$UIDd;3;645E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;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;646E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;647E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;550E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;510E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;395E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;393E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;393E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;393E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;393E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;667E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;645E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;550E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;393E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;268E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;649E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;650E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;651E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;668E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;669E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;439E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;395E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;393E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;670E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;671E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;447E;K;11;$aalignmentD;K;6;CP$UIDd;3;510E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;393E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;674E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;675E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;395E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;395E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;395E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;676E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;447E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;510E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;677E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;662E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;619E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;620E;K;16;$aimage-positionD;K;6;CP$UIDd;3;550E;K;6;$afontD;K;6;CP$UIDd;3;622E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;447E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;450E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;508E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;625E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;550E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;550E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;281E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;678E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;679E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;680E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$aimage-positionD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;682E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;450E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;450E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;281E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;565E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;683E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;684E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$aimage-positionD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;685E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;450E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;450E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;281E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;686E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;687E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;688E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$aimage-positionD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;689E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;450E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;450E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;281E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;447E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;690E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;688E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$aimage-positionD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;691E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;450E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;450E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;281E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;692E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;693E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;694E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$aimage-positionD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;695E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;450E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;450E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;281E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;510E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;696E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;688E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$aimage-positionD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;697E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;450E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;450E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;281E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;608E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;698E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;684E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$aimage-positionD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;699E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;450E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;450E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;281E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;700E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;688E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;16;$aimage-positionD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;701E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;450E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;450E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;290E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;636E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;300E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;702E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;703E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;636E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;704E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;705E;K;6;$afontD;K;6;CP$UIDd;3;622E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;510E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;550E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;706E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;550E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;447E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;707E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;291E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;300E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;708E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;291E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;300E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;709E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;291E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;450E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;300E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;710E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;711E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;629E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;619E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;712E;K;16;$aimage-positionD;K;6;CP$UIDd;3;550E;K;6;$afontD;K;6;CP$UIDd;3;622E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;550E;K;11;$aalignmentD;K;6;CP$UIDd;3;447E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;450E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;510E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;713E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;394E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;395E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;625E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;550E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;393E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;550E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;550E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;714E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;715E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;716E;K;6;$afontD;K;6;CP$UIDd;3;673E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;447E;K;11;$aalignmentD;K;6;CP$UIDd;3;510E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;394E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;675E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;393E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;393E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;393E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;643E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;447E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;510E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;717E;E;D;K;10;$classnameS;18;CPObjectControllerK;8;$classesA;S;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;298E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;718E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;393E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;393E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;719E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;720E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;231E;E;E;S;8;delegateS;11;addTemplateS;9;leftTableS;15;predicateEditorS;20;rightExpressionsTypeS;10;rightTableS;11;templateBoxS;6;windowS;10;dataSourceS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;7;addRow:S;15;addLeftKeyPath:S;16;updateOperators:S;25;selectRightAttributeType:S;17;addRightConstant:S;12;addTemplate:S;26;value: selection.predicateS;5;valueS;19;selection.predicateD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;382E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;382E;K;10;CP.objectsD;K;22;CPValueTransformerNameD;K;6;CP$UIDd;3;721E;K;27;CPConditionallySetsEditableD;K;6;CP$UIDd;3;395E;K;38;CPAllowsEditingMultipleValuesSelectionD;K;6;CP$UIDd;3;395E;E;E;S;9;AMainMenuS;11;_CPMainMenuD;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;3;166E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;130E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;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;126E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;121E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;143E;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;140E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;157E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;147E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;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;3;154E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;156E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;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;159E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;170E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;6;Print…S;1;pS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;175E;E;E;S;10;Clear MenuS;13;Page Setup...S;1;PS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;220E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;203E;D;K;6;CP$UIDd;3;208E;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;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{335, 77}, {960, 534}}S;22;{{0, 0}, {1680, 1028}}d;2;15d;1;0S;20;{{0, 0}, {960, 534}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;295E;E;E;S;6;normalS;22;{{20, 74}, {611, 164}}S;20;{{0, 0}, {611, 164}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;560E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;562E;E;E;d;2;36S;10;scrollviewD;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;559E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;235E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;722E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;574E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;723E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;235E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;724E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;240E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;232E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;235E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;725E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;235E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;E;S;21;{{336, 79}, {15, 84}}S;18;{{0, 0}, {15, 84}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;27;_verticalScrollerDidScroll:f;17;0.977011501789093S;24;{{-100, 249}, {360, 15}}S;19;{{0, 0}, {360, 15}}S;29;_horizontalScrollerDidScroll:S;20;{{0, 0}, {609, 162}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;727E;E;E;d;2;38S;11;rule-editord;2;75d;2;26S;14;format.stringsS;7;rowTypeS;8;criteriaS;13;displayValuesS;10;boundArrayS;7;subrowsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;33;_CPRuleEditorViewUnboundRowHolderK;8;$classesA;S;33;_CPRuleEditorViewUnboundRowHolderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;587E;K;12;CPBoundArrayD;K;6;CP$UIDd;3;728E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;255E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;729E;D;K;6;CP$UIDd;3;730E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;E;E;S;3;AnyS;17;_popUpItemAction:S;3;AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;247E;E;E;S;25;of the following are trued;3;700D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;731E;D;K;6;CP$UIDd;3;732E;D;K;6;CP$UIDd;3;733E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;E;E;S;6;stringD;K;10;$classnameS;20;_CPKeyPathExpressionK;8;$classesA;S;20;_CPKeyPathExpressionS;21;_CPFunctionExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;601E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;734E;K;11;CPArgumentsD;K;6;CP$UIDd;3;735E;K;9;CPOperandD;K;6;CP$UIDd;3;737E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;439E;E;S;5;mixedD;K;6;$classD;K;6;CP$UIDd;3;601E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;734E;K;11;CPArgumentsD;K;6;CP$UIDd;3;738E;K;9;CPOperandD;K;6;CP$UIDd;3;737E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;E;E;S;2;isS;7;matchesd;1;6d;3;300D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;739E;D;K;6;CP$UIDd;3;740E;D;K;6;CP$UIDd;3;741E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;E;E;S;6;numberD;K;6;$classD;K;6;CP$UIDd;3;601E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;734E;K;11;CPArgumentsD;K;6;CP$UIDd;3;742E;K;9;CPOperandD;K;6;CP$UIDd;3;737E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;601E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;734E;K;11;CPArgumentsD;K;6;CP$UIDd;3;743E;K;9;CPOperandD;K;6;CP$UIDd;3;737E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;260E;E;E;S;15;is greater thanS;22;{{599, 240}, {30, 25}}S;18;{{0, 0}, {30, 25}}S;6;buttonS;17;selected+borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;621E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;744E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;745E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;393E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;395E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;393E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;623E;K;4;nameD;K;6;CP$UIDd;3;746E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;747E;K;5;valueD;K;6;CP$UIDd;3;748E;E;d;2;14S;23;{{705, 36}, {234, 434}}S;20;{{0, 0}, {234, 434}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;636E;E;E;d;2;33S;3;boxD;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;631E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;749E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;633E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;750E;E;S;3;BoxD;K;6;$classD;K;6;CP$UIDd;3;232E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;264E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;806E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;807E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;808E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;264E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;768E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;E;S;20;{{9, 30}, {218, 97}}S;19;{{0, 0}, {218, 97}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;640E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;641E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;559E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;265E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;751E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;642E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;752E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;265E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;753E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;3;232E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;265E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;725E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;265E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;E;S;19;{{0, 0}, {216, 95}}D;K;6;$classD;K;6;CP$UIDd;3;633E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;754E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;633E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;755E;E;d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;269E;E;E;d;3;213d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;652E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;725E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;756E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;757E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;6;$afontD;K;6;CP$UIDd;3;758E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;550E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;394E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;758E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;550E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;510E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;725E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;759E;K;6;$afontD;K;6;CP$UIDd;3;760E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;510E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;447E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;15;$acontent-insetD;K;6;CP$UIDd;3;761E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;394E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;675E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;510E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;550E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;394E;E;S;21;{{1, -37}, {223, 15}}S;19;{{0, 0}, {223, 15}}f;18;0.9953917050691244S;23;{{224, -22}, {15, 102}}S;19;{{0, 0}, {15, 102}}f;18;0.9925373134328358S;20;{{8, 125}, {25, 25}}S;18;{{0, 0}, {25, 25}}S;21;{{9, 302}, {218, 97}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;666E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;559E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;273E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;550E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;751E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;642E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;762E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;273E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;565E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;753E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;3;232E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;273E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;725E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;273E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;277E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;652E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;725E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;763E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;757E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;553E;K;6;$afontD;K;6;CP$UIDd;3;758E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;550E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;394E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;758E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;550E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;510E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;725E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;759E;K;6;$afontD;K;6;CP$UIDd;3;764E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;510E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;447E;K;11;$aalignmentD;K;6;CP$UIDd;3;550E;K;15;$acontent-insetD;K;6;CP$UIDd;3;765E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;394E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;675E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;510E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;550E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;394E;E;S;20;{{10, 5}, {136, 17}}S;19;{{0, 0}, {136, 17}}S;9;textfieldD;K;6;$classD;K;6;CP$UIDd;3;621E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;744E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;745E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;395E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;395E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;393E;E;S;10;Key Paths:d;4;3072D;K;6;$classD;K;6;CP$UIDd;3;633E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;766E;E;S;20;{{7, 397}, {25, 25}}d;1;9S;22;{{144, 198}, {84, 21}}S;18;{{0, 0}, {84, 21}}S;9;check-boxS;9;Ends WithS;21;{{14, 198}, {96, 21}}S;18;{{0, 0}, {96, 21}}S;11;Begins Withd;1;5S;21;{{72, 172}, {33, 21}}S;18;{{0, 0}, {33, 21}}S;1;≠S;22;{{127, 172}, {33, 21}}S;1;>d;2;99S;22;{{144, 224}, {78, 21}}S;18;{{0, 0}, {78, 21}}S;8;ContainsS;21;{{14, 172}, {33, 21}}S;1;=S;21;{{14, 224}, {96, 21}}S;7;MatchesS;22;{{189, 172}, {33, 21}}S;1;d;2;99S;22;{{144, 224}, {78, 21}}S;18;{{0, 0}, {78, 21}}S;8;ContainsS;21;{{14, 172}, {33, 21}}S;1;=S;20;{{10, 5}, {136, 17}}S;19;{{0, 0}, {136, 17}}S;10;Key Paths:D;K;6;$classD;K;6;CP$UIDd;3;575E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;772E;E;S;21;{{9, 302}, {218, 97}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;712E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;232E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;292E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;739E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;739E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;292E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;559E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;559E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;401E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;294E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;295E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;668E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;739E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;739E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;773E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;764E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;555E;K;6;$afontD;K;6;CP$UIDd;3;765E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;559E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;559E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;401E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;400E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;767E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;768E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;769E;K;11;$aalignmentD;K;6;CP$UIDd;3;555E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;500E;K;6;$afontD;K;6;CP$UIDd;3;566E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;559E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;559E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;401E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;770E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;771E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;399E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;399E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;401E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;659E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;500E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;555E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{8, 125}, {25, 25}}D;K;6;$classD;K;6;CP$UIDd;3;567E;K;4;nameD;K;6;CP$UIDd;3;735E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;736E;K;5;valueD;K;6;CP$UIDd;3;737E;E;S;21;{{14, 224}, {96, 21}}S;7;MatchesS;22;{{189, 172}, {33, 21}}S;1; - - - 1060 - 11E53 - 851 - 1138.47 - 569.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 851 - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - AMainMenu - - - - NewApplication - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - NewApplication - - - - About NewApplication - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferences… - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - _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 - - - - New - n - 1048576 - 2147483647 - - - - - - Open… - o - 1048576 - 2147483647 - - - - - - Open Recent - - 1048576 - 2147483647 - - - submenuAction: - - Open Recent - - - - Clear Menu - - 1048576 - 2147483647 - - - - - _NSRecentDocumentsMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Close - w - 1048576 - 2147483647 - - - - - - Save - s - 1048576 - 2147483647 - - - - - - Save As… - S - 1179648 - 2147483647 - - - - - - Revert to Saved - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Page Setup... - P - 1179648 - 2147483647 - - - - - - - Print… - p - 1048576 - 2147483647 - - - - - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - Edit - - - - 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 - - - - Find… - 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 - - - - Show Spelling… - : - 1048576 - 2147483647 - - - - - - Check Spelling - ; - 1048576 - 2147483647 - - - - - - Check Spelling While Typing - - 1048576 - 2147483647 - - - - - - Check Grammar With Spelling - - 1048576 - 2147483647 - - - - - - - - - Substitutions - - 1048576 - 2147483647 - - - submenuAction: - - Substitutions - - - - Smart Copy/Paste - f - 1048576 - 2147483647 - - - 1 - - - - Smart Quotes - g - 1048576 - 2147483647 - - - 2 - - - - Smart Links - G - 1179648 - 2147483647 - - - 3 - - - - - - - Speech - - 1048576 - 2147483647 - - - submenuAction: - - Speech - - - - Start Speaking - - 1048576 - 2147483647 - - - - - - Stop Speaking - - 1048576 - 2147483647 - - - - - - - - - - - - Format - - 2147483647 - - - submenuAction: - - Format - - - - Font - - 2147483647 - - - submenuAction: - - Font - - - - 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 - - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Tighten - - 2147483647 - - - - - - Loosen - - 2147483647 - - - - - - - - - Ligature - - 2147483647 - - - submenuAction: - - Ligature - - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Use All - - 2147483647 - - - - - - - - - Baseline - - 2147483647 - - - submenuAction: - - Baseline - - - - 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 - - - - 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 - - - - Show Toolbar - t - 1572864 - 2147483647 - - - - - - Customize Toolbar… - - 1048576 - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - _NSWindowsMenu - - - - - Help - - 1048576 - 2147483647 - - - submenuAction: - - Help - - - - NewApplication Help - ? - 1048576 - 2147483647 - - - - - - - - _NSMainMenu - - - 15 - 2 - {{335, 417}, {960, 534}} - 1946157056 - Window - NSWindow - - - {1.7976931348623157e+308, 1.7976931348623157e+308} - - - 256 - - - - 268 - {{601, 264}, {30, 30}} - - - YES - - -2080244224 - 134217728 - + - - LucidaGrande - 13 - 1040 - - - -2038021889 - 134 - - LucidaGrande - 13 - 16 - - - - 400 - 75 - - - - - 270 - {{20, 478}, {611, 22}} - - - YES - - -1804468671 - 268436480 - - - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - 3 - MAA - - - - - - - 268 - - - - 2304 - - - - 294 - - - - 274 - - - - 290 - - - - 257 - {{581, 4}, {18, 18}} - - - -1 - YES - - 67239424 - 134348800 - + - - LucidaGrande-Bold - 12 - 16 - - - - add - - - - - _addOption: - - -2038284033 - 36 - - LucidaGrande - 12 - 4880 - - - 400 - 75 - - - - - -2147483391 - {{561, 4}, {18, 18}} - - - -1 - YES - - 67239424 - 134348800 - - - - - - remove - - - - - _deleteOption: - - -2038284033 - 36 - - - 400 - 75 - - - - - 256 - {{7, 4}, {58, 19}} - - - -1 - YES - - 67239488 - 4196352 - - LucidaGrande - 11 - 3088 - - - - -2038284033 - 36 - - LucidaGrande - 11 - 16 - - - 400 - 75 - - - Any - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - - YES - - - - - - - All - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - - 3 - YES - YES - 2 - - - - - 256 - {{71, 4}, {167, 19}} - - - -1 - YES - - 67239488 - 4196352 - - - -2038284033 - 36 - - - 400 - 75 - - - of the following are true - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - - - - - - - 3 - YES - YES - 2 - - - - {609, 26} - - - 0 - 0 - - - - - - - 2 - {{7, 4}, {58, 19}} - {{71, 4}, {167, 19}} - - - - - 2 - 0 - 0 - 0 - 0 - - - - - NO - NO - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PredicateTransformer - - - - - - 2 - {{7, 4}, {58, 19}} - {{71, 4}, {167, 19}} - - - 0 - 0 - YES - - - - 290 - - - - 257 - {{581, 4}, {18, 18}} - - - -1 - YES - - 67239424 - 134348800 - + - - - - add - - - - - _addOption: - - -2038284033 - 36 - - - 400 - 75 - - - - - 257 - {{561, 4}, {18, 18}} - - - -1 - YES - - 67239424 - 134348800 - - - - - - remove - - - - - _deleteOption: - - -2038284033 - 36 - - - 400 - 75 - - - - - 256 - {{37, 4}, {79, 19}} - - - -1 - YES - - 67239488 - 4196352 - - - 3 - valueForKey: - - 1 - - - - 10 - string - - - - - -2038284033 - 36 - - - 400 - 75 - - - string - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - - YES - - - - - - - mixed - - 1048576 - 2147483647 - - - _popUpItemAction: - - 3 - valueForKey: - - - - 10 - mixed - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + string + + + mixed + - - - - - - - 3 - YES - YES - 2 - - - - - 256 - {{122, 4}, {99, 19}} - - - -1 - YES - - 67239488 - 4196352 - - - - -2038284033 - 36 - - - 400 - 75 - - - is - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - - YES - - - - - - - matches - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - - 3 - YES - YES - 2 - - - - - 256 - {{227, 4}, {160, 18}} - - - YES - - 343014976 - 4326400 - - - - YES - - - 6 - System - controlTextColor - - - - - - {{0, 26}, {609, 26}} - - - 1 - 1 - - - - - - - - 3 - {{37, 4}, {79, 19}} - {{122, 4}, {99, 19}} - {{227, 4}, {160, 18}} - - - - - 1 - 0 - 0 - 0 - 700 - - - - - - NO - YES - - - - - - - - - - - - 3 - {{37, 4}, {79, 19}} - {{122, 4}, {99, 19}} - {{227, 4}, {160, 18}} - - - 0 - 0 - YES - - - - 290 - - - - 257 - {{581, 4}, {18, 18}} - - - -1 - YES - - 67239424 - 134348800 - + - - - - add - - - - - _addOption: - - -2038284033 - 36 - - - 400 - 75 - - - - - 257 - {{561, 4}, {18, 18}} - - - -1 - YES - - 67239424 - 134348800 - - - - - - remove - - - - - _deleteOption: - - -2038284033 - 36 - - - 400 - 75 - - - - - 256 - {{37, 4}, {74, 19}} - - - -1 - YES - - 67239488 - 4196352 - - - 3 - valueForKey: - - - - 10 - number - - - - - -2038284033 - 36 - - - 400 - 75 - - - number - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - - YES - - - - - - - mixed - - 1048576 - 2147483647 - - - _popUpItemAction: - - 3 - valueForKey: - - - - 10 - mixed - + + + + + + + string + + + + + mixed + + + + + + + + + + + + + + + + + + + + number + + + mixed + - - - - - - 3 - YES - YES - 2 - - - - - 256 - {{117, 4}, {82, 19}} - - - -1 - YES - - 67239488 - 4196352 - - - - -2038284033 - 36 - - - 400 - 75 - - - is greater than - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - - YES - - - - - - - 3 - YES - YES - 2 - - - - - 256 - {{205, 4}, {25, 18}} - - - YES - - 343014976 - 4326400 - - - - YES - - - - - - {{0, 52}, {609, 26}} - - - 2 - 1 - - - - - - - - 3 - {{37, 4}, {74, 19}} - {{117, 4}, {82, 19}} - {{205, 4}, {25, 18}} - - - - - 1 - 0 - 0 - 0 - 300 - - - - - - NO - YES - - - - - - - - - - - - 3 - {{37, 4}, {74, 19}} - {{117, 4}, {82, 19}} - {{205, 4}, {25, 18}} - - - 0 - 0 - YES - - - {609, 162} - - - - - - NSRuleEditorItemPBoardType - - {609, 162} - - - YES - 75 - 26 - format.strings - YES - NO - YES - 3 - rowType - subrows - criteria - displayValues - boundArray - NSMutableDictionary - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{1, 1}, {609, 162}} - - - - - 3 - MC45MTAwMDAwMjYyAA - - 4 - - - - -2147483392 - {{336, 1}, {15, 84}} - - - - _doScroller: - 0.97701150178909302 - - - - -2147483392 - {{-100, -100}, {360, 15}} - - - 1 - - _doScroller: - - - {{20, 296}, {611, 164}} - - - 133650 - - - - - - - 9 - - - - 274 - - - - 268 - {{9, 11}, {25, 25}} - - - YES - - -2080244224 - 134217728 - + - - - -2038152961 - 134 - - - 400 - 75 - - - - - 268 - - - - 2304 - - - - 256 - {216, 95} - - - YES - - - -2147483392 - {{224, 0}, {16, 17}} - - - - 213 - 40 - 1000 - - 75628096 - 2048 - - - - 3 - MC4zMzMzMzI5ODU2AA - - - 6 - System - headerTextColor - - - - - 337772096 - 2048 - Text Cell - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - - 3 - YES - YES - - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -692060160 - - - 4 - 15 - 0 - YES - 0 - 1 - - - {{1, 1}, {216, 95}} - - - - - 4 - - - - -2147483392 - {{224, 17}, {15, 102}} - - - - _doScroller: - 0.9925373134328358 - - - - -2147483392 - {{1, 119}, {223, 15}} - - - 1 - - _doScroller: - 0.99539170506912444 - - - {{9, 311}, {218, 97}} - - - 133682 - - - - QSAAAEEgAABBmAAAQZgAAA - - - - 268 - {{144, 219}, {84, 18}} - - - 9 - YES - - 67239424 - 0 - Ends With - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{6, 145}, {223, 26}} - - - YES - - -2076049856 - 2048 - - - 109199615 - 129 - - - 400 - 75 - - - Strings - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Numbers - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Constant Values - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 1 - YES - YES - 2 - - - - - 268 - {{14, 219}, {96, 18}} - - - 8 - YES - - 67239424 - 0 - Begins With - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{72, 245}, {33, 18}} - - - 5 - YES - - 67239424 - 0 - ≠ - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{127, 245}, {33, 18}} - - - 2 - YES - - 67239424 - 0 - > - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{144, 193}, {78, 18}} - - - 99 - YES - - 67239424 - 0 - Contains - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{14, 245}, {33, 18}} - - - 4 - YES - - 67239424 - 0 - = - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{7, 416}, {142, 17}} - - - YES - - 68288064 - 272630784 - Key Paths: - - - - 6 - System - controlColor - - - - - - - - 268 - - - - 2304 - - - - 256 - {216, 95} - - - YES - - - -2147483392 - {{224, 0}, {16, 17}} - - - - 213 - 40 - 1000 - - 75628096 - 2048 - - - - 3 - MC4zMzMzMzI5ODU2AA - - - - - 337772096 - 2048 - Text Cell - - - - - - 3 - YES - YES - - - - 3 - 2 - - - 17 - -692060160 - - - 4 - 15 - 0 - YES - 0 - 1 - - - {{1, 1}, {216, 95}} - - - - - 4 - - - - -2147483392 - {{224, 17}, {15, 102}} - - - - _doScroller: - 0.9925373134328358 - - - - -2147483392 - {{1, 119}, {223, 15}} - - - 1 - - _doScroller: - 0.99539170506912444 - - - {{9, 39}, {218, 97}} - - - 133682 - - - - QSAAAEEgAABBmAAAQZgAAA - - - - 268 - {{10, 283}, {25, 25}} - - - YES - - -2080244224 - 134217728 - + - - - -2038152961 - 134 - - - 400 - 75 - - - - - 268 - {{14, 193}, {96, 18}} - - - 6 - YES - - 67239424 - 0 - Matches - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{189, 245}, {33, 18}} - - - YES - - 67239424 - 0 - < - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {240, 438}} - - - - - {{701, 60}, {242, 440}} - - - {0, 0} - - 67239424 - 0 - Box - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 4 - 0 - NO - - 1 - MC44OTExMjkwMzIzIDAuODkwMTM0MTM1OSAwLjg4OTk0NTgwNTEAA - - - - - 265 - {{837, 20}, {103, 25}} - - YES - - -1543373312 - 134217728 - Add Template - - - -2038152961 - 134 - - - 400 - 75 - - - - {960, 534} - - - - {{0, 0}, {1680, 1028}} - {1.7976931348623157e+308, 1.7976931348623157e+308} - YES - - - AppController - - - - predicate - - YES - 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 - - - - 475 - - - - addRow: - - - - 1131 - - - - delegate - - - - 1133 - - - - predicateEditor - - - - 1136 - - - - window - - - - 1138 - - - - leftTable - - - - 1318 - - - - rightExpressionsType - - - - 1320 - - - - rightTable - - - - 1321 - - - - templateBox - - - - 1322 - - - - addLeftKeyPath: - - - - 1323 - - - - addRightConstant: - - - - 1324 - - - - selectRightAttributeType: - - - - 1327 - - - - updateOperators: - - - - 1329 - - - - updateOperators: - - - - 1330 - - - - updateOperators: - - - - 1331 - - - - updateOperators: - - - - 1332 - - - - updateOperators: - - - - 1333 - - - - updateOperators: - - - - 1334 - - - - updateOperators: - - - - 1335 - - - - updateOperators: - - - - 1336 - - - - dataSource - - - - 1337 - - - - delegate - - - - 1338 - - - - dataSource - - - - 1339 - - - - delegate - - - - 1340 - - - - addTemplate: - - - - 1344 - - - - addTemplate - - - - 1345 - - - - value: selection.predicate - - - - - - value: selection.predicate - value - selection.predicate - 2 - - - 1435 - - - - value: selection.predicate - - - - - - value: selection.predicate - value - selection.predicate - - - - PredicateTransformer - - 2 - - - 1439 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 103 - - - - - - 1 - - - 217 - - - - - - - - 83 - - - - - - - - 81 - - - - - - - - - - - - - - - - - - 75 - - - 3 - - - 80 - - - 8 - - - 78 - - - 6 - - - 72 - - - - - 82 - - - 9 - - - 124 - - - - - - - - 77 - - - 5 - - - 73 - - - 1 - - - 79 - - - 7 - - - 112 - - - 10 - - - 74 - - - 2 - - - 125 - - - - - - - - 126 - - - - - 205 - - - - - - - - - - - - - - - - - - - - 202 - - - - - 198 - - - - - 207 - - - - - 214 - - - - - 199 - - - - - 203 - - - - - 197 - - - - - 206 - - - - - 215 - - - - - 218 - - - - - - - - 216 - - - - - - - - 200 - - - - - - - - - - - 219 - - - - - 201 - - - - - 204 - - - - - 220 - - - - - - - - - - - - 213 - - - - - 210 - - - - - 221 - - - - - 208 - - - - - 209 - - - - - 106 - - - - - - 2 - - - 111 - - - - - 57 - - - - - - - - - - - - - - - - - - 58 - - - - - 134 - - - - - 150 - - - - - 136 - - - 1111 - - - 144 - - - - - 129 - - - 121 - - - 143 - - - - - 236 - - - - - 131 - - - - - - - - 149 - - - - - 145 - - - - - 130 - - - - - 24 - - - - - - - - - - - 92 - - - - - 5 - - - - - 239 - - - - - 23 - - - - - 295 - - - - - - - - 296 - - - - - - - - - 297 - - - - - 298 - - - - - 211 - - - - - - - - 212 - - - - - - - - - 195 - - - - - 196 - - - - - 346 - - - - - 348 - - - - - - - - 349 - - - - - - - - - - 350 - - - - - 351 - - - - - 354 - - - - - 371 - - - - - - - - 372 - - - - - - - - - - - - 375 - - - - - - - - 376 - - - - - - - - - 377 - - - - - - - - 378 - - - - - - - - 379 - - - - - - - - - - - - - - - 380 - - - - - 381 - - - - - 382 - - - - - 383 - - - - - 384 - - - - - 385 - - - - - 386 - - - - - 387 - - - - - 388 - - - - - - - - - - - - - - - - - - - - - - - 389 - - - - - 390 - - - - - 391 - - - - - 392 - - - - - 393 - - - - - 394 - - - - - 395 - - - - - 396 - - - - - 397 - - - - - - - - 398 - - - - - - - - 399 - - - - - - - - 400 - - - - - 401 - - - - - 402 - - - - - 403 - - - - - 404 - - - - - 405 - - - - - - - - - - - - 406 - - - - - 407 - - - - - 408 - - - - - 409 - - - - - 410 - - - - - 411 - - - - - - - - - - 412 - - - - - 413 - - - - - 414 - - - - - 415 - - - - - - - - - - - 416 - - - - - 417 - - - - - 418 - - - - - 419 - - - - - 471 - - - - - - - - 472 - - - - - 474 - - - AppController - - - 476 - - - - - - - - 477 - - - - - 1051 - - - - - - - - - - 1052 - - - - - 1053 - - - - - 1054 - - - - - - - - - - 1055 - - - - - - - - - 1056 - - - - - - - - - 1057 - - - - - - - - - 1058 - - - - - - - - - 1309 - - - - - - - - - - - - - - - - - - - - - 1280 - - - - - - - - 1281 - - - - - 1239 - - - - - - - - - - 1243 - - - - - - - - 1242 - - - - - 1240 - - - - - 1244 - - - - - - - - 1247 - - - - - 1256 - - - - - - - - 1257 - - - - - 1274 - - - - - - - - 1275 - - - - - - - - 1276 - - - - - - - - - - 1279 - - - - - 1278 - - - - - 1277 - - - - - 1254 - - - - - - - - 1255 - - - - - 1260 - - - - - - - - 1261 - - - - - 1252 - - - - - - - - 1253 - - - - - 1266 - - - - - - - - 1267 - - - - - 1262 - - - - - - - - 1263 - - - - - 1248 - - - - - - - - 1249 - - - - - 1268 - - - - - - - - - - 1271 - - - - - 1270 - - - - - 1269 - - - - - - - - 1272 - - - - - - - - 1273 - - - - - 1250 - - - - - - - - 1251 - - - - - 1264 - - - - - - - - 1265 - - - - - 1310 - - - - - - - - 1311 - - - - - 1342 - - - - - - - - 1343 - - - - - 1346 - - - - - 1347 - - - - - 1350 - - - - - - - - - 1351 - - - - - - - - - 1355 - - - - - - - - 1372 - - - - - 1377 - - - - - 1378 - - - - - 1381 - - - - - 1382 - - - - - 1414 - - - - - 1440 - - - - - - - - - 1441 - - - - - 1442 - - - - - 1443 - - - - - - - - 1444 - - - - - - - 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 - 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 - 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 - com.apple.InterfaceBuilder.CocoaPlugin - {{0, 851}, {960, 534}} - com.apple.InterfaceBuilder.CocoaPlugin - {{0, 851}, {960, 534}} - - 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 - 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 - - - - - - 1444 - - - - - AppController - NSObject - - id - id - id - id - id - id - id - id - - - - addLeftKeyPath: - id - - - addRightConstant: - id - - - addTemplate: - id - - - displayPredicate: - id - - - newTemplate: - id - - - predicateEditorAction: - id - - - selectRightAttributeType: - id - - - updateOperators: - id - - - - NSButton - NSTableView - NSPredicateEditor - NSTextField - NSPopUpButton - NSTableView - NSBox - NSWindow - - - - addTemplate - NSButton - - - leftTable - NSTableView - - - predicateEditor - NSPredicateEditor - - - predicateField - NSTextField - - - rightExpressionsType - NSPopUpButton - - - rightTable - NSTableView - - - templateBox - NSBox - - - window - NSWindow - - - - IBProjectSource - ./Classes/AppController.h - - - - NSDocument - - id - id - id - id - id - id - - - - printDocument: - id - - - revertDocumentToSaved: - id - - - runPageLayout: - id - - - saveDocument: - id - - - saveDocumentAs: - id - - - saveDocumentTo: - id - - - - IBProjectSource - ./Classes/NSDocument.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - - 3 - - {11, 11} - {10, 3} - {15, 15} - - - + + + + + + + number + + + + + mixed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + predicate + + + + \ No newline at end of file From fa66c2692f4efb7091e167028fe8fa9eae8ade65 Mon Sep 17 00:00:00 2001 From: Carl Rosell Date: Wed, 5 Feb 2014 09:29:25 +0100 Subject: [PATCH 006/278] Fixed: Broken Documentation. --- Tools/Documentation/preprocess/002.make_headers.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/Documentation/preprocess/002.make_headers.sh b/Tools/Documentation/preprocess/002.make_headers.sh index e598f31ef..99805786f 100755 --- a/Tools/Documentation/preprocess/002.make_headers.sh +++ b/Tools/Documentation/preprocess/002.make_headers.sh @@ -30,5 +30,5 @@ rm Foundation.doc.tar # Remove @import from the source files, doxygen doesn't know what to do with them processor_msg "Removing @import from source files..." -find AppKit.doc -name *.j -exec sed -e '/@import.*/ d' -i '' {} \; -find Foundation.doc -name *.j -exec sed -e '/@import.*/ d' -i '' {} \; +find AppKit.doc -name *.j -exec sed -e '/@import.*/ d' -e '/@class.*/ d' -i '' {} \; +find Foundation.doc -name *.j -exec sed -e '/@import.*/ d' -e '/@class.*/ d' -i '' {} \; From 30b1fa9c5bc17005dda310b6b6ed9e935a6524d0 Mon Sep 17 00:00:00 2001 From: Carl Rosell Date: Wed, 5 Feb 2014 10:05:58 +0100 Subject: [PATCH 007/278] Docs: Added @class to make_headers documentation, --- Tools/Documentation/preprocess/002.make_headers.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/Documentation/preprocess/002.make_headers.sh b/Tools/Documentation/preprocess/002.make_headers.sh index 99805786f..ea914e3d4 100755 --- a/Tools/Documentation/preprocess/002.make_headers.sh +++ b/Tools/Documentation/preprocess/002.make_headers.sh @@ -28,7 +28,7 @@ bsdtar cf Foundation.doc.tar --exclude='_*' -s /^Foundation/Foundation.doc/ Foun bsdtar xf Foundation.doc.tar rm Foundation.doc.tar -# Remove @import from the source files, doxygen doesn't know what to do with them -processor_msg "Removing @import from source files..." +# Remove @import and @class from the source files, doxygen doesn't know what to do with them +processor_msg "Removing @import and @class from source files..." find AppKit.doc -name *.j -exec sed -e '/@import.*/ d' -e '/@class.*/ d' -i '' {} \; find Foundation.doc -name *.j -exec sed -e '/@import.*/ d' -e '/@class.*/ d' -i '' {} \; From 8147f648a17aa02d7688c3970d516f91f475faea Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 7 Feb 2014 16:36:05 -0800 Subject: [PATCH 008/278] Fixed: Textual CPDatePicker issue with number of digit Previously, the day/month/hour of the textual datePicker had always two digits, even when the number was under 10. For instance the day 8 was displayed 08. Now it's like in cocoa, 8 is displayed 8. Fixes #2059 --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 8dbb21eaf..9b1cd4910 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -1222,6 +1222,7 @@ var CPMonthDateType = 0, int _maxNumber @accessors(getter=maxNumber); int _minNumber @accessors(getter=minNumber); + BOOL _firstEvent; CPTimer _timerEdition; } @@ -1231,6 +1232,7 @@ var CPMonthDateType = 0, - (BOOL)acceptFirstResponder { + _firstEvent = YES; return NO; } @@ -1339,7 +1341,7 @@ var CPMonthDateType = 0, if (keyCode != CPDeleteKeyCode && keyCode != CPDeleteForwardKeyCode && keyCode < CPZeroKeyCode || keyCode > CPNineKeyCode) return; - var newValue = [self stringValue], + var newValue = [self stringValue].replace(/\s/g, ''), length = [newValue length], eventKeyValue = parseInt([anEvent characters]).toString(); @@ -1355,7 +1357,7 @@ var CPMonthDateType = 0, { _timerEdition = [CPTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(_timerKeyEvent:) userInfo:nil repeats:NO]; - if ((_dateType == CPYearDateType && length == 4) || (_dateType != CPYearDateType && length == 2) || !length) + if (_firstEvent || !length) newValue = eventKeyValue; else newValue = parseInt(newValue).toString() + eventKeyValue; @@ -1374,6 +1376,8 @@ var CPMonthDateType = 0, if (parseInt(newValue) > [self _maxNumberWithMaxDate] || ([_datePicker _isEnglishFormat] && _dateType == CPHourDateType && parseInt(newValue) > 12)) return; + _firstEvent = NO; + [super setObjectValue:newValue]; } @@ -1473,7 +1477,13 @@ var CPMonthDateType = 0, } while ([aStringValue length] < 2) - aStringValue = "0" + aStringValue; + { + if (_dateType == CPSecondDateType || _dateType == CPMinuteDateType) + aStringValue = @"0" + aStringValue; + else + aStringValue = @" " + aStringValue; + } + } [super setObjectValue:aStringValue]; @@ -1612,6 +1622,7 @@ var CPMonthDateType = 0, */ - (void)makeDeselectable { + _firstEvent = YES; [self unsetThemeState:CPThemeStateSelected]; } From 67fed5f3d777969fb26a26db760bac9b0e522554 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 4 Jan 2014 17:02:44 +0100 Subject: [PATCH 009/278] fixing editing semantics --- Foundation/CPAttributedString.j | 59 +++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 25 deletions(-) mode change 100644 => 100755 Foundation/CPAttributedString.j diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j old mode 100644 new mode 100755 index beee46e8d..82b1a3444 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -149,7 +149,7 @@ { // index is the character index we're searching for, // while range is the actual range entry we're comparing against - if (CPLocationInRange(index, entry.range)) + if (CPLocationInRange(index, entry.range) || (!index && !CPMaxRange(entry.range))) return CPOrderedSame; else if (CPMaxRange(entry.range) <= index) return CPOrderedDescending; @@ -523,41 +523,50 @@ */ - (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString { - if (!aString) - aString = @""; + if (!aString) aString = @""; - var startingIndex = [self _indexOfEntryWithIndex:aRange.location]; + var lastValidIndex= MAX(_rangeEntries.length-1, 0); + var startingIndex = [self _indexOfEntryWithIndex: aRange.location]; - if (startingIndex === CPNotFound) - _CPRaiseRangeException(self, _cmd, aRange.location, _string.length); + if (startingIndex < 0) startingIndex = lastValidIndex; + var endingIndex = [self _indexOfEntryWithIndex: CPMaxRange(aRange)]; - var startingRangeEntry = _rangeEntries[startingIndex], - endingIndex = [self _indexOfEntryWithIndex:MAX(CPMaxRange(aRange) - 1, 0)]; + if (endingIndex < 0) endingIndex = lastValidIndex; - if (endingIndex === CPNotFound) - _CPRaiseRangeException(self, _cmd, MAX(CPMaxRange(aRange) - 1, 0), _string.length); - - var endingRangeEntry = _rangeEntries[endingIndex], - additionalLength = aString.length - aRange.length; + var additionalLength = aString.length - aRange.length; + var patchPosition = startingIndex; _string = _string.substring(0, aRange.location) + aString + _string.substring(CPMaxRange(aRange)); + var originalLength= _rangeEntries[patchPosition].range.length; + _rangeEntries[patchPosition].range.length += additionalLength; - if (startingIndex === endingIndex) - startingRangeEntry.range.length += additionalLength; - else + if (startingIndex !== endingIndex) { - endingRangeEntry.range.length = CPMaxRange(endingRangeEntry.range) - CPMaxRange(aRange); - endingRangeEntry.range.location = CPMaxRange(aRange); + if (CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length < _rangeEntries[patchPosition].range.length) + { + startingIndex++; + } - startingRangeEntry.range.length = CPMaxRange(aRange) - startingRangeEntry.range.location; - - _rangeEntries.splice(startingIndex, endingIndex - startingIndex); + if (endingIndex > startingIndex) + { + var originalOffset= _rangeEntries[startingIndex].range.location; + var offsetFromSplicing = CPMaxRange(_rangeEntries[endingIndex].range)-originalOffset + _rangeEntries.splice(startingIndex, endingIndex - startingIndex); + _rangeEntries[startingIndex].range=CPMakeRange(originalOffset, offsetFromSplicing); + } else + { + var lhsOffset=aString.length -CPIntersectionRange(CPMakeRange(_rangeEntries[patchPosition].range.location, originalLength), aRange).length; + var rhsOffset=aString.length -CPIntersectionRange(_rangeEntries[endingIndex].range, aRange).length; + _rangeEntries[patchPosition].range.length = originalLength+lhsOffset; + _rangeEntries[startingIndex].range.location += lhsOffset; + _rangeEntries[startingIndex].range.length += rhsOffset; + patchPosition= startingIndex; + } } - endingIndex = startingIndex + 1; - - while (endingIndex < _rangeEntries.length) - _rangeEntries[endingIndex++].range.location += additionalLength; + var l= _rangeEntries.length; + for (var patchIndex= patchPosition+1; patchIndex < l; patchIndex++) + _rangeEntries[patchIndex].range.location += additionalLength; } /*! From f5daa96c8e98441b64c91338a3dfde910029d8c9 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 4 Jan 2014 17:34:48 +0100 Subject: [PATCH 010/278] minor fix --- Foundation/CPAttributedString.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 82b1a3444..424b04df8 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -542,7 +542,7 @@ if (startingIndex !== endingIndex) { - if (CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length < _rangeEntries[patchPosition].range.length) + if (CPIntersectionRange(CPMakeRange(_rangeEntries[patchPosition].range.location, originalLength), aRange).length < originalLength) { startingIndex++; } From aaeffe61a66c4061853f1a648ecc9c7a1dac1cb3 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sun, 5 Jan 2014 08:52:04 +0100 Subject: [PATCH 011/278] editing fix --- Foundation/CPAttributedString.j | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 424b04df8..379838fc2 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -523,7 +523,8 @@ */ - (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString { - if (!aString) aString = @""; + if (!aString) + aString = @""; var lastValidIndex= MAX(_rangeEntries.length-1, 0); var startingIndex = [self _indexOfEntryWithIndex: aRange.location]; @@ -538,11 +539,12 @@ _string = _string.substring(0, aRange.location) + aString + _string.substring(CPMaxRange(aRange)); var originalLength= _rangeEntries[patchPosition].range.length; - _rangeEntries[patchPosition].range.length += additionalLength; - if (startingIndex !== endingIndex) + if (startingIndex === endingIndex) + _rangeEntries[patchPosition].range.length += additionalLength; + else { - if (CPIntersectionRange(CPMakeRange(_rangeEntries[patchPosition].range.location, originalLength), aRange).length < originalLength) + if (CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length < originalLength) { startingIndex++; } @@ -553,11 +555,12 @@ var offsetFromSplicing = CPMaxRange(_rangeEntries[endingIndex].range)-originalOffset _rangeEntries.splice(startingIndex, endingIndex - startingIndex); _rangeEntries[startingIndex].range=CPMakeRange(originalOffset, offsetFromSplicing); - } else - { - var lhsOffset=aString.length -CPIntersectionRange(CPMakeRange(_rangeEntries[patchPosition].range.location, originalLength), aRange).length; - var rhsOffset=aString.length -CPIntersectionRange(_rangeEntries[endingIndex].range, aRange).length; - _rangeEntries[patchPosition].range.length = originalLength+lhsOffset; + } + var lhsOffset=aString.length -CPIntersectionRange(CPMakeRange(_rangeEntries[patchPosition].range.location, originalLength), aRange).length; + _rangeEntries[patchPosition].range.length = originalLength+lhsOffset; + + if(patchPosition !== startingIndex) + { var rhsOffset=aString.length -CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; _rangeEntries[startingIndex].range.location += lhsOffset; _rangeEntries[startingIndex].range.length += rhsOffset; patchPosition= startingIndex; From 6f66c061116e6754811bfb00b59bdb04d1ab7495 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sun, 5 Jan 2014 09:11:12 +0100 Subject: [PATCH 012/278] fixed one last minor glitch --- Foundation/CPAttributedString.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 379838fc2..309984772 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -556,11 +556,11 @@ _rangeEntries.splice(startingIndex, endingIndex - startingIndex); _rangeEntries[startingIndex].range=CPMakeRange(originalOffset, offsetFromSplicing); } - var lhsOffset=aString.length -CPIntersectionRange(CPMakeRange(_rangeEntries[patchPosition].range.location, originalLength), aRange).length; - _rangeEntries[patchPosition].range.length = originalLength+lhsOffset; if(patchPosition !== startingIndex) - { var rhsOffset=aString.length -CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; + { var lhsOffset=aString.length -CPIntersectionRange(CPMakeRange(_rangeEntries[patchPosition].range.location, originalLength), aRange).length; + _rangeEntries[patchPosition].range.length = originalLength+lhsOffset; + var rhsOffset=aString.length -CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; _rangeEntries[startingIndex].range.location += lhsOffset; _rangeEntries[startingIndex].range.length += rhsOffset; patchPosition= startingIndex; From 342ea97406a1c8a744ad9b0840324dbb2ddc1898 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sun, 5 Jan 2014 09:22:51 +0100 Subject: [PATCH 013/278] yet another minor fix --- Foundation/CPAttributedString.j | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 309984772..3b6f24deb 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -537,7 +537,7 @@ var additionalLength = aString.length - aRange.length; var patchPosition = startingIndex; - _string = _string.substring(0, aRange.location) + aString + _string.substring(CPMaxRange(aRange)); + _string = _string.substring(0, aRange.location) + aString + _string.substring(CPMaxRange(aRange)); var originalLength= _rangeEntries[patchPosition].range.length; if (startingIndex === endingIndex) @@ -564,6 +564,8 @@ _rangeEntries[startingIndex].range.location += lhsOffset; _rangeEntries[startingIndex].range.length += rhsOffset; patchPosition= startingIndex; + } else + { _rangeEntries[patchPosition].range.length += additionalLength; } } From c2534ae6da0ac78275053e74d0f10b6702d96364 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 6 Jan 2014 09:24:11 +0100 Subject: [PATCH 014/278] unit-tests + simplification --- Foundation/CPAttributedString.j | 2 +- Tests/Foundation/CPAttributedStringTest.j | 27 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 3b6f24deb..141d93065 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -558,7 +558,7 @@ } if(patchPosition !== startingIndex) - { var lhsOffset=aString.length -CPIntersectionRange(CPMakeRange(_rangeEntries[patchPosition].range.location, originalLength), aRange).length; + { var lhsOffset=aString.length -CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length; _rangeEntries[patchPosition].range.length = originalLength+lhsOffset; var rhsOffset=aString.length -CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; _rangeEntries[startingIndex].range.location += lhsOffset; diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index 7980124a8..5a061b6c9 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -5,6 +5,33 @@ var sharedObject = [CPObject new]; @implementation CPAttributedStringTest : OJTestCase +- (void)testAppendToEmptyString +{ + var string = [CPAttributedString new]; + [string replaceCharactersInRange:CPMakeRange(0,0) withString:@"hi there"]; + [self assertTrue:([string string] === @"hi there") + message:"testAppendToEmptyString: expected:" + @"hi there" + " actual:" + [string string]]; +} +- (void)testAppendToEndOfString +{ + var string = [[CPAttributedString alloc] initWithString:@"hi there"]; + [string replaceCharactersInRange:CPMakeRange(8,0) withString:@" it is me"]; + [self assertTrue:([string string] === @"hi there it is me") + message:"testAppendToEndOfString: expected:" + @"hi there it is me" + " actual:" + [string string]]; +} +- (void)testWriteOverRangeBoundaries +{ + var string=[[CPAttributedString alloc] initWithString:@"Fusce\n" attributes: [CPDictionary dictionaryWithObjects:[ 1 ] forKeys: ["testkey"]]] + [string replaceCharactersInRange:CPMakeRange(6, 0) withAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" + attributes:[CPDictionary dictionaryWithObjects:[ 2 ] forKeys: ["testkey"]]]]; + [string replaceCharactersInRange:CPMakeRange(5, 3) withString:@" "]; + var aRange=CPMakeRange(0, 0); + var attribs=[string attributesAtIndex:4 effectiveRange: aRange]; + + [self assertTrue:([attribs objectForKey:@"testkey"] === 1) + message:"testWriteOverRangeBoundaries: expected:" + @"1" + " actual:" + [attribs objectForKey:@"testkey"]]; +} + - (CPAttributedString)stringForTesting { var string = [[CPAttributedString alloc] initWithString:"The quick brown fox jumped over the lazy dog."]; From d8e4f1150ee877ad0e971185cb50c40f518c7180 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 6 Jan 2014 09:38:09 +0100 Subject: [PATCH 015/278] more protection against edge cases --- Foundation/CPAttributedString.j | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 141d93065..21f314dc9 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -601,6 +601,8 @@ endingEntryIndex = [self _indexOfRangeEntryForIndex:CPMaxRange(aRange) splitOnMaxIndex:YES], current = startingEntryIndex; + if (current < 0) current = MAX(_rangeEntries.length-1, 0); + if (endingEntryIndex === CPNotFound) endingEntryIndex = _rangeEntries.length; @@ -800,7 +802,7 @@ var a = _rangeEntries[current], b = _rangeEntries[current + 1]; - if ([a.attributes isEqualToDictionary:b.attributes]) + if (a && b && [a.attributes isEqualToDictionary:b.attributes]) { a.range.length = CPMaxRange(b.range) - a.range.location; _rangeEntries.splice(current + 1, 1); From a34ae45b05900daf2af1d8810ef0ac05de3852f3 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 6 Jan 2014 09:46:14 +0100 Subject: [PATCH 016/278] formatting --- Tests/Foundation/CPAttributedStringTest.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index 5a061b6c9..a4b1f48b5 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -8,24 +8,24 @@ var sharedObject = [CPObject new]; - (void)testAppendToEmptyString { var string = [CPAttributedString new]; - [string replaceCharactersInRange:CPMakeRange(0,0) withString:@"hi there"]; + [string replaceCharactersInRange:CPMakeRange(0,0) withString:@"hi there"]; [self assertTrue:([string string] === @"hi there") message:"testAppendToEmptyString: expected:" + @"hi there" + " actual:" + [string string]]; } - (void)testAppendToEndOfString { var string = [[CPAttributedString alloc] initWithString:@"hi there"]; - [string replaceCharactersInRange:CPMakeRange(8,0) withString:@" it is me"]; + [string replaceCharactersInRange:CPMakeRange(8,0) withString:@" it is me"]; [self assertTrue:([string string] === @"hi there it is me") message:"testAppendToEndOfString: expected:" + @"hi there it is me" + " actual:" + [string string]]; } - (void)testWriteOverRangeBoundaries { var string=[[CPAttributedString alloc] initWithString:@"Fusce\n" attributes: [CPDictionary dictionaryWithObjects:[ 1 ] forKeys: ["testkey"]]] - [string replaceCharactersInRange:CPMakeRange(6, 0) withAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" + [string replaceCharactersInRange:CPMakeRange(6, 0) withAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" attributes:[CPDictionary dictionaryWithObjects:[ 2 ] forKeys: ["testkey"]]]]; [string replaceCharactersInRange:CPMakeRange(5, 3) withString:@" "]; - var aRange=CPMakeRange(0, 0); + var aRange=CPMakeRange(0, 0); var attribs=[string attributesAtIndex:4 effectiveRange: aRange]; [self assertTrue:([attribs objectForKey:@"testkey"] === 1) From e4163c5da486a0fe03ca9df0ec7d6506dff077d9 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 6 Jan 2014 13:48:13 +0100 Subject: [PATCH 017/278] formatting --- Foundation/CPAttributedString.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 21f314dc9..1dc9122b8 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -557,7 +557,7 @@ _rangeEntries[startingIndex].range=CPMakeRange(originalOffset, offsetFromSplicing); } - if(patchPosition !== startingIndex) + if (patchPosition !== startingIndex) { var lhsOffset=aString.length -CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length; _rangeEntries[patchPosition].range.length = originalLength+lhsOffset; var rhsOffset=aString.length -CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; From 3063d53a2be78e678d99db5c3ce17cb9ea96d410 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 10 Jan 2014 12:21:37 +0100 Subject: [PATCH 018/278] more formatting --- Foundation/CPAttributedString.j | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 1dc9122b8..aac2cd0b7 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -526,16 +526,18 @@ if (!aString) aString = @""; - var lastValidIndex= MAX(_rangeEntries.length-1, 0); - var startingIndex = [self _indexOfEntryWithIndex: aRange.location]; + var lastValidIndex = MAX(_rangeEntries.length - 1, 0), + startingIndex = [self _indexOfEntryWithIndex: aRange.location]; - if (startingIndex < 0) startingIndex = lastValidIndex; + if (startingIndex < 0) + startingIndex = lastValidIndex; var endingIndex = [self _indexOfEntryWithIndex: CPMaxRange(aRange)]; - if (endingIndex < 0) endingIndex = lastValidIndex; + if (endingIndex < 0) + endingIndex = lastValidIndex; - var additionalLength = aString.length - aRange.length; - var patchPosition = startingIndex; + var additionalLength = aString.length - aRange.length, + patchPosition = startingIndex; _string = _string.substring(0, aRange.location) + aString + _string.substring(CPMaxRange(aRange)); var originalLength= _rangeEntries[patchPosition].range.length; @@ -551,16 +553,16 @@ if (endingIndex > startingIndex) { - var originalOffset= _rangeEntries[startingIndex].range.location; - var offsetFromSplicing = CPMaxRange(_rangeEntries[endingIndex].range)-originalOffset + var originalOffset= _rangeEntries[startingIndex].range.location, + offsetFromSplicing = CPMaxRange(_rangeEntries[endingIndex].range)-originalOffset; _rangeEntries.splice(startingIndex, endingIndex - startingIndex); - _rangeEntries[startingIndex].range=CPMakeRange(originalOffset, offsetFromSplicing); + _rangeEntries[startingIndex].range = CPMakeRange(originalOffset, offsetFromSplicing); } - if (patchPosition !== startingIndex) - { var lhsOffset=aString.length -CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length; - _rangeEntries[patchPosition].range.length = originalLength+lhsOffset; - var rhsOffset=aString.length -CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; + if (patchPosition !== startingIndex) + { var lhsOffset = aString.length -CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length; + _rangeEntries[patchPosition].range.length = originalLength + lhsOffset; + var rhsOffset = aString.length -CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; _rangeEntries[startingIndex].range.location += lhsOffset; _rangeEntries[startingIndex].range.length += rhsOffset; patchPosition= startingIndex; @@ -601,7 +603,8 @@ endingEntryIndex = [self _indexOfRangeEntryForIndex:CPMaxRange(aRange) splitOnMaxIndex:YES], current = startingEntryIndex; - if (current < 0) current = MAX(_rangeEntries.length-1, 0); + if (current < 0) + current = MAX(_rangeEntries.length - 1, 0); if (endingEntryIndex === CPNotFound) endingEntryIndex = _rangeEntries.length; From f72119f1b6d9937fd3b4423280d6b270d6f60e02 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 12 Feb 2014 21:47:15 +0000 Subject: [PATCH 019/278] Formatting: CPAttributedStringTest. Refs #2045. --- Tests/Foundation/CPAttributedStringTest.j | 27 ++++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index a4b1f48b5..1792e1d8d 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -7,26 +7,27 @@ var sharedObject = [CPObject new]; - (void)testAppendToEmptyString { - var string = [CPAttributedString new]; - [string replaceCharactersInRange:CPMakeRange(0,0) withString:@"hi there"]; - [self assertTrue:([string string] === @"hi there") - message:"testAppendToEmptyString: expected:" + @"hi there" + " actual:" + [string string]]; + var string = [CPMutableAttributedString new]; + [string replaceCharactersInRange:CPMakeRange(0, 0) withString:@"hi there"]; + [self assert:[string string] equals:@"hi there"]; } + - (void)testAppendToEndOfString { - var string = [[CPAttributedString alloc] initWithString:@"hi there"]; - [string replaceCharactersInRange:CPMakeRange(8,0) withString:@" it is me"]; - [self assertTrue:([string string] === @"hi there it is me") - message:"testAppendToEndOfString: expected:" + @"hi there it is me" + " actual:" + [string string]]; + var string = [[CPMutableAttributedString alloc] initWithString:@"hi there"]; + [string replaceCharactersInRange:CPMakeRange(8, 0) withString:@" it is me"]; + [self assert:[string string] equals:@"hi there it is me"]; } + - (void)testWriteOverRangeBoundaries { - var string=[[CPAttributedString alloc] initWithString:@"Fusce\n" attributes: [CPDictionary dictionaryWithObjects:[ 1 ] forKeys: ["testkey"]]] - [string replaceCharactersInRange:CPMakeRange(6, 0) withAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" - attributes:[CPDictionary dictionaryWithObjects:[ 2 ] forKeys: ["testkey"]]]]; + var string = [[CPMutableAttributedString alloc] initWithString:@"Fusce\n" attributes:@{"testkey": 1}]; + [string replaceCharactersInRange:CPMakeRange(6, 0) withAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" + attributes:@{"testkey": 2}]]; [string replaceCharactersInRange:CPMakeRange(5, 3) withString:@" "]; - var aRange=CPMakeRange(0, 0); - var attribs=[string attributesAtIndex:4 effectiveRange: aRange]; + + var aRange = CPMakeRange(0, 0), + attribs = [string attributesAtIndex:4 effectiveRange:aRange]; [self assertTrue:([attribs objectForKey:@"testkey"] === 1) message:"testWriteOverRangeBoundaries: expected:" + @"1" + " actual:" + [attribs objectForKey:@"testkey"]]; From 48fa46e0d5a52ea5b4328838fbf7c6db463e42f9 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 12 Feb 2014 21:54:22 +0000 Subject: [PATCH 020/278] Formatting: CPAttributedString. Refs #2045. --- Foundation/CPAttributedString.j | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index aac2cd0b7..68838796b 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -527,11 +527,12 @@ aString = @""; var lastValidIndex = MAX(_rangeEntries.length - 1, 0), - startingIndex = [self _indexOfEntryWithIndex: aRange.location]; + startingIndex = [self _indexOfEntryWithIndex:aRange.location]; if (startingIndex < 0) startingIndex = lastValidIndex; - var endingIndex = [self _indexOfEntryWithIndex: CPMaxRange(aRange)]; + + var endingIndex = [self _indexOfEntryWithIndex:CPMaxRange(aRange)]; if (endingIndex < 0) endingIndex = lastValidIndex; @@ -539,8 +540,8 @@ var additionalLength = aString.length - aRange.length, patchPosition = startingIndex; - _string = _string.substring(0, aRange.location) + aString + _string.substring(CPMaxRange(aRange)); - var originalLength= _rangeEntries[patchPosition].range.length; + _string = _string.substring(0, aRange.location) + aString + _string.substring(CPMaxRange(aRange)); + var originalLength = _rangeEntries[patchPosition].range.length; if (startingIndex === endingIndex) _rangeEntries[patchPosition].range.length += additionalLength; @@ -554,25 +555,24 @@ if (endingIndex > startingIndex) { var originalOffset= _rangeEntries[startingIndex].range.location, - offsetFromSplicing = CPMaxRange(_rangeEntries[endingIndex].range)-originalOffset; + offsetFromSplicing = CPMaxRange(_rangeEntries[endingIndex].range) - originalOffset; _rangeEntries.splice(startingIndex, endingIndex - startingIndex); _rangeEntries[startingIndex].range = CPMakeRange(originalOffset, offsetFromSplicing); } if (patchPosition !== startingIndex) - { var lhsOffset = aString.length -CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length; + { + var lhsOffset = aString.length - CPIntersectionRange(_rangeEntries[patchPosition].range, aRange).length; _rangeEntries[patchPosition].range.length = originalLength + lhsOffset; - var rhsOffset = aString.length -CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; + var rhsOffset = aString.length - CPIntersectionRange(_rangeEntries[startingIndex].range, aRange).length; _rangeEntries[startingIndex].range.location += lhsOffset; _rangeEntries[startingIndex].range.length += rhsOffset; - patchPosition= startingIndex; + patchPosition = startingIndex; } else - { _rangeEntries[patchPosition].range.length += additionalLength; - } + _rangeEntries[patchPosition].range.length += additionalLength; } - var l= _rangeEntries.length; - for (var patchIndex= patchPosition+1; patchIndex < l; patchIndex++) + for (var patchIndex = patchPosition + 1, l = _rangeEntries.length; patchIndex < l; patchIndex++) _rangeEntries[patchIndex].range.location += additionalLength; } @@ -712,7 +712,7 @@ - (void)insertAttributedString:(CPAttributedString)aString atIndex:(CPUInteger)anIndex { if (anIndex < 0 || anIndex > [self length]) - [CPException raise:CPRangeException reason:"tried to insert attributed string at an invalid index: "+anIndex]; + [CPException raise:CPRangeException reason:"tried to insert attributed string at an invalid index: " + anIndex]; var entryIndexOfNextEntry = [self _indexOfRangeEntryForIndex:anIndex splitOnMaxIndex:YES], otherRangeEntries = aString._rangeEntries, From bd2f63c232eb6da7ca9b953df1dadc494ad5de01 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 12 Feb 2014 23:23:45 +0000 Subject: [PATCH 021/278] Improve CPAttributedString coding. Refs #2050. --- Foundation/CPAttributedString.j | 52 +++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 659191613..f1f25bef9 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -835,40 +835,48 @@ //do nothing (says cocotron and gnustep) } -- (id)initWithCoder:(id)aCoder +@end + +var CPAttributedStringStringKey = "CPAttributedStringString", + CPAttributedStringRangesKey = "CPAttributedStringRanges", + CPAttributedStringAttributesKey = "CPAttributedStringAttributes"; + +@implementation CPAttributedString (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder { self = [self init]; - if (self != nil) - { - _string=[aCoder decodeObjectForKey:"_string"]; - var decoded_ranges = [aCoder decodeObjectForKey:"ranges"], - decoded_attribs = [aCoder decodeObjectForKey:"attributes"]; - _rangeEntries=[]; - var i, l= decoded_ranges.length; - for(i = 0; i < l; i++) - { - _rangeEntries.push(makeRangeEntry(decoded_ranges[i], decoded_attribs[i])); - } + if (self) + { + _string = [aCoder decodeObjectForKey:CPAttributedStringStringKey]; + var decodedRanges = [aCoder decodeObjectForKey:CPAttributedStringRangesKey], + decodedAttributes = [aCoder decodeObjectForKey:CPAttributedStringAttributesKey]; + + _rangeEntries = []; + + for (var i = 0, l = decodedRanges.length; i < l; i++) + _rangeEntries.push(makeRangeEntry(decodedRanges[i], decodedAttributes[i])); } + return self; } -- (void)encodeWithCoder:(id)aCoder +- (void)encodeWithCoder:(CPCoder)aCoder { - [aCoder encodeObject:_string forKey:"_string"]; + [aCoder encodeObject:_string forKey:CPAttributedStringStringKey]; - var ranges_for_encoding = [], - dicts_for_encoding = []; + var rangesForEncoding = [], + dictsForEncoding = []; - var i, l = _rangeEntries.length; - for(i = 0; i < l; i++) + for (var i = 0, l = _rangeEntries.length; i < l; i++) { - ranges_for_encoding.push(_rangeEntries[i].range); - dicts_for_encoding.push(_rangeEntries[i].attributes); + rangesForEncoding.push(_rangeEntries[i].range); + dictsForEncoding.push(_rangeEntries[i].attributes); } - [aCoder encodeObject:ranges_for_encoding forKey:"ranges"]; - [aCoder encodeObject:dicts_for_encoding forKey:"attributes"]; + + [aCoder encodeObject:rangesForEncoding forKey:CPAttributedStringRangesKey]; + [aCoder encodeObject:dictsForEncoding forKey:CPAttributedStringAttributesKey]; } @end From 7e20422e20b03e6412aac6f878db28507a6036bf Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 13 Feb 2014 12:17:55 +0000 Subject: [PATCH 022/278] Test: CPAttributedString coding. --- Tests/Foundation/CPAttributedStringTest.j | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index 1792e1d8d..5314d3c41 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -582,6 +582,23 @@ var sharedObject = [CPObject new]; [self assertTrue:[[self stringForTesting] isEqual:string] message:"setAttributedString should have made strings equal, but they were not"]; } +- (void)testEncoding +{ + // We can't test using [self stringForTesting] because it contains attributes without coding support. + var original = [[CPMutableAttributedString alloc] initWithString:@"firstsecondthird"]; + [original addAttribute:"color" value:[CPColor redColor] range:CPMakeRange(0, 5)]; + [original addAttribute:"color" value:[CPColor greenColor] range:CPMakeRange(5, 6)]; + [original addAttribute:"color" value:[CPColor blueColor] range:CPMakeRange(11, 5)]; + + var encoded = [CPKeyedArchiver archivedDataWithRootObject:original], + decoded = [CPKeyedUnarchiver unarchiveObjectWithData:encoded]; + [self assert:original equals:decoded]; + + // Verify that the original and decoded are not incorrectly tied together. + [original addAttribute:"color" value:[CPColor blueColor] range:CPMakeRange(0, 5)]; + [self assertFalse:[original isEqual:decoded]]; +} + @end function isEqualAllowingUndefinedCast(a, b) @@ -613,7 +630,7 @@ function testAttributeAtIndexWithValue(aString, anIndex, aKey, aValue, aSelf) var range = CPMakeRange(0, 0), attribute = [aString attribute:aKey atIndex:anIndex effectiveRange:range]; - [aSelf assertTrue: isEqualAllowingUndefinedCast(attribute, aValue) message: "expecting '" + aKey + "' to be '" + aValue + "', was '" + attribute]; + [aSelf assertTrue:isEqualAllowingUndefinedCast(attribute, aValue) message: "expecting '" + aKey + "' to be '" + aValue + "', was '" + attribute]; var index = range.location; @@ -621,7 +638,7 @@ function testAttributeAtIndexWithValue(aString, anIndex, aKey, aValue, aSelf) { attribute = [aString attribute:aKey atIndex:index++ effectiveRange:nil]; - [aSelf assertTrue: isEqualAllowingUndefinedCast(attribute, aValue) message: "expecting '" + aKey + "' to be '" + aValue + "', was '" + attribute]; + [aSelf assertTrue:isEqualAllowingUndefinedCast(attribute, aValue) message: "expecting '" + aKey + "' to be '" + aValue + "', was '" + attribute]; } } From a31ad2c367998c94a031d39f88e0bf1c2347f83b Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 13 Feb 2014 12:41:14 +0000 Subject: [PATCH 023/278] Fixed: CPAttributedString isEqual: despite attribute differences. As soon as a range reached the end of the string the equality test would end with a YES, without even comparing the final attribute dict. --- Foundation/CPAttributedString.j | 4 +-- Tests/Foundation/CPAttributedStringTest.j | 32 +++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index f1f25bef9..bbb37abe1 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -413,7 +413,7 @@ comparisonAttributes = [aString attributesAtIndex:0 effectiveRange:comparisonRange], length = _string.length; - while (CPMaxRange(CPUnionRange(myRange, comparisonRange)) < length) + do { if (CPIntersectionRange(myRange, comparisonRange).length > 0 && ![myAttributes isEqualToDictionary:comparisonAttributes]) @@ -424,7 +424,7 @@ myAttributes = [self attributesAtIndex:CPMaxRange(myRange) effectiveRange:myRange]; else comparisonAttributes = [aString attributesAtIndex:CPMaxRange(comparisonRange) effectiveRange:comparisonRange]; - } + } while (CPMaxRange(CPUnionRange(myRange, comparisonRange)) < length); return YES; } diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index 5314d3c41..d83afcf75 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -207,6 +207,38 @@ var sharedObject = [CPObject new]; [self assertFalse:[a isEqual:@"HELLO!"] message:"Expected a to not equal 'HELLO!', but it did"]; } +- (void)testIsEqualEmpty +{ + var a = [[CPMutableAttributedString alloc] initWithString:@""], + b = [[CPMutableAttributedString alloc] initWithString:@""]; + + [self assertTrue:[a isEqual:b]]; +} + +- (void)testIsEqualWithSimpleAttribute +{ + var a = [[CPMutableAttributedString alloc] initWithString:@"GREETINGS!"], + b = [[CPMutableAttributedString alloc] initWithString:@"GREETINGS!"]; + + [a addAttribute:"color" value:[CPColor redColor] range:CPMakeRange(0, 5)]; + [self assertFalse:[a isEqual:b] message:"red string should not equal string without color attribute"]; + [b addAttribute:"color" value:[CPColor redColor] range:CPMakeRange(0, 5)]; + [self assertTrue:[a isEqual:b]]; +} + +- (void)testIsEqualWithTwoAttributes +{ + var a = [[CPMutableAttributedString alloc] initWithString:@"GREETINGS!"], + b = [[CPMutableAttributedString alloc] initWithString:@"GREETINGS!"]; + + [a addAttribute:"color" value:[CPColor redColor] range:CPMakeRange(0, 9)]; + [b addAttribute:"color" value:[CPColor redColor] range:CPMakeRange(0, 9)]; + [a addAttribute:"font" value:"Helvetica" range:CPMakeRange(1, 4)]; + [self assertFalse:[a isEqual:b] message:"font difference from index 1 should be found"]; + [b addAttribute:"font" value:"Helvetica" range:CPMakeRange(1, 4)]; + [self assertTrue:[a isEqual:b]]; +} + //Extracting a Substring //- (CPAttributedString)attributedSubstringFromRange:(CPRange)aRange - (void)testAttributedSubstringFromRange From c6dd18ce40603b615a33263fb1885d7f269559dd Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 13 Feb 2014 12:41:20 +0000 Subject: [PATCH 024/278] Fixed: typo. --- Tests/Foundation/CPAttributedStringTest.j | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index d83afcf75..28ca7576e 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -81,7 +81,7 @@ var sharedObject = [CPObject new]; message:"testInitWithAttributedString: expected:" + [self stringForTesting] + " actual:" + string]; } -- (void)testIinitWithString_attributes +- (void)testInitWithString_attributes { var string = [[CPAttributedString alloc] initWithString:@"hi there" attributes:@{}]; @@ -518,7 +518,6 @@ var sharedObject = [CPObject new]; testAttributeAtIndexWithValue(string, 10, "duck", "goose", self); testAttributeAtIndexWithValue(string, 30, "duck", "goose", self); testAttributeAtIndexWithValue(string, 40, "duck", undefined, self); - } //- (void)removeAttribute:(CPString)anAttribute range:(CPRange)aRange From 23ff035eb3f663181cce4f88180dd7036bcf81c0 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 13 Feb 2014 13:38:36 -0800 Subject: [PATCH 025/278] Fixed: Wrong link to install homebrew Previously the link to install homebrew was wrong. --- Tools/Documentation/preprocess/001.markdown_readme.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/Documentation/preprocess/001.markdown_readme.sh b/Tools/Documentation/preprocess/001.markdown_readme.sh index 62d153707..0e0dfe139 100755 --- a/Tools/Documentation/preprocess/001.markdown_readme.sh +++ b/Tools/Documentation/preprocess/001.markdown_readme.sh @@ -15,7 +15,7 @@ if [ -n "$markdown" ]; then else processor_msg "markdown binary is not installed, documentation cannot be generated." "red" echo "On Mac OS X, install brew with the following command line:" - echo ' ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"' + echo ' ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"' echo "Then use 'brew install markdown' from the command line to install markdown." exit 1 fi From fcb1f4665ff6615ac65d2e5394a2131c519f3a3c Mon Sep 17 00:00:00 2001 From: Alos Date: Sun, 16 Feb 2014 22:38:41 -0600 Subject: [PATCH 026/278] Fixed an ugly merge --- AppKit/CPTabView.j | 2 +- AppKit/CPTabViewItem.j | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 6aa303cae..e126d3ba1 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -390,7 +390,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, [_box setFrame:CGRectMake(0, origin, CGRectGetWidth(aFrame), CGRectGetHeight(aFrame) - segmentedHeight / 2)]; - + [self _updateItems]; [self _repositionTabs]; } } diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j index c2e4347ea..6c073b1d0 100644 --- a/AppKit/CPTabViewItem.j +++ b/AppKit/CPTabViewItem.j @@ -90,6 +90,7 @@ CPPressedTab = 2; - (void)setLabel:(CPString)aLabel { _label = aLabel; + [_tabView setNeedsLayout]; } /*! From 67767ede17ec432241937b1c77569cb0f9ea9b27 Mon Sep 17 00:00:00 2001 From: Alos Date: Sun, 16 Feb 2014 23:16:38 -0600 Subject: [PATCH 027/278] Fixed layoutSubviews Added missing setNeedsLayout --- AppKit/CPTabView.j | 1 + AppKit/CPTabViewItem.j | 1 + 2 files changed, 2 insertions(+) diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 6aa303cae..0e3ac7030 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -391,6 +391,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, [_box setFrame:CGRectMake(0, origin, CGRectGetWidth(aFrame), CGRectGetHeight(aFrame) - segmentedHeight / 2)]; + [self _updateItems]; [self _repositionTabs]; } } diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j index c2e4347ea..6c073b1d0 100644 --- a/AppKit/CPTabViewItem.j +++ b/AppKit/CPTabViewItem.j @@ -90,6 +90,7 @@ CPPressedTab = 2; - (void)setLabel:(CPString)aLabel { _label = aLabel; + [_tabView setNeedsLayout]; } /*! From 9d25f1c073bd460798a7bccfaae4396fa72afff7 Mon Sep 17 00:00:00 2001 From: Alos Date: Sun, 16 Feb 2014 23:16:38 -0600 Subject: [PATCH 028/278] Fixed layoutSubviews Added missing setNeedsLayout --- AppKit/CPTabView.j | 2 +- AppKit/CPTabViewItem.j | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 6aa303cae..e126d3ba1 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -390,7 +390,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, [_box setFrame:CGRectMake(0, origin, CGRectGetWidth(aFrame), CGRectGetHeight(aFrame) - segmentedHeight / 2)]; - + [self _updateItems]; [self _repositionTabs]; } } diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j index c2e4347ea..6c073b1d0 100644 --- a/AppKit/CPTabViewItem.j +++ b/AppKit/CPTabViewItem.j @@ -90,6 +90,7 @@ CPPressedTab = 2; - (void)setLabel:(CPString)aLabel { _label = aLabel; + [_tabView setNeedsLayout]; } /*! From 2e015c98161e565bfa0429da84a9ffb9255facff Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 17 Feb 2014 15:15:57 -0800 Subject: [PATCH 029/278] NEW: Doxygen theme refresh See screenshots attached to the PR for example. --- Tools/Documentation/doxygen.css | 210 ++++++++++++++++---------------- 1 file changed, 102 insertions(+), 108 deletions(-) diff --git a/Tools/Documentation/doxygen.css b/Tools/Documentation/doxygen.css index 3a4678440..e3afc6fcb 100644 --- a/Tools/Documentation/doxygen.css +++ b/Tools/Documentation/doxygen.css @@ -116,6 +116,7 @@ div.qindex, div.navtab { div.qindex, div.navpath { width: 100%; line-height: 140%; + background: white; } div.qindex+table { @@ -175,7 +176,11 @@ a.elRef { } a.code { - color: #4765A1; + color: #8AACE5; +} + +a.code:visited { + color: #8AACE5; } a.codeRef { @@ -188,24 +193,33 @@ dl.el { margin-left: -1cm; } +.fragment { + margin-top: 20px; + background-color: #27292C; + width: 100%; + border-radius: 3px; +} +.fragment .line:first-child { + padding-top: 20px; +} .fragment .line { font-family: Consolas, Courier, monospace, fixed; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ font-size: 11px; margin-bottom: 3px; + color: #d4d4d4; } .fragment .lineno { - color: #d4d4d4; + color: #555; margin-right: 10px; } .fragment .lineno a { - color: #d4d4d4; + color: #777; } pre.fragment { @@ -221,21 +235,14 @@ pre.fragment { } div.ah { - background-color: black; + background-color: #333; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); + background-color: #F6F6F6; } div.groupHeader { @@ -252,8 +259,8 @@ div.groupText { body { background-color: white; - color: black; - margin: 0; + color: #333; + margin: 0; } div.contents { @@ -301,7 +308,7 @@ table tr.memlist > td { tr.memlist td { font-family: Consolas, "Lucida Console", Courier, monospace; padding: .25em 0; - border-bottom: 1px solid #eee; + border-bottom: 1px solid #F6F6F6; } /* Don't show the [static] column in full member list */ @@ -340,16 +347,18 @@ address.footer { img.footer { border: 0px; vertical-align: middle; + height: 15px; + margin-top: -5px; } /* @group Code Colorization */ span.keyword { - color: #008000 + color: #D67C7B } span.keywordtype { - color: #604020 + color: #C0A7C6 } span.keywordflow { @@ -357,7 +366,7 @@ span.keywordflow { } span.comment { - color: #A085E4 + color: #6A6C73 } span.preprocessor { @@ -365,7 +374,7 @@ span.preprocessor { } span.stringliteral { - color: #002080 + color: #C2C67F; } span.charliteral { @@ -427,7 +436,7 @@ th.dirtab { hr { height: 0px; border: none; - border-top: 2px solid #ddd; + border-top: 1px solid #ddd; margin: 1em 0; } @@ -458,7 +467,7 @@ table.memberdecls { } .memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #f3f3f3; + border-top: 1px solid #F3F3F3; } .memItemLeft, .memTemplItemLeft { @@ -513,50 +522,27 @@ table.memberdecls { } .memproto, dl.reflist dt { - border-top: 1px solid #BDBDBD; - border-left: 1px solid #BDBDBD; - border-right: 1px solid #BDBDBD; padding: 6px 0px 6px 0px; color: #333; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 8px; - border-top-left-radius: 8px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 1px 1px 5px; - -moz-border-radius-topright: 3px; - -moz-border-radius-topleft: 3px; - /* webkit specific markup */ - -webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 3px; - -webkit-border-top-left-radius: 3px; - background-color: #E2E2E2; + font-weight: normal; + background-color: #F6F6F6; padding-left: 9px; } .memdoc > p { margin-top: 0; } + +.memdoc > p:last-child { + color: #AAAAAA; + font-size: 80%; +} .memdoc, dl.reflist dd { - border-bottom: 1px solid #BDBDBD; - border-left: 1px solid #BDBDBD; - border-right: 1px solid #BDBDBD; + border-bottom: 1px solid #F6F6F6; + border-left: 1px solid #F6F6F6; + border-right: 1px solid #F6F6F6; background-color: white; border-top-width: 0; - /* opera specific markup */ - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-bottomright: 3px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 1px 1px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - -webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.15); padding: .8em 12px 0 12px; } @@ -595,6 +581,15 @@ dl.reflist dt { color: #602020; white-space: nowrap; } + +.params .paramname { + color: #602020 !important; + white-space: nowrap; + text-align: right; + font-family: Consolas, "Lucida Console", Courier, monospace; + padding: 3px; +} + .paramname em { font-style: normal; } @@ -751,12 +746,6 @@ table.fieldtable { margin-bottom: 10px; border: 1px solid #A9B9D8; border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } .fieldtable td, .fieldtable th { @@ -788,12 +777,6 @@ table.fieldtable { padding-bottom: 4px; padding-top: 5px; text-align:left; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; border-bottom: 1px solid #A9B9D8; } @@ -811,12 +794,11 @@ table.fieldtable { .navpath ul { font-size: 11px; - background: -moz-linear-gradient(-90deg, whiteSmoke, #CCC); - background: -webkit-gradient(linear, left top, left bottom, from(whiteSmoke), to(#CCC)); + background-color: white; height:30px; line-height:30px; color:#333; - border:solid 1px #CCC; + border:solid 1px #f3f3f3; overflow:hidden; margin:0px; padding:0px; @@ -824,7 +806,7 @@ table.fieldtable { .navpath li { - list-style-type:none; + list-style-type: none; float:left; padding-left:10px; padding-right: 15px; @@ -843,6 +825,7 @@ table.fieldtable { color: #333; } + .navpath li.navelem a:hover { color:#6985BC; @@ -858,7 +841,7 @@ table.fieldtable { background-image:none; background-repeat:no-repeat; background-position:right; - color:#374E7C; + color:#aaa; font-size: 8pt; } @@ -902,17 +885,14 @@ div.header { background-color: #F9FAFC; margin: 0px; - border-bottom: 1px solid #C5CFE5; + border-bottom: 1px solid #eaeaea; } div.headertitle { padding: 10px 5px 10px 20px; - background: #333; - background: -moz-linear-gradient(-90deg, #444, #333); - background: -webkit-gradient(linear, left top, left bottom, from(#444), to(#333)); - color: white; - text-shadow: -1px -1px black; + background-color: #f6f6f6; + color: #333; min-height: 36px; } @@ -977,16 +957,24 @@ dl.bug border-collapse: separate; } -#projectlogo img +#projectlogo { border: 0px none; - max-height: 55px; padding-left: 5px; + margin-top: 8px; + display: block; + float: right; + width: 200px; +} + +#projectlogo img +{ + max-height: 40px; } #projectname { - font: 300% Tahoma, Arial,sans-serif; + font: 200% Tahoma, Arial,sans-serif; margin: 0px; padding: 2px 0px; } @@ -1010,13 +998,9 @@ dl.bug padding: 0px; margin: 0px; width: 100%; - border-bottom: 1px solid #CCC; color: white; font-weight: bold; - text-shadow: -1px -1px black; - background: #485D77; - background: -moz-linear-gradient(-90deg, #485D77, #252D38); - background: -webkit-gradient(linear, left top, left bottom, from(#485D77), to(#252D38)); + background: #FA7622; } .image @@ -1093,9 +1077,8 @@ dl.citelist dd { /* ADDITIONS */ .tabs, .tabs2, .tabs3 { - background: -moz-linear-gradient(-90deg, #fff, #eee); - background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee)); - border-bottom: 1px solid #ccc; + background: #F6F6F6 !important; + border-bottom: 1px solid #eaeaea; width: 100%; z-index: 101; font-size: 100%; @@ -1128,17 +1111,15 @@ dl.citelist dd { display: block; padding: 0 20px; font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; outline: none; background: none; color: #444; - border-right: 1px solid #ccc; + border-right: 1px solid #eaeaea; } .tablist a:hover { background: inherit; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); text-decoration: none; text-shadow: none; color: gray; @@ -1164,10 +1145,9 @@ dl.citelist dd { } .tablist li.current a { - background: -moz-linear-gradient(-90deg, #eee, #fff); - background: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#fff)); + background: #ddd; color: #444; - text-shadow: 0px 1px 1px #f2f2f2; + text-shadow: none; } .tabs2 li{ @@ -1191,7 +1171,7 @@ dl.citelist dd { #nav-tree li { white-space:nowrap; margin:0px; - padding:0px; + padding-top: 5px; } #nav-tree .plus { @@ -1199,17 +1179,23 @@ dl.citelist dd { } #nav-tree .selected { - background: -moz-linear-gradient(-90deg, #62B9ED, #308CD9) !important; - background: -webkit-gradient(linear, left top, left bottom, from(#62B9ED), to(#308CD9)) !important; - border-top: 1px solid #308CD9; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + background-color: #F87631 !important; + border-top: none; + background-image: none; } #nav-tree img { margin:0px; padding:0px; border:0px; - vertical-align: middle; + -webkit-filter: grayscale(1); + width: 8px; + height: 11px; + margin-top: -4px; +} + +#nav-tree .selected img { + -webkit-filter: grayscale(0); } #nav-tree a { @@ -1233,7 +1219,9 @@ dl.citelist dd { text-decoration:none; padding:2px; margin:0px; - color:#fff; + color: white; + text-shadow: none; + font-weight: bold; } #nav-tree .children_ul { @@ -1243,17 +1231,16 @@ dl.citelist dd { #nav-tree .item { margin:0px; - padding:0px; + padding:0px;; } #nav-tree { padding: 0px 0px; - background: #E8EAEE; + background: white; font-size:14px; overflow:auto; padding-right: 0px !important; margin-right: -5px !important; - background: #E8EAEE !important; } #doc-content { @@ -1280,7 +1267,7 @@ dl.citelist dd { } .ui-resizable-e { - background: #CCC !important; + background: #eaeaea !important; cursor:e-resize; height:100%; right:0; @@ -1314,7 +1301,14 @@ dl.citelist dd { right: 5px; } #nav-sync img { - width: 16px; + width: 10px; + height: 10px; } -} \ No newline at end of file +.mlabels-right { + visibility: hidden; +} + +.groupheader { + color: #FA7622; +} From 7d304fbd51e96e65de299397b361c21340607049 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 12 Feb 2014 16:59:13 -0800 Subject: [PATCH 030/278] First round of changes to change theming system to use arrays and not bitmasks as their underlying datatype --- AppKit/CPBrowser.j | 2 +- AppKit/CPButton.j | 2 +- AppKit/CPButtonBar.j | 12 +- AppKit/CPDatePicker/_CPDatePickerCalendar.j | 34 +- AppKit/CPScroller.j | 2 +- AppKit/CPSegmentedControl.j | 27 +- AppKit/CPStepper.j | 8 +- AppKit/CPTheme.j | 307 ++++++++++-------- AppKit/CPTokenField.j | 4 +- AppKit/CPView.j | 20 +- AppKit/Themes/Aristo/ThemeDescriptors.j | 287 +++++++++-------- AppKit/Themes/Aristo2/ThemeDescriptors.j | 328 ++++++++++---------- AppKit/_CPAutocompleteMenu.j | 4 +- Tests/AppKit/CPViewTest.j | 2 +- Tests/Manual/ThemeBrowser/AppController.j | 2 +- Tools/dump_theme/dump_theme | 2 +- Tools/nib2cib/NSTableColumn.j | 6 +- Tools/nib2cib/_NSCornerView.j | 2 +- 18 files changed, 544 insertions(+), 507 deletions(-) diff --git a/AppKit/CPBrowser.j b/AppKit/CPBrowser.j index a6a16306d..1dcdea712 100644 --- a/AppKit/CPBrowser.j +++ b/AppKit/CPBrowser.j @@ -980,7 +980,7 @@ var imageView = [self layoutEphemeralSubviewNamed:@"image-view" positioned:CPWindowAbove relativeToEphemeralSubviewNamed:nil], - isHighlighted = [self themeState] & CPThemeStateSelectedDataView; + isHighlighted = [self hasThemeState:CPThemeStateSelectedDataView]; [imageView setImage: _isLeaf ? (isHighlighted ? _highlightedBranchImage : _branchImage) : nil]; [imageView setImageScaling:CPImageScaleNone]; diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 213fc6ed0..99d3ca36b 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -268,7 +268,7 @@ CPButtonImageOffset = 3.0; break; case CPOffState: - [self unsetThemeState:CPThemeStateSelected | CPButtonStateMixed | CPThemeStateHighlighted]; + [self unsetThemeState:CPThemeState(CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted)]; } } diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index 8efe075b4..9de237609 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -250,15 +250,15 @@ currentButtonOffset += width - 1; } - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeStateNormal | CPThemeStateBordered]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateHighlighted | CPThemeStateBordered]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDisabled | CPThemeStateBordered]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateNormal, CPThemeStateBordered)]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateBordered)]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; [button setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateBordered]; // FIXME shouldn't need this - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeStateNormal | CPThemeStateBordered | CPPopUpButtonStatePullsDown]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateHighlighted | CPThemeStateBordered | CPPopUpButtonStatePullsDown]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDisabled | CPThemeStateBordered | CPPopUpButtonStatePullsDown]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; [self addSubview:button]; } diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index a7d713585..63dd02be9 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -1020,30 +1020,30 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateDisabled]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateDisabled]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateDisabled | CPThemeStateSelected] forThemeAttribute:@"font" inState:CPThemeStateDisabled | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateDisabled | CPThemeStateSelected] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateDisabled | CPThemeStateSelected] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateDisabled | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateDisabled | CPThemeStateSelected] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateDisabled | CPThemeStateSelected]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateHighlighted] forThemeAttribute:@"font" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateHighlighted]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"font" inState:CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-color" inState:CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateHighlighted | CPThemeStateSelected]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"font" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-shadow-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-shadow-offset" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState: CPThemeStateDisabled | CPThemeStateHighlighted ] forThemeAttribute:@"font" inState: CPThemeStateDisabled | CPThemeStateHighlighted ]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted ] forThemeAttribute:@"text-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted ]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted ] forThemeAttribute:@"text-shadow-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted ]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState: CPThemeStateDisabled | CPThemeStateHighlighted ] forThemeAttribute:@"text-shadow-offset" inState: CPThemeStateDisabled | CPThemeStateHighlighted]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; [self addSubview:_textField]; @@ -1156,7 +1156,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" var themeState = [self themeState], context = [[CPGraphicsContext currentContext] graphicsPort]; - if (themeState & CPThemeStateSelected) + if (themeState.hasThemeState(CPThemeStateSelected)) { [self setBackgroundColor:[_datePicker valueForThemeAttribute:@"bezel-color-calendar" inState:themeState]]; CGContextSetLineWidth(context, [_datePicker valueForThemeAttribute:@"border-width"]); diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 6561af112..c927a90e2 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -733,7 +733,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); var themeState = _themeState; if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) - themeState &= ~CPThemeStateHighlighted; + themeState = CPThemeState.subtractThemeStates(themeState, CPThemeStateHighlighted); return [self valueForThemeAttribute:anAttributeName inState:themeState]; } diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 3bf94a0c2..613c7e198 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -285,7 +285,6 @@ CPSegmentSwitchTrackingMomentary = 2; - (void)setWidth:(float)aWidth forSegment:(unsigned)aSegment { [_segments[aSegment] setWidth:aWidth]; - [self tileWithChangedSegment:aSegment]; } @@ -432,9 +431,9 @@ CPSegmentSwitchTrackingMomentary = 2; [_segments[aSegment] setEnabled:shouldBeEnabled]; if (shouldBeEnabled) - _themeStates[aSegment] &= ~CPThemeStateDisabled; + _themeStates[aSegment] = CPThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateDisabled); else - _themeStates[aSegment] |= CPThemeStateDisabled; + _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateDisabled); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -478,9 +477,9 @@ CPSegmentSwitchTrackingMomentary = 2; - (void)drawSegmentBezel:(int)aSegment highlight:(BOOL)shouldHighlight { if (shouldHighlight) - _themeStates[aSegment] |= CPThemeStateHighlighted; + _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateHighlighted); else - _themeStates[aSegment] &= ~CPThemeStateHighlighted; + _themeStates[aSegment] = CPThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateHighlighted); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -574,9 +573,10 @@ CPSegmentSwitchTrackingMomentary = 2; if (_segments.length <= 0) return; - var themeState = _themeStates[0]; + var themeState = _themeStates[0], + isDisabled = [self hasThemeState:CPThemeStateDisabled]; - themeState |= _themeState & CPThemeStateDisabled; + themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; var leftCapColor = [self valueForThemeAttribute:@"left-segment-bezel-color" inState:themeState], @@ -589,7 +589,7 @@ CPSegmentSwitchTrackingMomentary = 2; var themeState = _themeStates[_themeStates.length - 1]; - themeState |= _themeState & CPThemeStateDisabled; + themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; var rightCapColor = [self valueForThemeAttribute:@"right-segment-bezel-color" inState:themeState], @@ -604,7 +604,7 @@ CPSegmentSwitchTrackingMomentary = 2; { var themeState = _themeStates[i]; - themeState |= _themeState & CPThemeStateDisabled; + themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; var bezelColor = [self valueForThemeAttribute:@"center-segment-bezel-color" inState:themeState], @@ -642,11 +642,12 @@ CPSegmentSwitchTrackingMomentary = 2; if (i == count - 1) continue; - var borderState = _themeStates[i] | _themeStates[i + 1]; + var borderState = CPThemeState(_themeStates[i], _themeStates[i + 1]); - borderState = (borderState & CPThemeStateSelected & ~CPThemeStateHighlighted) ? CPThemeStateSelected : CPThemeStateNormal; + borderState = (borderState.hasThemeState(CPThemeStateSelected) && !borderState.hasThemeState(CPThemeStateHighlighted)) ? CPThemeStateSelected : CPThemeStateNormal; - borderState |= _themeState & CPThemeStateDisabled; + if (_themeState.hasThemeState(CPThemeStateDisabled)) + borderState = CPThemeState(borderState, CPThemeStateDisabled); var borderColor = [self valueForThemeAttribute:@"divider-bezel-color" inState:borderState], @@ -676,7 +677,7 @@ CPSegmentSwitchTrackingMomentary = 2; var segment = _segments[aSegment], segmentWidth = [segment width], - themeState = _themeStates[aSegment] | (_themeState & CPThemeStateDisabled), + themeState = _themeState.hasThemeState(CPThemeStateDisabled) ? CPThemeState(_themeStates[aSegment], CPThemeStateDisabled) : _themeStates[aSegment]; contentInset = [self valueForThemeAttribute:@"content-inset" inState:themeState], font = [self font]; diff --git a/AppKit/CPStepper.j b/AppKit/CPStepper.j index ba5da1462..f39e37fab 100644 --- a/AppKit/CPStepper.j +++ b/AppKit/CPStepper.j @@ -182,11 +182,11 @@ [_buttonDown setFrame:downFrame]; [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeStateBordered] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeStateBordered | CPThemeStateDisabled] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeStateBordered | CPThemeStateHighlighted] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)]; [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeStateBordered] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeStateBordered | CPThemeStateDisabled] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeStateBordered | CPThemeStateHighlighted] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)]; } - (void)_sizeToFit diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index dac337fd3..4401101e6 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -314,6 +314,159 @@ var CPThemeNameKey = @"CPThemeNameKey", @end +function ThemeState(stateNames) +{ + // We sort here to make toString and hasThemeState more efficient since those get called more. + this._stateNames = stateNames.sort(); +} + +ThemeState.prototype.toString = function() +{ + if (typeof this._stateNames === 'undefined') + this._stateNames = []; + + var stringOutput = this._stateNames[0]; + if (stringOutput === undefined) + return "" + + for (var stateIndex = 1; stateIndex < this._stateNames.length; stateIndex++) + stringOutput = stringOutput + "+" + this._stateNames[stateIndex]; + + return stringOutput; +} + +ThemeState.prototype.hasThemeState = function(aState) +{ + if (aState === undefined || aState === nil || aState._stateNames === undefined) + return false; + // We can do this in O(n) because both states have their stateNames already sorted. + var statePointer1 = 0, + statePointer2 = 0, + array1 = this._stateNames, + array2 = aState._stateNames, + stateLength1 = array1.length, + stateLength2 = array2.length; + + while (statePointer1 < stateLength1 && statePointer2 < stateLength2) + { + if (array1[statePointer1] < array2[statePointer2]) + statePointer1++; + + else if (array1[statePointer1] === array2[statePointer2]) + { + statePointer1++; + statePointer2++; + } + if (array1[statePointer1] > array2[statePointer2]) + return false; + } + if (statePointer2 < stateLength2) + return false; + else + return true; +} + +var CPThemeStates = {}; + +/* + * This method can be called in multiple ways: + * CPThemeState('state1') - creates a new CPThemeState that corresponds to the string 'state1' + * CPThemeState('state1', 'state2') - creates a new CPThemeState made up of both 'state1' or 'state2' + * CPThemeState('state1+state2') - The same as CPThemeState('state1', 'state2') + * CPThemeState(state1, state2) - creates a new CPThemeState that corresponds to both state1 or state2 + * where state1 and state2 are not strings but are themselves CPThemeStates. + */ +function CPThemeState() +{ + if (arguments.length < 1) + throw "CPThemeState() must be called with at least one string argument"; + + var stateNames = {}; + for (var argIndex = 0; argIndex < arguments.length; argIndex++) + { + if (arguments[argIndex] === [CPNull null] || arguments[argIndex] === nil || arguments[argIndex] === undefined) + continue; + + if (typeof arguments[argIndex] === 'object') + { + for (var stateIndex = 0; stateIndex < arguments[argIndex]._stateNames.length; stateIndex++) + { + var stateName = arguments[argIndex]._stateNames[stateIndex]; + if (!stateNames[stateName]) + stateNames[stateName] = true; + } + } + else + { + var allNames = arguments[argIndex].split('+'); + for (var nameIndex = 0; nameIndex < allNames.length; nameIndex++) + { + if (!stateNames[allNames[nameIndex]]) + stateNames[allNames[nameIndex]] = true; + } + } + } + + var stateNameKeys = []; + for (key in stateNames) + { + if (!stateNames.hasOwnProperty(key)) + continue; + stateNameKeys.push(key); + } + var themeState = CPThemeState._cacheThemeState(new ThemeState(stateNameKeys)); + return themeState; +} + +CPThemeState.subtractThemeStates = function(aState1, aState2) +{ + if (aState2 === undefined || aState2 === nil || aState2._stateNames === undefined) + return aState1; + + var statePointer1 = 0, + statePointer2 = 0, + array1 = aState1._stateNames, + array2 = aState2._stateNames, + stateLength1 = array1.length, + stateLength2 = array2.length, + newThemeState = new ThemeState([]); + + while (statePointer1 < stateLength1 && statePointer2 < stateLength2) + { + if (array1[statePointer1] == array2[statePointer2]) + { + statePointer1++; + statePointer2++; + } + else + { + newThemeState._stateNames.push(array1[statePointer1]); + statePointer1++; + } + } + + while (statePointer1 < stateLength1) + { + newThemeState._stateNames.push(array1[statePointer1]); + statePointer1++; + } + newThemeState._stateNames.sort(); + return CPThemeState._cacheThemeState(newThemeState); + +} + +CPThemeState._cacheThemeState = function(aState) +{ + // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. + var themeState = CPThemeStates[String(aState)]; + if (themeState === undefined) + { + themeState = aState; + CPThemeState[String(themeState)] = themeState; + } + return themeState; +} + @implementation _CPThemeKeyedUnarchiver : CPKeyedUnarchiver { CPBundle _bundle; @@ -341,71 +494,7 @@ var CPThemeNameKey = @"CPThemeNameKey", @end -var CPThemeStates = {}, - CPThemeStateNames = {}, - CPThemeStateCount = 0; - -function CPThemeState(aStateName) -{ - var state = CPThemeStates[aStateName]; - - if (state === undefined) - { - if (aStateName.indexOf('+') === -1) - state = 1 << CPThemeStateCount++; - else - { - var state = 0, - states = aStateName.split('+'), - count = states.length; - - while (count--) - { - var stateName = states[count], - individualState = CPThemeStates[stateName]; - - if (individualState === undefined) - { - individualState = 1 << CPThemeStateCount++; - CPThemeStates[stateName] = individualState; - CPThemeStateNames[individualState] = stateName; - } - - state |= individualState; - } - } - - CPThemeStates[aStateName] = state; - CPThemeStateNames[state] = aStateName; - } - - return state; -} - -function CPThemeStateName(aState) -{ - var name = CPThemeStateNames[aState]; - - if (name !== undefined) - return name; - - if (!(aState & (aState - 1))) - return ""; - - var state = 1, - name = ""; - - for (; state < aState; state <<= 1) - if (aState & state) - name += (name.length === 0 ? '' : '+') + CPThemeStateNames[state]; - - CPThemeStateNames[aState] = name; - - return name; -} - -CPThemeStateNames[0] = "normal"; -CPThemeStateNormal = CPThemeStates["normal"] = 0; +CPThemeStateNormal = CPThemeState("normal"); CPThemeStateDisabled = CPThemeState("disabled"); CPThemeStateHovered = CPThemeState("hovered"); CPThemeStateHighlighted = CPThemeState("highlighted"); @@ -466,7 +555,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); - (BOOL)isTrivial { - return ([_values count] === 1) && (Number([_values allKeys][0]) === CPThemeStateNormal); + return ([_values count] === 1) && ([_values allKeys][0] === CPThemeStateNormal); } - (void)setValue:(id)aValue @@ -483,10 +572,14 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { _cache = { }; - if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:String(aState)]; - else - [_values setObject:aValue forKey:String(aState)]; + var componentStates = aState._stateNames; + for (var stateIndex = 0; stateIndex < [componentStates count]; stateIndex++) + { + if ((aValue === undefined) || (aValue === nil)) + [_values removeObjectForKey:componentStates[stateIndex]]; + else + [_values setObject:aValue forKey:componentStates[stateIndex]]; + } } - (id)value @@ -494,46 +587,27 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); return [self valueForState:CPThemeStateNormal]; } +// If aState is a state comprised of multiple CPThemeStates, this will return the value for the first state it finds. - (id)valueForState:(CPThemeState)aState { - var value = _cache[aState]; + var stateName = String(aState); + var value = _cache[stateName]; // This can be nil. if (value !== undefined) return value; - value = [_values objectForKey:String(aState)]; + value = [_values objectForKey:stateName]; // If we don't have a value, and we have a non-normal state... if ((value === undefined || value === nil) && aState !== CPThemeStateNormal) { - // If this is a composite state (not a power of 2), find the closest partial subset match. - if (aState & (aState - 1)) + var stateCount = [aState._stateNames count]; + for (var stateIndex = 0; stateIndex < stateCount; stateIndex++) { - var highestOneCount = 0, - states = [_values allKeys], - count = states.length; - - while (count--) - { - // states[count] is a string! - var state = Number(states[count]); - - // A & B = A iff A < B - if ((state & aState) === state) - { - var oneCount = cachedNumberOfOnes[state]; - - if (oneCount === undefined) - oneCount = numberOfOnes(state); - - if (oneCount > highestOneCount) - { - highestOneCount = oneCount; - value = [_values objectForKey:String(state)]; - } - } - } + value = [_values objectForKey:aState._stateNames[stateIndex]]; + if (value !== undefined && value !== nil) + break; } // Still don't have a value? OK, let's use the normal value. @@ -554,7 +628,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); value = nil; } - _cache[aState] = value; + _cache[stateName] = value; return value; } @@ -633,8 +707,8 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var onlyKey = keys[0]; - if (Number(onlyKey) !== CPThemeStateNormal) - [aCoder encodeObject:CPThemeStateName(Number(onlyKey)) forKey:@"state"]; + if (onlyKey !== CPThemeStateNormal) + [aCoder encodeObject:String(onlyKey) forKey:@"state"]; [aCoder encodeObject:[_values objectForKey:onlyKey] forKey:@"value"]; } @@ -646,7 +720,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var key = keys[count]; - [encodedValues setObject:[_values objectForKey:key] forKey:CPThemeStateName(Number(key))]; + [encodedValues setObject:[_values objectForKey:key] forKey:String(key)]; } [aCoder encodeObject:encodedValues forKey:@"values"]; @@ -655,35 +729,6 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); @end -var cachedNumberOfOnes = [ 0 /*000000*/, 1 /*000001*/, 1 /*000010*/, 2 /*000011*/, 1 /*000100*/, 2 /*000101*/, 2 /*000110*/, - 3 /*000111*/, 1 /*001000*/, 2 /*001001*/, 2 /*001010*/, 3 /*001011*/, 2 /*001100*/, 3 /*001101*/, - 3 /*001110*/, 4 /*001111*/, 1 /*010000*/, 2 /*010001*/, 2 /*010010*/, 3 /*010011*/, 2 /*010100*/, - 3 /*010101*/, 3 /*010110*/, 4 /*010111*/, 2 /*011000*/, 3 /*011001*/, 3 /*011010*/, 4 /*011011*/, - 3 /*011100*/, 4 /*011101*/, 4 /*011110*/, 5 /*011111*/, 1 /*100000*/, 2 /*100001*/, 2 /*100010*/, - 3 /*100011*/, 2 /*100100*/, 3 /*100101*/, 3 /*100110*/, 4 /*100111*/, 2 /*101000*/, 3 /*101001*/, - 3 /*101010*/, 4 /*101011*/, 3 /*101100*/, 4 /*101101*/, 4 /*101110*/, 5 /*101111*/, 2 /*110000*/, - 3 /*110001*/, 3 /*110010*/, 4 /*110011*/, 3 /*110100*/, 4 /*110101*/, 4 /*110110*/, 5 /*110111*/, - 3 /*111000*/, 4 /*111001*/, 4 /*111010*/, 5 /*111011*/, 4 /*111100*/, 5 /*111101*/, 5 /*111110*/, - 6 /*111111*/ ]; - -var numberOfOnes = function(aNumber) -{ - var count = 0, - slot = aNumber; - - while (aNumber) - { - ++count; - aNumber &= (aNumber - 1); - } - - cachedNumberOfOnes[slot] = count; - - return count; -}; - -numberOfOnes.displayName = "numberOfOnes"; - function CPThemeAttributeEncode(aCoder, aThemeAttribute) { var values = aThemeAttribute._values, diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 05fa8e13d..ebfb0cf7b 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1394,7 +1394,7 @@ CPTokenFieldDeleteButtonType = 1; var r = [super setThemeState:aState]; // Share hover state with the disclosure and delete buttons. - if (aState & CPThemeStateHovered) + if (aState.hasThemeState(CPThemeStateHovered)) { [_disclosureButton setThemeState:CPThemeStateHovered]; [_deleteButton setThemeState:CPThemeStateHovered]; @@ -1408,7 +1408,7 @@ CPTokenFieldDeleteButtonType = 1; var r = [super unsetThemeState:aState]; // Share hover state with the disclosure and delete button. - if (aState & CPThemeStateHovered) + if (aState.hasThemeState(CPThemeStateHovered)) { [_disclosureButton unsetThemeState:CPThemeStateHovered]; [_deleteButton unsetThemeState:CPThemeStateHovered]; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 7eb044c58..aaf376585 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2889,21 +2889,15 @@ setBoundsOrigin: - (BOOL)hasThemeState:(CPThemeState)aState { - // Because CPThemeStateNormal is defined as 0 we need to check for it explicitly here - if (aState === CPThemeStateNormal && _themeState === CPThemeStateNormal) - return YES; - - return !!(_themeState & ((typeof aState === "string") ? CPThemeState(aState) : aState)); + return _themeState.hasThemeState(aState); } - (BOOL)setThemeState:(CPThemeState)aState { - var newState = (typeof aState === "string") ? CPThemeState(aState) : aState; - - if (_themeState & newState) + if (_themeState.hasThemeState(aState)) return NO; - _themeState |= newState; + _themeState = CPThemeState(_themeState, aState); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -2913,12 +2907,10 @@ setBoundsOrigin: - (BOOL)unsetThemeState:(CPThemeState)aState { - var newState = ((typeof aState === "string") ? CPThemeState(aState) : aState); - - if (!(_themeState & newState)) + if (!_themeState.hasThemeState(aState)) return NO; - _themeState &= ~newState; + _themeState = CPThemeState.subtractThemeStates(_themeState, aState); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -3452,7 +3444,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", [aCoder encodeConditionalObject:previousKeyView forKey:CPViewPreviousKeyViewKey]; [aCoder encodeObject:[self themeClass] forKey:CPViewThemeClassKey]; - [aCoder encodeInt:CPThemeStateName(_themeState) forKey:CPViewThemeStateKey]; + [aCoder encodeObject:String(_themeState) forKey:CPViewThemeStateKey]; for (var attributeName in _themeAttributes) if (_themeAttributes.hasOwnProperty(attributeName)) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index c37ed8181..78f88313a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -502,29 +502,29 @@ var themedButtonValues = nil, [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBordered], [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateBordered], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateBordered | CPThemeStateDisabled], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateBordered], [@"line-break-mode", CPLineBreakByTruncatingTail], [@"bezel-color", bezelColor, CPThemeStateBordered], - [@"bezel-color", highlightedBezelColor, CPThemeStateBordered | CPThemeStateHighlighted], - [@"bezel-color", disabledBezelColor, CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color", defaultBezelColor, CPThemeStateBordered | CPThemeStateDefault], - [@"bezel-color", defaultHighlightedBezelColor, CPThemeStateBordered | CPThemeStateHighlighted | CPThemeStateDefault], - [@"bezel-color", defaultDisabledBezelColor, CPThemeStateBordered | CPThemeStateDefault | CPThemeStateDisabled], + [@"bezel-color", highlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color", disabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", defaultBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], + [@"bezel-color", defaultHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault)], + [@"bezel-color", defaultDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0.0, 7.0, 0.0, 7.0), CPThemeStateBordered], - [@"bezel-color", roundedBezelColor, CPThemeStateBordered | CPButtonStateBezelStyleRounded], - [@"bezel-color", roundedHighlightedBezelColor, CPThemeStateBordered | CPThemeStateHighlighted | CPButtonStateBezelStyleRounded], - [@"bezel-color", roundedDisabledBezelColor, CPThemeStateBordered | CPThemeStateDisabled | CPButtonStateBezelStyleRounded], - [@"bezel-color", defaultRoundedBezelColor, CPThemeStateBordered | CPThemeStateDefault | CPButtonStateBezelStyleRounded], - [@"bezel-color", defaultRoundedHighlightedBezelColor, CPThemeStateBordered | CPThemeStateHighlighted | CPThemeStateDefault | CPButtonStateBezelStyleRounded], - [@"bezel-color", defaultRoundedDisabledBezelColor, CPThemeStateBordered | CPThemeStateDefault | CPThemeStateDisabled | CPButtonStateBezelStyleRounded], - [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeStateBordered | CPButtonStateBezelStyleRounded], + [@"bezel-color", roundedBezelColor, CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], + [@"bezel-color", roundedHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded)], + [@"bezel-color", roundedDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], + [@"bezel-color", defaultRoundedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], + [@"bezel-color", defaultRoundedHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], + [@"bezel-color", defaultRoundedDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], + [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateDisabled], [@"text-color", defaultTextColor, CPThemeStateDefault], - [@"text-color", defaultDisabledTextColor, CPThemeStateDefault | CPThemeStateDisabled], + [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], [@"min-size", CGSizeMake(0.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)], @@ -588,15 +588,15 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", color, CPThemeStateBordered], - [@"bezel-color", disabledColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", disabledColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0, 21.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]], - [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateBordered | CPThemeStateDisabled], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeStateBordered | CPThemeStateDisabled], + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"min-size", CGSizeMake(32.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)] @@ -631,16 +631,16 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", color, CPPopUpButtonStatePullsDown | CPThemeStateBordered], - [@"bezel-color", disabledColor, CPPopUpButtonStatePullsDown | CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", color, CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered)], + [@"bezel-color", disabledColor, CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0, 27.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]], - [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateBordered | CPThemeStateDisabled], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeStateBordered | CPThemeStateDisabled], + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"min-size", CGSizeMake(32.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)] @@ -761,35 +761,35 @@ var themedButtonValues = nil, [@"track-inset", CGInsetMake(2.0, 0.0, 2.0, 0.0), CPThemeStateVertical], [@"track-border-overlay", 12.0, CPThemeStateVertical], [@"knob-slot-color", [CPNull null], CPThemeStateVertical], - [@"knob-slot-color", trackColor, CPThemeStateVertical | CPThemeStateSelected], - [@"knob-slot-color", trackColorLight, CPThemeStateVertical | CPThemeStateSelected | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColorDark, CPThemeStateVertical | CPThemeStateSelected | CPThemeStateScrollerKnobDark], + [@"knob-slot-color", trackColor, CPThemeState(CPThemeStateVertical, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLight, CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorDark, CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColor, CPThemeStateVertical], - [@"knob-color", knobColorLight, CPThemeStateVertical | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorDark, CPThemeStateVertical | CPThemeStateScrollerKnobDark], + [@"knob-color", knobColorLight, CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorDark, CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobDark)], [@"increment-line-color", [CPNull null], CPThemeStateVertical], [@"decrement-line-color", [CPNull null], CPThemeStateVertical], [@"decrement-line-size", CGSizeMakeZero(), CPThemeStateVertical], [@"increment-line-size", CGSizeMakeZero(), CPThemeStateVertical], // Legacy - [@"scroller-width", 14.0, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"track-border-overlay", 0.0, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateSelected], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateSelected | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateSelected | CPThemeStateScrollerKnobDark], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"knob-color", knobColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], - [@"increment-line-color", incrementColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"decrement-line-color", decrementColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy] + [@"scroller-width", 14.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"track-border-overlay", 0.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"increment-line-color", incrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"decrement-line-color", decrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)] ]; [self registerThemeValues:themedVerticalScrollerValues forView:scroller]; @@ -884,8 +884,8 @@ var themedButtonValues = nil, [@"track-border-overlay", 12.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor, CPThemeStateSelected], - [@"knob-slot-color", trackColorLight, CPThemeStateSelected | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColorDark, CPThemeStateSelected | CPThemeStateScrollerKnobDark], + [@"knob-slot-color", trackColorLight, CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorDark, CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColor], [@"knob-color", knobColorLight, CPThemeStateScrollerKnobLight], [@"knob-color", knobColorDark, CPThemeStateScrollerKnobDark], @@ -898,12 +898,12 @@ var themedButtonValues = nil, [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateScrollViewLegacy], [@"track-border-overlay", 0.0, CPThemeStateScrollViewLegacy], [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateSelected], - [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], [@"increment-line-color", incrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-color", decrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-size", CGSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy], @@ -965,8 +965,8 @@ var themedButtonValues = nil, [ [@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled], [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelDisabledColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled], @@ -978,30 +978,30 @@ var themedButtonValues = nil, [@"bezel-inset", CGInsetMakeZero(), CPThemeStateBezeled], [@"content-inset", CGInsetMake(8.0, 7.0, 7.0, 8.0), CPThemeStateBezeled], - [@"text-color", textDisabledColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"text-color", textDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], - [@"text-color", placeholderColor, CPTextFieldStatePlaceholder | CPThemeStateDisabled], + [@"text-color", placeholderColor, CPThemeState(CPTextFieldStatePlaceholder, CPThemeStateDisabled)], [@"line-break-mode", CPLineBreakByTruncatingTail, CPThemeStateTableDataView], [@"vertical-alignment", CPCenterVerticalTextAlignment, CPThemeStateTableDataView], [@"content-inset", CGInsetMake(3.0, 3.0, 3.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], CPThemeStateTableDataView | CPThemeStateSelectedDataView], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateTableDataView | CPThemeStateSelectedDataView], - [@"text-color", [CPColor blackColor], CPThemeStateTableDataView | CPThemeStateEditable], - [@"text-color", [CPColor blackColor], CPThemeStateTableDataView | CPThemeStateSelectedDataView | CPThemeStateEditing], - [@"text-color", [CPColor blackColor], CPThemeStateTableDataView | CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), CPThemeStateTableDataView | CPThemeStateEditing], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateTableDataView | CPThemeStateEditing], - [@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), CPThemeStateTableDataView | CPThemeStateEditing], + [@"text-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditable)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateBezeled)], + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeStateTableDataView | CPThemeStateGroupRow], - [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeStateTableDataView | CPThemeStateGroupRow | CPThemeStateSelectedDataView], - [@"text-shadow-color", [CPColor whiteColor], CPThemeStateTableDataView | CPThemeStateGroupRow], - [@"text-shadow-offset", CGSizeMake(0,1), CPThemeStateTableDataView | CPThemeStateGroupRow], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeStateTableDataView | CPThemeStateGroupRow | CPThemeStateSelectedDataView], - [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeStateTableDataView | CPThemeStateGroupRow] + [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], + [@"text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], + [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; @@ -1045,21 +1045,21 @@ var themedButtonValues = nil, // Global for reuse by subclasses themedRoundedTextFieldValues = [ - [@"bezel-color", bezelColor, CPTextFieldStateRounded | CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelDisabledColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize]], // The new bezel is one pixel shorter, so we add one extra empty pixel at the bottom // for size compatibility with an earlier version. - [@"bezel-inset", CGInsetMake(0.0, 0.0, 1.0, 0.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 13.0, 7.0, 14.0), CPTextFieldStateRounded | CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 1.0, 0.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"content-inset", CGInsetMake(8.0, 13.0, 7.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"text-color", textDisabledColor, CPTextFieldStateRounded | CPThemeStateDisabled], - [@"text-color", placeholderColor, CPTextFieldStateRounded | CPTextFieldStatePlaceholder], + [@"text-color", textDisabledColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateDisabled)], + [@"text-color", placeholderColor, CPThemeState(CPTextFieldStateRounded, CPTextFieldStatePlaceholder)], - [@"min-size", CGSizeMake(0.0, 30.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"max-size", CGSizeMake(-1.0, 30.0), CPTextFieldStateRounded | CPThemeStateBezeled] + [@"min-size", CGSizeMake(0.0, 30.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"max-size", CGSizeMake(-1.0, 30.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)] ]; [self registerThemeValues:themedRoundedTextFieldValues forView:textfield]; @@ -1135,7 +1135,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelDisabledColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont boldSystemFontOfSize:13.0]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.8]], @@ -1147,8 +1147,8 @@ var themedButtonValues = nil, [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal | CPThemeStateDisabled], - [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected | CPThemeStateDisabled], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], + [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], @@ -1209,12 +1209,12 @@ var themedButtonValues = nil, [ [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:1.0], CPThemeStateNormal], [@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], CPThemeStateNormal | CPThemeStateDisabled], - [@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeStateSelected | CPThemeStateDisabled], + [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], + [@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"bezel-color-calendar", [CPColor whiteColor]], [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:0.5], CPThemeStateSelected | CPThemeStateDisabled], + [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"bezel-color-clock", clockImageColor], [@"bezel-color-clock", clockImageColorDisabled, CPThemeStateDisabled], @@ -1258,35 +1258,35 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted], - [@"tile-text-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted | CPThemeStateDisabled], + [@"tile-text-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], CPThemeStateSelected], [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateSelected], [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateSelected], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateSelected], - [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted | CPThemeStateSelected], + [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"tile-text-color", [CPColor colorWithCalibratedRed:179.0 / 255.0 green:179.0 / 255.0 blue:179.0 / 255.0 alpha:1.0], CPThemeStateDisabled], [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateDisabled], [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled], - [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], + [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled | CPThemeStateSelected], + [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], [@"arrow-image-left", arrowImageLeft], [@"arrow-image-right", arrowImageRight], @@ -1347,7 +1347,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBezeled], // Bezeled token field with no tokens - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeStateBezeled | CPTextFieldStatePlaceholder] + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPTextFieldStatePlaceholder)] ]; [self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues]; @@ -1389,8 +1389,8 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelHighlightedColor, CPThemeStateBezeled | CPThemeStateHighlighted], - [@"bezel-color", bezelColorDisabled, CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateHighlighted)], + [@"bezel-color", bezelColorDisabled, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"text-color", textColor], [@"text-color", textHighlightedColor, CPThemeStateHighlighted], @@ -1422,8 +1422,8 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], [@"bezel-color", nil, CPThemeStateBordered], - [@"bezel-color", arrowImage, CPThemeStateBordered | CPThemeStateHovered], - [@"bezel-color", arrowImageHiglighted, CPThemeStateBordered | CPThemeStateHovered | CPThemeStateHighlighted], + [@"bezel-color", arrowImage, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], + [@"bezel-color", arrowImageHiglighted, CPThemeState(CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(7.0, 6.0)], [@"max-size", CGSizeMake(7.0, 6.0)], @@ -1445,15 +1445,15 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", bezelColor, CPThemeStateBordered | CPThemeStateHovered], - [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color", bezelHighlightedColor, CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], + [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(8.0, 8.0)], [@"max-size", CGSizeMake(8.0, 8.0)], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered], - [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"offset", CGPointMake(17, 6), CPThemeStateBordered] ]; @@ -1509,9 +1509,9 @@ var themedButtonValues = nil, [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], [@"content-border-color", contentBorderColor, CPThemeStateBordered], - [@"bezel-color", bezelHighlightedColor, CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color", bezelDisabledColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; @@ -1573,24 +1573,24 @@ var themedButtonValues = nil, overrides = [ - [@"bezel-color", bezelColor, CPThemeStateBezeled | CPComboBoxStateButtonBordered], - [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPComboBoxStateButtonBordered | CPThemeStateEditing], - [@"bezel-color", bezelDisabledColor, CPThemeStateBezeled | CPComboBoxStateButtonBordered | CPThemeStateDisabled], + [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing)], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled)], [@"bezel-color", bezelNoBorderColor, CPThemeStateBezeled], - [@"bezel-color", bezelNoBorderFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelNoBorderDisabledColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelNoBorderFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelNoBorderDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"border-inset", CGInsetMake(3.0, 3.0, 3.0, 3.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], // The right border inset has to make room for the focus ring and popup button - [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), CPThemeStateBezeled | CPComboBoxStateButtonBordered], + [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeStateBezeled | CPComboBoxStateButtonBordered], + [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], // Because combo box uses a three-part bezel, the height is fixed @@ -1621,10 +1621,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image-offset", CPRadioImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1657,10 +1657,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image-offset", CPCheckBoxImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1691,8 +1691,8 @@ var themedButtonValues = nil, themeValues = [ [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPButtonStateMixed | CPThemeStateHighlighted], - [@"image", mixedDisabledImage, CPButtonStateMixed | CPThemeStateDisabled], + [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], + [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)], [@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed], [@"max-size", CGSizeMake(-1.0, -1.0)] ]; @@ -1755,29 +1755,29 @@ var themedButtonValues = nil, [ [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], - [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"center-segment-bezel-color", centerHighlightedBezelColor, CPThemeStateSelected], [@"center-segment-bezel-color", pushedCenterBezelColor, CPThemeStateHighlighted], - [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], - [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"divider-bezel-color", dividerHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", leftBezelColor, CPThemeStateNormal], [@"left-segment-bezel-color", inactiveLeftBezelColor, CPThemeStateDisabled], - [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"left-segment-bezel-color", leftHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", pushedLeftBezelColor, CPThemeStateHighlighted], - [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"right-segment-bezel-color", rightBezelColor, CPThemeStateNormal], [@"right-segment-bezel-color", inactiveRightBezelColor, CPThemeStateDisabled], - [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"right-segment-bezel-color", rightHighlightedBezelColor, CPThemeStateSelected], [@"right-segment-bezel-color", pushedRightBezelColor, CPThemeStateHighlighted], - [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"content-inset", CGInsetMake(0.0, 4.0, 0.0, 4.0), CPThemeStateNormal], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], @@ -1878,7 +1878,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeStateVertical | CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)], [@"knob-size", CGSizeMake(23.0, 24.0)], [@"knob-color", knobColor], @@ -1913,12 +1913,12 @@ var themedButtonValues = nil, themedCircularSliderValues = [ [@"track-color", trackColor, CPThemeStateCircular], - [@"track-color", trackDisabledColor, CPThemeStateCircular | CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)], [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], [@"knob-color", knobColor, CPThemeStateCircular], - [@"knob-color", knobHighlightedColor, CPThemeStateCircular | CPThemeStateHighlighted], - [@"knob-color", knobDisabledColor, CPThemeStateCircular | CPThemeStateDisabled] + [@"knob-color", knobHighlightedColor, CPThemeState(CPThemeStateCircular, CPThemeStateHighlighted)], + [@"knob-color", knobDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)] ]; [self registerThemeValues:themedCircularSliderValues forView:slider]; @@ -2029,7 +2029,7 @@ var themedButtonValues = nil, [@"background-color", pressed, CPThemeStateHighlighted], [@"background-color", highlighted, CPThemeStateSelected], - [@"background-color", highlightedPressed, CPThemeStateHighlighted | CPThemeStateSelected] + [@"background-color", highlightedPressed, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] ]; [self registerThemeValues:themedColumnHeaderValues forView:header]; @@ -2260,10 +2260,10 @@ var themedButtonValues = nil, [ [@"bezel-color-up-button", bezelUp, CPThemeStateBordered], [@"bezel-color-down-button", bezelDown, CPThemeStateBordered], - [@"bezel-color-up-button", bezelUpDisabled, CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color-down-button", bezelDownDisabled, CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color-up-button", bezelUpHighlighted, CPThemeStateBordered | CPThemeStateHighlighted], - [@"bezel-color-down-button", bezelDownHighlighted, CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color-up-button", bezelUpDisabled, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color-down-button", bezelDownDisabled, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color-up-button", bezelUpHighlighted, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color-down-button", bezelDownHighlighted, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(25.0, 25.0)], [@"up-button-size", CGSizeMake(19.0, 13.0)], [@"down-button-size", CGSizeMake(19.0, 12.0)] @@ -2429,6 +2429,7 @@ var themedButtonValues = nil, return box; } + + (CPLevelIndicator)themedLevelIndicator { var levelIndicator = [[CPLevelIndicator alloc] initWithFrame:CGRectMake(0,0,100,100)], @@ -2803,7 +2804,6 @@ var themedButtonValues = nil, + (_CPToolbarView)themedToolbarView { var toolbarView = [[_CPToolbarView alloc] initWithFrame:CGRectMakeZero()], - toolbarExtraItemsImage = PatternImage(@"toolbar-view-extra-items-image.png", 10.0, 15.0), toolbarExtraItemsAlternateImage = PatternImage(@"toolbar-view-extra-items-alternate-image.png", 10.0, 15.0), toolbarSeparatorColor = PatternColor([ @@ -3014,7 +3014,6 @@ var themedButtonValues = nil, @end - @implementation AristoHUDThemeDescriptor : BKThemeDescriptor { } @@ -3094,7 +3093,7 @@ var themedButtonValues = nil, // var scroller = [AristoThemeDescriptor makeVerticalScroller], // overrides = // [ -// [@"knob-color", nil, CPThemeStateVertical | CPThemeStateDisabled] +// [@"knob-color", nil, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)] // ]; // // [self registerThemeValues:[self defaultThemeOverridesAddedTo:overrides] forView:scroller inherit:themedVerticalScrollerValues]; diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index 4b4bbf13b..be515268b 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -139,14 +139,14 @@ var themedButtonValues = nil, [@"text-shadow-color", regularTextShadowColor, CPThemeStateBordered], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], - [@"text-color", defaultTextColor, CPThemeStateBordered | CPThemeStateDefault], + [@"text-color", defaultTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], [@"text-color", defaultTextColor, CPThemeStateDefault], - [@"text-shadow-color", defaultTextShadowColor, CPThemeStateBordered | CPThemeStateDefault], + [@"text-shadow-color", defaultTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], - [@"text-color", defaultDisabledTextColor, CPThemeStateDefault | CPThemeStateDisabled], - [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeStateDefault | CPThemeStateDisabled], + [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], + [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], - [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeStateDefault | CPThemeStateDisabled], + [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateBordered], [@"line-break-mode", CPLineBreakByTruncatingTail], @@ -155,41 +155,41 @@ var themedButtonValues = nil, CPThemeStateBordered], [@"bezel-color", bezelColor["@"]["highlighted"], - CPThemeStateBordered | CPThemeStateHighlighted], + CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"bezel-color", bezelColor["@"]["disabled"], - CPThemeStateBordered | CPThemeStateDisabled], + CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"bezel-color", bezelColor["default"]["@"], - CPThemeStateBordered | CPThemeStateDefault], + CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], [@"bezel-color", bezelColor["default"]["highlighted"], - CPThemeStateBordered | CPThemeStateHighlighted | CPThemeStateDefault], + CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault)], [@"bezel-color", bezelColor["default"]["disabled"], - CPThemeStateBordered | CPThemeStateDefault | CPThemeStateDisabled], + CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0.0, 7.0, 0.0, 7.0), CPThemeStateBordered], [@"bezel-color", roundedBezelColor["@"]["@"], - CPThemeStateBordered | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["@"]["highlighted"], - CPThemeStateBordered | CPThemeStateHighlighted | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["@"]["disabled"], - CPThemeStateBordered | CPThemeStateDisabled | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["default"]["@"], - CPThemeStateBordered | CPThemeStateDefault | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["default"]["highlighted"], - CPThemeStateBordered | CPThemeStateHighlighted | CPThemeStateDefault | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["default"]["disabled"], - CPThemeStateBordered | CPThemeStateDefault | CPThemeStateDisabled | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], - [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeStateBordered | CPButtonStateBezelStyleRounded], + [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], [@"min-size", CGSizeMake(0.0, CPButtonDefaultHeight)], [@"max-size", CGSizeMake(-1.0, CPButtonDefaultHeight)], @@ -235,7 +235,7 @@ var themedButtonValues = nil, var button = [self button]; [button setTitle:@"OK"]; - [button setThemeState:CPButtonStateBezelStyleRounded | CPThemeStateDefault]; + [button setThemeState:CPThemeState(CPButtonStateBezelStyleRounded, CPThemeStateDefault)]; return button; } @@ -256,15 +256,15 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", color["@"], CPThemeStateBordered], - [@"bezel-color", color["disabled"], CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", color["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0, 21.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:12.0]], [@"text-color", regularTextColor], [@"text-shadow-color", regularTextShadowColor], - [@"text-color", regularDisabledTextColor, CPThemeStateBordered | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"min-size", CGSizeMake(32.0, 25.0)], [@"max-size", CGSizeMake(-1.0, 25.0)] @@ -293,16 +293,16 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", color["@"], CPPopUpButtonStatePullsDown | CPThemeStateBordered], - [@"bezel-color", color["disabled"], CPPopUpButtonStatePullsDown | CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", color["@"], CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered)], + [@"bezel-color", color["disabled"], CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0, 27.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:12.0]], [@"text-color", regularTextColor], [@"text-shadow-color", regularTextShadowColor], - [@"text-color", regularDisabledTextColor, CPThemeStateBordered | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"min-size", CGSizeMake(32.0, 25.0)], [@"max-size", CGSizeMake(-1.0, 25.0)] @@ -403,35 +403,35 @@ var themedButtonValues = nil, [@"track-inset", CGInsetMake(2.0, 0.0, 2.0, 0.0), CPThemeStateVertical], [@"track-border-overlay", 12.0, CPThemeStateVertical], [@"knob-slot-color", [CPNull null], CPThemeStateVertical], - [@"knob-slot-color", trackColor["@"], CPThemeStateVertical | CPThemeStateSelected], - [@"knob-slot-color", trackColor["light"], CPThemeStateVertical | CPThemeStateSelected | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColor["dark"], CPThemeStateVertical | CPThemeStateSelected | CPThemeStateScrollerKnobDark], + [@"knob-slot-color", trackColor["@"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected)], + [@"knob-slot-color", trackColor["light"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColor["dark"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColor["@"], CPThemeStateVertical], - [@"knob-color", knobColor["light"], CPThemeStateVertical | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColor["dark"], CPThemeStateVertical | CPThemeStateScrollerKnobDark], + [@"knob-color", knobColor["light"], CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColor["dark"], CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobDark)], [@"increment-line-color", [CPNull null], CPThemeStateVertical], [@"decrement-line-color", [CPNull null], CPThemeStateVertical], [@"decrement-line-size", CGSizeMakeZero(), CPThemeStateVertical], [@"increment-line-size", CGSizeMakeZero(), CPThemeStateVertical], // Legacy - [@"scroller-width", 14.0, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"track-border-overlay", 0.0, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateSelected], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateSelected | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateSelected | CPThemeStateScrollerKnobDark], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], - [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"knob-color", knobColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], - [@"increment-line-color", incrementColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"decrement-line-color", decrementColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], - [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy] + [@"scroller-width", 14.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"track-border-overlay", 0.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"increment-line-color", incrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"decrement-line-color", decrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)] ]; [self registerThemeValues:themedVerticalScrollerValues forView:scroller]; @@ -484,8 +484,8 @@ var themedButtonValues = nil, [@"track-border-overlay", 12.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor["@"], CPThemeStateSelected], - [@"knob-slot-color", trackColor["light"], CPThemeStateSelected | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColor["dark"], CPThemeStateSelected | CPThemeStateScrollerKnobDark], + [@"knob-slot-color", trackColor["light"], CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColor["dark"], CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColor["@"]], [@"knob-color", knobColor["light"], CPThemeStateScrollerKnobLight], [@"knob-color", knobColor["dark"], CPThemeStateScrollerKnobDark], @@ -498,12 +498,12 @@ var themedButtonValues = nil, [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateScrollViewLegacy], [@"track-border-overlay", 0.0, CPThemeStateScrollViewLegacy], [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateSelected], - [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], [@"increment-line-color", incrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-color", decrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-size", CGSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy], @@ -541,16 +541,16 @@ var themedButtonValues = nil, [ [@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled], [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled], - [@"text-color", regularDisabledTextColor, CPThemeStateBezeled | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], @@ -559,20 +559,20 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], CPThemeStateTableDataView | CPThemeStateSelectedDataView], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateTableDataView | CPThemeStateSelectedDataView], - [@"text-color", [CPColor blackColor], CPThemeStateTableDataView | CPThemeStateEditing], - [@"text-color", [CPColor blackColor], CPThemeStateTableDataView | CPThemeStateSelectedDataView | CPThemeStateEditable], - [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), CPThemeStateTableDataView | CPThemeStateEditable], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateTableDataView | CPThemeStateEditing], - [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), CPThemeStateTableDataView | CPThemeStateEditing], + [@"text-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable)], + [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditable)], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeStateTableDataView | CPThemeStateGroupRow], - [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeStateTableDataView | CPThemeStateGroupRow | CPThemeStateSelectedDataView], - [@"text-shadow-color", [CPColor whiteColor], CPThemeStateTableDataView | CPThemeStateGroupRow], - [@"text-shadow-offset", CGSizeMake(0, 1), CPThemeStateTableDataView | CPThemeStateGroupRow], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeStateTableDataView | CPThemeStateGroupRow | CPThemeStateSelectedDataView], - [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeStateTableDataView | CPThemeStateGroupRow] + [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], + [@"text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-shadow-offset", CGSizeMake(0, 1), CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], + [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; @@ -610,25 +610,25 @@ var themedButtonValues = nil, themedRoundedTextFieldValues = [ [@"bezel-color", - bezelColor["@"], CPTextFieldStateRounded | CPThemeStateBezeled], + bezelColor["@"], CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], [@"bezel-color", - bezelFocusedColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], + bezelFocusedColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], [@"bezel-color", - bezelColor["disabled"], CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateDisabled], + bezelColor["disabled"], CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont systemFontOfSize:12.0]], - [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], + [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], + [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], - [@"text-color", placeholderColor, CPTextFieldStateRounded | CPTextFieldStatePlaceholder], - [@"text-color", regularDisabledTextColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateDisabled], + [@"text-color", placeholderColor, CPThemeState(CPTextFieldStateRounded, CPTextFieldStatePlaceholder)], + [@"text-color", regularDisabledTextColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], - [@"min-size", CGSizeMake(0.0, 29.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"max-size", CGSizeMake(-1.0, 29.0), CPTextFieldStateRounded | CPThemeStateBezeled] + [@"min-size", CGSizeMake(0.0, 29.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"max-size", CGSizeMake(-1.0, 29.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)] ]; [self registerThemeValues:themedRoundedTextFieldValues forView:textfield]; @@ -688,7 +688,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont boldSystemFontOfSize:13.0]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.8]], @@ -700,8 +700,8 @@ var themedButtonValues = nil, [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal | CPThemeStateDisabled], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateSelected | CPThemeStateDisabled], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], @@ -762,12 +762,12 @@ var themedButtonValues = nil, [ [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:1.0], CPThemeStateNormal], [@"border-color", [CPColor colorWithCalibratedRed:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], CPThemeStateNormal | CPThemeStateDisabled], - [@"border-color", [CPColor colorWithCalibratedRed:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:0.5], CPThemeStateSelected | CPThemeStateDisabled], + [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], + [@"border-color", [CPColor colorWithCalibratedRed:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"bezel-color-calendar", [CPColor whiteColor]], [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeStateSelected | CPThemeStateDisabled], + [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"bezel-color-clock", clockImageColor], [@"bezel-color-clock", clockImageColorDisabled, CPThemeStateDisabled], @@ -811,15 +811,15 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted], - [@"tile-text-color", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-text-shadow-color", [CPColor whiteColor], CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted | CPThemeStateDisabled], + [@"tile-text-color", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-color", [CPColor whiteColor], CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted | CPThemeStateSelected], + [@"tile-text-color", [CPColor whiteColor], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"tile-text-color", [CPColor whiteColor], CPThemeStateSelected], [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateSelected], @@ -831,15 +831,15 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled], - [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], + [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled | CPThemeStateSelected], + [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], [@"arrow-image-left", arrowImageLeft], [@"arrow-image-right", arrowImageRight], @@ -888,7 +888,7 @@ var themedButtonValues = nil, [ [@"bezel-inset", CGInsetMakeZero()], [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], [@"editor-inset", CGInsetMake(3.0, 0.0, 0.0, 0.0)], @@ -902,7 +902,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(4.0, 8.0, 4.0, 8.0), CPThemeStateBezeled], // Bezeled token field with no tokens - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeStateBezeled | CPTextFieldStatePlaceholder] + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPTextFieldStatePlaceholder)] ]; [self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues]; @@ -930,8 +930,8 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelColor["highlighted"], CPThemeStateBezeled | CPThemeStateHighlighted], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelColor["highlighted"], CPThemeState(CPThemeStateBezeled, CPThemeStateHighlighted)], + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"text-color", textColor], [@"text-color", textHighlightedColor, CPThemeStateHighlighted], @@ -964,8 +964,8 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], [@"bezel-color", nil, CPThemeStateBordered], - [@"bezel-color", arrowImage, CPThemeStateBordered | CPThemeStateHovered], - [@"bezel-color", arrowImageHiglighted, CPThemeStateBordered | CPThemeStateHovered | CPThemeStateHighlighted], + [@"bezel-color", arrowImage, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], + [@"bezel-color", arrowImageHiglighted, CPThemeState(CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(7.0, 6.0)], [@"max-size", CGSizeMake(7.0, 6.0)], @@ -987,15 +987,15 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", bezelColor, CPThemeStateBordered | CPThemeStateHovered], - [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color", bezelHighlightedColor, CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], + [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(8.0, 8.0)], [@"max-size", CGSizeMake(8.0, 8.0)], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered], - [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"offset", CGPointMake(16, 6), CPThemeStateBordered] ]; @@ -1049,36 +1049,36 @@ var themedButtonValues = nil, overrides = [ - [@"bezel-color", bezelColor["@"], CPThemeStateBezeled | CPComboBoxStateButtonBordered], - [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPComboBoxStateButtonBordered | CPThemeStateEditing], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBezeled | CPComboBoxStateButtonBordered | CPThemeStateDisabled], + [@"bezel-color", bezelColor["@"], CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing)], + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled)], [@"bezel-color", bezelNoBorderColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelNoBorderFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelNoBorderColor["disabled"], CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelNoBorderFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelNoBorderColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"border-inset", CGInsetMake(3.0, 3.0, 3.0, 3.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeStateBezeled | CPThemeStateEditing | CPComboBoxStateButtonBordered], - [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled | CPThemeStateDisabled | CPComboBoxStateButtonBordered], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing, CPComboBoxStateButtonBordered)], + [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled, CPComboBoxStateButtonBordered)], - [@"bezel-inset", CGInsetMake(0.0, 4.0, 0.0, 1.0), CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-inset", CGInsetMake(0.0, 4.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], // The right border inset has to make room for the focus ring and popup button - [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeStateBezeled | CPComboBoxStateButtonBordered], + [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeStateBezeled | CPComboBoxStateButtonBordered], + [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], // Because combo box uses a three-part bezel, the height is fixed [@"min-size", CGSizeMake(0, 31.0)], [@"max-size", CGSizeMake(-1, 31.0)], - [@"text-color", regularDisabledTextColor, CPThemeStateBordered | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], ]; [self registerThemeValues:overrides forView:combo inherit:themedTextFieldValues]; @@ -1105,10 +1105,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image-offset", CPRadioImageOffset], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], @@ -1140,10 +1140,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image-offset", CPCheckBoxImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1174,8 +1174,8 @@ var themedButtonValues = nil, themeValues = [ [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPButtonStateMixed | CPThemeStateHighlighted], - [@"image", mixedDisabledImage, CPButtonStateMixed | CPThemeStateDisabled], + [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], + [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)], [@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed], [@"max-size", CGSizeMake(-1.0, -1.0)] ]; @@ -1238,29 +1238,29 @@ var themedButtonValues = nil, [ [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], - [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"center-segment-bezel-color", centerHighlightedBezelColor, CPThemeStateSelected], [@"center-segment-bezel-color", pushedCenterBezelColor, CPThemeStateHighlighted], - [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], - [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"divider-bezel-color", dividerHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", leftBezelColor, CPThemeStateNormal], [@"left-segment-bezel-color", inactiveLeftBezelColor, CPThemeStateDisabled], - [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"left-segment-bezel-color", leftHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", pushedLeftBezelColor, CPThemeStateHighlighted], - [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"right-segment-bezel-color", rightBezelColor, CPThemeStateNormal], [@"right-segment-bezel-color", inactiveRightBezelColor, CPThemeStateDisabled], - [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"right-segment-bezel-color", rightHighlightedBezelColor, CPThemeStateSelected], [@"right-segment-bezel-color", pushedRightBezelColor, CPThemeStateHighlighted], - [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"content-inset", CGInsetMake(0.0, 4.0, 0.0, 4.0), CPThemeStateNormal], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], @@ -1272,14 +1272,14 @@ var themedButtonValues = nil, // The "default" button state is the same theme color as the "selected" segmented control state, so we can use // the same text theme values. [@"text-color", defaultTextColor, CPThemeStateSelected], - [@"text-color", defaultDisabledTextColor, CPThemeStateDisabled | CPThemeStateSelected], + [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], [@"text-shadow-color", regularTextShadowColor], [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateDisabled], - [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeStateDisabled | CPThemeStateSelected], + [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.2], CPThemeStateSelected], [@"text-shadow-offset", CGSizeMake(0.0, 1.0)], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateSelected], - [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeStateSelected | CPThemeStateDisabled], + [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"line-break-mode", CPLineBreakByTruncatingTail], [@"divider-thickness", 1.0], @@ -1365,7 +1365,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeStateVertical | CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)], [@"knob-size", CGSizeMake(21.0, 21.0)], [@"knob-color", knobColor], @@ -1400,12 +1400,12 @@ var themedButtonValues = nil, themedCircularSliderValues = [ [@"track-color", trackColor, CPThemeStateCircular], - [@"track-color", trackDisabledColor, CPThemeStateCircular | CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)], [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], [@"knob-color", knobColor, CPThemeStateCircular], - [@"knob-color", knobHighlightedColor, CPThemeStateCircular | CPThemeStateHighlighted], - [@"knob-color", knobDisabledColor, CPThemeStateCircular | CPThemeStateDisabled] + [@"knob-color", knobHighlightedColor, CPThemeState(CPThemeStateCircular, CPThemeStateHighlighted)], + [@"knob-color", knobDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)] ]; [self registerThemeValues:themedCircularSliderValues forView:slider]; @@ -1500,7 +1500,7 @@ var themedButtonValues = nil, [@"background-color", pressed, CPThemeStateHighlighted], [@"background-color", highlighted, CPThemeStateSelected], - [@"background-color", highlightedPressed, CPThemeStateHighlighted | CPThemeStateSelected] + [@"background-color", highlightedPressed, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] ]; [self registerThemeValues:themedColumnHeaderValues forView:header]; @@ -1708,10 +1708,10 @@ var themedButtonValues = nil, [ [@"bezel-color-up-button", bezelUp["@"], CPThemeStateBordered], [@"bezel-color-down-button", bezelDown["@"], CPThemeStateBordered], - [@"bezel-color-up-button", bezelUp["disabled"], CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color-down-button", bezelDown["disabled"], CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color-up-button", bezelUp["highlighted"], CPThemeStateBordered | CPThemeStateHighlighted], - [@"bezel-color-down-button", bezelDown["highlighted"], CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color-up-button", bezelUp["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color-down-button", bezelDown["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color-up-button", bezelUp["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color-down-button", bezelDown["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(25.0, 25.0)], [@"up-button-size", CGSizeMake(25.0, 13.0)], [@"down-button-size", CGSizeMake(25.0, 12.0)] @@ -1800,9 +1800,9 @@ var themedButtonValues = nil, [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], [@"content-border-color", contentBorderColor, CPThemeStateBordered], - [@"bezel-color", bezelColor["highlighted"], CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelColor["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBordered | CPThemeStateDisabled] + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; @@ -2627,13 +2627,13 @@ var themedButtonValues = nil, [ [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPButtonStateMixed | CPThemeStateHighlighted], - [@"image", mixedDisabledImage, CPButtonStateMixed | CPThemeStateDisabled] + [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], + [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)] ]; [self registerThemeValues:[self defaultThemeOverridesAddedTo:hudSpecific] forView:button inherit:themedCheckBoxValues]; @@ -2667,10 +2667,10 @@ var themedButtonValues = nil, [ [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled] + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)] ]; [self registerThemeValues:[self defaultThemeOverridesAddedTo:hudSpecific] forView:button inherit:themedRadioButtonValues]; diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index 5dc6121f9..753e75f45 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -171,9 +171,9 @@ var _CPAutocompleteMenuMaximumHeight = 307; var dataView = [tableColumn dataView], fontNormal = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView], - fontSelected = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView], + fontSelected = [dataView valueForThemeAttribute:@"font" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], contentInsetNormal = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView], - contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView]; + contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)]; var mergedString = contentArray.join("\n"); diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index bc44eccb3..a4e70d826 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -53,7 +53,7 @@ [view setThemeState:CPThemeStateHighlighted]; [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"Theme state should be CPThemeStateHighlighted"]; - [view setThemeState:CPThemeStateNormal | CPThemeStateHighlighted]; + [view setThemeState:CPThemeState(CPThemeStateNormal, CPThemeStateHighlighted)]; [self assertFalse:[view hasThemeState:CPThemeStateNormal] message:@"CPThemeStateNormal cannot exist as part of a compound state"]; [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; } diff --git a/Tests/Manual/ThemeBrowser/AppController.j b/Tests/Manual/ThemeBrowser/AppController.j index f60e077d3..445b3bce4 100644 --- a/Tests/Manual/ThemeBrowser/AppController.j +++ b/Tests/Manual/ThemeBrowser/AppController.j @@ -113,7 +113,7 @@ var BrowserColumnTheme = 0, var value = [theme valueForAttributeWithName:[attribute name] inState:state forClass:className]; - [valueLabel setStringValue:[SCString stringWithTemplate:ValueLabelTemplate, [theme name], className, [attribute name], CPThemeStateName(state)]] + [valueLabel setStringValue:[SCString stringWithTemplate:ValueLabelTemplate, [theme name], className, [attribute name], String(state)]] [self showValueDescription:value]; } diff --git a/Tools/dump_theme/dump_theme b/Tools/dump_theme/dump_theme index 379b5c6fa..14db96b9f 100755 --- a/Tools/dump_theme/dump_theme +++ b/Tools/dump_theme/dump_theme @@ -136,7 +136,7 @@ function main(args) value = [theme valueForAttributeWithName:attributeName inState:state forClass:className], description = CPDescriptionOfObject(value).replace(/^/mg, " "); - colorPrint("cyan", " " + CPThemeStateName(state)); + colorPrint("cyan", " " + String(state)); stream.print(description + "\n"); } } diff --git a/Tools/nib2cib/NSTableColumn.j b/Tools/nib2cib/NSTableColumn.j index cd53c1827..2a55492f6 100644 --- a/Tools/nib2cib/NSTableColumn.j +++ b/Tools/nib2cib/NSTableColumn.j @@ -113,10 +113,10 @@ var IBDefaultFontSizeTableHeader = 11.0; if (![textColor isEqual:defaultColor]) { - var selectedColor = [self valueForDataViewThemeAttribute:@"text-color" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView]; + var selectedColor = [self valueForDataViewThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)]; - [dataView setValue:selectedColor forThemeAttribute:@"text-color" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView]; - [dataView setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView | CPThemeStateEditing]; + [dataView setValue:selectedColor forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)]; + [dataView setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing)]; } } diff --git a/Tools/nib2cib/_NSCornerView.j b/Tools/nib2cib/_NSCornerView.j index 83e667d50..541b3acb5 100644 --- a/Tools/nib2cib/_NSCornerView.j +++ b/Tools/nib2cib/_NSCornerView.j @@ -51,7 +51,7 @@ { var theme = [Nib2Cib defaultTheme], height = [theme valueForAttributeWithName:@"default-row-height" forClass:[CPTableView class]], - width = [theme valueForAttributeWithName:@"scroller-width" inState:CPThemeStateVertical | CPThemeStateScrollViewLegacy forClass:[CPScroller class]]; + width = [theme valueForAttributeWithName:@"scroller-width" inState:CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy) forClass:[CPScroller class]]; _frame.size.height = height; _bounds.size.height = height; From 0450fdb542a723bbe7556dabf57934ad7639ece8 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 12 Feb 2014 17:35:55 -0800 Subject: [PATCH 031/278] Get jaking working --- AppKit/CPSegmentedControl.j | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 613c7e198..6e1715ae6 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -918,6 +918,11 @@ var CPSegmentedControlSegmentsKey = "CPSegmentedControlSegmentsKey", for (var i = 0; i < _segments.length; i++) { _themeStates[i] = [_segments[i] selected] ? CPThemeStateSelected : CPThemeStateNormal; + } + + // We do this in a second loop because it relies on all the themeStates being set first + for (var i = 0; i < _segments.length; i++) + { [self tileWithChangedSegment:i]; } From 45a237af169c9bb56f584957975389ac4cfd3b0d Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 13 Feb 2014 14:22:03 -0800 Subject: [PATCH 032/278] Handle null inputs for subtracting CPThemes. --- AppKit/CPTheme.j | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 4401101e6..c9fc47124 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -420,7 +420,10 @@ function CPThemeState() CPThemeState.subtractThemeStates = function(aState1, aState2) { - if (aState2 === undefined || aState2 === nil || aState2._stateNames === undefined) + if (aState1 === undefined || aState1 === nil || aState1 === [CPNull null]) + return CPThemeState._cacheThemeState(new ThemeState([])); + + if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) return aState1; var statePointer1 = 0, From c644e8a30facfa14bc77472551aef309b295c25d Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 13 Feb 2014 23:49:59 -0800 Subject: [PATCH 033/278] Change CPTheme to be hash-backed to make it a bit faster --- AppKit/CPTheme.j | 136 ++++++++------------- AppKit/CPView.j | 2 +- AppKit/Themes/Aristo/ThemeDescriptors.j | 3 - AppKit/Themes/BlendKit/BKThemeDescriptor.j | 2 +- 4 files changed, 51 insertions(+), 92 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index c9fc47124..e0495eebc 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -316,23 +316,28 @@ var CPThemeNameKey = @"CPThemeNameKey", function ThemeState(stateNames) { - // We sort here to make toString and hasThemeState more efficient since those get called more. - this._stateNames = stateNames.sort(); + this._stateNames = stateNames; + + var stateNameKeys = []; + for (key in stateNames) + { + if (!stateNames.hasOwnProperty(key)) + continue; + stateNameKeys.push(key); + } + stateNameKeys.sort(); + this._stateNameString = stateNameKeys[0]; + if (this._stateNameString === undefined) + this._stateNameString = ""; + + var stateNameLength = stateNameKeys.length; + for (var stateIndex = 1; stateIndex < stateNameLength; stateIndex++) + this._stateNameString = this._stateNameString + "+" + stateNameKeys[stateIndex]; } ThemeState.prototype.toString = function() { - if (typeof this._stateNames === 'undefined') - this._stateNames = []; - - var stringOutput = this._stateNames[0]; - if (stringOutput === undefined) - return "" - - for (var stateIndex = 1; stateIndex < this._stateNames.length; stateIndex++) - stringOutput = stringOutput + "+" + this._stateNames[stateIndex]; - - return stringOutput; + return this._stateNameString; } ThemeState.prototype.hasThemeState = function(aState) @@ -340,30 +345,14 @@ ThemeState.prototype.hasThemeState = function(aState) if (aState === undefined || aState === nil || aState._stateNames === undefined) return false; // We can do this in O(n) because both states have their stateNames already sorted. - var statePointer1 = 0, - statePointer2 = 0, - array1 = this._stateNames, - array2 = aState._stateNames, - stateLength1 = array1.length, - stateLength2 = array2.length; - - while (statePointer1 < stateLength1 && statePointer2 < stateLength2) + for (var stateName in aState._stateNames) { - if (array1[statePointer1] < array2[statePointer2]) - statePointer1++; - - else if (array1[statePointer1] === array2[statePointer2]) - { - statePointer1++; - statePointer2++; - } - if (array1[statePointer1] > array2[statePointer2]) + if (!aState._stateNames.hasOwnProperty(stateName)) + continue; + if (!this._stateNames[stateName]) return false; } - if (statePointer2 < stateLength2) - return false; - else - return true; + return true; } var CPThemeStates = {}; @@ -389,73 +378,41 @@ function CPThemeState() if (typeof arguments[argIndex] === 'object') { - for (var stateIndex = 0; stateIndex < arguments[argIndex]._stateNames.length; stateIndex++) + for (var stateName in arguments[argIndex]._stateNames) { - var stateName = arguments[argIndex]._stateNames[stateIndex]; - if (!stateNames[stateName]) - stateNames[stateName] = true; + if (!arguments[argIndex]._stateNames.hasOwnProperty(stateName)) + continue; + stateNames[stateName] = true; } } else { var allNames = arguments[argIndex].split('+'); for (var nameIndex = 0; nameIndex < allNames.length; nameIndex++) - { - if (!stateNames[allNames[nameIndex]]) - stateNames[allNames[nameIndex]] = true; - } + stateNames[allNames[nameIndex]] = true; } } - var stateNameKeys = []; - for (key in stateNames) - { - if (!stateNames.hasOwnProperty(key)) - continue; - stateNameKeys.push(key); - } - var themeState = CPThemeState._cacheThemeState(new ThemeState(stateNameKeys)); + var themeState = CPThemeState._cacheThemeState(new ThemeState(stateNames)); return themeState; } CPThemeState.subtractThemeStates = function(aState1, aState2) { - if (aState1 === undefined || aState1 === nil || aState1 === [CPNull null]) - return CPThemeState._cacheThemeState(new ThemeState([])); - if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) return aState1; - var statePointer1 = 0, - statePointer2 = 0, - array1 = aState1._stateNames, - array2 = aState2._stateNames, - stateLength1 = array1.length, - stateLength2 = array2.length, - newThemeState = new ThemeState([]); - - while (statePointer1 < stateLength1 && statePointer2 < stateLength2) + var newThemeState = new ThemeState({}); + for (var stateName in aState1._stateNames) { - if (array1[statePointer1] == array2[statePointer2]) - { - statePointer1++; - statePointer2++; - } - else - { - newThemeState._stateNames.push(array1[statePointer1]); - statePointer1++; - } + if (!aState1._stateNames.hasOwnProperty(stateName)) + continue; + + if (!aState2._stateNames[stateName]) + newThemeState[stateName] = true; } - while (statePointer1 < stateLength1) - { - newThemeState._stateNames.push(array1[statePointer1]); - statePointer1++; - } - newThemeState._stateNames.sort(); return CPThemeState._cacheThemeState(newThemeState); - } CPThemeState._cacheThemeState = function(aState) @@ -576,12 +533,15 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); _cache = { }; var componentStates = aState._stateNames; - for (var stateIndex = 0; stateIndex < [componentStates count]; stateIndex++) + for (var state in componentStates) { - if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:componentStates[stateIndex]]; - else - [_values setObject:aValue forKey:componentStates[stateIndex]]; + if (componentStates.hasOwnProperty(state)) + { + if ((aValue === undefined) || (aValue === nil)) + [_values removeObjectForKey:componentStates[state]]; + else + [_values setObject:aValue forKey:componentStates[state]]; + } } } @@ -605,10 +565,12 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); // If we don't have a value, and we have a non-normal state... if ((value === undefined || value === nil) && aState !== CPThemeStateNormal) { - var stateCount = [aState._stateNames count]; - for (var stateIndex = 0; stateIndex < stateCount; stateIndex++) + for (var state in aState._stateNames) { - value = [_values objectForKey:aState._stateNames[stateIndex]]; + if (!aState._stateNames.hasOwnProperty(state)) + continue; + + value = [_values objectForKey:state]; if (value !== undefined && value !== nil) break; } diff --git a/AppKit/CPView.j b/AppKit/CPView.j index aaf376585..b96d4c161 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -3142,7 +3142,7 @@ setBoundsOrigin: { for (var i = 0; i < themeValues.length; ++i) { - var attributeValueState = themeValues[i], + var attributeValueState = themeValues[i]; attribute = attributeValueState[0], value = attributeValueState[1], state = attributeValueState[2]; diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 78f88313a..a5524d16a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -2883,8 +2883,6 @@ var themedButtonValues = nil, + (_CPMenuView)themedMenuView { var menuView = [[_CPMenuView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 100.0)], - - menuWindowMoreAboveImage = PatternImage(@"menu-window-more-above.png", 38.0, 18.0), menuWindowMoreBelowImage = PatternImage(@"menu-window-more-below.png", 38.0, 18.0), generalIconNew = PatternImage(@"menu-general-icon-new.png", 16.0, 16.0), @@ -3177,5 +3175,4 @@ var themedButtonValues = nil, return progressBar; } - @end diff --git a/AppKit/Themes/BlendKit/BKThemeDescriptor.j b/AppKit/Themes/BlendKit/BKThemeDescriptor.j index 522050def..1afc65621 100644 --- a/AppKit/Themes/BlendKit/BKThemeDescriptor.j +++ b/AppKit/Themes/BlendKit/BKThemeDescriptor.j @@ -221,7 +221,7 @@ var ItemSizes = { }, { for (var i = 0; i < themeValues.length; ++i) { - var attributeValueState = themeValues[i], + var attributeValueState = themeValues[i]; attribute = attributeValueState[0], value = attributeValueState[1], state = attributeValueState[2]; From 9e61991ad2973db54ce29fcd7c86b8851415091e Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Tue, 18 Feb 2014 13:18:45 -0800 Subject: [PATCH 034/278] Fix bug when setting themeStates in a themeAttribute --- AppKit/CPTheme.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index e0495eebc..0a3b63e4e 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -538,9 +538,9 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); if (componentStates.hasOwnProperty(state)) { if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:componentStates[state]]; + [_values removeObjectForKey:state]; else - [_values setObject:aValue forKey:componentStates[state]]; + [_values setObject:aValue forKey:state]; } } } From f8ef6ab3977a528c45f28b5b6643d97ff94bf230 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Tue, 18 Feb 2014 13:20:16 -0800 Subject: [PATCH 035/278] Fix accidental semicolon --- AppKit/CPView.j | 2 +- AppKit/Themes/BlendKit/BKThemeDescriptor.j | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index b96d4c161..aaf376585 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -3142,7 +3142,7 @@ setBoundsOrigin: { for (var i = 0; i < themeValues.length; ++i) { - var attributeValueState = themeValues[i]; + var attributeValueState = themeValues[i], attribute = attributeValueState[0], value = attributeValueState[1], state = attributeValueState[2]; diff --git a/AppKit/Themes/BlendKit/BKThemeDescriptor.j b/AppKit/Themes/BlendKit/BKThemeDescriptor.j index 1afc65621..522050def 100644 --- a/AppKit/Themes/BlendKit/BKThemeDescriptor.j +++ b/AppKit/Themes/BlendKit/BKThemeDescriptor.j @@ -221,7 +221,7 @@ var ItemSizes = { }, { for (var i = 0; i < themeValues.length; ++i) { - var attributeValueState = themeValues[i]; + var attributeValueState = themeValues[i], attribute = attributeValueState[0], value = attributeValueState[1], state = attributeValueState[2]; From 5309cc591609cf047ae9ad156bb4193e31cbeecb Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 19 Feb 2014 14:19:39 -0800 Subject: [PATCH 036/278] Change CPTheme implementation to fix how searching for a matching theme works --- AppKit/CPTheme.j | 58 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 0a3b63e4e..554af8326 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -333,6 +333,7 @@ function ThemeState(stateNames) var stateNameLength = stateNameKeys.length; for (var stateIndex = 1; stateIndex < stateNameLength; stateIndex++) this._stateNameString = this._stateNameString + "+" + stateNameKeys[stateIndex]; + this._stateNameCount = stateNameLength; } ThemeState.prototype.toString = function() @@ -355,6 +356,21 @@ ThemeState.prototype.hasThemeState = function(aState) return true; } +ThemeState.prototype.isSubsetOf = function(aState) +{ + if (aState._stateNameCount < this._stateNameCount) + return false; + + for (key in this._stateNames) + { + if (!this._stateNames.hasOwnProperty(key)) + continue; + if (!aState._stateNames[key]) + return false; + } + return true; +} + var CPThemeStates = {}; /* @@ -370,6 +386,13 @@ function CPThemeState() if (arguments.length < 1) throw "CPThemeState() must be called with at least one string argument"; + if (arguments.length === 1 && typeof arguments[0] === 'string') + { + var themeState = CPThemeStates[arguments[0]]; + if (themeState !== undefined) + return themeState; + } + var stateNames = {}; for (var argIndex = 0; argIndex < arguments.length; argIndex++) { @@ -532,17 +555,10 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { _cache = { }; - var componentStates = aState._stateNames; - for (var state in componentStates) - { - if (componentStates.hasOwnProperty(state)) - { - if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:state]; - else - [_values setObject:aValue forKey:state]; - } - } + if ((aValue === undefined) || (aValue === nil)) + [_values removeObjectForKey:String(aState)]; + else + [_values setObject:aValue forKey:String(aState)]; } - (id)value @@ -565,14 +581,20 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); // If we don't have a value, and we have a non-normal state... if ((value === undefined || value === nil) && aState !== CPThemeStateNormal) { - for (var state in aState._stateNames) - { - if (!aState._stateNames.hasOwnProperty(state)) - continue; + // If this is a composite state, find the closest partial subset match. + var states = [_values allKeys], + count = states.length, + largestThemeState = 0; - value = [_values objectForKey:state]; - if (value !== undefined && value !== nil) - break; + while (count--) + { + var stateObject = CPThemeState(states[count]); + + if (stateObject.isSubsetOf(aState) && stateObject._stateNameCount > largestThemeState) + { + value = [_values objectForKey:String(states[count])]; + largestThemeState = stateObject._stateNameCount; + } } // Still don't have a value? OK, let's use the normal value. From bad731c86f481e39b3e30e03c2ce19327cefe985 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 19 Feb 2014 14:45:18 -0800 Subject: [PATCH 037/278] Fix subtracting theme states --- AppKit/CPTheme.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 554af8326..911e2ceca 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -425,17 +425,17 @@ CPThemeState.subtractThemeStates = function(aState1, aState2) if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) return aState1; - var newThemeState = new ThemeState({}); + var newStates = {}; for (var stateName in aState1._stateNames) { if (!aState1._stateNames.hasOwnProperty(stateName)) continue; if (!aState2._stateNames[stateName]) - newThemeState[stateName] = true; + newStates[stateName] = true; } - return CPThemeState._cacheThemeState(newThemeState); + return CPThemeState._cacheThemeState(new ThemeState(newStates)); } CPThemeState._cacheThemeState = function(aState) From 1563b0bf5528fab99b9a8bc8de74f6ab7aabbb09 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 13:36:34 -0800 Subject: [PATCH 038/278] Get all tests to pass --- AppKit/CPTheme.j | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 911e2ceca..530584f52 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -316,15 +316,26 @@ var CPThemeNameKey = @"CPThemeNameKey", function ThemeState(stateNames) { - this._stateNames = stateNames; - var stateNameKeys = []; + this._stateNames = {}; + for (key in stateNames) { if (!stateNames.hasOwnProperty(key)) continue; - stateNameKeys.push(key); + if (key != 'normal') + { + this._stateNames[key] = true; + stateNameKeys.push(key); + } } + + if (stateNameKeys.length === 0) + { + stateNameKeys.push('normal'); + this._stateNames['normal'] = true; + } + stateNameKeys.sort(); this._stateNameString = stateNameKeys[0]; if (this._stateNameString === undefined) @@ -566,7 +577,6 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); return [self valueForState:CPThemeStateNormal]; } -// If aState is a state comprised of multiple CPThemeStates, this will return the value for the first state it finds. - (id)valueForState:(CPThemeState)aState { var stateName = String(aState); @@ -578,22 +588,24 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); value = [_values objectForKey:stateName]; - // If we don't have a value, and we have a non-normal state... - if ((value === undefined || value === nil) && aState !== CPThemeStateNormal) + if (value === undefined || value === nil) { // If this is a composite state, find the closest partial subset match. - var states = [_values allKeys], - count = states.length, - largestThemeState = 0; - - while (count--) + if (aState._stateNameCount > 1) { - var stateObject = CPThemeState(states[count]); + var states = [_values allKeys], + count = states.length, + largestThemeState = 0; - if (stateObject.isSubsetOf(aState) && stateObject._stateNameCount > largestThemeState) + while (count--) { - value = [_values objectForKey:String(states[count])]; - largestThemeState = stateObject._stateNameCount; + var stateObject = CPThemeState(states[count]); + + if (stateObject.isSubsetOf(aState) && stateObject._stateNameCount > largestThemeState) + { + value = [_values objectForKey:String(states[count])]; + largestThemeState = stateObject._stateNameCount; + } } } From 7eb35ef33d859ad57c110d2692a40ab1ab9a9105 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 13:41:56 -0800 Subject: [PATCH 039/278] Clarify documentation for CPThemeState() --- AppKit/CPTheme.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 530584f52..705d90896 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -384,12 +384,12 @@ ThemeState.prototype.isSubsetOf = function(aState) var CPThemeStates = {}; -/* +/*! * This method can be called in multiple ways: * CPThemeState('state1') - creates a new CPThemeState that corresponds to the string 'state1' - * CPThemeState('state1', 'state2') - creates a new CPThemeState made up of both 'state1' or 'state2' + * CPThemeState('state1', 'state2') - creates a new composite CPThemeState made up of both 'state1' or 'state2' * CPThemeState('state1+state2') - The same as CPThemeState('state1', 'state2') - * CPThemeState(state1, state2) - creates a new CPThemeState that corresponds to both state1 or state2 + * CPThemeState(state1, state2) - creates a new composite CPThemeState made up of state1 and state2 * where state1 and state2 are not strings but are themselves CPThemeStates. */ function CPThemeState() From 883c4a185d94aecc3ac520eecc0a7ef0423fc828 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 13:58:20 -0800 Subject: [PATCH 040/278] Some cleanup of CPSegmentedControl.j --- AppKit/CPSegmentedControl.j | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 6e1715ae6..eeda55448 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -646,8 +646,7 @@ CPSegmentSwitchTrackingMomentary = 2; borderState = (borderState.hasThemeState(CPThemeStateSelected) && !borderState.hasThemeState(CPThemeStateHighlighted)) ? CPThemeStateSelected : CPThemeStateNormal; - if (_themeState.hasThemeState(CPThemeStateDisabled)) - borderState = CPThemeState(borderState, CPThemeStateDisabled); + borderState = isDisabled ? CPThemeState(borderState, CPThemeStateDisabled) : borderState; var borderColor = [self valueForThemeAttribute:@"divider-bezel-color" inState:borderState], @@ -916,15 +915,11 @@ var CPSegmentedControlSegmentsKey = "CPSegmentedControlSegmentsKey", // HACK for (var i = 0; i < _segments.length; i++) - { _themeStates[i] = [_segments[i] selected] ? CPThemeStateSelected : CPThemeStateNormal; - } // We do this in a second loop because it relies on all the themeStates being set first for (var i = 0; i < _segments.length; i++) - { [self tileWithChangedSegment:i]; - } var difference = MAX(originalWidth - [self frame].size.width, 0.0), remainingWidth = FLOOR(difference / _segments.length); From d862d701f383f266aea53a9de050393e0484a620 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 13:58:29 -0800 Subject: [PATCH 041/278] Add note to ThemeState object about it being private --- AppKit/CPTheme.j | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 705d90896..a84435326 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -314,6 +314,10 @@ var CPThemeNameKey = @"CPThemeNameKey", @end +/*! + * ThemeStates are immutable objects representing a particular ThemeState. Applications should never be creating + * ThemeStates directly but should instead use the CPThemeState helper methods. + */ function ThemeState(stateNames) { var stateNameKeys = []; From c3d2decdeca5ef2dddf35925006642e778901d40 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 14:17:09 -0800 Subject: [PATCH 042/278] Fix bugs with CPThemeAttribute encoding and decoding --- AppKit/CPTheme.j | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index a84435326..990ab0428 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -607,7 +607,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); if (stateObject.isSubsetOf(aState) && stateObject._stateNameCount > largestThemeState) { - value = [_values objectForKey:String(states[count])]; + value = [_values objectForKey:states[count]]; largestThemeState = stateObject._stateNameCount; } } @@ -710,8 +710,8 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var onlyKey = keys[0]; - if (onlyKey !== CPThemeStateNormal) - [aCoder encodeObject:String(onlyKey) forKey:@"state"]; + if (onlyKey !== String(CPThemeStateNormal)) + [aCoder encodeObject:onlyKey forKey:@"state"]; [aCoder encodeObject:[_values objectForKey:onlyKey] forKey:@"value"]; } @@ -723,7 +723,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var key = keys[count]; - [encodedValues setObject:[_values objectForKey:key] forKey:String(key)]; + [encodedValues setObject:[_values objectForKey:key] forKey:key]; } [aCoder encodeObject:encodedValues forKey:@"values"]; @@ -742,7 +742,7 @@ function CPThemeAttributeEncode(aCoder, aThemeAttribute) { var state = [values allKeys][0]; - if (Number(state) === 0) + if (state === String(CPThemeStateNormal)) { [aCoder encodeObject:[values objectForKey:state] forKey:key]; From 861d093d800807b5ec09dfecf8e74c10e6eaff23 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 17:52:16 -0800 Subject: [PATCH 043/278] All ThemeStates always have at least one state - the normal state --- AppKit/CPTheme.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 990ab0428..24c90d21c 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -342,8 +342,6 @@ function ThemeState(stateNames) stateNameKeys.sort(); this._stateNameString = stateNameKeys[0]; - if (this._stateNameString === undefined) - this._stateNameString = ""; var stateNameLength = stateNameKeys.length; for (var stateIndex = 1; stateIndex < stateNameLength; stateIndex++) From 727b519750f17bf95bf03c4ceb1e865a6a8a16fd Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 18:09:47 -0800 Subject: [PATCH 044/278] Remove unused method in CPTheme --- AppKit/CPTheme.j | 5 ----- 1 file changed, 5 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 24c90d21c..dc4174a73 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -549,11 +549,6 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); return [_values count] > 0; } -- (BOOL)isTrivial -{ - return ([_values count] === 1) && ([_values allKeys][0] === CPThemeStateNormal); -} - - (void)setValue:(id)aValue { _cache = {}; From cf99a7bf18a7596a70a8f6870db2a01aa3da20c3 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 18:14:01 -0800 Subject: [PATCH 045/278] Fix bug that was turning dictionary keys into objects --- AppKit/CPTheme.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index dc4174a73..c3313f0f5 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -666,10 +666,10 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); if ([aCoder containsValueForKey:@"value"]) { - var state = CPThemeStateNormal; + var state = String(CPThemeStateNormal); if ([aCoder containsValueForKey:@"state"]) - state = CPThemeState([aCoder decodeObjectForKey:@"state"]); + state = [aCoder decodeObjectForKey:@"state"]; [_values setObject:[aCoder decodeObjectForKey:"value"] forKey:state]; } @@ -683,7 +683,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var key = keys[count]; - [_values setObject:[encodedValues objectForKey:key] forKey:CPThemeState(key)]; + [_values setObject:[encodedValues objectForKey:key] forKey:key]; } } } From 6cae91705826e5feffac6f5fab28f10369b64972 Mon Sep 17 00:00:00 2001 From: Udo Schneider Date: Fri, 21 Feb 2014 08:43:00 +0100 Subject: [PATCH 046/278] New: Added bidirectional CPLevelIndicator behaviour Depending on whether min < max or max > min CPLevelIndicator changes the order of the normal/warning/critical color. This commit enables this behavior for both cases. --- AppKit/CPLevelIndicator.j | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/AppKit/CPLevelIndicator.j b/AppKit/CPLevelIndicator.j index 042b17e84..07ce720c3 100644 --- a/AppKit/CPLevelIndicator.j +++ b/AppKit/CPLevelIndicator.j @@ -105,10 +105,21 @@ CPRatingLevelIndicatorStyle = 3; var filledColor = [self valueForThemeAttribute:@"color-normal"], value = [self doubleValue]; - if (value <= _criticalValue) - filledColor = [self valueForThemeAttribute:@"color-critical"]; - else if (value <= _warningValue) - filledColor = [self valueForThemeAttribute:@"color-warning"]; + if (_warningValue < _criticalValue) + { + if (value >= _criticalValue) + filledColor = [self valueForThemeAttribute:@"color-critical"]; + else if (value >= _warningValue) + filledColor = [self valueForThemeAttribute:@"color-warning"]; + } + else + { + if (value <= _criticalValue) + filledColor = [self valueForThemeAttribute:@"color-critical"]; + else if (value <= _warningValue) + filledColor = [self valueForThemeAttribute:@"color-warning"]; + } + for (var i = 0; i < segmentCount; i++) { From 8b2f2fe24d52b40b0fe5935b7a107c40f4f014aa Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Fri, 21 Feb 2014 13:11:08 -0800 Subject: [PATCH 047/278] Add new unit tests for CPView --- Tests/AppKit/CPViewTest.j | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index a4e70d826..6679e89a3 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -42,10 +42,21 @@ [self assert:undefined same:[_CPDisplayServer run]]; } +- (void)testHasThemeState +{ + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"By default, CPView should be in CPThemeStateNormal"]; + + view._themeState = CPThemeState(CPThemeStateDisabled, CPThemeStateBordered); + [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"CPView should be in state CPThemeStateDisabled"]; + [self assertTrue:[view hasThemeState:CPThemeStateBordered] message:@"CPView should be in state CPThemeStateBordered"]; + [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] message:@"CPView should be in the combined state of CPThemeStateDisabled and CPThemeStateBordered"]; + [self assertFalse:[view hasThemeState:CPThemeState(CPThemeStateNormal)] message:@"CPView should not be in CPThemeStateNormal"]; +} + - (void)testThemeState { [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should initialy have CPThemeStateNormal"]; - [self assertFalse:[view hasThemeState:CPThemeStateDisabled] message:@"view should be disabled"]; + [self assertFalse:[view hasThemeState:CPThemeStateDisabled] message:@"view should not be disabled"]; [view setThemeState:CPThemeStateDisabled]; [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; @@ -56,6 +67,27 @@ [view setThemeState:CPThemeState(CPThemeStateNormal, CPThemeStateHighlighted)]; [self assertFalse:[view hasThemeState:CPThemeStateNormal] message:@"CPThemeStateNormal cannot exist as part of a compound state"]; [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; + + [view setThemeState:CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)]; + [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; + [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; + [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; +} + +- (void)testUnsetThemeState +{ + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should initialy have CPThemeStateNormal"]; + [view unsetThemeState:CPThemeStateNormal]; + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView always be in CPThemeStateNormal even if you try to unset it"]; + [view setThemeState:CPThemeStateDisabled]; + [view unsetThemeState:CPThemeStateDisabled]; + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be in CPThemeStateNormal when all other theme states have been unset from it"]; + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [view unsetThemeState:CPThemeStateDisabled]; + [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:"@CPView should have the remaining state when one of its combined states is unset"]; + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; + [view unsetThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDisabled)]; + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be able to unset a combined theme state"]; } - (void)testThemeAttributes From df148e4946aa176c064bf7c432fe9b794dd943f4 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Fri, 21 Feb 2014 14:29:31 -0800 Subject: [PATCH 048/278] Fix a small typo in CPTheme.j themestate caching --- AppKit/CPTheme.j | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index c3313f0f5..362926ca1 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -399,9 +399,10 @@ function CPThemeState() if (arguments.length < 1) throw "CPThemeState() must be called with at least one string argument"; + var themeState; if (arguments.length === 1 && typeof arguments[0] === 'string') { - var themeState = CPThemeStates[arguments[0]]; + themeState = CPThemeStates[arguments[0]]; if (themeState !== undefined) return themeState; } @@ -429,7 +430,7 @@ function CPThemeState() } } - var themeState = CPThemeState._cacheThemeState(new ThemeState(stateNames)); + themeState = CPThemeState._cacheThemeState(new ThemeState(stateNames)); return themeState; } @@ -458,7 +459,7 @@ CPThemeState._cacheThemeState = function(aState) if (themeState === undefined) { themeState = aState; - CPThemeState[String(themeState)] = themeState; + CPThemeStates[String(themeState)] = themeState; } return themeState; } From 68952b273ba92e7f23b702c4c57fbeb767845496 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Fri, 21 Feb 2014 14:30:09 -0800 Subject: [PATCH 049/278] Add a bunch of unit tests for CPTheme.j --- Tests/AppKit/CPThemeTest.j | 65 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Tests/AppKit/CPThemeTest.j diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j new file mode 100644 index 000000000..1803c6619 --- /dev/null +++ b/Tests/AppKit/CPThemeTest.j @@ -0,0 +1,65 @@ +@import + +@implementation CPThemeTest : OJTestCase +{ +} + +- (void)testCreatingThemeState +{ + var themeState = new ThemeState({'test': true, 'test1': true}); + [self assertTrue:themeState._stateNames['test'] message:"Creating a new ThemeState sets the statenames correctly."]; + [self assertTrue:themeState._stateNames['test1'] message:"Creating a new ThemeState sets the statenames correctly."]; + [self assertTrue:(themeState._stateNameCount === 2) message:"Creating a new ThemeState sets count of state names correctly."]; + [self assertTrue:(String(themeState) === "test+test1") message:"Creating a new ThemeState sets its string value to its sorted state names"]; + + themeState = new ThemeState(); + [self assertTrue:themeState._stateNames['normal'] message:"Creating a new ThemeState with no states sets the ThemeState to be a normal themestate"]; + [self assertTrue:(themeState._stateNameCount === 1) message:"Creating a new ThemeState with no states creates a new ThemeState with one state (normal)."]; + + themeState = new ThemeState({'boo': true, 'normal': true}); + [self assertTrue:themeState._stateNames['boo'] message:"Creating a new combined ThemeState with normal and something else only sets the other theme state."]; + [self assertFalse:themeState._stateNames['normal'] message:"Creating a new combined ThemeState with normal and something else only sets the other theme state."]; + [self assertTrue:(themeState._stateNameCount === 1) message:"Creating a new ThemeState with no states creates a new ThemeState with one state (normal)."]; +} + +- (void)testCreatingThemeStateWithCPThemeState +{ + var themeState1 = CPThemeState('normal'); + var themeState2 = CPThemeState('normal'); + [self assertTrue:(themeState1 === themeState2) message:"Creating two themestates with the same string returns the same object for both"]; + + + themeState1 = CPThemeState('smee+blee'); + themeState2 = CPThemeState('blee+smee'); + + [self assertTrue:(themeState1 === themeState2) message:"Creating two combined themestates with the same component themestates returns the same object for both"]; + + var themeState3 = CPThemeState('hello', themeState1, themeState2); + [self assertTrue:(String(themeState3) === "blee+hello+smee") message:"Can create a combined themestate with both string and object arguments"]; + + var themeState4 = CPThemeState(themeState3); + [self assertTrue:(themeState4 === themeState3) message:"Creating a new ThemeState off an old one returns the same object"]; + + var themeState5 = CPThemeState('a', 'theme', 'state'); + [self assertTrue:(String(themeState5) === 'a+state+theme') message:"Creating a new ThemeState using multiple strings works."]; +} + +- (void)testThemeAttributeValueForState +{ + var themeAttribute = [[_CPThemeAttribute alloc] initWithName:@"test" defaultValue:5]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState")] == 5) message:"Return the default value for the theme attribute if the theme attribute has no value defined for the given state"]; + + [themeAttribute setValue:7 forState:CPThemeState("aState")]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState")] == 7) message:"Return the correct value for the state if the state is defined"]; + + [themeAttribute setValue:8 forState:CPThemeState('normal')]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState1")] == 8) message:"Return the normal value for the state if the theme attribute has no value defined for the given state but has a value for the normal state defined"]; + + [themeAttribute setValue:10 forState:CPThemeState('aState3+aState4')]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState3")] == 8) message:"Return the normal value for the state if the state is only a partial match on the theme attributes defined states"]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState4+aState3")] == 10) message:"Correctly match combined states on the theme attribute"]; + + [themeAttribute setValue:9 forState:CPThemeState('aState3')]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState8+aState3+aState4")] == 10) message:"Return the largest partial subset match for a combined state that isn't a perfect match"]; +} +@end From b0d90bb61290e07e24f7ac0418c39c4e839fc7a7 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sun, 23 Feb 2014 16:03:56 -0800 Subject: [PATCH 050/278] ThemeState is a string now instead of an int on a CPView --- AppKit/CPView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index aaf376585..63602207a 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -3353,7 +3353,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", _theme = [CPTheme defaultTheme]; _themeClass = [aCoder decodeObjectForKey:CPViewThemeClassKey]; - _themeState = CPThemeState([aCoder decodeIntForKey:CPViewThemeStateKey]); + _themeState = CPThemeState([aCoder decodeObjectForKey:CPViewThemeStateKey]); _themeAttributes = {}; var theClass = [self class], From 745ad7cc347a137c3d7b519f19590c6e5c841d56 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 26 Feb 2014 13:11:43 -0800 Subject: [PATCH 051/278] Clean up the interface a bit to consolidate ThemeState methods onto one object. Keep CPThemeState as just a helper function. --- AppKit/CPScroller.j | 2 +- AppKit/CPSegmentedControl.j | 4 +-- AppKit/CPTheme.j | 64 ++++++++++++++++++------------------- AppKit/CPView.j | 2 +- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index c927a90e2..f19ee083d 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -733,7 +733,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); var themeState = _themeState; if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) - themeState = CPThemeState.subtractThemeStates(themeState, CPThemeStateHighlighted); + themeState = ThemeState.subtractThemeStates(themeState, CPThemeStateHighlighted); return [self valueForThemeAttribute:anAttributeName inState:themeState]; } diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index eeda55448..53173dd77 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -431,7 +431,7 @@ CPSegmentSwitchTrackingMomentary = 2; [_segments[aSegment] setEnabled:shouldBeEnabled]; if (shouldBeEnabled) - _themeStates[aSegment] = CPThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateDisabled); + _themeStates[aSegment] = ThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateDisabled); else _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateDisabled); @@ -479,7 +479,7 @@ CPSegmentSwitchTrackingMomentary = 2; if (shouldHighlight) _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateHighlighted); else - _themeStates[aSegment] = CPThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateHighlighted); + _themeStates[aSegment] = ThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateHighlighted); [self setNeedsLayout]; [self setNeedsDisplay:YES]; diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 362926ca1..e4b570cfb 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -316,7 +316,7 @@ var CPThemeNameKey = @"CPThemeNameKey", /*! * ThemeStates are immutable objects representing a particular ThemeState. Applications should never be creating - * ThemeStates directly but should instead use the CPThemeState helper methods. + * ThemeStates directly but should instead use the CPThemeState function. */ function ThemeState(stateNames) { @@ -384,6 +384,36 @@ ThemeState.prototype.isSubsetOf = function(aState) return true; } +ThemeState.subtractThemeStates = function(aState1, aState2) +{ + if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) + return aState1; + + var newStates = {}; + for (var stateName in aState1._stateNames) + { + if (!aState1._stateNames.hasOwnProperty(stateName)) + continue; + + if (!aState2._stateNames[stateName]) + newStates[stateName] = true; + } + + return ThemeState._cacheThemeState(new ThemeState(newStates)); +} + +ThemeState._cacheThemeState = function(aState) +{ + // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. + var themeState = CPThemeStates[String(aState)]; + if (themeState === undefined) + { + themeState = aState; + CPThemeStates[String(themeState)] = themeState; + } + return themeState; +} + var CPThemeStates = {}; /*! @@ -430,37 +460,7 @@ function CPThemeState() } } - themeState = CPThemeState._cacheThemeState(new ThemeState(stateNames)); - return themeState; -} - -CPThemeState.subtractThemeStates = function(aState1, aState2) -{ - if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) - return aState1; - - var newStates = {}; - for (var stateName in aState1._stateNames) - { - if (!aState1._stateNames.hasOwnProperty(stateName)) - continue; - - if (!aState2._stateNames[stateName]) - newStates[stateName] = true; - } - - return CPThemeState._cacheThemeState(new ThemeState(newStates)); -} - -CPThemeState._cacheThemeState = function(aState) -{ - // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. - var themeState = CPThemeStates[String(aState)]; - if (themeState === undefined) - { - themeState = aState; - CPThemeStates[String(themeState)] = themeState; - } + themeState = ThemeState._cacheThemeState(new ThemeState(stateNames)); return themeState; } diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 63602207a..eb81fab1f 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2910,7 +2910,7 @@ setBoundsOrigin: if (!_themeState.hasThemeState(aState)) return NO; - _themeState = CPThemeState.subtractThemeStates(_themeState, aState); + _themeState = ThemeState.subtractThemeStates(_themeState, aState); [self setNeedsLayout]; [self setNeedsDisplay:YES]; From 7408710761d1298dc1ef7856df3269dbf4693676 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Fri, 28 Feb 2014 11:14:46 -0800 Subject: [PATCH 052/278] Move placement of CPThemeStates cache to above the cache method for clarity. --- AppKit/CPTheme.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index e4b570cfb..7e43f5d5b 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -402,6 +402,8 @@ ThemeState.subtractThemeStates = function(aState1, aState2) return ThemeState._cacheThemeState(new ThemeState(newStates)); } +var CPThemeStates = {}; + ThemeState._cacheThemeState = function(aState) { // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. @@ -414,8 +416,6 @@ ThemeState._cacheThemeState = function(aState) return themeState; } -var CPThemeStates = {}; - /*! * This method can be called in multiple ways: * CPThemeState('state1') - creates a new CPThemeState that corresponds to the string 'state1' From 2fd8940c02f6b4e963b04bb25c81abbec3936d80 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sat, 1 Mar 2014 23:11:24 -0800 Subject: [PATCH 053/278] Allow array arguments to various methods that take ThemeStates --- AppKit/CPAlert.j | 2 +- AppKit/CPButton.j | 2 +- AppKit/CPButtonBar.j | 12 +- AppKit/CPDatePicker/_CPDatePickerCalendar.j | 36 +- AppKit/CPStepper.j | 8 +- AppKit/CPTableView.j | 10 +- AppKit/CPTheme.j | 6 +- AppKit/CPTokenField.j | 10 +- AppKit/CPView.j | 25 +- AppKit/Themes/Aristo/ThemeDescriptors.j | 284 +++++++-------- AppKit/Themes/Aristo2/ThemeDescriptors.j | 328 +++++++++--------- AppKit/_CPAutocompleteMenu.j | 4 +- Tests/AppKit/CPViewTest.j | 8 + .../SmartFoldersDemo/ImageAndTextView.j | 4 +- 14 files changed, 387 insertions(+), 352 deletions(-) diff --git a/AppKit/CPAlert.j b/AppKit/CPAlert.j index 38aeef5d8..cbd40cfe6 100644 --- a/AppKit/CPAlert.j +++ b/AppKit/CPAlert.j @@ -255,7 +255,7 @@ var bottomHeight = 71; [_themeView setValue:aValue forThemeAttribute:aName]; } -- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(CPThemeState)aState +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState { [_themeView setValue:aValue forThemeAttribute:aName inState:aState]; } diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 99d3ca36b..d4deab55b 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -268,7 +268,7 @@ CPButtonImageOffset = 3.0; break; case CPOffState: - [self unsetThemeState:CPThemeState(CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted)]; + [self unsetThemeState:[CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted]]; } } diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index 9de237609..f271aa34e 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -250,15 +250,15 @@ currentButtonOffset += width - 1; } - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateNormal, CPThemeStateBordered)]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateBordered)]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateNormal, CPThemeStateBordered]]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateHighlighted, CPThemeStateBordered, ]]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateDisabled, CPThemeStateBordered]]; [button setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateBordered]; // FIXME shouldn't need this - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; [self addSubview:button]; } diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index 63dd02be9..f30aa1b57 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -1020,30 +1020,30 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateDisabled]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateDisabled]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateHighlighted] forThemeAttribute:@"font" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateHighlighted]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; [self addSubview:_textField]; @@ -1059,7 +1059,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" /*! Set a theme */ -- (BOOL)setThemeState:(CPThemeState)aState +- (BOOL)setThemeState:(ThemeState)aState { [_textField setThemeState:aState]; [super setThemeState:aState]; @@ -1067,7 +1067,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" /*! Unset a theme */ -- (BOOL)unsetThemeState:(CPThemeState)aState +- (BOOL)unsetThemeState:(ThemeState)aState { [_textField unsetThemeState:aState]; [super unsetThemeState:aState]; diff --git a/AppKit/CPStepper.j b/AppKit/CPStepper.j index f39e37fab..eed6f1cdc 100644 --- a/AppKit/CPStepper.j +++ b/AppKit/CPStepper.j @@ -182,11 +182,11 @@ [_buttonDown setFrame:downFrame]; [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeStateBordered] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateDisabled]]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateHighlighted]]; [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeStateBordered] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateDisabled]]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateHighlighted]]; } - (void)_sizeToFit diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 33f79aad5..1bc803070 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -6186,14 +6186,20 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", [self setThemeState:CPThemeStateTableDataView]; } -- (BOOL)setThemeState:(CPThemeState)aState +- (BOOL)setThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + [super setThemeState:aState]; [self recursivelyPerformSelector:@selector(setThemeState:) withObject:aState startingFrom:self]; } -- (BOOL)unsetThemeState:(CPThemeState)aState +- (BOOL)unsetThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + [super unsetThemeState:aState]; [self recursivelyPerformSelector:@selector(unsetThemeState:) withObject:aState startingFrom:self]; } diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 7e43f5d5b..0c1c0a81c 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -240,7 +240,7 @@ var CPThemesByName = { }, @param aClass The themed class in which to look for the attribute @return A value or nil */ -- (id)valueForAttributeWithName:(CPString)aName inState:(CPThemeState)aState forClass:(id)aClass +- (id)valueForAttributeWithName:(CPString)aName inState:(ThemeState)aState forClass:(id)aClass { var attribute = [self attributeWithName:aName forClass:aClass]; @@ -560,7 +560,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); _values = @{ String(CPThemeStateNormal): aValue }; } -- (void)setValue:(id)aValue forState:(CPThemeState)aState +- (void)setValue:(id)aValue forState:(ThemeState)aState { _cache = { }; @@ -575,7 +575,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); return [self valueForState:CPThemeStateNormal]; } -- (id)valueForState:(CPThemeState)aState +- (id)valueForState:(ThemeState)aState { var stateName = String(aState); var value = _cache[stateName]; diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index ebfb0cf7b..da59b43a8 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1389,8 +1389,11 @@ CPTokenFieldDeleteButtonType = 1; [self setNeedsLayout]; } -- (BOOL)setThemeState:(CPThemeState)aState +- (BOOL)setThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + var r = [super setThemeState:aState]; // Share hover state with the disclosure and delete buttons. @@ -1403,8 +1406,11 @@ CPTokenFieldDeleteButtonType = 1; return r; } -- (BOOL)unsetThemeState:(CPThemeState)aState +- (BOOL)unsetThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + var r = [super unsetThemeState:aState]; // Share hover state with the disclosure and delete button. diff --git a/AppKit/CPView.j b/AppKit/CPView.j index eb81fab1f..43ed0cfd4 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2887,13 +2887,19 @@ setBoundsOrigin: return _themeState; } -- (BOOL)hasThemeState:(CPThemeState)aState +- (BOOL)hasThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + return _themeState.hasThemeState.apply(_themeState, aState); + return _themeState.hasThemeState(aState); } -- (BOOL)setThemeState:(CPThemeState)aState +- (BOOL)setThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + if (_themeState.hasThemeState(aState)) return NO; @@ -2905,8 +2911,11 @@ setBoundsOrigin: return YES; } -- (BOOL)unsetThemeState:(CPThemeState)aState +- (BOOL)unsetThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + if (!_themeState.hasThemeState(aState)) return NO; @@ -3069,8 +3078,11 @@ setBoundsOrigin: return dictionary; } -- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(CPThemeState)aState +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + if (!_themeAttributes || !_themeAttributes[aName]) [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; @@ -3101,8 +3113,11 @@ setBoundsOrigin: [self setNeedsLayout]; } -- (id)valueForThemeAttribute:(CPString)aName inState:(CPThemeState)aState +- (id)valueForThemeAttribute:(CPString)aName inState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + if (!_themeAttributes || !_themeAttributes[aName]) [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index a5524d16a..df5341f4d 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -502,29 +502,29 @@ var themedButtonValues = nil, [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBordered], [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateBordered], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateBordered, CPThemeStateDisabled]], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateBordered], [@"line-break-mode", CPLineBreakByTruncatingTail], [@"bezel-color", bezelColor, CPThemeStateBordered], - [@"bezel-color", highlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color", disabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color", defaultBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], - [@"bezel-color", defaultHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault)], - [@"bezel-color", defaultDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled)], + [@"bezel-color", highlightedBezelColor, [CPThemeStateBordered, CPThemeStateHighlighted]], + [@"bezel-color", disabledBezelColor, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color", defaultBezelColor, [CPThemeStateBordered, CPThemeStateDefault]], + [@"bezel-color", defaultHighlightedBezelColor, [CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault]], + [@"bezel-color", defaultDisabledBezelColor, [CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0.0, 7.0, 0.0, 7.0), CPThemeStateBordered], - [@"bezel-color", roundedBezelColor, CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], - [@"bezel-color", roundedHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded)], - [@"bezel-color", roundedDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], - [@"bezel-color", defaultRoundedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], - [@"bezel-color", defaultRoundedHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], - [@"bezel-color", defaultRoundedDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], - [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], + [@"bezel-color", roundedBezelColor, [CPThemeStateBordered, CPButtonStateBezelStyleRounded]], + [@"bezel-color", roundedHighlightedBezelColor, [CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded]], + [@"bezel-color", roundedDisabledBezelColor, [CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded]], + [@"bezel-color", defaultRoundedBezelColor, [CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded]], + [@"bezel-color", defaultRoundedHighlightedBezelColor, [CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded]], + [@"bezel-color", defaultRoundedDisabledBezelColor, [CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded]], + [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), [CPThemeStateBordered, CPButtonStateBezelStyleRounded]], [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateDisabled], [@"text-color", defaultTextColor, CPThemeStateDefault], - [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], + [@"text-color", defaultDisabledTextColor, [CPThemeStateDefault, CPThemeStateDisabled]], [@"min-size", CGSizeMake(0.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)], @@ -588,15 +588,15 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", color, CPThemeStateBordered], - [@"bezel-color", disabledColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", disabledColor, [CPThemeStateBordered, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0, 21.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]], - [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], [CPThemeStateBordered, CPThemeStateDisabled]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], [CPThemeStateBordered, CPThemeStateDisabled]], [@"min-size", CGSizeMake(32.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)] @@ -631,16 +631,16 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", color, CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered)], - [@"bezel-color", disabledColor, CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", color, [CPPopUpButtonStatePullsDown, CPThemeStateBordered]], + [@"bezel-color", disabledColor, [CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0, 27.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]], - [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], [CPThemeStateBordered, CPThemeStateDisabled]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], [CPThemeStateBordered, CPThemeStateDisabled]], [@"min-size", CGSizeMake(32.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)] @@ -761,35 +761,35 @@ var themedButtonValues = nil, [@"track-inset", CGInsetMake(2.0, 0.0, 2.0, 0.0), CPThemeStateVertical], [@"track-border-overlay", 12.0, CPThemeStateVertical], [@"knob-slot-color", [CPNull null], CPThemeStateVertical], - [@"knob-slot-color", trackColor, CPThemeState(CPThemeStateVertical, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLight, CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorDark, CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColor, [CPThemeStateVertical, CPThemeStateSelected]], + [@"knob-slot-color", trackColorLight, [CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColorDark, [CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColor, CPThemeStateVertical], - [@"knob-color", knobColorLight, CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorDark, CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobDark)], + [@"knob-color", knobColorLight, [CPThemeStateVertical, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColorDark, [CPThemeStateVertical, CPThemeStateScrollerKnobDark]], [@"increment-line-color", [CPNull null], CPThemeStateVertical], [@"decrement-line-color", [CPNull null], CPThemeStateVertical], [@"decrement-line-size", CGSizeMakeZero(), CPThemeStateVertical], [@"increment-line-size", CGSizeMakeZero(), CPThemeStateVertical], // Legacy - [@"scroller-width", 14.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"track-border-overlay", 0.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], - [@"increment-line-color", incrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"decrement-line-color", decrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)] + [@"scroller-width", 14.0, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"track-border-overlay", 0.0, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]], + [@"increment-line-color", incrementColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"decrement-line-color", decrementColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"decrement-line-size", CGSizeMake(14.0, 11.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"increment-line-size", CGSizeMake(14.0, 11.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]] ]; [self registerThemeValues:themedVerticalScrollerValues forView:scroller]; @@ -884,8 +884,8 @@ var themedButtonValues = nil, [@"track-border-overlay", 12.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor, CPThemeStateSelected], - [@"knob-slot-color", trackColorLight, CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorDark, CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLight, [CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColorDark, [CPThemeStateSelected, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColor], [@"knob-color", knobColorLight, CPThemeStateScrollerKnobLight], [@"knob-color", knobColorDark, CPThemeStateScrollerKnobDark], @@ -898,12 +898,12 @@ var themedButtonValues = nil, [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateScrollViewLegacy], [@"track-border-overlay", 0.0, CPThemeStateScrollViewLegacy], [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateSelected]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"knob-color", knobColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]], [@"increment-line-color", incrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-color", decrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-size", CGSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy], @@ -965,8 +965,8 @@ var themedButtonValues = nil, [ [@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled], [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled], @@ -978,30 +978,30 @@ var themedButtonValues = nil, [@"bezel-inset", CGInsetMakeZero(), CPThemeStateBezeled], [@"content-inset", CGInsetMake(8.0, 7.0, 7.0, 8.0), CPThemeStateBezeled], - [@"text-color", textDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-color", textDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], - [@"text-color", placeholderColor, CPThemeState(CPTextFieldStatePlaceholder, CPThemeStateDisabled)], + [@"text-color", placeholderColor, [CPTextFieldStatePlaceholder, CPThemeStateDisabled]], [@"line-break-mode", CPLineBreakByTruncatingTail, CPThemeStateTableDataView], [@"vertical-alignment", CPCenterVerticalTextAlignment, CPThemeStateTableDataView], [@"content-inset", CGInsetMake(3.0, 3.0, 3.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditable)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateBezeled)], - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditable]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), [CPThemeStateTableDataView, CPThemeStateEditing]], - [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], - [@"text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], - [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)] + [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], + [@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-shadow-offset", CGSizeMake(0,1), [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], + [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateGroupRow]] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; @@ -1045,21 +1045,21 @@ var themedButtonValues = nil, // Global for reuse by subclasses themedRoundedTextFieldValues = [ - [@"bezel-color", bezelColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelColor, [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"bezel-color", bezelFocusedColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelDisabledColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize]], // The new bezel is one pixel shorter, so we add one extra empty pixel at the bottom // for size compatibility with an earlier version. - [@"bezel-inset", CGInsetMake(0.0, 0.0, 1.0, 0.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"content-inset", CGInsetMake(8.0, 13.0, 7.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 1.0, 0.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(8.0, 13.0, 7.0, 14.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], - [@"text-color", textDisabledColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateDisabled)], - [@"text-color", placeholderColor, CPThemeState(CPTextFieldStateRounded, CPTextFieldStatePlaceholder)], + [@"text-color", textDisabledColor, [CPTextFieldStateRounded, CPThemeStateDisabled]], + [@"text-color", placeholderColor, [CPTextFieldStateRounded, CPTextFieldStatePlaceholder]], - [@"min-size", CGSizeMake(0.0, 30.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"max-size", CGSizeMake(-1.0, 30.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)] + [@"min-size", CGSizeMake(0.0, 30.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"max-size", CGSizeMake(-1.0, 30.0), [CPTextFieldStateRounded, CPThemeStateBezeled]] ]; [self registerThemeValues:themedRoundedTextFieldValues forView:textfield]; @@ -1135,7 +1135,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.8]], @@ -1147,8 +1147,8 @@ var themedButtonValues = nil, [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], - [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], [CPThemeStateNormal, CPThemeStateDisabled]], + [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, [CPThemeStateSelected, CPThemeStateDisabled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], @@ -1209,12 +1209,12 @@ var themedButtonValues = nil, [ [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:1.0], CPThemeStateNormal], [@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], - [@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], [CPThemeStateNormal, CPThemeStateDisabled]], + [@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], [CPThemeStateSelected, CPThemeStateDisabled]], [@"bezel-color-calendar", [CPColor whiteColor]], [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:0.5], [CPThemeStateSelected, CPThemeStateDisabled]], [@"bezel-color-clock", clockImageColor], [@"bezel-color-clock", clockImageColorDisabled, CPThemeStateDisabled], @@ -1258,35 +1258,35 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted], - [@"tile-text-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateHighlighted, CPThemeStateDisabled]], [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], CPThemeStateSelected], [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateSelected], [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateSelected], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateSelected], - [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateHighlighted, CPThemeStateSelected]], [@"tile-text-color", [CPColor colorWithCalibratedRed:179.0 / 255.0 green:179.0 / 255.0 blue:179.0 / 255.0 alpha:1.0], CPThemeStateDisabled], [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateDisabled], [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled], - [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], - [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], [CPThemeStateDisabled, CPThemeStateSelected]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateDisabled, CPThemeStateSelected]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateDisabled, CPThemeStateSelected]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateDisabled, CPThemeStateSelected]], [@"arrow-image-left", arrowImageLeft], [@"arrow-image-right", arrowImageRight], @@ -1347,7 +1347,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBezeled], // Bezeled token field with no tokens - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPTextFieldStatePlaceholder)] + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), [CPThemeStateBezeled, CPTextFieldStatePlaceholder]] ]; [self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues]; @@ -1389,8 +1389,8 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateHighlighted)], - [@"bezel-color", bezelColorDisabled, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelHighlightedColor, [CPThemeStateBezeled, CPThemeStateHighlighted]], + [@"bezel-color", bezelColorDisabled, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"text-color", textColor], [@"text-color", textHighlightedColor, CPThemeStateHighlighted], @@ -1422,8 +1422,8 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], [@"bezel-color", nil, CPThemeStateBordered], - [@"bezel-color", arrowImage, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], - [@"bezel-color", arrowImageHiglighted, CPThemeState(CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted)], + [@"bezel-color", arrowImage, [CPThemeStateBordered, CPThemeStateHovered]], + [@"bezel-color", arrowImageHiglighted, [CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted]], [@"min-size", CGSizeMake(7.0, 6.0)], [@"max-size", CGSizeMake(7.0, 6.0)], @@ -1445,15 +1445,15 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], - [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color", bezelColor, [CPThemeStateBordered, CPThemeStateHovered]], + [@"bezel-color", [bezelColor colorWithAlphaComponent:0], [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color", bezelHighlightedColor, [CPThemeStateBordered, CPThemeStateHighlighted]], [@"min-size", CGSizeMake(8.0, 8.0)], [@"max-size", CGSizeMake(8.0, 8.0)], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered], - [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateBordered, CPThemeStateHighlighted]], [@"offset", CGPointMake(17, 6), CPThemeStateBordered] ]; @@ -1509,9 +1509,9 @@ var themedButtonValues = nil, [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], [@"content-border-color", contentBorderColor, CPThemeStateBordered], - [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color", bezelHighlightedColor, [CPThemeStateBordered, CPThemeStateHighlighted]], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelDisabledColor, [CPThemeStateBordered, CPThemeStateDisabled]], ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; @@ -1573,24 +1573,24 @@ var themedButtonValues = nil, overrides = [ - [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing)], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing]], + [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled]], [@"bezel-color", bezelNoBorderColor, CPThemeStateBezeled], - [@"bezel-color", bezelNoBorderFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelNoBorderDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelNoBorderFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelNoBorderDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"border-inset", CGInsetMake(3.0, 3.0, 3.0, 3.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing]], // The right border inset has to make room for the focus ring and popup button - [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), [CPThemeStateBezeled, CPThemeStateEditing]], - [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], // Because combo box uses a three-part bezel, the height is fixed @@ -1621,10 +1621,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image-offset", CPRadioImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1657,10 +1657,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image-offset", CPCheckBoxImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1691,8 +1691,8 @@ var themedButtonValues = nil, themeValues = [ [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], - [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)], + [@"image", mixedHighlightedImage, [CPButtonStateMixed, CPThemeStateHighlighted]], + [@"image", mixedDisabledImage, [CPButtonStateMixed, CPThemeStateDisabled]], [@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed], [@"max-size", CGSizeMake(-1.0, -1.0)] ]; @@ -1755,29 +1755,29 @@ var themedButtonValues = nil, [ [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], - [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, [CPThemeStateSelected, CPThemeStateDisabled]], [@"center-segment-bezel-color", centerHighlightedBezelColor, CPThemeStateSelected], [@"center-segment-bezel-color", pushedCenterBezelColor, CPThemeStateHighlighted], - [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], - [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, [CPThemeStateSelected, CPThemeStateDisabled]], [@"divider-bezel-color", dividerHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", leftBezelColor, CPThemeStateNormal], [@"left-segment-bezel-color", inactiveLeftBezelColor, CPThemeStateDisabled], - [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, [CPThemeStateSelected, CPThemeStateDisabled]], [@"left-segment-bezel-color", leftHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", pushedLeftBezelColor, CPThemeStateHighlighted], - [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"right-segment-bezel-color", rightBezelColor, CPThemeStateNormal], [@"right-segment-bezel-color", inactiveRightBezelColor, CPThemeStateDisabled], - [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, [CPThemeStateSelected, CPThemeStateDisabled]], [@"right-segment-bezel-color", rightHighlightedBezelColor, CPThemeStateSelected], [@"right-segment-bezel-color", pushedRightBezelColor, CPThemeStateHighlighted], - [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"content-inset", CGInsetMake(0.0, 4.0, 0.0, 4.0), CPThemeStateNormal], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], @@ -1878,7 +1878,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)], + [@"track-color", trackDisabledColor, [CPThemeStateVertical, CPThemeStateDisabled]], [@"knob-size", CGSizeMake(23.0, 24.0)], [@"knob-color", knobColor], @@ -1913,12 +1913,12 @@ var themedButtonValues = nil, themedCircularSliderValues = [ [@"track-color", trackColor, CPThemeStateCircular], - [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)], + [@"track-color", trackDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]], [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], [@"knob-color", knobColor, CPThemeStateCircular], - [@"knob-color", knobHighlightedColor, CPThemeState(CPThemeStateCircular, CPThemeStateHighlighted)], - [@"knob-color", knobDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)] + [@"knob-color", knobHighlightedColor, [CPThemeStateCircular, CPThemeStateHighlighted]], + [@"knob-color", knobDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]] ]; [self registerThemeValues:themedCircularSliderValues forView:slider]; @@ -2029,7 +2029,7 @@ var themedButtonValues = nil, [@"background-color", pressed, CPThemeStateHighlighted], [@"background-color", highlighted, CPThemeStateSelected], - [@"background-color", highlightedPressed, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] + [@"background-color", highlightedPressed, [CPThemeStateHighlighted, CPThemeStateSelected]] ]; [self registerThemeValues:themedColumnHeaderValues forView:header]; @@ -2260,10 +2260,10 @@ var themedButtonValues = nil, [ [@"bezel-color-up-button", bezelUp, CPThemeStateBordered], [@"bezel-color-down-button", bezelDown, CPThemeStateBordered], - [@"bezel-color-up-button", bezelUpDisabled, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color-down-button", bezelDownDisabled, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color-up-button", bezelUpHighlighted, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color-down-button", bezelDownHighlighted, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color-up-button", bezelUpDisabled, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color-down-button", bezelDownDisabled, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color-up-button", bezelUpHighlighted, [CPThemeStateBordered, CPThemeStateHighlighted]], + [@"bezel-color-down-button", bezelDownHighlighted, [CPThemeStateBordered, CPThemeStateHighlighted]], [@"min-size", CGSizeMake(25.0, 25.0)], [@"up-button-size", CGSizeMake(19.0, 13.0)], [@"down-button-size", CGSizeMake(19.0, 12.0)] @@ -3091,7 +3091,7 @@ var themedButtonValues = nil, // var scroller = [AristoThemeDescriptor makeVerticalScroller], // overrides = // [ -// [@"knob-color", nil, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)] +// [@"knob-color", nil, [CPThemeStateVertical, CPThemeStateDisabled]] // ]; // // [self registerThemeValues:[self defaultThemeOverridesAddedTo:overrides] forView:scroller inherit:themedVerticalScrollerValues]; diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index be515268b..093a6da39 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -139,14 +139,14 @@ var themedButtonValues = nil, [@"text-shadow-color", regularTextShadowColor, CPThemeStateBordered], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], - [@"text-color", defaultTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], + [@"text-color", defaultTextColor, [CPThemeStateBordered, CPThemeStateDefault]], [@"text-color", defaultTextColor, CPThemeStateDefault], - [@"text-shadow-color", defaultTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], + [@"text-shadow-color", defaultTextShadowColor, [CPThemeStateBordered, CPThemeStateDefault]], - [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], - [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], + [@"text-color", defaultDisabledTextColor, [CPThemeStateDefault, CPThemeStateDisabled]], + [@"text-shadow-color", defaultDisabledTextShadowColor, [CPThemeStateDefault, CPThemeStateDisabled]], - [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], + [@"text-shadow-offset", CGSizeMake(0.0, 0.0), [CPThemeStateDefault, CPThemeStateDisabled]], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateBordered], [@"line-break-mode", CPLineBreakByTruncatingTail], @@ -155,41 +155,41 @@ var themedButtonValues = nil, CPThemeStateBordered], [@"bezel-color", bezelColor["@"]["highlighted"], - CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [CPThemeStateBordered, CPThemeStateHighlighted]], [@"bezel-color", bezelColor["@"]["disabled"], - CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [CPThemeStateBordered, CPThemeStateDisabled]], [@"bezel-color", bezelColor["default"]["@"], - CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], + [CPThemeStateBordered, CPThemeStateDefault]], [@"bezel-color", bezelColor["default"]["highlighted"], - CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault)], + [CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault]], [@"bezel-color", bezelColor["default"]["disabled"], - CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled)], + [CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0.0, 7.0, 0.0, 7.0), CPThemeStateBordered], [@"bezel-color", roundedBezelColor["@"]["@"], - CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["@"]["highlighted"], - CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["@"]["disabled"], - CPThemeState(CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["default"]["@"], - CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["default"]["highlighted"], - CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["default"]["disabled"], - CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded]], - [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], + [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), [CPThemeStateBordered, CPButtonStateBezelStyleRounded]], [@"min-size", CGSizeMake(0.0, CPButtonDefaultHeight)], [@"max-size", CGSizeMake(-1.0, CPButtonDefaultHeight)], @@ -235,7 +235,7 @@ var themedButtonValues = nil, var button = [self button]; [button setTitle:@"OK"]; - [button setThemeState:CPThemeState(CPButtonStateBezelStyleRounded, CPThemeStateDefault)]; + [button setThemeState:[CPButtonStateBezelStyleRounded, CPThemeStateDefault]]; return button; } @@ -256,15 +256,15 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", color["@"], CPThemeStateBordered], - [@"bezel-color", color["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", color["disabled"], [CPThemeStateBordered, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0, 21.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:12.0]], [@"text-color", regularTextColor], [@"text-shadow-color", regularTextShadowColor], - [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-color", regularDisabledTextColor, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPThemeStateBordered, CPThemeStateDisabled]], [@"min-size", CGSizeMake(32.0, 25.0)], [@"max-size", CGSizeMake(-1.0, 25.0)] @@ -293,16 +293,16 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", color["@"], CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered)], - [@"bezel-color", color["disabled"], CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", color["@"], [CPPopUpButtonStatePullsDown, CPThemeStateBordered]], + [@"bezel-color", color["disabled"], [CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0, 27.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:12.0]], [@"text-color", regularTextColor], [@"text-shadow-color", regularTextShadowColor], - [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-color", regularDisabledTextColor, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPThemeStateBordered, CPThemeStateDisabled]], [@"min-size", CGSizeMake(32.0, 25.0)], [@"max-size", CGSizeMake(-1.0, 25.0)] @@ -403,35 +403,35 @@ var themedButtonValues = nil, [@"track-inset", CGInsetMake(2.0, 0.0, 2.0, 0.0), CPThemeStateVertical], [@"track-border-overlay", 12.0, CPThemeStateVertical], [@"knob-slot-color", [CPNull null], CPThemeStateVertical], - [@"knob-slot-color", trackColor["@"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected)], - [@"knob-slot-color", trackColor["light"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColor["dark"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColor["@"], [CPThemeStateVertical, CPThemeStateSelected]], + [@"knob-slot-color", trackColor["light"], [CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColor["dark"], [CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColor["@"], CPThemeStateVertical], - [@"knob-color", knobColor["light"], CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColor["dark"], CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobDark)], + [@"knob-color", knobColor["light"], [CPThemeStateVertical, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColor["dark"], [CPThemeStateVertical, CPThemeStateScrollerKnobDark]], [@"increment-line-color", [CPNull null], CPThemeStateVertical], [@"decrement-line-color", [CPNull null], CPThemeStateVertical], [@"decrement-line-size", CGSizeMakeZero(), CPThemeStateVertical], [@"increment-line-size", CGSizeMakeZero(), CPThemeStateVertical], // Legacy - [@"scroller-width", 14.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"track-border-overlay", 0.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], - [@"increment-line-color", incrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"decrement-line-color", decrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)] + [@"scroller-width", 14.0, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"track-border-overlay", 0.0, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]], + [@"increment-line-color", incrementColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"decrement-line-color", decrementColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"decrement-line-size", CGSizeMake(14.0, 11.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]], + [@"increment-line-size", CGSizeMake(14.0, 11.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]] ]; [self registerThemeValues:themedVerticalScrollerValues forView:scroller]; @@ -484,8 +484,8 @@ var themedButtonValues = nil, [@"track-border-overlay", 12.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor["@"], CPThemeStateSelected], - [@"knob-slot-color", trackColor["light"], CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColor["dark"], CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColor["light"], [CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColor["dark"], [CPThemeStateSelected, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColor["@"]], [@"knob-color", knobColor["light"], CPThemeStateScrollerKnobLight], [@"knob-color", knobColor["dark"], CPThemeStateScrollerKnobDark], @@ -498,12 +498,12 @@ var themedButtonValues = nil, [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateScrollViewLegacy], [@"track-border-overlay", 0.0, CPThemeStateScrollViewLegacy], [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateSelected]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"knob-color", knobColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]], [@"increment-line-color", incrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-color", decrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-size", CGSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy], @@ -541,16 +541,16 @@ var themedButtonValues = nil, [ [@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled], [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled], - [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-color", regularDisabledTextColor, [CPThemeStateBezeled, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], @@ -559,20 +559,20 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable)], - [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditable)], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable]], + [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), [CPThemeStateTableDataView, CPThemeStateEditable]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), [CPThemeStateTableDataView, CPThemeStateEditing]], - [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], - [@"text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-shadow-offset", CGSizeMake(0, 1), CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], - [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)] + [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], + [@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-shadow-offset", CGSizeMake(0, 1), [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], + [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateGroupRow]] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; @@ -610,25 +610,25 @@ var themedButtonValues = nil, themedRoundedTextFieldValues = [ [@"bezel-color", - bezelColor["@"], CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + bezelColor["@"], [CPTextFieldStateRounded, CPThemeStateBezeled]], [@"bezel-color", - bezelFocusedColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], + bezelFocusedColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-color", - bezelColor["disabled"], CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], + bezelColor["disabled"], [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont systemFontOfSize:12.0]], - [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], + [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing]], - [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing]], - [@"text-color", placeholderColor, CPThemeState(CPTextFieldStateRounded, CPTextFieldStatePlaceholder)], - [@"text-color", regularDisabledTextColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-color", placeholderColor, [CPTextFieldStateRounded, CPTextFieldStatePlaceholder]], + [@"text-color", regularDisabledTextColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled]], - [@"min-size", CGSizeMake(0.0, 29.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"max-size", CGSizeMake(-1.0, 29.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)] + [@"min-size", CGSizeMake(0.0, 29.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"max-size", CGSizeMake(-1.0, 29.0), [CPTextFieldStateRounded, CPThemeStateBezeled]] ]; [self registerThemeValues:themedRoundedTextFieldValues forView:textfield]; @@ -688,7 +688,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.8]], @@ -700,8 +700,8 @@ var themedButtonValues = nil, [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], [CPThemeStateNormal, CPThemeStateDisabled]], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], [CPThemeStateSelected, CPThemeStateDisabled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], @@ -762,12 +762,12 @@ var themedButtonValues = nil, [ [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:1.0], CPThemeStateNormal], [@"border-color", [CPColor colorWithCalibratedRed:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], - [@"border-color", [CPColor colorWithCalibratedRed:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], [CPThemeStateNormal, CPThemeStateDisabled]], + [@"border-color", [CPColor colorWithCalibratedRed:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:0.5], [CPThemeStateSelected, CPThemeStateDisabled]], [@"bezel-color-calendar", [CPColor whiteColor]], [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], [CPThemeStateSelected, CPThemeStateDisabled]], [@"bezel-color-clock", clockImageColor], [@"bezel-color-clock", clockImageColorDisabled, CPThemeStateDisabled], @@ -811,15 +811,15 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted], - [@"tile-text-color", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-text-shadow-color", [CPColor whiteColor], [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateHighlighted, CPThemeStateDisabled]], - [@"tile-text-color", [CPColor whiteColor], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-color", [CPColor whiteColor], [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateHighlighted, CPThemeStateSelected]], [@"tile-text-color", [CPColor whiteColor], CPThemeStateSelected], [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateSelected], @@ -831,15 +831,15 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled], - [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], - [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], [CPThemeStateDisabled, CPThemeStateSelected]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], [CPThemeStateDisabled, CPThemeStateSelected]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateDisabled, CPThemeStateSelected]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateDisabled, CPThemeStateSelected]], [@"arrow-image-left", arrowImageLeft], [@"arrow-image-right", arrowImageRight], @@ -888,7 +888,7 @@ var themedButtonValues = nil, [ [@"bezel-inset", CGInsetMakeZero()], [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"editor-inset", CGInsetMake(3.0, 0.0, 0.0, 0.0)], @@ -902,7 +902,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(4.0, 8.0, 4.0, 8.0), CPThemeStateBezeled], // Bezeled token field with no tokens - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPTextFieldStatePlaceholder)] + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), [CPThemeStateBezeled, CPTextFieldStatePlaceholder]] ]; [self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues]; @@ -930,8 +930,8 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelColor["highlighted"], CPThemeState(CPThemeStateBezeled, CPThemeStateHighlighted)], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelColor["highlighted"], [CPThemeStateBezeled, CPThemeStateHighlighted]], + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], [@"text-color", textColor], [@"text-color", textHighlightedColor, CPThemeStateHighlighted], @@ -964,8 +964,8 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], [@"bezel-color", nil, CPThemeStateBordered], - [@"bezel-color", arrowImage, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], - [@"bezel-color", arrowImageHiglighted, CPThemeState(CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted)], + [@"bezel-color", arrowImage, [CPThemeStateBordered, CPThemeStateHovered]], + [@"bezel-color", arrowImageHiglighted, [CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted]], [@"min-size", CGSizeMake(7.0, 6.0)], [@"max-size", CGSizeMake(7.0, 6.0)], @@ -987,15 +987,15 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], - [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color", bezelColor, [CPThemeStateBordered, CPThemeStateHovered]], + [@"bezel-color", [bezelColor colorWithAlphaComponent:0], [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color", bezelHighlightedColor, [CPThemeStateBordered, CPThemeStateHighlighted]], [@"min-size", CGSizeMake(8.0, 8.0)], [@"max-size", CGSizeMake(8.0, 8.0)], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered], - [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateBordered, CPThemeStateHighlighted]], [@"offset", CGPointMake(16, 6), CPThemeStateBordered] ]; @@ -1049,36 +1049,36 @@ var themedButtonValues = nil, overrides = [ - [@"bezel-color", bezelColor["@"], CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing)], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelColor["@"], [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing]], + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled]], [@"bezel-color", bezelNoBorderColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelNoBorderFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelNoBorderColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelNoBorderFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelNoBorderColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], [@"border-inset", CGInsetMake(3.0, 3.0, 3.0, 3.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing, CPComboBoxStateButtonBordered)], - [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled, CPComboBoxStateButtonBordered)], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing, CPComboBoxStateButtonBordered]], + [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), [CPThemeStateBezeled, CPThemeStateDisabled, CPComboBoxStateButtonBordered]], - [@"bezel-inset", CGInsetMake(0.0, 4.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-inset", CGInsetMake(0.0, 4.0, 0.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), [CPThemeStateBezeled, CPThemeStateDisabled]], // The right border inset has to make room for the focus ring and popup button - [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], - [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], // Because combo box uses a three-part bezel, the height is fixed [@"min-size", CGSizeMake(0, 31.0)], [@"max-size", CGSizeMake(-1, 31.0)], - [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-color", regularDisabledTextColor, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPThemeStateBordered, CPThemeStateDisabled]], ]; [self registerThemeValues:overrides forView:combo inherit:themedTextFieldValues]; @@ -1105,10 +1105,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image-offset", CPRadioImageOffset], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], @@ -1140,10 +1140,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image-offset", CPCheckBoxImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1174,8 +1174,8 @@ var themedButtonValues = nil, themeValues = [ [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], - [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)], + [@"image", mixedHighlightedImage, [CPButtonStateMixed, CPThemeStateHighlighted]], + [@"image", mixedDisabledImage, [CPButtonStateMixed, CPThemeStateDisabled]], [@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed], [@"max-size", CGSizeMake(-1.0, -1.0)] ]; @@ -1238,29 +1238,29 @@ var themedButtonValues = nil, [ [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], - [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, [CPThemeStateSelected, CPThemeStateDisabled]], [@"center-segment-bezel-color", centerHighlightedBezelColor, CPThemeStateSelected], [@"center-segment-bezel-color", pushedCenterBezelColor, CPThemeStateHighlighted], - [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], - [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, [CPThemeStateSelected, CPThemeStateDisabled]], [@"divider-bezel-color", dividerHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", leftBezelColor, CPThemeStateNormal], [@"left-segment-bezel-color", inactiveLeftBezelColor, CPThemeStateDisabled], - [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, [CPThemeStateSelected, CPThemeStateDisabled]], [@"left-segment-bezel-color", leftHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", pushedLeftBezelColor, CPThemeStateHighlighted], - [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"right-segment-bezel-color", rightBezelColor, CPThemeStateNormal], [@"right-segment-bezel-color", inactiveRightBezelColor, CPThemeStateDisabled], - [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, [CPThemeStateSelected, CPThemeStateDisabled]], [@"right-segment-bezel-color", rightHighlightedBezelColor, CPThemeStateSelected], [@"right-segment-bezel-color", pushedRightBezelColor, CPThemeStateHighlighted], - [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"content-inset", CGInsetMake(0.0, 4.0, 0.0, 4.0), CPThemeStateNormal], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], @@ -1272,14 +1272,14 @@ var themedButtonValues = nil, // The "default" button state is the same theme color as the "selected" segmented control state, so we can use // the same text theme values. [@"text-color", defaultTextColor, CPThemeStateSelected], - [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"text-color", defaultDisabledTextColor, [CPThemeStateDisabled, CPThemeStateSelected]], [@"text-shadow-color", regularTextShadowColor], [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateDisabled], - [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"text-shadow-color", defaultDisabledTextShadowColor, [CPThemeStateDisabled, CPThemeStateSelected]], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.2], CPThemeStateSelected], [@"text-shadow-offset", CGSizeMake(0.0, 1.0)], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateSelected], - [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"text-shadow-offset", CGSizeMake(0.0, 0.0), [CPThemeStateSelected, CPThemeStateDisabled]], [@"line-break-mode", CPLineBreakByTruncatingTail], [@"divider-thickness", 1.0], @@ -1365,7 +1365,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)], + [@"track-color", trackDisabledColor, [CPThemeStateVertical, CPThemeStateDisabled]], [@"knob-size", CGSizeMake(21.0, 21.0)], [@"knob-color", knobColor], @@ -1400,12 +1400,12 @@ var themedButtonValues = nil, themedCircularSliderValues = [ [@"track-color", trackColor, CPThemeStateCircular], - [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)], + [@"track-color", trackDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]], [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], [@"knob-color", knobColor, CPThemeStateCircular], - [@"knob-color", knobHighlightedColor, CPThemeState(CPThemeStateCircular, CPThemeStateHighlighted)], - [@"knob-color", knobDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)] + [@"knob-color", knobHighlightedColor, [CPThemeStateCircular, CPThemeStateHighlighted]], + [@"knob-color", knobDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]] ]; [self registerThemeValues:themedCircularSliderValues forView:slider]; @@ -1500,7 +1500,7 @@ var themedButtonValues = nil, [@"background-color", pressed, CPThemeStateHighlighted], [@"background-color", highlighted, CPThemeStateSelected], - [@"background-color", highlightedPressed, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] + [@"background-color", highlightedPressed, [CPThemeStateHighlighted, CPThemeStateSelected]] ]; [self registerThemeValues:themedColumnHeaderValues forView:header]; @@ -1708,10 +1708,10 @@ var themedButtonValues = nil, [ [@"bezel-color-up-button", bezelUp["@"], CPThemeStateBordered], [@"bezel-color-down-button", bezelDown["@"], CPThemeStateBordered], - [@"bezel-color-up-button", bezelUp["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color-down-button", bezelDown["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color-up-button", bezelUp["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color-down-button", bezelDown["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color-up-button", bezelUp["disabled"], [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color-down-button", bezelDown["disabled"], [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color-up-button", bezelUp["highlighted"], [CPThemeStateBordered, CPThemeStateHighlighted]], + [@"bezel-color-down-button", bezelDown["highlighted"], [CPThemeStateBordered, CPThemeStateHighlighted]], [@"min-size", CGSizeMake(25.0, 25.0)], [@"up-button-size", CGSizeMake(25.0, 13.0)], [@"down-button-size", CGSizeMake(25.0, 12.0)] @@ -1800,9 +1800,9 @@ var themedButtonValues = nil, [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], [@"content-border-color", contentBorderColor, CPThemeStateBordered], - [@"bezel-color", bezelColor["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color", bezelColor["highlighted"], [CPThemeStateBordered, CPThemeStateHighlighted]], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBordered, CPThemeStateDisabled]] ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; @@ -2627,13 +2627,13 @@ var themedButtonValues = nil, [ [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], - [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)] + [@"image", mixedHighlightedImage, [CPButtonStateMixed, CPThemeStateHighlighted]], + [@"image", mixedDisabledImage, [CPButtonStateMixed, CPThemeStateDisabled]] ]; [self registerThemeValues:[self defaultThemeOverridesAddedTo:hudSpecific] forView:button inherit:themedCheckBoxValues]; @@ -2667,10 +2667,10 @@ var themedButtonValues = nil, [ [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)] + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]] ]; [self registerThemeValues:[self defaultThemeOverridesAddedTo:hudSpecific] forView:button inherit:themedRadioButtonValues]; diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index 753e75f45..cf25c025d 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -171,9 +171,9 @@ var _CPAutocompleteMenuMaximumHeight = 307; var dataView = [tableColumn dataView], fontNormal = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView], - fontSelected = [dataView valueForThemeAttribute:@"font" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + fontSelected = [dataView valueForThemeAttribute:@"font" inState:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]], contentInsetNormal = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView], - contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)]; + contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]]; var mergedString = contentArray.join("\n"); diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 6679e89a3..234f91edb 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -50,6 +50,7 @@ [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"CPView should be in state CPThemeStateDisabled"]; [self assertTrue:[view hasThemeState:CPThemeStateBordered] message:@"CPView should be in state CPThemeStateBordered"]; [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] message:@"CPView should be in the combined state of CPThemeStateDisabled and CPThemeStateBordered"]; + [self assertTrue:[view hasThemeState:[CPThemeStateBordered, CPThemeStateDisabled]] message:@"hasThemeState works with an array argument"]; [self assertFalse:[view hasThemeState:CPThemeState(CPThemeStateNormal)] message:@"CPView should not be in CPThemeStateNormal"]; } @@ -72,6 +73,9 @@ [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; + + [view setThemeState:[CPThemeStateHighlighted, CPThemeStateDisabled]]; + [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"setThemeState works with array argument"]; } - (void)testUnsetThemeState @@ -88,6 +92,10 @@ [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; [view unsetThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDisabled)]; [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be able to unset a combined theme state"]; + + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; + [view unsetThemeState:[CPThemeStateBordered, CPThemeStateHighlighted]]; + [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"unsetThemeState works with array argument"]; } - (void)testThemeAttributes diff --git a/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j b/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j index 995c5926f..3746fcc09 100644 --- a/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j +++ b/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j @@ -44,7 +44,7 @@ [self setText:value]; } -- (void)setThemeState:(CPThemeState)state +- (void)setThemeState:(ThemeState)state { if (state === CPThemeStateSelectedDataView) { @@ -55,7 +55,7 @@ [super setThemeState:state]; } -- (void)unsetThemeState:(CPThemeState)state +- (void)unsetThemeState:(ThemeState)state { if (state === CPThemeStateSelectedDataView) { From b6b4015a82a685242450452c131ed3f457e16a6c Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sat, 1 Mar 2014 23:26:20 -0800 Subject: [PATCH 054/278] Introduce .and and .without syntax for ThemeStates. --- AppKit/CPScroller.j | 2 +- AppKit/CPSegmentedControl.j | 20 ++++++++++---------- AppKit/CPTheme.j | 17 +++++++++++------ AppKit/CPView.j | 2 +- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index f19ee083d..cc6d89427 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -733,7 +733,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); var themeState = _themeState; if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) - themeState = ThemeState.subtractThemeStates(themeState, CPThemeStateHighlighted); + themeState = themeState.without(CPThemeStateHighlighted); return [self valueForThemeAttribute:anAttributeName inState:themeState]; } diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 53173dd77..0853312f8 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -431,9 +431,9 @@ CPSegmentSwitchTrackingMomentary = 2; [_segments[aSegment] setEnabled:shouldBeEnabled]; if (shouldBeEnabled) - _themeStates[aSegment] = ThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateDisabled); + _themeStates[aSegment] = _themeStates[aSegment].without(CPThemeStateDisabled); else - _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateDisabled); + _themeStates[aSegment] = _themeStates[aSegment].and(CPThemeStateDisabled); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -477,9 +477,9 @@ CPSegmentSwitchTrackingMomentary = 2; - (void)drawSegmentBezel:(int)aSegment highlight:(BOOL)shouldHighlight { if (shouldHighlight) - _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateHighlighted); + _themeStates[aSegment] = _themeStates[aSegment].and(CPThemeStateHighlighted); else - _themeStates[aSegment] = ThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateHighlighted); + _themeStates[aSegment] = _themeStates[aSegment].without(CPThemeStateHighlighted); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -576,7 +576,7 @@ CPSegmentSwitchTrackingMomentary = 2; var themeState = _themeStates[0], isDisabled = [self hasThemeState:CPThemeStateDisabled]; - themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; + themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState; var leftCapColor = [self valueForThemeAttribute:@"left-segment-bezel-color" inState:themeState], @@ -589,7 +589,7 @@ CPSegmentSwitchTrackingMomentary = 2; var themeState = _themeStates[_themeStates.length - 1]; - themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; + themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState; var rightCapColor = [self valueForThemeAttribute:@"right-segment-bezel-color" inState:themeState], @@ -604,7 +604,7 @@ CPSegmentSwitchTrackingMomentary = 2; { var themeState = _themeStates[i]; - themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; + themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState; var bezelColor = [self valueForThemeAttribute:@"center-segment-bezel-color" inState:themeState], @@ -642,11 +642,11 @@ CPSegmentSwitchTrackingMomentary = 2; if (i == count - 1) continue; - var borderState = CPThemeState(_themeStates[i], _themeStates[i + 1]); + var borderState = _themeStates[i].and(_themeStates[i + 1]); borderState = (borderState.hasThemeState(CPThemeStateSelected) && !borderState.hasThemeState(CPThemeStateHighlighted)) ? CPThemeStateSelected : CPThemeStateNormal; - borderState = isDisabled ? CPThemeState(borderState, CPThemeStateDisabled) : borderState; + borderState = isDisabled ? borderState.and(CPThemeStateDisabled) : borderState; var borderColor = [self valueForThemeAttribute:@"divider-bezel-color" inState:borderState], @@ -676,7 +676,7 @@ CPSegmentSwitchTrackingMomentary = 2; var segment = _segments[aSegment], segmentWidth = [segment width], - themeState = _themeState.hasThemeState(CPThemeStateDisabled) ? CPThemeState(_themeStates[aSegment], CPThemeStateDisabled) : _themeStates[aSegment]; + themeState = _themeState.hasThemeState(CPThemeStateDisabled) ? _themeStates[aSegment].and(CPThemeStateDisabled) : _themeStates[aSegment]; contentInset = [self valueForThemeAttribute:@"content-inset" inState:themeState], font = [self font]; diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 0c1c0a81c..933ee6a2d 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -384,24 +384,29 @@ ThemeState.prototype.isSubsetOf = function(aState) return true; } -ThemeState.subtractThemeStates = function(aState1, aState2) +ThemeState.prototype.without = function(aState) { - if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) - return aState1; + if (aState === undefined || aState === nil || aState === [CPNull null]) + return aState; var newStates = {}; - for (var stateName in aState1._stateNames) + for (var stateName in this._stateNames) { - if (!aState1._stateNames.hasOwnProperty(stateName)) + if (!this._stateNames.hasOwnProperty(stateName)) continue; - if (!aState2._stateNames[stateName]) + if (!aState._stateNames[stateName]) newStates[stateName] = true; } return ThemeState._cacheThemeState(new ThemeState(newStates)); } +ThemeState.prototype.and = function(aState) +{ + return CPThemeState(this, aState); +} + var CPThemeStates = {}; ThemeState._cacheThemeState = function(aState) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 43ed0cfd4..d80a3c015 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2919,7 +2919,7 @@ setBoundsOrigin: if (!_themeState.hasThemeState(aState)) return NO; - _themeState = ThemeState.subtractThemeStates(_themeState, aState); + _themeState = _themeState.without(aState); [self setNeedsLayout]; [self setNeedsDisplay:YES]; From e6acc3c3362e70889f6f1bef82414f71df710230 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 6 Mar 2014 14:02:51 +0000 Subject: [PATCH 055/278] Fixed: missing var, minor tweaks. Refs #2073. --- AppKit/CPTheme.j | 17 ++++++++++------- Tests/AppKit/CPThemeTest.j | 1 + Tools/nib2cib/_NSCornerView.j | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 933ee6a2d..18d9081c0 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -327,7 +327,7 @@ function ThemeState(stateNames) { if (!stateNames.hasOwnProperty(key)) continue; - if (key != 'normal') + if (key !== 'normal') { this._stateNames[key] = true; stateNameKeys.push(key); @@ -356,13 +356,15 @@ ThemeState.prototype.toString = function() ThemeState.prototype.hasThemeState = function(aState) { - if (aState === undefined || aState === nil || aState._stateNames === undefined) + if (!aState || !aState._stateNames) return false; + // We can do this in O(n) because both states have their stateNames already sorted. for (var stateName in aState._stateNames) { if (!aState._stateNames.hasOwnProperty(stateName)) continue; + if (!this._stateNames[stateName]) return false; } @@ -374,10 +376,11 @@ ThemeState.prototype.isSubsetOf = function(aState) if (aState._stateNameCount < this._stateNameCount) return false; - for (key in this._stateNames) + for (var key in this._stateNames) { if (!this._stateNames.hasOwnProperty(key)) continue; + if (!aState._stateNames[key]) return false; } @@ -386,7 +389,7 @@ ThemeState.prototype.isSubsetOf = function(aState) ThemeState.prototype.without = function(aState) { - if (aState === undefined || aState === nil || aState === [CPNull null]) + if (!aState || aState === [CPNull null]) return aState; var newStates = {}; @@ -445,7 +448,7 @@ function CPThemeState() var stateNames = {}; for (var argIndex = 0; argIndex < arguments.length; argIndex++) { - if (arguments[argIndex] === [CPNull null] || arguments[argIndex] === nil || arguments[argIndex] === undefined) + if (arguments[argIndex] === [CPNull null] || !arguments[argIndex]) continue; if (typeof arguments[argIndex] === 'object') @@ -582,8 +585,8 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); - (id)valueForState:(ThemeState)aState { - var stateName = String(aState); - var value = _cache[stateName]; + var stateName = String(aState), + value = _cache[stateName]; // This can be nil. if (value !== undefined) diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j index 1803c6619..b033202b0 100644 --- a/Tests/AppKit/CPThemeTest.j +++ b/Tests/AppKit/CPThemeTest.j @@ -62,4 +62,5 @@ [themeAttribute setValue:9 forState:CPThemeState('aState3')]; [self assertTrue:([themeAttribute valueForState:CPThemeState("aState8+aState3+aState4")] == 10) message:"Return the largest partial subset match for a combined state that isn't a perfect match"]; } + @end diff --git a/Tools/nib2cib/_NSCornerView.j b/Tools/nib2cib/_NSCornerView.j index 541b3acb5..d488de69c 100644 --- a/Tools/nib2cib/_NSCornerView.j +++ b/Tools/nib2cib/_NSCornerView.j @@ -51,7 +51,7 @@ { var theme = [Nib2Cib defaultTheme], height = [theme valueForAttributeWithName:@"default-row-height" forClass:[CPTableView class]], - width = [theme valueForAttributeWithName:@"scroller-width" inState:CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy) forClass:[CPScroller class]]; + width = [theme valueForAttributeWithName:@"scroller-width" inState:CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy) forClass:[CPScroller class]]; _frame.size.height = height; _bounds.size.height = height; From 633445883e86a3992fb69ef1b6b8f209fef3cee2 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 6 Mar 2014 14:09:18 +0000 Subject: [PATCH 056/278] Test: CFPropertyList.propertyListFromXML. These tests validate some basic edge cases with the parsing of XML plists. Refs #2051. --- Tests/Objective-J/CFPropertyListTest.j | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/Tests/Objective-J/CFPropertyListTest.j b/Tests/Objective-J/CFPropertyListTest.j index ad6e9c643..748732507 100644 --- a/Tests/Objective-J/CFPropertyListTest.j +++ b/Tests/Objective-J/CFPropertyListTest.j @@ -25,4 +25,48 @@ var FILE = require("file"), [self assert:[[CPDate alloc] initWithString:"2012-01-01 10:00:00 +0100"] equals:date]; } +- (void)testPropertyListFromXMLShouldHandleEmptyXMLGracefully { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); + + [self assert:object equals:null]; +} + +- (void)testPropertyListFromXMLShouldHandleEmptierXMLGracefully { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); + + [self assert:object equals:null]; +} + +- (void)testPropertyListFromXMLShouldHandleEmptiestXMLGracefully { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); + + [self assert:object equals:null]; +} + +- (void)testPropertyListFromXMLShouldParseNiceAndCleanXML { + var XML = "Main cib file base nameMainMenu.cibCPBundleNameCopyAndPasteCPBundleVersion1.0CPHumanReadableCopyrightCopyright \u00a9 2013, SlevenBits, Ltd. All rights reserved.", + object = CFPropertyList.propertyListFromXML(XML); + + [self assert:[object valueForKey:"Main cib file base name"] equals:"MainMenu.cib"]; + [self assert:[object valueForKey:"CPBundleName"] equals:"CopyAndPaste"]; + [self assert:[object valueForKey:"CPBundleVersion"] equals:"1.0"]; + [self assert:[object valueForKey:"CPHumanReadableCopyright"] equals:"Copyright \u00a9 2013, SlevenBits, Ltd. All rights reserved."]; + [self assert:[object count] equals:4]; +} + +- (void)testPropertyListFromXMLShouldIgnoreWhiteSpace{ + var XML = "\n \n \n\n\tMain cib file base name\n\tMainMenu.cib\n\t CPBundleName\n\tCopyAndPaste\n CPBundleVersion\n 1.0\n CPHumanReadableCopyright\n Copyright \u00a9 2013, SlevenBits, Ltd. All rights reserved.\n\n\n", + // feed in preparsed XML to ensure we preserve whitespace for purposes of this test + object = CFPropertyList.propertyListFromXML(new window.DOMParser().parseFromString(XML, "text/xml")); + + [self assert:[object valueForKey:"Main cib file base name"] equals:"MainMenu.cib"]; + [self assert:[object valueForKey:"CPBundleName"] equals:"CopyAndPaste"]; + [self assert:[object valueForKey:"CPBundleVersion"] equals:"1.0"]; + [self assert:[object valueForKey:"CPHumanReadableCopyright"] equals:"Copyright \u00a9 2013, SlevenBits, Ltd. All rights reserved."]; + [self assert:[object count] equals:4]; +} + @end From 8c43f4f628a020c2b1dc899bfae8e3cc45cc0832 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 6 Mar 2014 14:13:22 +0000 Subject: [PATCH 057/278] Fixed: theoretical error while skipping whitespace in XML plists. This fix ensures the PLIST_FIRST_CHILD() code gets to run both statements in the XML parsing while loop. There's no obvious way to trigger an error due to this bug, but better correct than wrong. Refs #2051. --- Objective-J/CFPropertyList.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Objective-J/CFPropertyList.js b/Objective-J/CFPropertyList.js index 00174387c..7dd16cc4c 100644 --- a/Objective-J/CFPropertyList.js +++ b/Objective-J/CFPropertyList.js @@ -320,8 +320,8 @@ var XML_XML = "xml", #define IS_WHITESPACE(anXMLNode) (NODE_TYPE(anXMLNode) === 8 || NODE_TYPE(anXMLNode) === 3) #define IS_DOCUMENTTYPE(anXMLNode) (NODE_TYPE(anXMLNode) === 10) -#define PLIST_NEXT_SIBLING(anXMLNode) while ((anXMLNode = NEXT_SIBLING(anXMLNode)) && IS_WHITESPACE(anXMLNode)) ; -#define PLIST_FIRST_CHILD(anXMLNode) anXMLNode = FIRST_CHILD(anXMLNode); if (anXMLNode !== NULL && IS_WHITESPACE(anXMLNode)) PLIST_NEXT_SIBLING(anXMLNode) +#define PLIST_NEXT_SIBLING(anXMLNode) while ((anXMLNode = NEXT_SIBLING(anXMLNode)) && IS_WHITESPACE(anXMLNode)); +#define PLIST_FIRST_CHILD(anXMLNode) { anXMLNode = FIRST_CHILD(anXMLNode); if (anXMLNode !== NULL && IS_WHITESPACE(anXMLNode)) PLIST_NEXT_SIBLING(anXMLNode) } var textContent = function(nodes) { From 1dbd41a746a380f878a11dec18a5cf5f7a67d2cd Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 6 Mar 2014 14:16:00 +0000 Subject: [PATCH 058/278] Fixed: error in Internet Explorer if Info.plist was served with wrong content type. Without this fix, in Internet Explorer the plist parser would only receive an empty XML document for the main Info.plist (and any other such loaded documents) if the server did not provide the content type "text/xml". This fix parses the XML correctly even if there is no such content type. Fixes #2051. --- Objective-J/CFHTTPRequest.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Objective-J/CFHTTPRequest.js b/Objective-J/CFHTTPRequest.js index 2b2d29c73..2084ca0a6 100644 --- a/Objective-J/CFHTTPRequest.js +++ b/Objective-J/CFHTTPRequest.js @@ -172,7 +172,10 @@ CFHTTPRequest.prototype.responseXML = function() { var responseXML = this._nativeRequest.responseXML; - if (responseXML && (NativeRequest === window.XMLHttpRequest)) + // Internet Explorer will return a non-null but empty request.responseXML if the response + // content type wasn't "text/html", so also check that responseXML.documentRoot is set. + // Otherwise fall back to regular parsing. + if (responseXML && (NativeRequest === window.XMLHttpRequest) && responseXML.documentRoot) return responseXML; return parseXML(this.responseText()); From 45df8c0f74328c168326ec3cd1b8d31a75c8160b Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sun, 9 Mar 2014 15:15:11 -0700 Subject: [PATCH 059/278] Fix bug with unsetThemeState + more tests. --- AppKit/CPTheme.j | 8 +++--- AppKit/CPView.j | 11 ++++---- Tests/AppKit/CPButtonTest.j | 10 +++++++ Tests/AppKit/CPThemeTest.j | 4 +++ Tests/AppKit/CPViewTest.j | 52 ++++++++++++++++++++++++++----------- 5 files changed, 61 insertions(+), 24 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 18d9081c0..090c0e067 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -358,13 +358,13 @@ ThemeState.prototype.hasThemeState = function(aState) { if (!aState || !aState._stateNames) return false; - + // We can do this in O(n) because both states have their stateNames already sorted. for (var stateName in aState._stateNames) { if (!aState._stateNames.hasOwnProperty(stateName)) continue; - + if (!this._stateNames[stateName]) return false; } @@ -380,7 +380,7 @@ ThemeState.prototype.isSubsetOf = function(aState) { if (!this._stateNames.hasOwnProperty(key)) continue; - + if (!aState._stateNames[key]) return false; } @@ -390,7 +390,7 @@ ThemeState.prototype.isSubsetOf = function(aState) ThemeState.prototype.without = function(aState) { if (!aState || aState === [CPNull null]) - return aState; + return this; var newStates = {}; for (var stateName in this._stateNames) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index d80a3c015..323de0fa0 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2897,7 +2897,7 @@ setBoundsOrigin: - (BOOL)setThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) + if (aState && aState.isa && [aState isKindOfClass:CPArray]) aState = CPThemeState.apply(null, aState); if (_themeState.hasThemeState(aState)) @@ -2913,14 +2913,15 @@ setBoundsOrigin: - (BOOL)unsetThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) + if (aState && aState.isa && [aState isKindOfClass:CPArray]) aState = CPThemeState.apply(null, aState); - if (!_themeState.hasThemeState(aState)) - return NO; - + var oldThemeState = _themeState _themeState = _themeState.without(aState); + if (oldThemeState === _themeState) + return NO; + [self setNeedsLayout]; [self setNeedsDisplay:YES]; diff --git a/Tests/AppKit/CPButtonTest.j b/Tests/AppKit/CPButtonTest.j index e4d46af2c..38f8a4286 100644 --- a/Tests/AppKit/CPButtonTest.j +++ b/Tests/AppKit/CPButtonTest.j @@ -132,6 +132,16 @@ [self assert:CPMixedState equals:[button state] message:@"Mixed state is allowed, state should be CPMixedState"]; } +- (void)testThemeStateWhenSettingObjectValue +{ + [button unsetThemeState:[button themeState]]; + [button setObjectValue:CPOnState]; + [self assert:String(CPThemeStateSelected) equals:String([button themeState]) message:@"object should be in the selected themestate"]; + + [button setObjectValue:CPOffState]; + [self assert:String(CPThemeStateNormal) equals:String([button themeState]) message:@"object should be in the normal themestate"]; +} + - (void)testThemeAttributes { var attributes = [CPButton themeAttributes]; diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j index b033202b0..0c85d6ee9 100644 --- a/Tests/AppKit/CPThemeTest.j +++ b/Tests/AppKit/CPThemeTest.j @@ -42,6 +42,10 @@ var themeState5 = CPThemeState('a', 'theme', 'state'); [self assertTrue:(String(themeState5) === 'a+state+theme') message:"Creating a new ThemeState using multiple strings works."]; + + var themeState6 = CPThemeState('a') + var themeState7 = CPThemeState('a', 'b') + [self assertTrue:(String(CPThemeState(themeState6, themeState7)) === 'a+b') message:"Creating a new ThemeState where the same state repeats itself does not result in the state being in the new themestate twice"]; } - (void)testThemeAttributeValueForState diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 234f91edb..8a51c25d5 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -54,48 +54,70 @@ [self assertFalse:[view hasThemeState:CPThemeState(CPThemeStateNormal)] message:@"CPView should not be in CPThemeStateNormal"]; } -- (void)testThemeState +- (void)testSetThemeState { - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should initialy have CPThemeStateNormal"]; - [self assertFalse:[view hasThemeState:CPThemeStateDisabled] message:@"view should not be disabled"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should initialy have CPThemeStateNormal"]; [view setThemeState:CPThemeStateDisabled]; - [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; + [self assert:String(CPThemeStateDisabled) equals:String([view themeState]) message:@"The view should be CPThemeStateDisabled"]; [view setThemeState:CPThemeStateHighlighted]; - [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"Theme state should be CPThemeStateHighlighted"]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"Theme state should be CPThemeStateHighlighted and CPThemeStateDisabled"]; + [view unsetThemeState:[view themeState]]; [view setThemeState:CPThemeState(CPThemeStateNormal, CPThemeStateHighlighted)]; [self assertFalse:[view hasThemeState:CPThemeStateNormal] message:@"CPThemeStateNormal cannot exist as part of a compound state"]; - [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; + [self assert:String([view themeState]) equals:String(CPThemeStateHighlighted) message:@"The view should be CPThemeStateHighlighted"]; [view setThemeState:CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)]; [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; - [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; - [view setThemeState:[CPThemeStateHighlighted, CPThemeStateDisabled]]; - [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"setThemeState works with array argument"]; + [view setThemeState:[CPThemeStateSelected, CPThemeStateDisabled]]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)) equals:String([view themeState]) message:@"setThemeState works with array argument"]; } - (void)testUnsetThemeState { - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should initialy have CPThemeStateNormal"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should initialy have CPThemeStateNormal"]; [view unsetThemeState:CPThemeStateNormal]; - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView always be in CPThemeStateNormal even if you try to unset it"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView always be in CPThemeStateNormal even if you try to unset it"]; + [view setThemeState:CPThemeStateDisabled]; [view unsetThemeState:CPThemeStateDisabled]; - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be in CPThemeStateNormal when all other theme states have been unset from it"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be in CPThemeStateNormal when all other theme states have been unset from it"]; + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; [view unsetThemeState:CPThemeStateDisabled]; - [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:"@CPView should have the remaining state when one of its combined states is unset"]; + [self assert:String(CPThemeStateHighlighted) equals:String([view themeState]) message:"@CPView should have the remaining state when one of its combined states is unset"]; + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; [view unsetThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDisabled)]; - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be able to unset a combined theme state"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state"]; [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; [view unsetThemeState:[CPThemeStateBordered, CPThemeStateHighlighted]]; - [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"unsetThemeState works with array argument"]; + [self assert:String(CPThemeStateDisabled) equals:String([view themeState]) message:@"unsetThemeState works with array argument"]; + + [view setThemeState:CPThemeStateDisabled]; + [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has more theme states than the view currently has"]; + + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; + var returnValue = [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [self assert:String(CPThemeStateBordered) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has not entirely overlapping themestates"]; + [self assertTrue:returnValue message:@"When unsetThemeState successfully unsets anything, it return YES"]; + + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; + var returnValue = [view unsetThemeState:[CPThemeStateSelected, CPThemeStateHighlighted]]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)) equals:String([view themeState]) message:@"CPView not unset any theme states it does not have"]; + [self assertFalse:returnValue message:@"When unsetThemeState doesn't unset anything, it returns NO"]; + + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; + var returnValue = [view unsetThemeState:null]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)) equals:String([view themeState]) message:@"Trying to unset a null themestate does not change the current themestate of the view"]; + [self assertFalse:returnValue message:@"Trying to unset a null themestate returns false"]; } - (void)testThemeAttributes From 647686e68e00ac63f323561651e3c215a683433b Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Mon, 10 Mar 2014 12:17:23 -0700 Subject: [PATCH 060/278] Fix CPViewTest --- Tests/AppKit/CPViewTest.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 8a51c25d5..5c539859e 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -74,6 +74,7 @@ [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; + [view unsetThemeState:[view themeState]]; [view setThemeState:[CPThemeStateSelected, CPThemeStateDisabled]]; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)) equals:String([view themeState]) message:@"setThemeState works with array argument"]; } From 974942a736836c67d078bc70543e98751ba7b0f7 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Mon, 10 Mar 2014 14:24:12 -0700 Subject: [PATCH 061/278] Fix OS X scrolling issue. Closes #2078. --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index e542da819..e3a2c79a8 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -201,6 +201,7 @@ var ModifierKeyCodes = [ supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop]; var resizeTimer = nil; +var PreventScroll = true; #if PLATFORM(DOM) @@ -325,8 +326,8 @@ var resizeTimer = nil; _DOMScrollingElement.style.position = "absolute"; _DOMScrollingElement.style.visibility = "hidden"; _DOMScrollingElement.style.zIndex = @"999"; - _DOMScrollingElement.style.height = "60px"; - _DOMScrollingElement.style.width = "60px"; + _DOMScrollingElement.style.height = "500px"; + _DOMScrollingElement.style.width = "500px"; _DOMScrollingElement.style.overflow = "scroll"; //_DOMScrollingElement.style.backgroundColor = "rgba(0,0,0,1.0)"; // debug help. _DOMScrollingElement.style.opacity = "0"; @@ -335,8 +336,8 @@ var resizeTimer = nil; _DOMBodyElement.appendChild(_DOMScrollingElement); var _DOMInnerScrollingElement = theDocument.createElement("div"); - _DOMInnerScrollingElement.style.width = "400px"; - _DOMInnerScrollingElement.style.height = "400px"; + _DOMInnerScrollingElement.style.width = "5000px"; + _DOMInnerScrollingElement.style.height = "5000px"; _DOMScrollingElement.appendChild(_DOMInnerScrollingElement); // Set an initial scroll offset @@ -842,6 +843,12 @@ var resizeTimer = nil; - (void)scrollEvent:(DOMEvent)aDOMEvent { + if (PreventScroll) + { + PreventScroll = false; + aDOMEvent.preventDefault(); + } + if (_hideDOMScrollingElementTimeout) { clearTimeout(_hideDOMScrollingElementTimeout); @@ -852,7 +859,6 @@ var resizeTimer = nil; aDOMEvent = window.event; var location = nil; - if (CPFeatureIsCompatible(CPJavaScriptMouseWheelValues_8_15)) { var x = aDOMEvent._offsetX || 0.0, @@ -950,6 +956,7 @@ var resizeTimer = nil; // can receive events. _hideDOMScrollingElementTimeout = setTimeout(function() { + PreventScroll = true; _DOMScrollingElement.style.visibility = "hidden"; }, 300); } From d51f179c2d097f393cd40242dbfac66c49d36a7c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 10 Mar 2014 22:43:12 +0000 Subject: [PATCH 062/278] Fixed: error when running some XML tests with rhino. This problem causes error in Travis that are not errors with JSC. --- Tests/Objective-J/CFPropertyListTest.j | 27 +++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Tests/Objective-J/CFPropertyListTest.j b/Tests/Objective-J/CFPropertyListTest.j index 748732507..94efd4156 100644 --- a/Tests/Objective-J/CFPropertyListTest.j +++ b/Tests/Objective-J/CFPropertyListTest.j @@ -26,24 +26,33 @@ var FILE = require("file"), } - (void)testPropertyListFromXMLShouldHandleEmptyXMLGracefully { - var XML = "", - object = CFPropertyList.propertyListFromXML(XML); + // rhino can't parse empty XML documents + if (system.engine !== "rhino") { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); - [self assert:object equals:null]; + [self assert:object equals:null]; + } } - (void)testPropertyListFromXMLShouldHandleEmptierXMLGracefully { - var XML = "", - object = CFPropertyList.propertyListFromXML(XML); + // rhino can't parse empty XML documents + if (system.engine !== "rhino") { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); - [self assert:object equals:null]; + [self assert:object equals:null]; + } } - (void)testPropertyListFromXMLShouldHandleEmptiestXMLGracefully { - var XML = "", - object = CFPropertyList.propertyListFromXML(XML); + // rhino can't parse empty XML documents + if (system.engine !== "rhino") { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); - [self assert:object equals:null]; + [self assert:object equals:null]; + } } - (void)testPropertyListFromXMLShouldParseNiceAndCleanXML { From 86f07245d465d979c27c9009243009cceee5bf8e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 11 Mar 2014 13:18:26 -0700 Subject: [PATCH 063/278] Fixed: CPRoundRectBezelStyle gives a CPNull ThemeState Previously with the CPRoundRectBezelStyle we got a CPNull themeState. Now we get an instance of ThemeState with the theme CPButtonStateBezelStyleRoundRect. CPButtonStateBezelStyleRoundRect is equal to CPThemeState("roundRect"). --- AppKit/CPButton.j | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index d4deab55b..bad76448c 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -72,13 +72,14 @@ CPPushInCellMask = CPPushInButtonMask; CPChangeGrayCellMask = CPGrayButtonMask; CPChangeBackgroundCellMask = CPBackgroundButtonMask; -CPButtonStateMixed = CPThemeState("mixed"); -CPButtonStateBezelStyleRounded = CPThemeState("rounded"); +CPButtonStateMixed = CPThemeState("mixed"); +CPButtonStateBezelStyleRounded = CPThemeState("rounded"); +CPButtonStateBezelStyleRoundRect = CPThemeState("roundRect"); // add all future correspondance between bezel styles and theme state here. var CPButtonBezelStyleStateMap = @{ CPRoundedBezelStyle: CPButtonStateBezelStyleRounded, - CPRoundRectBezelStyle: [CPNull null], + CPRoundRectBezelStyle: CPButtonStateBezelStyleRoundRect, }; /// @cond IGNORE From 4a31467afb5e3b7dd91da0def25b55f87b7315d0 Mon Sep 17 00:00:00 2001 From: Mathieu Monney Date: Mon, 17 Mar 2014 10:46:39 +0100 Subject: [PATCH 064/278] FIXED: CPSegementedControl with nib2cib crashes When having a CPSegmentedControl within a a XIB files, nib2cib crashes with the following error: ``` 'undefined' is not an object (evaluating 'self._themeStates[aSegment].without') ``` This pull request fixes the problem by making sure that the drawBezel method is called with a valid segment index when accessing the themeState. Reduction: https://dl.dropboxusercontent.com/u/14629300/BugCPSegmentedControl.zip --- AppKit/CPSegmentedControl.j | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 0853312f8..36a691035 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -476,10 +476,13 @@ CPSegmentSwitchTrackingMomentary = 2; */ - (void)drawSegmentBezel:(int)aSegment highlight:(BOOL)shouldHighlight { - if (shouldHighlight) - _themeStates[aSegment] = _themeStates[aSegment].and(CPThemeStateHighlighted); - else - _themeStates[aSegment] = _themeStates[aSegment].without(CPThemeStateHighlighted); + if(aSegment<_themeStates.length) + { + if (shouldHighlight) + _themeStates[aSegment] = _themeStates[aSegment].and(CPThemeStateHighlighted); + else + _themeStates[aSegment] = _themeStates[aSegment].without(CPThemeStateHighlighted); + } [self setNeedsLayout]; [self setNeedsDisplay:YES]; From 9e918cc71741fbc613bee4d807ec122d7299c7f8 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 20 Mar 2014 15:23:47 -0700 Subject: [PATCH 065/278] NEW: Ability to perform offline bootstraping Previously, bootstrap.sh was always trying to fetch cappuccino-base from github. This patch provides a new option "--copy-local [PATH]" that will let the user give a path of a local copy of the cappuccino-base zip. This can be pretty useful in an automated build system that cannot always access the internet. --- bootstrap.sh | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index 4f0c8badf..641dedb59 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -165,6 +165,7 @@ fi install_directory="" tmp_zip="/tmp/cappuccino.zip" +local_distrib="" github_user="cappuccino" github_ref="v0.9.7" @@ -176,21 +177,23 @@ verbosity=1 while [ $# -gt 0 ]; do case "$1" in - --noprompt) noprompt="yes";; - --directory) install_directory="$2"; shift;; - --clone) install_method="clone";; - --clone-http) install_method="clone --http";; - --github-user) github_user="$2"; shift;; - --github-ref) github_ref="$2"; shift;; - -q|--quiet) verbosity=$[verbosity - 1];; - -v|--verbose) verbosity=$[verbosity + 1];; - *) cat >&2 <<-EOT + --noprompt) noprompt="yes";; + --directory) install_directory="$2"; shift;; + --clone) install_method="clone";; + --clone-http) install_method="clone --http";; + --copy-local) local_distrib="$2"; shift;; + --github-user) github_user="$2"; shift;; + --github-ref) github_ref="$2"; shift;; + -q|--quiet) verbosity=$[verbosity - 1];; + -v|--verbose) verbosity=$[verbosity + 1];; + *) cat >&2 <<-EOT usage: ./bootstrap.sh [OPTIONS] --noprompt: Don't prompt, use relatively safe defaults. --directory [DIR]: Use a directory other than $default_directory. --clone: Do "git clone git://" instead of downloading zips. --clone-http: Do "git clone http://" instead of downloading zips. + --copy-local: Use a local copy instead of downloading zips. --github-user [USER]: Github user (default: $github_user). --github-ref [REF]: Use another git ref (default: $github_ref). -q | --quiet: Output less logging. @@ -306,6 +309,18 @@ if [ "$install_cappuccino" ]; then echo "Cloning Cappuccino base from \"$git_repo\"..." git clone "$git_repo" "$install_directory" (cd "$install_directory" && git checkout "origin/$github_ref") + elif [ -n "$local_distrib" ]; then + echo "Extracting local copy of the distribution from $local_distrib to $install_directory" + + quiet_arg="" + if (( $verbosity < 2 )); then quiet_arg="-q"; fi + unzip $quiet_arg "$local_distrib" -d "$install_directory" + check_and_exit + + mv "$install_directory/$github_project-"*/* "$install_directory/." + check_and_exit + rm -rf "$install_directory/$github_project-"* + check_and_exit else zip_ball="https://github.com/$github_path/zipball/$github_ref" From 970b176fbfc47dcc257d50e3f98c793eb16c2c32 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 20 Mar 2014 15:57:25 -0700 Subject: [PATCH 066/278] New: Graphical CPDatePicker clicking on the arrows with key mask Command/Control/Alternate Now when clicking on the arrows with the key mask Command/Control or Alternate change the date to 1 year or 10 years as in Cocoa. --- AppKit/CPDatePicker/_CPDatePickerCalendar.j | 75 ++++++++++++++++---- AppKit/CPDatePicker/_CPDatePickerTextField.j | 2 +- 2 files changed, 64 insertions(+), 13 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index f30aa1b57..890945b84 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -30,6 +30,7 @@ @class CPDatePicker +@global CPApp @global CPSingleDateMode @global CPRangeDateMode @@ -43,6 +44,10 @@ @global CPYearMonthDayDatePickerElementFlag @global CPEraDatePickerElementFlag +@global CPAlternateKeyMask +@global CPCommandKeyMask +@global CPControlKeyMask + var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su"], CPShortWeekDayNameArrayUS = [@"Su", @"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa"], CPShortWeekDayNameArrayFr = [@"L", @"M", @"M", @"J", @"V", @"S", @"D"], @@ -223,16 +228,62 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" /*! Move to the nextMonth without changing the dateValue of the datePicker */ -- (void)_nextMonth:(id)sender +- (void)_clickArrowNext:(id)sender { - [self setDateValue:[_monthView nextMonth]]; + var currentEvent = [CPApp currentEvent], + modifierFlags = [currentEvent modifierFlags]; + + if (modifierFlags & (CPCommandKeyMask | CPControlKeyMask | CPAlternateKeyMask)) + { + var date = [[_monthView monthDate] copy]; + date.setDate(1); + + if (modifierFlags & CPAlternateKeyMask) + date.setUTCFullYear(date.getUTCFullYear() + 10); + else + date.setUTCFullYear(date.getUTCFullYear() + 1); + + [self setDateValue:date]; + } + else + { + [self _displayNextMonth]; + } +} + +- (void)_displayNextMonth +{ + [self setDateValue:[_monthView nextMonth]]; +} + +- (void)_displayPreviousMonth +{ + [self setDateValue:[_monthView previousMonth]]; } /*! Move to the previous month without changing the dateValue of the datePicker */ -- (void)_previousMonth:(id)sender +- (void)_clickArrowPrevious:(id)sender { - [self setDateValue:[_monthView previousMonth]]; + var currentEvent = [CPApp currentEvent], + modifierFlags = [currentEvent modifierFlags]; + + if (modifierFlags & (CPCommandKeyMask | CPControlKeyMask | CPAlternateKeyMask)) + { + var date = [[_monthView monthDate] copy]; + date.setDate(1); + + if (modifierFlags & CPAlternateKeyMask) + date.setUTCFullYear(date.getUTCFullYear() - 10); + else + date.setUTCFullYear(date.getUTCFullYear() - 1); + + [self setDateValue:date]; + } + else + { + [self _displayPreviousMonth]; + } } /*! Move to the current selected day @@ -334,10 +385,10 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" [self addSubview:_currentButton]; [_previousButton setTarget:aDelegate]; - [_previousButton setAction:@selector(_previousMonth:)]; + [_previousButton setAction:@selector(_clickArrowPrevious:)]; [_nextButton setTarget:aDelegate]; - [_nextButton setAction:@selector(_nextMonth:)]; + [_nextButton setAction:@selector(_clickArrowNext:)]; [_currentButton setTarget:aDelegate]; [_currentButton setAction:@selector(_currentMonth:)]; @@ -861,9 +912,9 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" { // Check the year and the month. The year is usefull when changing from Jan to Dec. if (_date.getMonth() - [dayTile date].getMonth() == 1 || _date.getFullYear() - [dayTile date].getFullYear() == 1) - [_delegate _previousMonth:self]; + [_delegate _displayPreviousMonth]; else - [_delegate _nextMonth:self]; + [_delegate _displayNextMonth]; } } @@ -899,9 +950,9 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" // Check the year and the month. The year is usefull when changing from Jan to Dec. if (_date.getMonth() - [dayTile date].getMonth() == 1 || _date.getFullYear() - [dayTile date].getFullYear() == 1) - [_delegate _previousMonth:self]; + [_delegate _displayPreviousMonth]; else - [_delegate _nextMonth:self]; + [_delegate _displayNextMonth]; } } else @@ -944,7 +995,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" if (_isMonthJustChanged) { _dragDate.setMonth(_date.getMonth() + 1); - [_delegate _nextMonth:self]; + [_delegate _displayNextMonth]; } } @@ -953,7 +1004,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" if (_isMonthJustChanged) { _dragDate.setMonth(_date.getMonth() - 1); - [_delegate _previousMonth:self]; + [_delegate _displayPreviousMonth]; } } diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 9b1cd4910..02c7a7148 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -525,7 +525,7 @@ var CPZeroKeyCode = 48, #pragma mark - #pragma mark Responder methods -- (BOOL)acceptFirstResponder +- (BOOL)acceptsFirstResponder { return NO; } From c21d0c64a04137731b43ea7ab0ce83d46589ed3f Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 20 Mar 2014 15:26:32 -0700 Subject: [PATCH 067/278] FIXED: dependency to tusk Previously, jake install was calling tusk to ensure installed packages are up to date, and was used to install the new build. As tusk and all that narwhal suite is deprecated and causes more and more problems, this patch: - removes the up-to-date check: it's very likely that no package will never be updated anymore - uses a local function to install the freshly build --- Jakefile | 18 +++----------- common.jake | 71 ++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 58 insertions(+), 31 deletions(-) diff --git a/Jakefile b/Jakefile index 4dcff0811..d88f8aa73 100644 --- a/Jakefile +++ b/Jakefile @@ -43,24 +43,14 @@ task ("CommonJS", [$BUILD_CJS_OBJECTIVE_J_DEBUG_FRAMEWORKS, $BUILD_CJS_CAPPUCCIN task ("install", ["CommonJS"], function() { - // FIXME: require("narwhal/tusk/install").install({}, $COMMONJS); - // Doesn't work due to some weird this.print business. - if (OS.system(["tusk", "install", "--force", $BUILD_CJS_OBJECTIVE_J, $BUILD_CJS_CAPPUCCINO])) { - colorPrint("Installation failed, possibly because you do not have permissions.", "red"); - colorPrint("Try re-running using '" + colorize("jake sudo-install", "yellow") + "'.", "red"); - OS.exit(1); //rake abort if ($? != 0) - } + installCopy($BUILD_CJS_OBJECTIVE_J, false); + installCopy($BUILD_CJS_CAPPUCCINO, false); }); task ("sudo-install", ["CommonJS"], function() { - // FIXME: require("narwhal/tusk/install").install({}, $COMMONJS); - // Doesn't work due to some weird this.print business. - if (OS.system(["sudo", "tusk", "install", "--force", $BUILD_CJS_OBJECTIVE_J, $BUILD_CJS_CAPPUCCINO])) - { - // Attempt a hackish work-around for sudo compiled with the --with-secure-path option - sudo("tusk install --force " + $BUILD_CJS_OBJECTIVE_J + " " + $BUILD_CJS_CAPPUCCINO); - } + installCopy($BUILD_CJS_OBJECTIVE_J, true); + installCopy($BUILD_CJS_CAPPUCCINO, true); }); task ("install-symlinks", function() diff --git a/common.jake b/common.jake index d9112d415..f9a7f6569 100644 --- a/common.jake +++ b/common.jake @@ -35,6 +35,8 @@ SYSTEM.args.slice(1).forEach(function(arg) function ensurePackageUpToDate(packageName, requiredVersion, options) { + return; + options = options || {}; var packageInfo = require("narwhal/packages").catalog[packageName]; @@ -94,23 +96,25 @@ function ensurePackageUpToDate(packageName, requiredVersion, options) } } -// UPDATE THESE TO PICK UP CORRESPONDING CHANGES IN DEPENDENCIES -ensurePackageUpToDate("jake", "0.3"); -ensurePackageUpToDate("browserjs", "0.1.1"); -ensurePackageUpToDate("shrinksafe", "0.2"); -ensurePackageUpToDate("narwhal", "0.3.1", { - noupdate : true, - message : "Update Narwhal by re-running bootstrap.sh, or pulling the latest from git (see: http://github.com/280north/narwhal)." -}); -ensurePackageUpToDate("narwhal-jsc", "0.3", { - optional : true, - after : function(dir) { - if (OS.system("cd " + OS.enquote(dir) + " && make webkit")) { - print("Problem building narwhal-jsc."); - OS.exit(1); - } - } -}); +// This is disabled because tusk causes a lot of problems, and no packages will +// never be updated anyway +// // UPDATE THESE TO PICK UP CORRESPONDING CHANGES IN DEPENDENCIES +// ensurePackageUpToDate("jake", "0.3"); +// ensurePackageUpToDate("browserjs", "0.1.1"); +// ensurePackageUpToDate("shrinksafe", "0.2"); +// ensurePackageUpToDate("narwhal", "0.3.1", { +// noupdate : true, +// message : "Update Narwhal by re-running bootstrap.sh, or pulling the latest from git (see: http://github.com/280north/narwhal)." +// }); +// ensurePackageUpToDate("narwhal-jsc", "0.3", { +// optional : true, +// after : function(dir) { +// if (OS.system("cd " + OS.enquote(dir) + " && make webkit")) { +// print("Problem building narwhal-jsc."); +// OS.exit(1); +// } +// } +// }); var JAKE = require("jake"); @@ -444,6 +448,39 @@ global.installSymlink = function(sourcePath) } }; +global.installCopy = function(sourcePath, useSudo) +{ + if (!FILE.isDirectory(sourcePath)) + return; + + var packageName = FILE.basename(sourcePath), + targetPath = FILE.join(SYSTEM.prefix, "packages", packageName); + + if (FILE.isDirectory(targetPath)) + FILE.rmtree(targetPath); + else if (FILE.linkExists(targetPath)) + FILE.remove(targetPath); + + stream.print("Copying \0cyan(" + sourcePath + "\0) ==> \0cyan(" + targetPath + "\0)"); + + // hacky way to do a sudo copy. + if (useSudo) + OS.system(["sudo", "cp", "-r", sourcePath, targetPath]); + else + FILE.copyTree(sourcePath, targetPath); + + var binPath = FILE.Path(FILE.join(targetPath, "bin")); + + if (binPath.isDirectory()) + { + binPath.list().forEach(function (name) + { + var binary = binPath.join(name); + binary.chmod(0755); + }); + } +}; + global.spawnJake = function(/*String*/ aTaskName) { if (OS.system(serializedENV() + " " + SYSTEM.args[0] + " " + aTaskName)) From 5b4e7df856953324888adf7b5449b8e57062bdb5 Mon Sep 17 00:00:00 2001 From: Ashley Williams Date: Sun, 23 Mar 2014 16:07:54 -0700 Subject: [PATCH 068/278] Fixed: show placeholder string while editing empty CPTextField Previously, selecting an empty text field hid the contentView, causing the placeholder string to dissapear. This fix leaves the contentView of the text field visible when the internal _stringValue is nil or empty. Fixes #2049 --- AppKit/CPTextField.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index ba023101b..3a1af324e 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -586,7 +586,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); lineHeight = [font defaultLineHeightForFont]; element.value = _stringValue; - element.style.color = [[self currentValueForThemeAttribute:@"text-color"] cssString]; + element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; if (CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) element.style.font = [font cssString]; @@ -1158,7 +1158,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)_updatePlaceholderState { - if ((!_stringValue || _stringValue.length === 0) && ![self hasThemeState:CPThemeStateEditing]) + if (!_stringValue || _stringValue.length === 0) [self setThemeState:CPTextFieldStatePlaceholder]; else [self unsetThemeState:CPTextFieldStatePlaceholder]; @@ -1705,7 +1705,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if (contentView) { - [contentView setHidden:[self hasThemeState:CPThemeStateEditing]]; + [contentView setHidden:(_stringValue && _stringValue.length > 0) && [self hasThemeState:CPThemeStateEditing]]; var string = ""; From d5c48567b3246bebd621b508de86ba07a1803e92 Mon Sep 17 00:00:00 2001 From: Ashley Williams Date: Sun, 23 Mar 2014 17:05:57 -0700 Subject: [PATCH 069/278] Test: added manual test case to check for placeholder. Refs #2049 --- Tests/Manual/CPTextField/AppController.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/Manual/CPTextField/AppController.j b/Tests/Manual/CPTextField/AppController.j index b803522df..52cbb591b 100644 --- a/Tests/Manual/CPTextField/AppController.j +++ b/Tests/Manual/CPTextField/AppController.j @@ -84,15 +84,15 @@ y = CGRectGetMaxY([textField frame]) + 6; } - label = [[CPTextField alloc] initWithFrame:CGRectMake(15, 420, 600, 30)]; + label = [[CPTextField alloc] initWithFrame:CGRectMake(15, 420, 600, 60)]; [label setLineBreakMode:CPLineBreakByWordWrapping]; - [label setStringValue:"This text field has been configured to show its text at a fixed location both with and without bezel."]; + [label setStringValue:"This text field has been configured to show its text at a fixed location both with and without bezel.\nThis text should also display the word \"Placeholder\" when its value is empty."]; [contentView addSubview:label]; bezelToggleField = [CPTextField textFieldWithStringValue:"" placeholder:"Placeholder" width:200], [bezelToggleField setEditable:YES]; - [bezelToggleField setFrameOrigin:CGPointMake(15, 445)]; + [bezelToggleField setFrameOrigin:CGPointMake(15, 475)]; console.log("" + bezelToggleField._themeAttributes['content-inset']._themeDefaultAttribute._values); console.log("" + bezelToggleField._themeAttributes['content-inset']._values); [bezelToggleField setValue:[bezelToggleField valueForThemeAttribute:@"content-inset" inState:CPThemeStateBezeled] forThemeAttribute:@"content-inset" inState:CPThemeStateNormal]; @@ -108,7 +108,7 @@ [bezelToggleButton setTarget:self]; [bezelToggleButton setState:CPOnState]; [bezelToggleButton sizeToFit]; - [bezelToggleButton setFrameOrigin:CGPointMake(CGRectGetMaxX([bezelToggleField frame]) + 15, 448)]; + [bezelToggleButton setFrameOrigin:CGPointMake(CGRectGetMaxX([bezelToggleField frame]) + 15, 478)]; [contentView addSubview:bezelToggleButton]; [theWindow orderFront:self]; From be3c4abbcee71ec7e326049fcceb870140a9c1e8 Mon Sep 17 00:00:00 2001 From: Ashley Williams Date: Sun, 23 Mar 2014 21:05:56 -0700 Subject: [PATCH 070/278] Fixed: CPPopover not closing in some browsers In browsers without support for _DOMElement.removeEventListener CPPopover throws an exception when closing, and the popover is not removed. This fix checks for support implicitly using the _browserAnimates variable. --- AppKit/_CPPopoverWindow.j | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 899fab08b..593bd7dc6 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -588,7 +588,10 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, { // Make absolutely sure no dangling event listeners are left #if PLATFORM(DOM) - _DOMElement.removeEventListener(CPBrowserStyleProperty("transitionend"), _orderOutTransitionFunction, YES); + if (_animates && _browserAnimates) + { + _DOMElement.removeEventListener(CPBrowserStyleProperty("transitionend"), _orderOutTransitionFunction, YES); + } #endif [self _removeFrameObserver]; From c5637ea29bc31dddb023eabdcb0aa2d1d3f50474 Mon Sep 17 00:00:00 2001 From: Ashley Williams Date: Mon, 24 Mar 2014 05:08:36 -0700 Subject: [PATCH 071/278] Formatting: Fixed formatting in _CPPopoverWindow Refs #2137 --- AppKit/_CPPopoverWindow.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 593bd7dc6..3ee5c3588 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -589,9 +589,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, // Make absolutely sure no dangling event listeners are left #if PLATFORM(DOM) if (_animates && _browserAnimates) - { _DOMElement.removeEventListener(CPBrowserStyleProperty("transitionend"), _orderOutTransitionFunction, YES); - } #endif [self _removeFrameObserver]; From cc9d896cf80218c50b60e91696acfb7622abbeff Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 25 Mar 2014 21:03:00 -0700 Subject: [PATCH 072/278] New: Added CPPopoverDelegate protocole Added CPPopopverDelegate protocole --- AppKit/CPPopover.j | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index 760e4edab..c887fcf7c 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -30,6 +30,16 @@ @import "CPView.j" @import "_CPPopoverWindow.j" +@protocol CPPopoverDelegate + +@optional +- (BOOL)popoverShouldClose:(CPPopover)aPopover; +- (void)popoverWillClose:(CPPopover)aPopover; +- (void)popoverDidClose:(CPPopover)aPopover; +- (void)popoverWillShow:(CPPopover)aPopover; +- (void)popoverDidShow:(CPPopover)aPopover; + +@end CPPopoverBehaviorApplicationDefined = 0; CPPopoverBehaviorTransient = 1; @@ -60,15 +70,15 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ @implementation CPPopover : CPResponder { - @outlet CPViewController _contentViewController @accessors(property=contentViewController); - @outlet id _delegate @accessors(getter=delegate); + @outlet CPViewController _contentViewController @accessors(property=contentViewController); + @outlet id _delegate @accessors(getter=delegate); - BOOL _animates @accessors(getter=animates); - int _appearance @accessors(property=appearance); - int _behavior @accessors(getter=behavior); + BOOL _animates @accessors(getter=animates); + int _appearance @accessors(property=appearance); + int _behavior @accessors(getter=behavior); - _CPPopoverWindow _popoverWindow; - int _implementedDelegateMethods; + _CPPopoverWindow _popoverWindow; + int _implementedDelegateMethods; } @@ -184,7 +194,7 @@ Set the behavior of the CPPopover. It can be: [_popoverWindow setStyleMask:[self styleMaskForBehavior]]; } -- (void)setDelegate:(id)aDelegate +- (void)setDelegate:(id )aDelegate { if (_delegate === aDelegate) return; From f8ae61058e224b7019087cd4385737a8b0f3a89c Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Mar 2014 17:14:27 -0700 Subject: [PATCH 073/278] New: Added CPSplitViewDelegate protocol Added the CPSplitViewDelegate protocol. Also, now, delegate methods are called as we are used to do it in Cappuccino --- AppKit/CPSplitView.j | 326 +++++++++++++++++++++++++++++++++---------- 1 file changed, 253 insertions(+), 73 deletions(-) diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index 15201a59a..04c66b51c 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -30,6 +30,33 @@ @class CPUserDefaults @global CPApp +@protocol CPSplitViewDelegate + +@optional +- (BOOL)splitView:(CPSplitView)splitView canCollapseSubview:(CPView)subview; +- (BOOL)splitView:(CPSplitView)splitView shouldAdjustSizeOfSubview:(CPView)subview; +- (BOOL)splitView:(CPSplitView)splitView shouldCollapseSubview:(CPView)subview forDoubleClickOnDividerAtIndex:(CPInteger)dividerIndex; +- (CGRect)splitView:(CPSplitView)splitView additionalEffectiveRectOfDividerAtIndex:(CPInteger)dividerIndex; +- (CGRect)splitView:(CPSplitView)splitView effectiveRect:(CGRect)proposedEffectiveRect forDrawnRect:(CGRect)drawnRect ofDividerAtIndex:(CPInteger)dividerIndex; +- (float)splitView:(CPSplitView)splitView constrainMaxCoordinate:(float)proposedMax ofSubviewAt:(CPInteger)dividerIndex; +- (float)splitView:(CPSplitView)splitView constrainMinCoordinate:(float)proposedMin ofSubviewAt:(CPInteger)dividerIndex; +- (float)splitView:(CPSplitView)splitView constrainSplitPosition:(float)proposedPosition ofSubviewAt:(CPInteger)dividerIndex; +- (void)splitView:(CPSplitView)splitView resizeSubviewsWithOldSize:(CGSize)oldSize; +- (void)splitViewDidResizeSubviews:(CPNotification)aNotification; +- (void)splitViewWillResizeSubviews:(CPNotification)aNotification; + +@end + +var CPSplitViewDelegate_splitView_canCollapseSubview_ = 1 << 0, + CPSplitViewDelegate_splitView_shouldAdjustSizeOfSubview_ = 1 << 1, + CPSplitViewDelegate_splitView_shouldCollapseSubview_forDoubleClickOnDividerAtIndex_ = 1 << 2, + CPSplitViewDelegate_splitView_additionalEffectiveRectOfDividerAtIndex_ = 1 << 3, + CPSplitViewDelegate_splitView_effectiveRect_forDrawnRect_ofDividerAtIndex_ = 1 << 4, + CPSplitViewDelegate_splitView_constrainMaxCoordinate_ofSubviewAt_ = 1 << 5, + CPSplitViewDelegate_splitView_constrainMinCoordinate_ofSubviewAt_ = 1 << 6, + CPSplitViewDelegate_splitView_constrainSplitPosition_ofSubviewAt_ = 1 << 7, + CPSplitViewDelegate_splitView_resizeSubviewsWithOldSize_ = 1 << 8; + #define SPLIT_VIEW_MAYBE_POST_WILL_RESIZE() \ if ((_suppressResizeNotificationsMask & DidPostWillResizeNotification) === 0) \ { \ @@ -73,29 +100,31 @@ var ShouldSuppressResizeNotifications = 1, @implementation CPSplitView : CPView { - id _delegate; - BOOL _isVertical; - BOOL _isPaneSplitter; + id _delegate; + BOOL _isVertical; + BOOL _isPaneSplitter; - int _currentDivider; - float _initialOffset; - CPDictionary _preCollapsePositions; + int _currentDivider; + float _initialOffset; + CPDictionary _preCollapsePositions; - CPString _originComponent; - CPString _sizeComponent; + CPString _originComponent; + CPString _sizeComponent; - CPArray _DOMDividerElements; - CPString _dividerImagePath; - int _drawingDivider; + CPArray _DOMDividerElements; + CPString _dividerImagePath; + int _drawingDivider; - CPString _autosaveName; - BOOL _shouldAutosave; - CGSize _shouldRestoreFromAutosaveUnlessFrameSize; + CPString _autosaveName; + BOOL _shouldAutosave; + CGSize _shouldRestoreFromAutosaveUnlessFrameSize; - BOOL _needsResizeSubviews; - int _suppressResizeNotificationsMask; + BOOL _needsResizeSubviews; + int _suppressResizeNotificationsMask; - CPArray _buttonBars; + CPArray _buttonBars; + + unsigned _implementedDelegateMethods; } + (CPString)defaultThemeClass @@ -406,11 +435,8 @@ var ShouldSuppressResizeNotifications = 1, buttonBarRect.origin = [self convertPoint:buttonBarRect.origin fromView:buttonBar]; } - if ([_delegate respondsToSelector:@selector(splitView:effectiveRect:forDrawnRect:ofDividerAtIndex:)]) - effectiveRect = [_delegate splitView:self effectiveRect:effectiveRect forDrawnRect:effectiveRect ofDividerAtIndex:anIndex]; - - if ([_delegate respondsToSelector:@selector(splitView:additionalEffectiveRectOfDividerAtIndex:)]) - additionalRect = [_delegate splitView:self additionalEffectiveRectOfDividerAtIndex:anIndex]; + effectiveRect = [self _sendDelegateSplitViewEffectiveRect:effectiveRect forDrawnRect:effectiveRect ofDividerAtIndex:anIndex]; + additionalRect = [self _sendDelegateSplitViewAdditionalEffectiveRectOfDividerAtIndex:anIndex]; return CGRectContainsPoint(effectiveRect, aPoint) || (additionalRect && CGRectContainsPoint(additionalRect, aPoint)) || @@ -472,21 +498,21 @@ var ShouldSuppressResizeNotifications = 1, if ([self cursorAtPoint:point hitDividerAtIndex:i]) { if ([anEvent clickCount] == 2 && - [_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)] && - [_delegate respondsToSelector:@selector(splitView:shouldCollapseSubview:forDoubleClickOnDividerAtIndex:)]) + [self _delegateRespondsToSplitViewCanCollapseSubview] && + [self _delegateRespondsToSplitViewshouldCollapseSubviewForDoubleClickOnDividerAtIndex]) { var minPosition = [self minPossiblePositionOfDividerAtIndex:i], maxPosition = [self maxPossiblePositionOfDividerAtIndex:i], preCollapsePosition = [_preCollapsePositions objectForKey:"" + i] || 0; - if ([_delegate splitView:self canCollapseSubview:_subviews[i]] && [_delegate splitView:self shouldCollapseSubview:_subviews[i] forDoubleClickOnDividerAtIndex:i]) + if ([self _sendDelegateSplitViewCanCollapseSubview:_subviews[i]] && [self _sendDelegateSplitViewShouldCollapseSubview:_subviews[i] forDoubleClickOnDividerAtIndex:i]) { if ([self isSubviewCollapsed:_subviews[i]]) [self setPosition:preCollapsePosition ? preCollapsePosition : (minPosition + (maxPosition - minPosition) / 2) ofDividerAtIndex:i]; else [self setPosition:minPosition ofDividerAtIndex:i]; } - else if ([_delegate splitView:self canCollapseSubview:_subviews[i + 1]] && [_delegate splitView:self shouldCollapseSubview:_subviews[i + 1] forDoubleClickOnDividerAtIndex:i]) + else if ([self _sendDelegateSplitViewCanCollapseSubview:_subviews[i + 1]] && [self _sendDelegateSplitViewShouldCollapseSubview:_subviews[i + 1] forDoubleClickOnDividerAtIndex:i]) { if ([self isSubviewCollapsed:_subviews[i + 1]]) [self setPosition:preCollapsePosition ? preCollapsePosition : (minPosition + (maxPosition - minPosition) / 2) ofDividerAtIndex:i]; @@ -580,12 +606,8 @@ var ShouldSuppressResizeNotifications = 1, if (sizeA === 0) canGrow = YES; // Subview is collapsed. - else if (!canShrink && - [_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)] && - [_delegate splitView:self canCollapseSubview:_subviews[i]]) - { + else if (!canShrink && [self _sendDelegateSplitViewCanCollapseSubview:_subviews[i]]) canShrink = YES; // Subview is collapsible. - } if (sizeB === 0) { @@ -594,9 +616,7 @@ var ShouldSuppressResizeNotifications = 1, // It's safe to assume it can always be uncollapsed. canShrink = YES; } - else if (!canGrow && - [_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)] && - [_delegate splitView:self canCollapseSubview:_subviews[i + 1]]) + else if (!canGrow && [self _sendDelegateSplitViewCanCollapseSubview:_subviews[i + 1]]) { canGrow = YES; // Right/lower subview is collapsible. } @@ -657,53 +677,38 @@ var ShouldSuppressResizeNotifications = 1, - (int)_realPositionForPosition:(float)position ofDividerAtIndex:(int)dividerIndex { // not sure where this should override other positions? - if ([_delegate respondsToSelector:@selector(splitView:constrainSplitPosition:ofSubviewAt:)]) - { - var proposedPosition = [_delegate splitView:self constrainSplitPosition:position ofSubviewAt:dividerIndex]; + var proposedPosition = [self _sendDelegateSplitViewConstrainSplitPosition:position ofSubviewAt:dividerIndex]; - // Silently ignore bad positions which could result from odd delegate responses. We don't want these - // bad results to go into the system and cause havoc with frame sizes as the split view tries to resize - // its subviews. - if (_IS_NUMERIC(proposedPosition)) - position = proposedPosition; - } + // Silently ignore bad positions which could result from odd delegate responses. We don't want these + // bad results to go into the system and cause havoc with frame sizes as the split view tries to resize + // its subviews. + if (_IS_NUMERIC(proposedPosition)) + position = proposedPosition; var proposedMax = [self maxPossiblePositionOfDividerAtIndex:dividerIndex], proposedMin = [self minPossiblePositionOfDividerAtIndex:dividerIndex], actualMax = proposedMax, - actualMin = proposedMin; + actualMin = proposedMin, + proposedActualMin = [self _sendDelegateSplitViewConstrainMinCoordinate:proposedMin ofSubviewAt:dividerIndex], + proposedActualMax = [self _sendDelegateSplitViewConstrainMaxCoordinate:proposedMax ofSubviewAt:dividerIndex]; - if ([_delegate respondsToSelector:@selector(splitView:constrainMinCoordinate:ofSubviewAt:)]) - { - var proposedActualMin = [_delegate splitView:self constrainMinCoordinate:proposedMin ofSubviewAt:dividerIndex]; + if (_IS_NUMERIC(proposedActualMin)) + actualMin = proposedActualMin; - if (_IS_NUMERIC(proposedActualMin)) - actualMin = proposedActualMin; - } - - if ([_delegate respondsToSelector:@selector(splitView:constrainMaxCoordinate:ofSubviewAt:)]) - { - var proposedActualMax = [_delegate splitView:self constrainMaxCoordinate:proposedMax ofSubviewAt:dividerIndex]; - - if (_IS_NUMERIC(proposedActualMax)) - actualMax = proposedActualMax; - } + if (_IS_NUMERIC(proposedActualMax)) + actualMax = proposedActualMax; var viewA = _subviews[dividerIndex], viewB = _subviews[dividerIndex + 1], realPosition = MAX(MIN(position, actualMax), actualMin); // Is this position past the halfway point to collapse? - if (position < proposedMin + (actualMin - proposedMin) / 2) - if ([_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)]) - if ([_delegate splitView:self canCollapseSubview:viewA]) - realPosition = proposedMin; + if ((position < proposedMin + (actualMin - proposedMin) / 2) && [self _sendDelegateSplitViewCanCollapseSubview:viewA]) + realPosition = proposedMin; // We can also collapse to the right. - if (position > proposedMax - (proposedMax - actualMax) / 2) - if ([_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)]) - if ([_delegate splitView:self canCollapseSubview:viewB]) - realPosition = proposedMax; + if ((position > proposedMax - (proposedMax - actualMax) / 2) && [self _sendDelegateSplitViewCanCollapseSubview:viewB]) + realPosition = proposedMax; return realPosition; } @@ -787,9 +792,9 @@ var ShouldSuppressResizeNotifications = 1, - (void)resizeSubviewsWithOldSize:(CGSize)oldSize { - if ([_delegate respondsToSelector:@selector(splitView:resizeSubviewsWithOldSize:)]) + if ([self _delegateRespondsToSplitViewResizeSubviewsWithOldSize]) { - [_delegate splitView:self resizeSubviewsWithOldSize:oldSize]; + [self _sendDelegateSplitViewResizeSubviewsWithOldSize:oldSize]; return; } @@ -815,8 +820,7 @@ var ShouldSuppressResizeNotifications = 1, oldFlexibleSpace = 0, totalSizablePanes = 0, isSizableMap = {}, - viewSizes = [], - delegateRespondsToShouldAdjust = [_delegate respondsToSelector:@selector(splitView:shouldAdjustSizeOfSubview:)]; + viewSizes = []; // What we want to do is to preserve non resizable sizes first, and then to preserve the ratio of size to available // non fixed space for every other subview. E.g. assume fixed space was 20 pixels initially, view 1 was 20 and @@ -832,7 +836,7 @@ var ShouldSuppressResizeNotifications = 1, for (index = 0; index < count; ++index) { var view = _subviews[index], - isSizable = !delegateRespondsToShouldAdjust || [_delegate splitView:self shouldAdjustSizeOfSubview:view], + isSizable = [self _sendDelegateSplitViewShouldAdjustSizeOfSubview:view], size = [view frame].size[_sizeComponent]; isSizableMap[index] = isSizable; @@ -958,25 +962,59 @@ The sum of the views and the sum of the dividers should be equal to the size of @param delegate - The delegate of the splitview. */ -- (void)setDelegate:(id)delegate +- (void)setDelegate:(id )aDelegate { + if (_delegate === aDelegate) + return; + if ([_delegate respondsToSelector:@selector(splitViewDidResizeSubviews:)]) [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:CPSplitViewDidResizeSubviewsNotification object:self]; + if ([_delegate respondsToSelector:@selector(splitViewWillResizeSubviews:)]) [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:CPSplitViewWillResizeSubviewsNotification object:self]; - _delegate = delegate; + _delegate = aDelegate; + _implementedDelegateMethods = 0; if ([_delegate respondsToSelector:@selector(splitViewDidResizeSubviews:)]) [[CPNotificationCenter defaultCenter] addObserver:_delegate selector:@selector(splitViewDidResizeSubviews:) name:CPSplitViewDidResizeSubviewsNotification object:self]; + if ([_delegate respondsToSelector:@selector(splitViewWillResizeSubviews:)]) [[CPNotificationCenter defaultCenter] addObserver:_delegate selector:@selector(splitViewWillResizeSubviews:) name:CPSplitViewWillResizeSubviewsNotification object:self]; + + if ([_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_canCollapseSubview_; + + if ([_delegate respondsToSelector:@selector(splitView:shouldAdjustSizeOfSubview:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_shouldAdjustSizeOfSubview_; + + if ([_delegate respondsToSelector:@selector(splitView:shouldCollapseSubview:forDoubleClickOnDividerAtIndex:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_shouldCollapseSubview_forDoubleClickOnDividerAtIndex_; + + if ([_delegate respondsToSelector:@selector(splitView:additionalEffectiveRectOfDividerAtIndex:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_additionalEffectiveRectOfDividerAtIndex_; + + if ([_delegate respondsToSelector:@selector(splitView:effectiveRect:forDrawnRect:ofDividerAtIndex:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_effectiveRect_forDrawnRect_ofDividerAtIndex_; + + if ([_delegate respondsToSelector:@selector(splitView:constrainMaxCoordinate:ofSubviewAt:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_constrainMaxCoordinate_ofSubviewAt_; + + if ([_delegate respondsToSelector:@selector(splitView:constrainMinCoordinate:ofSubviewAt:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_constrainMinCoordinate_ofSubviewAt_; + + if ([_delegate respondsToSelector:@selector(splitView:constrainSplitPosition:ofSubviewAt:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_constrainSplitPosition_ofSubviewAt_; + + if ([_delegate respondsToSelector:@selector(splitView:resizeSubviewsWithOldSize:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitView_resizeSubviewsWithOldSize_; + } /*! @@ -1192,6 +1230,148 @@ The sum of the views and the sum of the dividers should be equal to the size of @end + +@implementation CPSplitView (CPSplitViewDelegate) + +/*! + @ignore + Return YES if the delegate implements splitView:resizeSubviewsWithOldSize: +*/ +- (BOOL)_delegateRespondsToSplitViewResizeSubviewsWithOldSize +{ + return _implementedDelegateMethods & CPSplitViewDelegate_splitView_resizeSubviewsWithOldSize_; +} + +/*! + @ignore + Return YES if the delegate implements splitView:canCollapseSubview: +*/ +- (BOOL)_delegateRespondsToSplitViewCanCollapseSubview +{ + return _implementedDelegateMethods & CPSplitViewDelegate_splitView_canCollapseSubview_; +} + +/*! + @ignore + Return YES if the delegate implements splitView:shouldCollapseSubview:forDoubleClickOnDividerAtIndex +*/ +- (BOOL)_delegateRespondsToSplitViewshouldCollapseSubviewForDoubleClickOnDividerAtIndex +{ + return _implementedDelegateMethods & CPSplitViewDelegate_splitView_shouldCollapseSubview_forDoubleClickOnDividerAtIndex_; +} + + +/*! + @ignore + Call the delegate splitView:canCollapseSubview: +*/ +- (BOOL)_sendDelegateSplitViewCanCollapseSubview:(CPView)aView +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_canCollapseSubview_)) + return NO; + + return [_delegate splitView:self canCollapseSubview:aView]; +} + +/*! + @ignore + Call the delegate splitView:shouldAdjustSizeOfSubview: +*/ +- (BOOL)_sendDelegateSplitViewShouldAdjustSizeOfSubview:(CPView)aView +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_shouldAdjustSizeOfSubview_)) + return YES; + + return [_delegate splitView:self shouldAdjustSizeOfSubview:aView]; +} + +/*! + @ignore + Call the delegate splitView:shouldCollapseSubview:forDoubleClickOnDividerAtIndex: +*/ +- (BOOL)_sendDelegateSplitViewShouldCollapseSubview:(CPView)aView forDoubleClickOnDividerAtIndex:(int)anIndex +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_shouldCollapseSubview_forDoubleClickOnDividerAtIndex_)) + return NO; + + return [_delegate splitView:self shouldCollapseSubview:aView forDoubleClickOnDividerAtIndex:anIndex]; +} + +/*! + @ignore + Call the delegate splitView:additionalEffectiveRectOfDividerAtIndex: +*/ +- (CGRect)_sendDelegateSplitViewAdditionalEffectiveRectOfDividerAtIndex:(int)anIndex +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_additionalEffectiveRectOfDividerAtIndex_)) + return nil; + + return [_delegate splitView:self additionalEffectiveRectOfDividerAtIndex:anIndex]; +} + +/*! + @ignore + Call the delegate splitView:effectiveRect:forDrawnRect:ofDividerAtIndex: +*/ +- (CGRect)_sendDelegateSplitViewEffectiveRect:(CGRect)proposedEffectiveRect forDrawnRect:(CGRect)drawnRect ofDividerAtIndex:(CPInteger)dividerIndex +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_effectiveRect_forDrawnRect_ofDividerAtIndex_)) + return proposedEffectiveRect; + + return [_delegate splitView:self effectiveRect:proposedEffectiveRect forDrawnRect:drawnRect ofDividerAtIndex:dividerIndex]; +} + +/*! + @ignore + Call the delegate splitView:constrainMaxCoordinate:ofSubviewAt: +*/ +- (float)_sendDelegateSplitViewConstrainMaxCoordinate:(float)proposedMax ofSubviewAt:(CPInteger)dividerIndex +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_constrainMaxCoordinate_ofSubviewAt_)) + return nil; + + return [_delegate splitView:self constrainMaxCoordinate:proposedMax ofSubviewAt:dividerIndex]; +} + +/*! + @ignore + Call the delegate splitView:constrainMinCoordinate:ofSubviewAt: +*/ +- (float)_sendDelegateSplitViewConstrainMinCoordinate:(float)proposedMin ofSubviewAt:(CPInteger)dividerIndex +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_constrainMinCoordinate_ofSubviewAt_)) + return nil; + + return [_delegate splitView:self constrainMinCoordinate:proposedMin ofSubviewAt:dividerIndex]; +} + +/*! + @ignore + Call the delegate splitView:constrainSplitPosition:ofSubviewAt: +*/ +- (float)_sendDelegateSplitViewConstrainSplitPosition:(float)proposedMax ofSubviewAt:(CPInteger)dividerIndex +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_constrainSplitPosition_ofSubviewAt_)) + return nil; + + return [_delegate splitView:self constrainSplitPosition:proposedMax ofSubviewAt:dividerIndex]; +} + +/*! + @ignore + Call the delegate splitView:resizeSubviewsWithOldSize: +*/ +- (void)_sendDelegateSplitViewResizeSubviewsWithOldSize:(CGSize)oldSize +{ + if (!(_implementedDelegateMethods & CPSplitViewDelegate_splitView_resizeSubviewsWithOldSize_)) + return; + + [_delegate splitView:self resizeSubviewsWithOldSize:oldSize]; +} + +@end + + var CPSplitViewDelegateKey = "CPSplitViewDelegateKey", CPSplitViewIsVerticalKey = "CPSplitViewIsVerticalKey", CPSplitViewIsPaneSplitterKey = "CPSplitViewIsPaneSplitterKey", From 7ccdc50637adf4d75629069497b084058310b170 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 12:11:22 -0700 Subject: [PATCH 074/278] New: Added protocol CPAnimationDelegate Added protocol CPAnimationDelegate. Also, now, delegate methods are called as we are used to do it in Cappuccino Test app in Tests/Manual/CPAnimationTest. --- AppKit/CPAnimation.j | 126 ++++++- Tests/Manual/CPAnimationTest/AppController.j | 76 ++++ Tests/Manual/CPAnimationTest/Info.plist | 14 + Tests/Manual/CPAnimationTest/Jakefile | 176 ++++++++++ .../CPAnimationTest/Resources/MainMenu.cib | 1 + .../CPAnimationTest/Resources/MainMenu.xib | 332 ++++++++++++++++++ Tests/Manual/CPAnimationTest/index-debug.html | 184 ++++++++++ Tests/Manual/CPAnimationTest/index.html | 154 ++++++++ Tests/Manual/CPAnimationTest/main.j | 10 + 9 files changed, 1056 insertions(+), 17 deletions(-) create mode 100644 Tests/Manual/CPAnimationTest/AppController.j create mode 100644 Tests/Manual/CPAnimationTest/Info.plist create mode 100644 Tests/Manual/CPAnimationTest/Jakefile create mode 100644 Tests/Manual/CPAnimationTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPAnimationTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPAnimationTest/index-debug.html create mode 100644 Tests/Manual/CPAnimationTest/index.html create mode 100644 Tests/Manual/CPAnimationTest/main.j diff --git a/AppKit/CPAnimation.j b/AppKit/CPAnimation.j index 67b4ae7fb..dbe71adca 100644 --- a/AppKit/CPAnimation.j +++ b/AppKit/CPAnimation.j @@ -26,6 +26,21 @@ @import "CAMediaTimingFunction.j" +@protocol CPAnimationDelegate + +- (BOOL)animationShouldStart:(CPAnimation)animation; +- (float)animation:(CPAnimation)animation valueForProgress:(float)progress; +- (void)animationDidEnd:(CPAnimation)animation; +- (void)animationDidStop:(CPAnimation)animation; + +@end + + +var CPAnimationDelegate_animationShouldStart_ = 1 << 1, + CPAnimationDelegate_animation_valueForProgress_ = 1 << 2, + CPAnimationDelegate_animationDidEnd_ = 1 << 3, + CPAnimationDelegate_animationDidStop_ = 1 << 4; + /* @global @group CPAnimationCurve @@ -80,17 +95,18 @@ ACTUAL_FRAME_RATE = 0; */ @implementation CPAnimation : CPObject { - CPTimeInterval _lastTime; - CPTimeInterval _duration; + CPTimeInterval _lastTime; + CPTimeInterval _duration; - CPAnimationCurve _animationCurve; - CAMediaTimingFunction _timingFunction; + CPAnimationCurve _animationCurve; + CAMediaTimingFunction _timingFunction; - float _frameRate; - float _progress; + float _frameRate; + float _progress; - id _delegate; - CPTimer _timer; + id _delegate; + CPTimer _timer; + unsigned _implementedDelegateMethods; } /*! @@ -214,9 +230,25 @@ ACTUAL_FRAME_RATE = 0; Sets the animation's delegate. @param aDelegate the new delegate */ -- (void)setDelegate:(id)aDelegate +- (void)setDelegate:(id )aDelegate { + if (_delegate === aDelegate) + return; + _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(animationShouldStart:)]) + _implementedDelegateMethods |= CPAnimationDelegate_animationShouldStart_; + + if ([_delegate respondsToSelector:@selector(animationDidEnd:)]) + _implementedDelegateMethods |= CPAnimationDelegate_animationDidEnd_; + + if ([_delegate respondsToSelector:@selector(animationDidStop:)]) + _implementedDelegateMethods |= CPAnimationDelegate_animationDidStop_; + + if ([_delegate respondsToSelector:@selector(animation:valueForProgress:)]) + _implementedDelegateMethods |= CPAnimationDelegate_animation_valueForProgress_; } /*! @@ -227,7 +259,7 @@ ACTUAL_FRAME_RATE = 0; - (void)startAnimation { // If we're already animating, or our delegate stops us, animate. - if (_timer || _delegate && [_delegate respondsToSelector:@selector(animationShouldStart:)] && ![_delegate animationShouldStart:self]) + if (_timer || ![self _sendDelegateAnimationShouldStart]) return; if (_progress === 1.0) @@ -236,7 +268,7 @@ ACTUAL_FRAME_RATE = 0; ACTUAL_FRAME_RATE = 0; _lastTime = new Date(); - var timerInterval = _frameRate <= 0.0 ? 0.0001 : 1.0/_frameRate; + var timerInterval = _frameRate <= 0.0 ? 0.0001 : 1.0 / _frameRate; _timer = [CPTimer scheduledTimerWithTimeInterval:timerInterval target:self selector:@selector(animationTimerDidFire:) userInfo:nil repeats:YES]; } @@ -260,8 +292,7 @@ ACTUAL_FRAME_RATE = 0; [_timer invalidate]; _timer = nil; - if ([_delegate respondsToSelector:@selector(animationDidEnd:)]) - [_delegate animationDidEnd:self]; + [self _sendDelegateAnimationDidEnd]; } } @@ -276,8 +307,7 @@ ACTUAL_FRAME_RATE = 0; [_timer invalidate]; _timer = nil; - if ([_delegate respondsToSelector:@selector(animationDidStop:)]) - [_delegate animationDidStop:self]; + [self _sendDelegateAnimationDidStop]; } /*! @@ -313,8 +343,8 @@ ACTUAL_FRAME_RATE = 0; { var t = [self currentProgress]; - if ([_delegate respondsToSelector:@selector(animation:valueForProgress:)]) - return [_delegate animation:self valueForProgress:t]; + if ([self _delegateRespondsToAnimationValueForProgress]) + return [self _sendDelegateAnimationValueForProgress:t]; if (_animationCurve == CPAnimationLinear) return t; @@ -330,6 +360,68 @@ ACTUAL_FRAME_RATE = 0; @end + +@implementation CPAnimation (CPAnimationDelegate) + +/*! + @ignore + Check if the delegate responds to animation:valueForProgress: +*/ +- (BOOL)_delegateRespondsToAnimationValueForProgress +{ + return _implementedDelegateMethods & CPAnimationDelegate_animation_valueForProgress_; +} + +/*! + @ignore + Call delegate animationShouldStart: +*/ +- (BOOL)_sendDelegateAnimationShouldStart +{ + if (!(_implementedDelegateMethods & CPAnimationDelegate_animationShouldStart_)) + return YES; + + return [_delegate animationShouldStart:self]; +} + +/*! + @ignore + Call delegate animation:valueForProgress: +*/ +- (float)_sendDelegateAnimationValueForProgress:(float)aProgress +{ + if (!(_implementedDelegateMethods & CPAnimationDelegate_animation_valueForProgress_)) + return aProgress; + + return [_delegate animation:self valueForProgress:aProgress]; +} + +/*! + @ignore + Call delegate animationDidEnd: +*/ +- (void)_sendDelegateAnimationDidEnd +{ + if (!(_implementedDelegateMethods & CPAnimationDelegate_animationDidEnd_)) + return; + + [_delegate animationDidEnd:self]; +} + +/*! + @ignore + Call delegate animationDidStop: +*/ +- (void)_sendDelegateAnimationDidStop +{ + if (!(_implementedDelegateMethods & CPAnimationDelegate_animationDidStop_)) + return; + + [_delegate animationDidStop:self]; +} + +@end + // currently used function to determine time // 1:1 conversion to js from webkit source files // UnitBezier.h, WebCore_animation_AnimationBase.cpp diff --git a/Tests/Manual/CPAnimationTest/AppController.j b/Tests/Manual/CPAnimationTest/AppController.j new file mode 100644 index 000000000..bce939242 --- /dev/null +++ b/Tests/Manual/CPAnimationTest/AppController.j @@ -0,0 +1,76 @@ +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + @outlet CPView view; + @outlet CPButton buttonStart; + @outlet CPButton buttonStop; + + CPAnimation _animation; + CGPoint _firstPoint; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. + _firstPoint = CGPointMakeCopy([view frameOrigin]); +} + +- (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 setFullPlatformWindow:YES]; +} + +- (IBAction)clickButtonStart:(id)sender +{ + [view setFrameOrigin:_firstPoint]; + + _animation = [[CPViewAnimation alloc] initWithViewAnimations:[ + [CPDictionary dictionaryWithJSObject:{ + CPViewAnimationTargetKey:view, + CPViewAnimationStartFrameKey:[view frame], + CPViewAnimationEndFrameKey:CGRectMake([view frameOrigin].x, [view frameOrigin].y + 200, [view frameSize].width, [view frameSize].height) + }]]]; + + [_animation setAnimationCurve:CPAnimationLinear]; + [_animation setDuration:2]; + [_animation setDelegate:self]; + [_animation startAnimation]; +} + +- (IBAction)clickButtonStop:(id)sender +{ + [_animation stopAnimation]; +} + +- (void)animationDidEnd:(CPAnimation)anAnimation +{ + console.error(@"animationDidEnd"); +} + +- (void)animationDidStop:(CPAnimation)anAnimation +{ + console.error(@"animationDidStop"); +} + +- (BOOL)animationShouldStart:(CPAnimation)anAnimation +{ + console.error(@"animationShouldStart"); + return YES; +} + +- (float)animation:(CPAnimation)animation valueForProgress:(float)progress +{ + console.error(@"animation:valueForProgress: " + progress); + return progress; +} + +@end diff --git a/Tests/Manual/CPAnimationTest/Info.plist b/Tests/Manual/CPAnimationTest/Info.plist new file mode 100644 index 000000000..95579e3e2 --- /dev/null +++ b/Tests/Manual/CPAnimationTest/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPAnimationTest + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPAnimationTest/Jakefile b/Tests/Manual/CPAnimationTest/Jakefile new file mode 100644 index 000000000..a7cfaae61 --- /dev/null +++ b/Tests/Manual/CPAnimationTest/Jakefile @@ -0,0 +1,176 @@ +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CPAnimationTest"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPAnimationTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPAnimationTest"); + task.setIdentifier("com.yourcompany.CPAnimationTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPAnimationTest"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPAnimationTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPAnimationTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (ENV["CONFIGURATION"] === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPAnimationTest/Resources/MainMenu.cib b/Tests/Manual/CPAnimationTest/Resources/MainMenu.cib new file mode 100644 index 000000000..3a27a267f --- /dev/null +++ b/Tests/Manual/CPAnimationTest/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;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;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;2;38E;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;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;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;2;58E;D;K;6;CP$UIDd;2;60E;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;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;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;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;3;118E;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;128E;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;133E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;2;11E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;137E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;138E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;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;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;135E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;139E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;140E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;136E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;133E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;128E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;87E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;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;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;136E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;179E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;136E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;137E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;181E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;182E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;183E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;184E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;63E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;184E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;187E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;190E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;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;192E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;194E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;190E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;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;192E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;196E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;197E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;70E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;197E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;198E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;200E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;201E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;74E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;74E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;203E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;204E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;190E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;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;192E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;207E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;208E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;209E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;210E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;211E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;212E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;214E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;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;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;215E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;82E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;82E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;215E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;217E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;218E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;219E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;220E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;190E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;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;192E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;221E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;222E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;223E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;224E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;227E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;228E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;190E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;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;192E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;93E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;93E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;230E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;232E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;233E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;234E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;235E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;236E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;237E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;238E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;239E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;240E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;241E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;242E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;243E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;245E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;100E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;246E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;249E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;251E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;252E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;106E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;254E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;256E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;233E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;234E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;236E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;237E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;239E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;240E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;259E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;111E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;259E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;262E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;263E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;263E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;265E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;266E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;269E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;269E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;270E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;272E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;273E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;274E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;190E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;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;192E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;275E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;185E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;125E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;276E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;125E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;279E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;186E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;280E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;281E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;282E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;283E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;284E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;242E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;269E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;130E;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;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;285E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;286E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;286E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;287E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;288E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;289E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;289E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;192E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;285E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;290E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;292E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;294E;K;11;$aalignmentD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;285E;K;6;$afontD;K;6;CP$UIDd;3;296E;K;7;$aimageD;K;6;CP$UIDd;3;298E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;289E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;289E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;192E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;285E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;299E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;300E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;191E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;192E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;301E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;285E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;190E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;236E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;285E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;285E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;302E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;292E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;294E;K;11;$aalignmentD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;285E;K;6;$afontD;K;6;CP$UIDd;3;296E;K;7;$aimageD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;289E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;289E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;192E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;285E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;299E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;304E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;191E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;192E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;301E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;285E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;190E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;236E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;285E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;285E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;305E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;306E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;292E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;288E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;289E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;289E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;192E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;308E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;309E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;311E;E;E;S;8;delegateS;11;buttonStartS;10;buttonStopS;9;theWindowS;4;viewS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;17;clickButtonStart:S;16;clickButtonStop:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;124E;E;E;S;14;NewApplicationS;14;submenuAction:d;7;1048576S;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;20;About NewApplicationT;S;0;F;S;12;Preferences…S;1;,S;19;Quit NewApplicationS;1;qS;4;FileD;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;72E;D;K;6;CP$UIDd;2;73E;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;E;E;S;3;NewS;1;nS;5;Open…S;1;oS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;75E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;4;SaveS;1;sS;8;Save As…S;1;Sd;7;1179648S;15;Revert to SavedS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;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;99E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;110E;E;E;S;4;UndoS;1;zS;4;RedoS;1;ZS;3;CutS;1;xS;4;CopyS;1;cS;5;PasteS;1;vS;6;DeleteS;10;Select AllS;1;aS;4;FindD;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;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;E;E;S;5;Find…d;1;1S;1;fS;9;Find Nextd;1;2S;1;gS;13;Find Previousd;1;3S;1;GS;22;Use Selection for Findd;1;7S;1;eS;17;Jump to SelectionS;1;jS;20;Spelling and GrammarD;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;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;E;E;S;14;Show Spelling…S;1;:S;14;Check SpellingS;1;;S;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;SpeechD;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;113E;E;E;S;14;Start SpeakingS;13;Stop SpeakingS;4;ViewD;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;3;117E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;6;WindowS;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;8;MinimizeS;1;mS;4;ZoomS;18;Bring All to FrontS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;126E;E;E;S;19;NewApplication HelpS;1;?S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;135E;E;E;S;6;normalS;6;{1, 1}S;21;{{20, 17}, {127, 25}}S;19;{{0, 0}, {127, 25}}d;2;36S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;295E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;312E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;313E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;192E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;192E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;192E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;297E;K;4;nameD;K;6;CP$UIDd;3;314E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;315E;K;5;valueD;K;6;CP$UIDd;3;316E;E;d;1;4S;15;Start Animationd;2;14S;21;{{20, 50}, {127, 25}}D;K;6;$classD;K;6;CP$UIDd;3;297E;K;4;nameD;K;6;CP$UIDd;3;314E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;315E;K;5;valueD;K;6;CP$UIDd;3;316E;E;S;14;Stop AnimationS;22;{{167, 20}, {293, 54}}S;19;{{0, 0}, {293, 54}}S;6;CPViewS;13;AppControllerS;15;backgroundColorD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;310E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;317E;E;S;17;.Lucida Grande UId;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;295E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;312E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;313E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;192E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;192E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;192E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;318E;D;K;6;CP$UIDd;3;319E;D;K;6;CP$UIDd;3;233E;E;E;f;12;0.5466516229f;12;0.9061750623E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPAnimationTest/Resources/MainMenu.xib b/Tests/Manual/CPAnimationTest/Resources/MainMenu.xib new file mode 100644 index 000000000..5e7a3de49 --- /dev/null +++ b/Tests/Manual/CPAnimationTest/Resources/MainMenu.xib @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPAnimationTest/index-debug.html b/Tests/Manual/CPAnimationTest/index-debug.html new file mode 100644 index 000000000..042c2c6f8 --- /dev/null +++ b/Tests/Manual/CPAnimationTest/index-debug.html @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + CPAnimationTest + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPAnimationTest/index.html b/Tests/Manual/CPAnimationTest/index.html new file mode 100644 index 000000000..b48b8ea22 --- /dev/null +++ b/Tests/Manual/CPAnimationTest/index.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + CPAnimationTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPAnimationTest/main.j b/Tests/Manual/CPAnimationTest/main.j new file mode 100644 index 000000000..72e724a50 --- /dev/null +++ b/Tests/Manual/CPAnimationTest/main.j @@ -0,0 +1,10 @@ +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 59065418ac5bda21caee267654409be09dbd1212 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 12:19:51 -0700 Subject: [PATCH 075/278] Fixed: CPAnimationDelegate protocol methods are required --- AppKit/CPAnimation.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPAnimation.j b/AppKit/CPAnimation.j index dbe71adca..903cf3c2e 100644 --- a/AppKit/CPAnimation.j +++ b/AppKit/CPAnimation.j @@ -28,6 +28,7 @@ @protocol CPAnimationDelegate +@optional - (BOOL)animationShouldStart:(CPAnimation)animation; - (float)animation:(CPAnimation)animation valueForProgress:(float)progress; - (void)animationDidEnd:(CPAnimation)animation; From 104761d064a45ed3899f7ca0be25dd3cf899cf23 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 12:21:38 -0700 Subject: [PATCH 076/278] Fixed: AppController of CPAnimationTest does not implement protocol CPAnimationDelegate --- Tests/Manual/CPAnimationTest/AppController.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Manual/CPAnimationTest/AppController.j b/Tests/Manual/CPAnimationTest/AppController.j index bce939242..7b739ae32 100644 --- a/Tests/Manual/CPAnimationTest/AppController.j +++ b/Tests/Manual/CPAnimationTest/AppController.j @@ -2,7 +2,7 @@ @import -@implementation AppController : CPObject +@implementation AppController : CPObject { @outlet CPWindow theWindow; @outlet CPView view; From d5af9806eaa42fac45c7ddd821aad4a5dae2c059 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 13:33:32 -0700 Subject: [PATCH 077/278] New: Added protocol CPSoundDelegate Added protocol CPSoundDelegate. Also, now, delegate methods are called as we are used to do it in Cappuccino --- AppKit/CPSound.j | 51 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/AppKit/CPSound.j b/AppKit/CPSound.j index 3b5dda2ed..bf25bda98 100644 --- a/AppKit/CPSound.j +++ b/AppKit/CPSound.j @@ -23,6 +23,17 @@ @import @import + +@protocol CPSoundDelegate + +@optional +- (void)sound:(CPSound)aSound didFinishPlaying:(BOOL)finishedLoading; + +@end + + +var CPSoundDelegate_sound_didFinishPlaying_ = 1 << 1; + CPSoundLoadStateEmpty = 0; CPSoundLoadStateLoading = 1; CPSoundLoadStateCanBePlayed = 2; @@ -50,6 +61,7 @@ CPSoundPlayBackStatePause = 2; HTMLAudioElement _audioTag; int _loadStatus; int _playBackStatus; + unsigned _implementedDelegateMethods; } #pragma mark - @@ -133,6 +145,25 @@ CPSoundPlayBackStatePause = 2; } +#pragma mark - +#pragma mark Delegate methods + +/*! + Sets the sound's delegate. + @param aDelegate the new delegate +*/ +- (void)setDelegate:(id)aDelegate +{ + if (_delegate === aDelegate) + return; + + _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(sound:didFinishPlaying:)]) + _implementedDelegateMethods |= CPSoundDelegate_sound_didFinishPlaying_; +} + #pragma mark - #pragma mark Events listener @@ -207,8 +238,7 @@ CPSoundPlayBackStatePause = 2; _audioTag.currentTime = 0.0; _playBackStatus = CPSoundPlayBackStateStop; - if (_delegate && [_delegate respondsToSelector:@selector(sound:didFinishPlaying:)]) - [_delegate sound:self didFinishPlaying:YES]; + [self _sendDelegateSoundDidFinishPlaying:YES]; return YES; } @@ -316,3 +346,20 @@ CPSoundPlayBackStatePause = 2; } @end + + +@implementation CPSound (CPSoundDelegate) + +/*! + @ignore + Call delegate sound:didFinishPlaying: +*/ +- (void)_sendDelegateSoundDidFinishPlaying:(BOOL)finishedPlaying +{ + if (!(_implementedDelegateMethods & CPSoundDelegate_sound_didFinishPlaying_)) + return; + + [_delegate sound:self didFinishPlaying:finishedPlaying]; +} + +@end \ No newline at end of file From 0a85b4b38369e528c8bba20b93a4d33a2e69a98a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 13:52:59 -0700 Subject: [PATCH 078/278] New: Added protocol CPImageDelegate. Added protocol CPImageDelegate. Also, now, delegate methods are called as we are used to do it in Cappuccino --- AppKit/CPImage.j | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j index e6b67317c..2d701ffde 100644 --- a/AppKit/CPImage.j +++ b/AppKit/CPImage.j @@ -30,6 +30,20 @@ @import "CGGeometry.j" @import "CPCompatibility.j" + +@protocol CPImageDelegate + +@optional +- (void)imageDidLoad:(CPImage)anImage; +- (void)imageDidError:(CPImage)anImage; +- (void)imageDidAbort:(CPImage)anImage; + +@end + +var CPImageDelegate_imageDidLoad_ = 1 << 1, + CPImageDelegate_imageDidError_ = 1 << 2, + CPImageDelegate_imageDidAbort_ = 1 << 3; + CPImageLoadStatusInitialized = 0; CPImageLoadStatusLoading = 1; CPImageLoadStatusCompleted = 2; @@ -119,14 +133,15 @@ function CPAppKitImage(aFilename, aSize) */ @implementation CPImage : CPObject { - CGSize _size; - CPString _filename; - CPString _name; + CGSize _size; + CPString _filename; + CPString _name; - id _delegate; - unsigned _loadStatus; + id _delegate; + unsigned _loadStatus; + unsigned _implementedDelegateMethods; - Image _image; + Image _image; } - (id)init @@ -321,7 +336,20 @@ function CPAppKitImage(aFilename, aSize) */ - (void)setDelegate:(id)aDelegate { + if (_delegate === aDelegate) + return; + _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(imageDidLoad:)]) + _implementedDelegateMethods |= CPImageDelegate_imageDidLoad_; + + if ([_delegate respondsToSelector:@selector(imageDidError:)]) + _implementedDelegateMethods |= CPImageDelegate_imageDidError_; + + if ([_delegate respondsToSelector:@selector(imageDidAbort:)]) + _implementedDelegateMethods |= CPImageDelegate_imageDidAbort_; } /*! @@ -457,7 +485,7 @@ function CPAppKitImage(aFilename, aSize) postNotificationName:CPImageDidLoadNotification object:self]; - if ([_delegate respondsToSelector:@selector(imageDidLoad:)]) + if (_implementedDelegateMethods & CPImageDelegate_imageDidLoad_) [_delegate imageDidLoad:self]; } @@ -466,7 +494,7 @@ function CPAppKitImage(aFilename, aSize) { _loadStatus = CPImageLoadStatusReadError; - if ([_delegate respondsToSelector:@selector(imageDidError:)]) + if (_implementedDelegateMethods & CPImageDelegate_imageDidError_) [_delegate imageDidError:self]; } @@ -475,7 +503,7 @@ function CPAppKitImage(aFilename, aSize) { _loadStatus = CPImageLoadStatusCancelled; - if ([_delegate respondsToSelector:@selector(imageDidAbort:)]) + if (_implementedDelegateMethods & CPImageDelegate_imageDidAbort_) [_delegate imageDidAbort:self]; } From e2b12c730e651a5e49e227837c46da9acddffc69 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 13:55:42 -0700 Subject: [PATCH 079/278] Fixed: param of setDelegate: does not conform to protocol CPImageDelegate --- AppKit/CPImage.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j index 2d701ffde..674bb1d04 100644 --- a/AppKit/CPImage.j +++ b/AppKit/CPImage.j @@ -334,7 +334,7 @@ function CPAppKitImage(aFilename, aSize) Sets the receiver's delegate. @param the delegate */ -- (void)setDelegate:(id)aDelegate +- (void)setDelegate:(id )aDelegate { if (_delegate === aDelegate) return; From 18258877a82558c816f611c34e23c1e0b4399857 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 14:17:34 -0700 Subject: [PATCH 080/278] New: Added protocol CPMenuDelegate Added protocol CPMenuDelegate. Also, now, delegate methods are called as we are used to do it in Cappuccino --- AppKit/CPMenu/CPMenu.j | 88 ++++++++++++++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 21 deletions(-) diff --git a/AppKit/CPMenu/CPMenu.j b/AppKit/CPMenu/CPMenu.j index 53ff50570..25e0c90b6 100644 --- a/AppKit/CPMenu/CPMenu.j +++ b/AppKit/CPMenu/CPMenu.j @@ -30,6 +30,17 @@ @global CPApp +@protocol CPMenuDelegate + +@optional +- (void)menuWillOpen:(CPMenu)aMenu; +- (void)menuDidClose:(CPMenu)aMenu; + +@end + +var CPMenuDelegate_menuWillOpen_ = 1 << 1, + CPMenuDelegate_menuDidClose_ = 1 << 2; + CPMenuDidAddItemNotification = @"CPMenuDidAddItemNotification"; CPMenuDidChangeItemNotification = @"CPMenuDidChangeItemNotification"; CPMenuDidRemoveItemNotification = @"CPMenuDidRemoveItemNotification"; @@ -50,26 +61,27 @@ var _CPMenuBarVisible = NO, */ @implementation CPMenu : CPObject { - CPMenu _supermenu; + CPMenu _supermenu; - CPString _title; - CPString _name; + CPString _title; + CPString _name; - CPFont _font; + CPFont _font; - float _minimumWidth; + float _minimumWidth; - CPMutableArray _items; + CPMutableArray _items; - BOOL _autoenablesItems; - BOOL _showsStateColumn; + BOOL _autoenablesItems; + BOOL _showsStateColumn; - id _delegate; + id _delegate; + unsigned _implementedDelegateMethods; - int _highlightedIndex; - _CPMenuWindow _menuWindow; + int _highlightedIndex; + _CPMenuWindow _menuWindow; - CPEvent _lastCloseEvent; + CPEvent _lastCloseEvent; } // Managing the Menu Bar @@ -941,9 +953,19 @@ var _CPMenuBarVisible = NO, // Managing the Delegate -- (void)setDelegate:(id)aDelegate +- (void)setDelegate:(id )aDelegate { + if (_delegate === aDelegate) + return; + _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(menuWillOpen:)]) + _implementedDelegateMethods |= CPMenuDelegate_menuWillOpen_; + + if ([_delegate respondsToSelector:@selector(menuDidClose:)]) + _implementedDelegateMethods |= CPMenuDelegate_menuDidClose_; } - (id)delegate @@ -953,10 +975,7 @@ var _CPMenuBarVisible = NO, - (void)_menuWillOpen { - var delegate = [self delegate]; - - if ([delegate respondsToSelector:@selector(menuWillOpen:)]) - [delegate menuWillOpen:self]; + [self _sendDelegateMenuWillOpen]; } - (void)_menuDidClose @@ -965,10 +984,7 @@ var _CPMenuBarVisible = NO, // when a click on the button itself caused the menu to close. _lastCloseEvent = [CPApp currentEvent]; - var delegate = [self delegate]; - - if ([delegate respondsToSelector:@selector(menuDidClose:)]) - [delegate menuDidClose:self]; + [self _sendDelegateMenuDidClose]; } // Handling Tracking @@ -1132,6 +1148,36 @@ var _CPMenuBarVisible = NO, @end + +@implementation CPMenu (CPMenuDelegate) + +/*! + @ignore + Call delegate menuWillOpen +*/ +- (void)_sendDelegateMenuWillOpen +{ + if (!(_implementedDelegateMethods & CPMenuDelegate_menuWillOpen_)) + return; + + [_delegate menuWillOpen:self]; +} + +/*! + @ignore + Call delegate menuDidClose +*/ +- (void)_sendDelegateMenuDidClose +{ + if (!(_implementedDelegateMethods & CPMenuDelegate_menuDidClose_)) + return; + + [_delegate menuDidClose:self]; +} + +@end + + @implementation CPMenu (CPKeyValueCoding) - (CPUInteger)countOfItems From 59b80ab8f6ea3608d611a056525390b9b951d7ef Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 14:50:25 -0700 Subject: [PATCH 081/278] New: Added CPComboDelegate protocol --- AppKit/CPComboBox.j | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 272292fe3..f7736adbe 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -25,6 +25,18 @@ @import "_CPPopUpList.j" +// TODO : should conform to protocol CPTextFieldDelegate +@protocol CPComboBoxDelegate + +@optional +- (void)comboBoxSelectionIsChanging:(CPNotification)aNotification; +- (void)comboBoxSelectionDidChange:(CPNotification)aNotification; +- (void)comboBoxWillPopUp:(CPNotification)aNotification; +- (void)comboBoxWillDismiss:(CPNotification)aNotification; + +@end + + CPComboBoxSelectionDidChangeNotification = @"CPComboBoxSelectionDidChangeNotification"; CPComboBoxSelectionIsChangingNotification = @"CPComboBoxSelectionIsChangingNotification"; CPComboBoxWillDismissNotification = @"CPComboBoxWillDismissNotification"; @@ -182,7 +194,7 @@ var CPComboBoxTextSubview = @"text", protocol, in actual fact it doesn't. Also note that the same delegate may conform to the NSTextFieldDelegate protocol. */ -- (void)setDelegate:(id /*< CPComboBoxDelegate >*/)aDelegate +- (void)setDelegate:(id )aDelegate { var delegate = [self delegate]; From 9b397245f88179029ec5340cd34f42f571fb2130 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 15:25:38 -0700 Subject: [PATCH 082/278] New: Added CPRuleEditorDelegate protocol Added CPRuleEditorDelegate protocol. Also, now, delegate methods are called as we are used to do it in Cappuccino --- AppKit/CPRuleEditor/CPRuleEditor.j | 119 ++++++++++++++++++++--------- 1 file changed, 83 insertions(+), 36 deletions(-) diff --git a/AppKit/CPRuleEditor/CPRuleEditor.j b/AppKit/CPRuleEditor/CPRuleEditor.j index e5e6248eb..3078e2535 100644 --- a/AppKit/CPRuleEditor/CPRuleEditor.j +++ b/AppKit/CPRuleEditor/CPRuleEditor.j @@ -41,6 +41,21 @@ @global CPCaseInsensitivePredicateOption @global CPOrPredicateType +@protocol CPRuleEditorDelegate + +@required +- (id)ruleEditor:(CPRuleEditor)editor child:(CPInteger)index forCriterion:(id)criterion withRowType:(CPRuleEditorRowType)rowType; +- (id)ruleEditor:(CPRuleEditor)editor displayValueForCriterion:(id)criterion inRow:(CPInteger)row; +- (CPInteger)ruleEditor:(CPRuleEditor)editor numberOfChildrenForCriterion:(id)criterion withRowType:(CPRuleEditorRowType)rowType; + +@optional +- (CPDictionary)ruleEditor:(CPRuleEditor)editor predicatePartsForCriterion:(id)criterion withDisplayValue:(id)value inRow:(CPInteger)row; +- (void)ruleEditorRowsDidChange:(CPNotification)notification; + +@end + +var CPRuleEditorDelegate_ruleEditor_predicatePartsForCriterion_withDisplayValue_inRow_ = 1 << 1; + var CPRuleEditorItemPBoardType = @"CPRuleEditorItemPBoardType", itemsContext = "items", valuesContext = "values", @@ -69,50 +84,51 @@ var CPRuleEditorItemPBoardType = @"CPRuleEditorItemPBoardType", @implementation CPRuleEditor : CPControl { - BOOL _suppressKeyDownHandling; - BOOL _allowsEmptyCompoundRows; - BOOL _disallowEmpty; - BOOL _delegateWantsValidation; - BOOL _editable; - BOOL _sendAction; + BOOL _suppressKeyDownHandling; + BOOL _allowsEmptyCompoundRows; + BOOL _disallowEmpty; + BOOL _delegateWantsValidation; + BOOL _editable; + BOOL _sendAction; - Class _rowClass; + Class _rowClass; - CPIndexSet _draggingRows; - CPInteger _subviewIndexOfDropLine; - CPView _dropLineView; + CPIndexSet _draggingRows; + CPInteger _subviewIndexOfDropLine; + CPView _dropLineView; - CPMutableArray _rowCache; - CPMutableArray _slices; + CPMutableArray _rowCache; + CPMutableArray _slices; - CPPredicate _predicate; + CPPredicate _predicate; - CPString _itemsKeyPath; - CPString _subrowsArrayKeyPath; - CPString _typeKeyPath; - CPString _valuesKeyPath; - CPString _boundArrayKeyPath @accessors(property=boundArrayKeyPath); + CPString _itemsKeyPath; + CPString _subrowsArrayKeyPath; + CPString _typeKeyPath; + CPString _valuesKeyPath; + CPString _boundArrayKeyPath @accessors(property=boundArrayKeyPath); - CPView _slicesHolder; - CPViewAnimation _currentAnimation; + CPView _slicesHolder; + CPViewAnimation _currentAnimation; - CPInteger _lastRow; - CPInteger _nestingMode; + CPInteger _lastRow; + CPInteger _nestingMode; - float _alignmentGridWidth; - float _sliceHeight; + float _alignmentGridWidth; + float _sliceHeight; - id _ruleDataSource; - id _ruleDelegate; - id _boundArrayOwner; + id _ruleDataSource; + id _ruleDelegate; + id _boundArrayOwner; + unsigned _implementedDelegateMethods; - CPString _stringsFilename; + CPString _stringsFilename; - BOOL _isKeyDown; - BOOL _nestingModeDidChange; + BOOL _isKeyDown; + BOOL _nestingModeDidChange; - _CPRuleEditorLocalizer _standardLocalizer @accessors(property=standardLocalizer); - CPDictionary _itemsAndValuesToAddForRowType; + _CPRuleEditorLocalizer _standardLocalizer @accessors(property=standardLocalizer); + CPDictionary _itemsAndValuesToAddForRowType; } /*! @cond */ @@ -213,19 +229,24 @@ var CPRuleEditorItemPBoardType = @"CPRuleEditorItemPBoardType", @discussion CPRuleEditor requires a delegate that implements the required delegate methods to function. @see delegate */ -- (void)setDelegate:(id)aDelegate +- (void)setDelegate:(id )aDelegate { if (_ruleDelegate === aDelegate) return; var nc = [CPNotificationCenter defaultCenter]; + if (_ruleDelegate) [nc removeObserver:_ruleDelegate name:nil object:self]; _ruleDelegate = aDelegate; + _implementedDelegateMethods = 0; if ([_ruleDelegate respondsToSelector:@selector(ruleEditorRowsDidChange:)]) [nc addObserver:_ruleDelegate selector:@selector(ruleEditorRowsDidChange:) name:CPRuleEditorRowsDidChangeNotification object:nil]; + + if ([_ruleDelegate respondsToSelector:@selector(ruleEditor:predicatePartsForCriterion:withDisplayValue:inRow:)]) + _implementedDelegateMethods |= CPRuleEditorDelegate_ruleEditor_predicatePartsForCriterion_withDisplayValue_inRow_; } /*! @brief Returns a Boolean value that indicates whether the receiver is editable. @@ -810,7 +831,7 @@ TODO: implement var item = [items objectAtIndex:i], //var displayValue = [self _queryValueForItem:item inRow:aRow]; Ask the delegate or get cached value ?. displayValue = [[self displayValuesForRow:aRow] objectAtIndex:i], - predpart = [_ruleDelegate ruleEditor:self predicatePartsForCriterion:item withDisplayValue:displayValue inRow:aRow]; + predpart = [self _sendDelegateRuleEditorPredicatePartsForCriterion:item withDisplayValue:displayValue inRow:aRow]; if (predpart) [predicateParts addEntriesFromDictionary:predpart]; @@ -1716,8 +1737,7 @@ TODO: implement { if (_delegateWantsValidation) { - var selector = @selector(ruleEditor:predicatePartsForCriterion:withDisplayValue:inRow:); - if (![_ruleDelegate respondsToSelector:selector]) + if (![self _delegateRespondsToRuleEditorPredicatePartsForCriterionWithDisplayValueInRow]) return; _delegateWantsValidation = NO; @@ -2377,6 +2397,33 @@ TODO: implement @end + +@implementation CPRuleEditor (CPRuleEditorDelegate) + +/*! + @ignore + Check if the delegate responds to ruleEditor:predicatePartsForCriterion:withDisplayValue:inRow: +*/ +- (BOOL)_delegateRespondsToRuleEditorPredicatePartsForCriterionWithDisplayValueInRow +{ + return _implementedDelegateMethods & CPRuleEditorDelegate_ruleEditor_predicatePartsForCriterion_withDisplayValue_inRow_; +} + +/*! + @ignore + Call delegate ruleEditor:predicatePartsForCriterion:withDisplayValue:inRow: +*/ +- (CPDictionary)_sendDelegateRuleEditorPredicatePartsForCriterion:(id)criterion withDisplayValue:(id)value inRow:(CPInteger)row +{ + if (!(_implementedDelegateMethods & CPRuleEditorDelegate_ruleEditor_predicatePartsForCriterion_withDisplayValue_inRow_)) + return @{}; + + return [_ruleDelegate ruleEditor:self predicatePartsForCriterion:criterion withDisplayValue:value inRow:row]; +} + +@end + + var CPRuleEditorAlignmentGridWidthKey = @"CPRuleEditorAlignmentGridWidth", CPRuleEditorSliceHeightKey = @"CPRuleEditorSliceHeight", CPRuleEditorStringsFilenameKey = @"CPRuleEditorStringsFilename", From 1171c9a0b2198473183e9c3e94c9a4dac57b38d7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 17:43:07 -0700 Subject: [PATCH 083/278] New: Added CPTokenFieldDelegate protocol. Added CPTokenFieldDelegate protocol. Also, now, delegate methods are called as we are used to do it in Cappuccino --- AppKit/CPTokenField.j | 125 ++++++++++++++++++++++++++++++------------ 1 file changed, 91 insertions(+), 34 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index da59b43a8..1f6f054ca 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -37,6 +37,28 @@ @global CPTextFieldDidFocusNotification @global CPTextFieldDidBlurNotification + +// TODO: should be conform to protocol CPTextFieldDelegate +@protocol CPTokenFieldDelegate + +@optional +- (BOOL)tokenField:(CPTokenField)tokenField hasMenuForRepresentedObject:(id)representedObject; +- (CPArray)tokenField:(CPTokenField)tokenField completionsForSubstring:(CPString)substring indexOfToken:(CPInteger)tokenIndex indexOfSelectedItem:(CPInteger)selectedIndex; +- (CPArray)tokenField:(CPTokenField)tokenField shouldAddObjects:(CPArray)tokens atIndex:(CPUInteger)index; +- (CPMenu)tokenField:(CPTokenField)tokenField menuForRepresentedObject:(id)representedObject; +- (CPString )tokenField:(CPTokenField)tokenField displayStringForRepresentedObject:(id)representedObject; +- (id)tokenField:(CPTokenField)tokenField representedObjectForEditingString:(CPString)editingString; + +@end + +var CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_ = 1 << 1, + CPTokenFieldDelegate_tokenField_completionsForSubstring_indexOfToken_indexOfSelectedItem_ = 1 << 2, + CPTokenFieldDelegate_tokenField_shouldAddObjects_atIndex_ = 1 << 3, + CPTokenFieldDelegate_tokenField_menuForRepresentedObject_ = 1 << 4, + CPTokenFieldDelegate_tokenField_displayStringForRepresentedObject_ = 1 << 5, + CPTokenFieldDelegate_tokenField_representedObjectForEditingString_ = 1 << 6; + + #if PLATFORM(DOM) var CPTokenFieldDOMInputElement = nil, @@ -64,23 +86,26 @@ CPTokenFieldDeleteButtonType = 1; @implementation CPTokenField : CPTextField { - CPScrollView _tokenScrollView; - int _shouldScrollTo; + CPScrollView _tokenScrollView; + int _shouldScrollTo; - CPRange _selectedRange; + CPRange _selectedRange; - _CPAutocompleteMenu _autocompleteMenu; - CGRect _inputFrame; + _CPAutocompleteMenu _autocompleteMenu; + CGRect _inputFrame; - CPTimeInterval _completionDelay; + CPTimeInterval _completionDelay; - CPCharacterSet _tokenizingCharacterSet @accessors(property=tokenizingCharacterSet); + CPCharacterSet _tokenizingCharacterSet @accessors(property=tokenizingCharacterSet); - CPEvent _mouseDownEvent; + CPEvent _mouseDownEvent; - BOOL _shouldNotifyTarget; + BOOL _shouldNotifyTarget; - int _buttonType @accessors(property=buttonType); + int _buttonType @accessors(property=buttonType); + + id _tokenFieldDelegate; + unsigned _implementedDelegateMethods; } + (CPCharacterSet)defaultTokenizingCharacterSet @@ -140,6 +165,41 @@ CPTokenFieldDeleteButtonType = 1; [self addSubview:_tokenScrollView]; } +#pragma mark - +#pragma mark Delegate methods + +/*! + Set the delegate of the receiver +*/ +- (void)setDelegate:(id )aDelegate +{ + if (_tokenFieldDelegate === aDelegate) + return; + + _tokenFieldDelegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:hasMenuForRepresentedObject:)]) + _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_; + + if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:)]) + _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_completionsForSubstring_indexOfToken_indexOfSelectedItem_; + + if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:shouldAddObjects:atIndex:)]) + _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_shouldAddObjects_atIndex_; + + if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:menuForRepresentedObject:)]) + _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_menuForRepresentedObject_; + + if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:displayStringForRepresentedObject:)]) + _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_displayStringForRepresentedObject_; + + if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:representedObjectForEditingString:)]) + _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_representedObjectForEditingString_; + + [super setDelegate:_tokenFieldDelegate]; +} + - (_CPAutocompleteMenu)_autocompleteMenu { if (!_autocompleteMenu) @@ -1185,12 +1245,10 @@ CPTokenFieldDeleteButtonType = 1; */ - (CPArray)_completionsForSubstring:(CPString)substring indexOfToken:(int)tokenIndex indexOfSelectedItem:(int)selectedIndex { - if ([[self delegate] respondsToSelector:@selector(tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:)]) - { - return [[self delegate] tokenField:self completionsForSubstring:substring indexOfToken:tokenIndex indexOfSelectedItem:selectedIndex]; - } + if (!(_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_completionsForSubstring_indexOfToken_indexOfSelectedItem_)) + return []; - return []; + return [_tokenFieldDelegate tokenField:self completionsForSubstring:substring indexOfToken:tokenIndex indexOfSelectedItem:selectedIndex]; } /*! @@ -1199,6 +1257,7 @@ CPTokenFieldDeleteButtonType = 1; - (CGPoint)_completionOrigin:(_CPAutocompleteMenu)anAutocompleteMenu { var relativeFrame = _inputFrame ? [[_tokenScrollView documentView] convertRect:_inputFrame toView:self ] : [self bounds]; + return CGPointMake(CGRectGetMinX(relativeFrame), CGRectGetMaxY(relativeFrame)); } @@ -1212,13 +1271,12 @@ CPTokenFieldDeleteButtonType = 1; */ - (CPString)_displayStringForRepresentedObject:(id)representedObject { - if ([[self delegate] respondsToSelector:@selector(tokenField:displayStringForRepresentedObject:)]) + if (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_displayStringForRepresentedObject_) { - var stringForRepresentedObject = [[self delegate] tokenField:self displayStringForRepresentedObject:representedObject]; + var stringForRepresentedObject = [_tokenFieldDelegate tokenField:self displayStringForRepresentedObject:representedObject]; + if (stringForRepresentedObject !== nil) - { return stringForRepresentedObject; - } } return representedObject; @@ -1235,10 +1293,10 @@ CPTokenFieldDeleteButtonType = 1; */ - (CPArray)_shouldAddObjects:(CPArray)tokens atIndex:(int)index { - var delegate = [self delegate]; - if ([delegate respondsToSelector:@selector(tokenField:shouldAddObjects:atIndex:)]) + if (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_shouldAddObjects_atIndex_) { - var approvedObjects = [delegate tokenField:self shouldAddObjects:tokens atIndex:index]; + var approvedObjects = [_tokenFieldDelegate tokenField:self shouldAddObjects:tokens atIndex:index]; + if (approvedObjects !== nil) return approvedObjects; } @@ -1257,10 +1315,10 @@ CPTokenFieldDeleteButtonType = 1; */ - (id)_representedObjectForEditingString:(CPString)aString { - var delegate = [self delegate]; - if ([delegate respondsToSelector:@selector(tokenField:representedObjectForEditingString:)]) + if (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_representedObjectForEditingString_) { - var token = [delegate tokenField:self representedObjectForEditingString:aString]; + var token = [_tokenFieldDelegate tokenField:self representedObjectForEditingString:aString]; + if (token !== nil && token !== undefined) return token; // If nil was returned, assume the string is the represented object. The alternative would have been @@ -1272,23 +1330,22 @@ CPTokenFieldDeleteButtonType = 1; - (BOOL)_hasMenuForRepresentedObject:(id)aRepresentedObject { - var delegate = [self delegate]; - if ([delegate respondsToSelector:@selector(tokenField:hasMenuForRepresentedObject:)] && - [delegate respondsToSelector:@selector(tokenField:menuForRepresentedObject:)]) - return [delegate tokenField:self hasMenuForRepresentedObject:aRepresentedObject]; + if ((_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_) && + (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_menuForRepresentedObject_)) + return [_tokenFieldDelegate tokenField:self hasMenuForRepresentedObject:aRepresentedObject]; return NO; } - (CPMenu)_menuForRepresentedObject:(id)aRepresentedObject { - var delegate = [self delegate]; - if ([delegate respondsToSelector:@selector(tokenField:hasMenuForRepresentedObject:)] && - [delegate respondsToSelector:@selector(tokenField:menuForRepresentedObject:)]) + if ((_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_) && + (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_menuForRepresentedObject_)) { - var hasMenu = [delegate tokenField:self hasMenuForRepresentedObject:aRepresentedObject]; + var hasMenu = [_tokenFieldDelegate tokenField:self hasMenuForRepresentedObject:aRepresentedObject]; + if (hasMenu) - return [delegate tokenField:self menuForRepresentedObject:aRepresentedObject] || nil; + return [_tokenFieldDelegate tokenField:self menuForRepresentedObject:aRepresentedObject] || nil; } return nil; From 9d2fba308d64f51855d0fcfaea6e226a567554e0 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 19:52:06 -0700 Subject: [PATCH 084/278] New: Added CPWindowDelegate protocol Added CPWindowDelegate protocol Also, now, delegate methods are called as we are used to do it in Cappuccino --- AppKit/CPWindow/CPWindow.j | 114 +++++++++++++++++++++++++++++++++---- 1 file changed, 103 insertions(+), 11 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index a86734ba5..82ced5e49 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -53,6 +53,28 @@ @global CPApp + +@protocol CPWindowDelegate + +@optional +- (BOOL)windowShouldClose:(CPWindow)aWindow; +- (CPUndoManager)windowWillReturnUndoManager:(CPWindow)window; +- (void)windowDidBecomeKey:(CPNotification)aNotification; +- (void)windowDidBecomeMain:(CPNotification)aNotification; +- (void)windowDidEndSheet:(CPNotification)aNotification; +- (void)windowDidMove:(CPNotification)aNotification; +- (void)windowDidResignKey:(CPNotification)aNotification; +- (void)windowDidResignMain:(CPNotification)aNotification; +- (void)windowDidResize:(CPNotification)aNotification; +- (void)windowWillBeginSheet:(CPNotification)aNotification; +- (void)windowWillClose:(CPWindow)aWindow; + +@end + +var CPWindowDelegate_windowShouldClose_ = 1 << 1 + CPWindowDelegate_windowWillReturnUndoManager_ = 1 << 2, + CPWindowDelegate_windowWillClose_ = 1 << 3; + var CPWindowSaveImage = nil, CPWindowResizeTime = 0.2, @@ -171,7 +193,8 @@ var CPWindowActionMessageKeys = [ CPResponder _firstResponder; CPResponder _initialFirstResponder; BOOL _hasBecomeKeyWindow; - id _delegate; + id _delegate; + unsigned _implementedDelegateMethods; CPString _title; @@ -205,8 +228,6 @@ var CPWindowActionMessageKeys = [ unsigned _autoresizingMask; - BOOL _delegateRespondsToWindowWillReturnUndoManagerSelector; - BOOL _isFullPlatformWindow; _CPWindowFullPlatformWindowSession _fullPlatformWindowSession; @@ -1343,8 +1364,11 @@ CPTexturedBackgroundWindowMask Sets the delegate for the window. Passing \c nil will just remove the window's current delegate. @param aDelegate an object to respond to the various delegate methods of CPWindow */ -- (void)setDelegate:(id)aDelegate +- (void)setDelegate:(id )aDelegate { + if (_delegate === aDelegate) + return; + var defaultCenter = [CPNotificationCenter defaultCenter]; [defaultCenter removeObserver:_delegate name:CPWindowDidResignKeyNotification object:self]; @@ -1357,7 +1381,16 @@ CPTexturedBackgroundWindowMask [defaultCenter removeObserver:_delegate name:CPWindowDidEndSheetNotification object:self]; _delegate = aDelegate; - _delegateRespondsToWindowWillReturnUndoManagerSelector = [_delegate respondsToSelector:@selector(windowWillReturnUndoManager:)]; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(windowShouldClose:)]) + _implementedDelegateMethods |= CPWindowDelegate_windowShouldClose_; + + if ([_delegate respondsToSelector:@selector(windowWillReturnUndoManager:)]) + _implementedDelegateMethods |= CPWindowDelegate_windowWillReturnUndoManager_; + + if ([_delegate respondsToSelector:@selector(windowWillClose:)]) + _implementedDelegateMethods |= CPWindowDelegate_windowWillClose_; if ([_delegate respondsToSelector:@selector(windowDidResignKey:)]) [defaultCenter @@ -2243,9 +2276,9 @@ CPTexturedBackgroundWindowMask // The Cocoa docs say that if both the delegate and the window implement // windowShouldClose:, only the delegate receives the message. - if ([_delegate respondsToSelector:@selector(windowShouldClose:)]) + if ([self _delegateRespondsToWindowShouldClose]) { - if (![_delegate windowShouldClose:self]) + if (![self _sendDelegateWindowShouldClose]) return; } else if ([self respondsToSelector:@selector(windowShouldClose:)]) @@ -2301,8 +2334,7 @@ CPTexturedBackgroundWindowMask */ - (void)close { - if ([_delegate respondsToSelector:@selector(windowWillClose:)]) - [_delegate windowWillClose:self]; + [self _sendDelegateWindowWillClose]; [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowWillCloseNotification object:self]; @@ -3294,6 +3326,66 @@ var keyViewComparator = function(lhs, rhs, context) return CPOrderedDescending; }; + +@implementation CPWindow (CPWindowDelegate) + +/*! + @ignore + Check if the delegate implements windowWillReturnUndoManager: +*/ +- (BOOL)_delegateRespondsToWindowWillUndoManager +{ + return _implementedDelegateMethods & CPWindowDelegate_windowWillReturnUndoManager_; +} + +/*! + @ignore + Check if the delegate implements windowShouldClose +*/ +- (BOOL)_delegateRespondsToWindowShouldClose +{ + return _implementedDelegateMethods & CPWindowDelegate_windowShouldClose_ +} + +/*! + @ignore + Call delegate windowShouldClose: +*/ +- (BOOL)_sendDelegateWindowShouldClose +{ + if (!(_implementedDelegateMethods & CPWindowDelegate_windowShouldClose_)) + return YES; + + return [_delegate windowShouldClose:self]; +} + +/*! + @ignore + Call delegate windowWillReturnUndoManager: +*/ +- (BOOL)_sendDelegateWindowWillReturnUndoManager +{ + if (!(_implementedDelegateMethods & CPWindowDelegate_windowWillReturnUndoManager_)) + return nil; + + return [_delegate windowWillReturnUndoManager:self]; +} + +/*! + @ignore + Call delegate windowWillClose: +*/ +- (void)_sendDelegateWindowWillClose +{ + if (!(_implementedDelegateMethods & CPWindowDelegate_windowWillClose_)) + return; + + [_delegate windowWillClose:self]; +} + +@end + + @implementation CPWindow (BridgeSupport) /* @@ -3431,8 +3523,8 @@ var keyViewComparator = function(lhs, rhs, context) return documentUndoManager; // If not, check to see if the delegate has one. - if (_delegateRespondsToWindowWillReturnUndoManagerSelector) - return [_delegate windowWillReturnUndoManager:self]; + if ([self _delegateRespondsToWindowWillUndoManager]) + return [self _sendDelegateWindowWillReturnUndoManager:self]; // If not, create one. if (!_undoManager) From 232cf69006fc5000598d4da56793c96e1a07c14d Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 27 Mar 2014 19:54:15 -0700 Subject: [PATCH 085/278] Fixed: wonrd params for the method _sendDelegateWindowWillReturnUndoManager --- 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 82ced5e49..4066e28f5 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -3524,7 +3524,7 @@ var keyViewComparator = function(lhs, rhs, context) // If not, check to see if the delegate has one. if ([self _delegateRespondsToWindowWillUndoManager]) - return [self _sendDelegateWindowWillReturnUndoManager:self]; + return [self _sendDelegateWindowWillReturnUndoManager]; // If not, create one. if (!_undoManager) From 26118ee881bb2b5a6634eefb72a002c0994d6749 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 28 Mar 2014 11:49:18 -0700 Subject: [PATCH 086/278] New: Added CPControlTextEditingDelegate and CPTextFieldDelegate protocol Added CPControlTextEditingDelegate and CPTextFieldDelegate protocol --- AppKit/CPControl.j | 12 ++++++++++++ AppKit/CPTextField.j | 43 ++++++++++++++++++++++++++++--------------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index a231378d2..471a3de36 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -30,6 +30,18 @@ @global CPApp +@protocol CPControlTextEditingDelegate + +@optional +- (void)controlTextDidBeginEditing:(CPNotification)aNotification; +- (void)controlTextDidChange:(CPNotification)aNotification; +- (void)controlTextDidEndEditing:(CPNotification)aNotification; +- (void)controlTextDidFocus:(CPNotification)aNotification; +- (void)controlTextDidBlur:(CPNotification)aNotification; +- (BOOL)control:(CPControl)control didFailToFormatString:(CPString)string errorDescription:(CPString)error; + +@end + CPLeftTextAlignment = 0; CPRightTextAlignment = 1; CPCenterTextAlignment = 2; diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index ba023101b..1f2616240 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -32,6 +32,14 @@ @global CPApp @global CPStringPboardType + +@protocol CPTextFieldDelegate + +@end + + +var CPTextFieldDelegate_control_didFailToFormatString_errorDescription_ = 1 << 1; + CPTextFieldSquareBezel = 0; /*! A textfield bezel with squared corners. */ CPTextFieldRoundedBezel = 1; /*! A textfield bezel with rounded corners. */ @@ -112,26 +120,27 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); */ @implementation CPTextField : CPControl { - BOOL _isEditing; + BOOL _isEditing; - BOOL _isEditable; - BOOL _isSelectable; - BOOL _isSecure; - BOOL _willBecomeFirstResponderByClick; + BOOL _isEditable; + BOOL _isSelectable; + BOOL _isSecure; + BOOL _willBecomeFirstResponderByClick; - BOOL _drawsBackground; + BOOL _drawsBackground; - CPColor _textFieldBackgroundColor; + CPColor _textFieldBackgroundColor; - CPString _placeholderString; - CPString _stringValue; + CPString _placeholderString; + CPString _stringValue; - id _delegate; + id _delegate; + unsigned _implementedDelegateMethods; // NS-style Display Properties - CPTextFieldBezelStyle _bezelStyle; - BOOL _isBordered; - CPControlSize _controlSize; + CPTextFieldBezelStyle _bezelStyle; + BOOL _isBordered; + CPControlSize _controlSize; } + (Class)_binderClassForBinding:(CPString)aBinding @@ -818,7 +827,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); { var acceptInvalidValue = NO; - if ([_delegate respondsToSelector:@selector(control:didFailToFormatString:errorDescription:)]) + if (_implementedDelegateMethods & CPTextFieldDelegate_control_didFailToFormatString_errorDescription_) acceptInvalidValue = [_delegate control:self didFailToFormatString:aValue errorDescription:error]; if (acceptInvalidValue === NO) @@ -1585,7 +1594,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); #pragma mark Setting the Delegate -- (void)setDelegate:(id)aDelegate +- (void)setDelegate:(id )aDelegate { var defaultCenter = [CPNotificationCenter defaultCenter]; @@ -1600,6 +1609,10 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); } _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(control:didFailToFormatString:errorDescription:)]) + _implementedDelegateMethods |= CPTextFieldDelegate_control_didFailToFormatString_errorDescription_ if ([_delegate respondsToSelector:@selector(controlTextDidBeginEditing:)]) [defaultCenter From 15e16d86e486154a4f0af567f9f291c0e183fa52 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 29 Mar 2014 20:19:16 +0100 Subject: [PATCH 087/278] fix for text clobbering when switching windows --- AppKit/CPTextField.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index ba023101b..16be41825 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1148,7 +1148,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); #if PLATFORM(DOM) - if (CPTextFieldInputOwner === self || [[self window] firstResponder] === self) + if ((CPTextFieldInputOwner === self || [[self window] firstResponder] === self) && [[self window] isKeyWindow]) [self _inputElement].value = _stringValue; #endif From 2513cf09697b2bccab0b13ca6ff2157e7f84448b Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Sun, 30 Mar 2014 18:27:12 -0700 Subject: [PATCH 088/278] New: Added CPBrowserDelegate protocol Added CPBrowserDelegate protocol Also, now, delegate methods are called as we are used to do it in Cappuccino --- AppKit/CPBrowser.j | 323 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 255 insertions(+), 68 deletions(-) diff --git a/AppKit/CPBrowser.j b/AppKit/CPBrowser.j index 1dcdea712..5c5ccdf5b 100644 --- a/AppKit/CPBrowser.j +++ b/AppKit/CPBrowser.j @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@import @import @import "CPControl.j" @@ -30,40 +31,86 @@ @global CPApp +@protocol CPBrowserDelegate + +@optional +- (BOOL)browser:(CPBrowser)browser acceptDrop:(id)info atRow:(CPInteger)row column:(CPInteger)column dropOperation:(CPTableViewDropOperation)dropOperation; +- (BOOL)browser:(CPBrowser)browser canDragRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)column withEvent:(CPEvent )event; +- (BOOL)browser:(CPBrowser)browser isLeafItem:(id)item; +- (BOOL)browser:(CPBrowser)browser shouldSelectRowIndexes:(CPIndexSet)anIndexSet inColumn:(CPInteger)column; +- (BOOL)browser:(CPBrowser)browser writeRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)column toPasteboard:(CPPasteboard)pasteboard; +- (CPDragOperation)browser:(CPBrowser)browser validateDrop:(id)info proposedRow:(CPInteger)row column:(CPInteger)column dropOperation:(CPTableViewDropOperation)dropOperation; +- (CPImage)browser:(CPBrowser)browser imageValueForItem:(id)anItem; +- (CPImage)browser:(CPBrowser)browser draggingImageForRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)column withEvent:(CPEvent)event offset:(CGPoint)dragImageOffset; +- (CPImage)browser:(CPBrowser)browser imageValueForItem:(id)item; +- (CPIndexSet)browser:(CPBrowser)browser selectionIndexesForProposedSelection:(CPIndexSet)proposedSelectionIndexes inColumn:(CPInteger)column; +- (CPInteger)browser:(CPBrowser)browser numberOfChildrenOfItem:(id)item; +- (CPView)browser:(CPBrowser)browser draggingViewForRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)column withEvent:(CPEvent)event offset:(CGPoint)dragImageOffset; +- (id)browser:(CPBrowser)browser child:(CPInteger)index ofItem:(id)item; +- (id)browser:(CPBrowser)browser objectValueForItem:(id)item; +- (id)rootItemForBrowser:(CPBrowser)browser; +- (void)browser:(CPBrowser)browser didChangeLastColumn:(CPInteger)oldLastColumn toColumn:(CPInteger)column; +- (void)browser:(CPBrowser)browser didResizeColumn:(CPInteger)column; +- (void)browserSelectionIsChanging:(CPBrowser)browser; +- (void)browserSelectionDidChange:(CPBrowser)browser; + +@end + +var CPBrowserDelegate_browser_acceptDrop_atRow_column_dropOperation_ = 1 << 1, + CPBrowserDelegate_browser_canDragRowsWithIndexes_inColumn_withEvent_ = 1 << 2, + CPBrowserDelegate_browser_isLeafItem_ = 1 << 3, + CPBrowserDelegate_browser_shouldSelectRowIndexes_inColumn_ = 1 << 4, + CPBrowserDelegate_browser_writeRowsWithIndexes_inColumn_toPasteboard_ = 1 << 5, + CPBrowserDelegate_browser_validateDrop_proposedRow_column_dropOperation_ = 1 << 6, + CPBrowserDelegate_browser_imageValueForItem_ = 1 << 7, + CPBrowserDelegate_browser_draggingImageForRowsWithIndexes_inColumn_withEvent_offset_ = 1 << 8, + CPBrowserDelegate_browser_imageValueForItem_ = 1 << 9, + CPBrowserDelegate_browser_selectionIndexesForProposedSelection_inColumn_ = 1 << 10, + CPBrowserDelegate_browser_numberOfChildrenOfItem_ = 1 << 11, + CPBrowserDelegate_browser_draggingViewForRowsWithIndexes_inColumn_withEvent_offset_ = 1 << 12, + CPBrowserDelegate_browser_child_ofItem_ = 1 << 13, + CPBrowserDelegate_browser_objectValueForItem_ = 1 << 14, + CPBrowserDelegate_rootItemForBrowser_ = 1 << 15, + CPBrowserDelegate_browser_didChangeLastColumn_toColumn_ = 1 << 16, + CPBrowserDelegate_browser_didResizeColumn_ = 1 << 17, + CPBrowserDelegate_browserSelectionIsChanging_ = 1 << 18, + CPBrowserDelegate_browserSelectionDidChange_ = 1 << 19; + /*! @ingroup appkit @class CPBrowser */ @implementation CPBrowser : CPControl { - id _delegate; - CPString _pathSeparator; + id _delegate; + CPString _pathSeparator; + unsigned _implementedDelegateMethods; - CPView _contentView; - CPScrollView _horizontalScrollView; - CPView _prototypeView; + CPView _contentView; + CPScrollView _horizontalScrollView; + CPView _prototypeView; - CPArray _tableViews; - CPArray _tableDelegates; + CPArray _tableViews; + CPArray _tableDelegates; - id _rootItem; + id _rootItem; - BOOL _delegateSupportsImages; + BOOL _delegateSupportsImages; - SEL _doubleAction @accessors(property=doubleAction); + SEL _doubleAction @accessors(property=doubleAction); - BOOL _allowsMultipleSelection; - BOOL _allowsEmptySelection; + BOOL _allowsMultipleSelection; + BOOL _allowsEmptySelection; - Class _tableViewClass @accessors(property=tableViewClass); + Class _tableViewClass @accessors(property=tableViewClass); - float _rowHeight; - float _imageWidth; - float _leafWidth; - float _minColumnWidth; - float _defaultColumnWidth @accessors(property=defaultColumnWidth); + float _rowHeight; + float _imageWidth; + float _leafWidth; + float _minColumnWidth; + float _defaultColumnWidth @accessors(property=defaultColumnWidth); - CPArray _columnWidths; + CPArray _columnWidths; } + (CPString)defaultThemeClass @@ -137,10 +184,74 @@ [CPKeyedArchiver archivedDataWithRootObject:_prototypeView]]; } -- (void)setDelegate:(id)anObject +- (void)setDelegate:(id )anObject { + if (_delegate === anObject) + return; + _delegate = anObject; - _delegateSupportsImages = [_delegate respondsToSelector:@selector(browser:imageValueForItem:)]; + _implementedDelegateMethods = 0; + _delegateSupportsImages = NO; + + if ([_delegate respondsToSelector:@selector(browser:acceptDrop:atRow:column:dropOperation:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_acceptDrop_atRow_column_dropOperation_; + + if ([_delegate respondsToSelector:@selector(browser:canDragRowsWithIndexes:inColumn:withEvent:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_canDragRowsWithIndexes_inColumn_withEvent_; + + if ([_delegate respondsToSelector:@selector(browser:isLeafItem:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_isLeafItem_; + + if ([_delegate respondsToSelector:@selector(browser:shouldSelectRowIndexes:inColumn:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_shouldSelectRowIndexes_inColumn_; + + if ([_delegate respondsToSelector:@selector(browser:writeRowsWithIndexes:inColumn:toPasteboard:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_writeRowsWithIndexes_inColumn_toPasteboard_; + + if ([_delegate respondsToSelector:@selector(browser:validateDrop:proposedRow:column:dropOperation:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_validateDrop_proposedRow_column_dropOperation_; + + if ([_delegate respondsToSelector:@selector(browser:imageValueForItem:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_imageValueForItem_; + + if ([_delegate respondsToSelector:@selector(browser:draggingImageForRowsWithIndexes:inColumn:withEvent:offset:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_draggingImageForRowsWithIndexes_inColumn_withEvent_offset_; + + if ([_delegate respondsToSelector:@selector(browser:imageValueForItem:)]) + { + _delegateSupportsImages = YES; + _implementedDelegateMethods |= CPBrowserDelegate_browser_imageValueForItem_; + } + + if ([_delegate respondsToSelector:@selector(browser:selectionIndexesForProposedSelection:inColumn:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_selectionIndexesForProposedSelection_inColumn_; + + if ([_delegate respondsToSelector:@selector(browser:numberOfChildrenOfItem:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_numberOfChildrenOfItem_; + + if ([_delegate respondsToSelector:@selector(browser:draggingViewForRowsWithIndexes:inColumn:withEvent:offset:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_draggingViewForRowsWithIndexes_inColumn_withEvent_offset_; + + if ([_delegate respondsToSelector:@selector(browser:child:ofItem:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_child_ofItem_; + + if ([_delegate respondsToSelector:@selector(browser:objectValueForItem:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_objectValueForItem_; + + if ([_delegate respondsToSelector:@selector(rootItemForBrowser:)]) + _implementedDelegateMethods |= CPBrowserDelegate_rootItemForBrowser_; + + if ([_delegate respondsToSelector:@selector(browser:didChangeLastColumn:toColumn:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_didChangeLastColumn_toColumn_; + + if ([_delegate respondsToSelector:@selector(browser:didChangeLastColumn:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browser_didResizeColumn_; + + if ([_delegate respondsToSelector:@selector(browserSelectionIsChanging:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browserSelectionIsChanging_; + + if ([_delegate respondsToSelector:@selector(browserSelectionDidChange:)]) + _implementedDelegateMethods |= CPBrowserDelegate_browserSelectionDidChange_; [self loadColumnZero]; } @@ -162,10 +273,7 @@ - (void)loadColumnZero { - if ([_delegate respondsToSelector:@selector(rootItemForBrowser:)]) - _rootItem = [_delegate rootItemForBrowser:self]; - else - _rootItem = nil; + _rootItem = [self _sendDelegateRootItemForBrowser]; [self setLastColumn:-1]; [self addColumn]; @@ -190,8 +298,7 @@ _tableViews = _tableViews.slice(0, indexPlusOne); _tableDelegates = _tableDelegates.slice(0, indexPlusOne); - if ([_delegate respondsToSelector:@selector(browser:didChangeLastColumn:toColumn:)]) - [_delegate browser:self didChangeLastColumn:oldValue toColumn:columnIndex]; + [self _sendDelegateBrowserDidChangeLastColumn:oldValue toColumn:columnIndex]; [self tile]; } @@ -366,7 +473,7 @@ - (BOOL)isLeafItem:(id)item { - return [_delegate respondsToSelector:@selector(browser:isLeafItem:)] && [_delegate browser:self isLeafItem:item]; + return (_implementedDelegateMethods & CPBrowserDelegate_browser_isLeafItem_) && [_delegate browser:self isLeafItem:item]; } - (id)parentForItemsInColumn:(CPInteger)column @@ -493,9 +600,7 @@ { _columnWidths[column] = aWidth; - if ([_delegate respondsToSelector:@selector(browser:didResizeColumn:)]) - [_delegate browser:self didResizeColumn:column]; - + [self _sendDelegateBrowserDidResizeColumn:column]; [self tile]; } @@ -610,15 +715,12 @@ if (column < 0 || column > [self lastColumn] + 1) return; - if ([_delegate respondsToSelector:@selector(browser:selectionIndexesForProposedSelection:inColumn:)]) - indexSet = [_delegate browser:self selectionIndexesForProposedSelection:indexSet inColumn:column]; + indexSet = [self _sendDelegateBrowserSelectionIndexesForProposedSelection:indexSet inColumn:column]; - if ([_delegate respondsToSelector:@selector(browser:shouldSelectRowIndexes:inColumn:)] && - ![_delegate browser:self shouldSelectRowIndexes:indexSet inColumn:column]) + if (![self _sendDelegateBrowserShouldSelectRowIndexes:indexSet inColumn:column]) return; - if ([_delegate respondsToSelector:@selector(browserSelectionIsChanging:)]) - [_delegate browserSelectionIsChanging:self]; + [self _sendDelegateBrowserSelectionIsChanging]; if (column > [self lastColumn]) [self addColumn]; @@ -629,8 +731,7 @@ [self scrollColumnToVisible:column]; - if ([_delegate respondsToSelector:@selector(browserSelectionDidChange:)]) - [_delegate browserSelectionDidChange:self]; + [self _sendDelegateBrowserSelectionDidChange]; } - (void)setBackgroundColor:(CPColor)aColor @@ -652,30 +753,6 @@ [_tableViews makeObjectsPerformSelector:@selector(registerForDraggedTypes:) withObject:types]; } -- (BOOL)canDragRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(CPEvent)dragEvent -{ - if ([_delegate respondsToSelector:@selector(browser:canDragRowsWithIndexes:inColumn:withEvent:)]) - return [_delegate browser:self canDragRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent]; - - return YES; -} - -- (CPImage)draggingImageForRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(CPEvent)dragEvent offset:(CGPoint)dragImageOffset -{ - if ([_delegate respondsToSelector:@selector(browser:draggingImageForRowsWithIndexes:inColumn:withEvent:offset:)]) - return [_delegate browser:self draggingImageForRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent offset:dragImageOffset]; - - return nil; -} - -- (CPView)draggingViewForRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(CPEvent)dragEvent offset:(CGPoint)dragImageOffset -{ - if ([_delegate respondsToSelector:@selector(browser:draggingViewForRowsWithIndexes:inColumn:withEvent:offset:)]) - return [_delegate browser:self draggingViewForRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent offset:dragImageOffset]; - - return nil; -} - @end @implementation CPBrowser (CPCoding) @@ -860,8 +937,6 @@ @end -@import - @implementation _CPBrowserTableDelegate : CPObject { CPBrowser _browser @accessors; @@ -909,7 +984,7 @@ - (BOOL)tableView:(CPTableView)aTableView acceptDrop:(id)info row:(CPInteger)row dropOperation:(CPTableViewDropOperation)operation { - if ([_delegate respondsToSelector:@selector(browser:acceptDrop:atRow:column:dropOperation:)]) + if (_browser._implementedDelegateMethods & CPBrowserDelegate_browser_acceptDrop_atRow_column_dropOperation_) return [_delegate browser:_browser acceptDrop:info atRow:row column:_index dropOperation:operation]; else return NO; @@ -917,7 +992,7 @@ - (CPDragOperation)tableView:(CPTableView)aTableView validateDrop:(id)info proposedRow:(CPInteger)row proposedDropOperation:(CPTableViewDropOperation)operation { - if ([_delegate respondsToSelector:@selector(browser:validateDrop:proposedRow:column:dropOperation:)]) + if (_browser._implementedDelegateMethods & CPBrowserDelegate_browser_validateDrop_proposedRow_column_dropOperation_) return [_delegate browser:_browser validateDrop:info proposedRow:row column:_index dropOperation:operation]; else return CPDragOperationNone; @@ -925,7 +1000,7 @@ - (BOOL)tableView:(CPTableView)aTableView writeRowsWithIndexes:(CPIndexSet)rowIndexes toPasteboard:(CPPasteboard)pboard { - if ([_delegate respondsToSelector:@selector(browser:writeRowsWithIndexes:inColumn:toPasteboard:)]) + if (_browser._implementedDelegateMethods & CPBrowserDelegate_browser_writeRowsWithIndexes_inColumn_toPasteboard_) return [_delegate browser:_browser writeRowsWithIndexes:rowIndexes inColumn:_index toPasteboard:pboard]; else return NO; @@ -1008,3 +1083,115 @@ } @end + +@implementation CPBrowser (CPBrowserDelegate) + +/*! + @ignore + Call delegate rootItemForBrowser: +*/ +- (id)_sendDelegateRootItemForBrowser +{ + if (!(_implementedDelegateMethods & CPBrowserDelegate_rootItemForBrowser_)) + return nil; + + return [_delegate rootItemForBrowser:self]; +} + +/*! + @ignore + Call delegate browser:didChangeLastColumn:toColumn: +*/ +- (void)_sendDelegateBrowserDidChangeLastColumn:(CPInteger)lastColumn toColumn:(CPInteger)newColumn +{ + if (!(_implementedDelegateMethods & CPBrowserDelegate_browser_didChangeLastColumn_toColumn_)) + return; + + [_delegate browser:self didChangeLastColumn:lastColumn toColumn:newColumn]; +} + +/*! + @ignore + Call delegate browser:didResizeColumn: +*/ +- (void)_sendDelegateBrowserDidResizeColumn:(CPInteger)column +{ + if (!(_implementedDelegateMethods & CPBrowserDelegate_browser_didResizeColumn_)) + return; + + [_delegate browser:self didResizeColumn:column]; +} + +/*! + @ignore + Call delegate browserSelectionIsChanging: +*/ +- (void)_sendDelegateBrowserSelectionIsChanging +{ + if (!(_implementedDelegateMethods & CPBrowserDelegate_browserSelectionIsChanging_)) + return; + + [_delegate browserSelectionIsChanging:self]; +} + +/*! + @ignore + Call delegate browser:shouldSelectRowIndexes:inColumn: +*/ +- (BOOL)_sendDelegateBrowserShouldSelectRowIndexes:(CPIndexSet)anIndexSet inColumn:(CPInteger)aColumn +{ + if (!(_implementedDelegateMethods & CPBrowserDelegate_browser_shouldSelectRowIndexes_inColumn_)) + return YES; + + return [_delegate browser:self shouldSelectRowIndexes:anIndexSet inColumn:aColumn]; +} + +/*! + @ignore + Call delegate browser:selectionIndexesForProposedSelection:inColumn: +*/ +- (CPIndexSet)_sendDelegateBrowserSelectionIndexesForProposedSelection:(CPIndexSet)anIndexSet inColumn:(CPInteger)aColumn +{ + if (!(_implementedDelegateMethods & CPBrowserDelegate_browser_selectionIndexesForProposedSelection_inColumn_)) + return anIndexSet; + + return [_delegate browser:self selectionIndexesForProposedSelection:anIndexSet inColumn:aColumn]; +} + +/*! + @ignore + Call delegate browserSelectionDidChange +*/ +- (void)_sendDelegateBrowserSelectionDidChange +{ + if (!(_implementedDelegateMethods & CPBrowserDelegate_browserSelectionDidChange_)) + return; + + [_delegate browserSelectionDidChange:self]; +} + +- (BOOL)canDragRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(CPEvent)dragEvent +{ + if (_implementedDelegateMethods & CPBrowserDelegate_browser_canDragRowsWithIndexes_inColumn_withEvent_) + return [_delegate browser:self canDragRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent]; + + return YES; +} + +- (CPImage)draggingImageForRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(CPEvent)dragEvent offset:(CGPoint)dragImageOffset +{ + if (_implementedDelegateMethods & CPBrowserDelegate_browser_draggingImageForRowsWithIndexes_inColumn_withEvent_offset_) + return [_delegate browser:self draggingImageForRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent offset:dragImageOffset]; + + return nil; +} + +- (CPView)draggingViewForRowsWithIndexes:(CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(CPEvent)dragEvent offset:(CGPoint)dragImageOffset +{ + if (_implementedDelegateMethods & CPBrowserDelegate_browser_draggingViewForRowsWithIndexes_inColumn_withEvent_offset_) + return [_delegate browser:self draggingViewForRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent offset:dragImageOffset]; + + return nil; +} + +@end From de2397fa051bfd4cb83fa08457d71f72e8eb9ca5 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 1 Apr 2014 18:09:14 -0700 Subject: [PATCH 089/278] Fixed: path is wrong with local copy Previously when using a local copy to install Cappuccino, we used to copy the local capp-base at /usr/local/narwhal and then we tried to move /usr/local/narwhal/cappuccino-cappuccino-base*/* to /usr/local/narwhal/. . Now we move /usr/local/narwhal/cappuccino-base*/* to /usr/local/narwhal/. . --- bootstrap.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index 641dedb59..63acf1594 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -206,6 +206,7 @@ done github_project="$github_user-cappuccino-base" github_path="$github_user/cappuccino-base" +local_project="cappuccino-base" # The purpose of bootstrap is to install Cappuccino. install_cappuccino="yes" @@ -317,9 +318,9 @@ if [ "$install_cappuccino" ]; then unzip $quiet_arg "$local_distrib" -d "$install_directory" check_and_exit - mv "$install_directory/$github_project-"*/* "$install_directory/." + mv "$install_directory/$local_project-"*/* "$install_directory/." check_and_exit - rm -rf "$install_directory/$github_project-"* + rm -rf "$install_directory/$local_project-"* check_and_exit else zip_ball="https://github.com/$github_path/zipball/$github_ref" From c1fb54ecad920981ccf123a177f50afc81d3c421 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 2 Apr 2014 13:55:39 -0700 Subject: [PATCH 090/278] New: Added delegate tableView:willRemoveView:forTableColumn:row Added delegate tableView:willRemoveView:forTableColumn:row in CPTableView --- AppKit/CPTableView.j | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 1bc803070..4800770d8 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -79,10 +79,11 @@ var CPTableViewDelegate_selectionShouldChangeInTableView_ CPTableViewDelegate_tableView_toolTipForView_rect_tableColumn_row_mouseLocation_ = 1 << 16, CPTableViewDelegate_tableView_typeSelectStringForTableColumn_row_ = 1 << 17, CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_ = 1 << 18, - CPTableViewDelegate_tableViewSelectionDidChange_ = 1 << 19, - CPTableViewDelegate_tableViewSelectionIsChanging_ = 1 << 20, - CPTableViewDelegate_tableViewMenuForTableColumn_row_ = 1 << 21, - CPTableViewDelegate_tableView_shouldReorderColumn_toColumn_ = 1 << 22; + CPTableViewDelegate_tableView_willRemoveView_forTableColumn_row_ = 1 << 19, + CPTableViewDelegate_tableViewSelectionDidChange_ = 1 << 20, + CPTableViewDelegate_tableViewSelectionIsChanging_ = 1 << 21, + CPTableViewDelegate_tableViewMenuForTableColumn_row_ = 1 << 22, + CPTableViewDelegate_tableView_shouldReorderColumn_toColumn_ = 1 << 23; //CPTableViewDraggingDestinationFeedbackStyles CPTableViewDraggingDestinationFeedbackStyleNone = -1; @@ -159,6 +160,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; - (void)tableView:(CPTableView)aTableView didDragTableColumn:(CPTableColumn)aTableColumn; - (void)tableView:(CPTableView)aTableView mouseDownInHeaderOfTableColumn:(CPTableColumn)aTableColumn; - (void)tableView:(CPTableView)aTableView willDisplayView:(CPView)aView forTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex; +- (void)tableView:(CPTableView)aTableView willRemoveView:(CPView)aView forTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex; - (void)tableViewSelectionDidChange:(CPNotification)aNotification; - (void)tableViewSelectionIsChanging:(CPNotification)aNotification; @@ -2915,6 +2917,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if ([_delegate respondsToSelector:@selector(tableView:willDisplayView:forTableColumn:row:)]) _implementedDelegateMethods |= CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_; + if ([_delegate respondsToSelector:@selector(tableView:willRemoveView:forTableColumn:row:)]) + _implementedDelegateMethods |= CPTableViewDelegate_tableView_willRemoveView_forTableColumn_row_; + if ([_delegate respondsToSelector:@selector(tableView:menuForTableColumn:row:)]) _implementedDelegateMethods |= CPTableViewDelegate_tableViewMenuForTableColumn_row_; @@ -3550,6 +3555,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad var dataView = [dataViews objectAtIndex:row]; + [self _sendDelegateWillRemoveView:dataView forTableColumn:tableColumn row:row]; + [dataViews replaceObjectAtIndex:row withObject:nil]; [self _enqueueReusableDataView:dataView]; @@ -5626,6 +5633,18 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [_delegate tableView:self willDisplayView:aCell forTableColumn:aTableColumn row:aRowIndex]; } +/*! + @ignore + Call the delegate tableView:willRemoveView:forTableColumn:row: +*/ +- (void)_sendDelegateWillRemoveView:(id)aCell forTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex +{ + if (!(_implementedDelegateMethods & CPTableViewDelegate_tableView_willRemoveView_forTableColumn_row_)) + return; + + [_delegate tableView:self willRemoveView:aCell forTableColumn:aTableColumn row:aRowIndex]; +} + /*! @ignore Return a CPMenu for the given tableColumn and row. By default return the menu of super. From 904454d7372a03f2aa49bdc313d66016779a9df6 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 2 Apr 2014 19:27:40 -0700 Subject: [PATCH 091/278] New: added delegate outlineView:willRemoveView:forTableColumn:item: in CPOUtlineView --- AppKit/CPOutlineView.j | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index 220c50202..3b8ea68ac 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -75,8 +75,9 @@ var CPOutlineViewDelegate_outlineView_dataViewForTableColumn_item_ CPOutlineViewDelegate_outlineView_typeSelectStringForTableColumn_item_ = 1 << 21, CPOutlineViewDelegate_outlineView_willDisplayOutlineView_forTableColumn_item_ = 1 << 22, CPOutlineViewDelegate_outlineView_willDisplayView_forTableColumn_item_ = 1 << 23, - CPOutlineViewDelegate_selectionShouldChangeInOutlineView_ = 1 << 24, - CPOutlineViewDelegate_outlineView_menuForTableColumn_item_ = 1 << 25; + CPOutlineViewDelegate_outlineView_willRemoveView_forTableColumn_item_ = 1 << 24, + CPOutlineViewDelegate_selectionShouldChangeInOutlineView_ = 1 << 25, + CPOutlineViewDelegate_outlineView_menuForTableColumn_item_ = 1 << 26; CPOutlineViewDropOnItemIndex = -1; @@ -118,6 +119,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, - (void)outlineView:(CPOutlineView)anOutlineView mouseDownInHeaderOfTableColumn:(CPTableColumn)aTableColumn; - (void)outlineView:(CPOutlineView)anOutlineView willDisplayOutlineView:(CPView)aView forTableColumn:(CPTableColumn)aTableColumn item:(id)anItem; - (void)outlineView:(CPOutlineView)anOutlineView willDisplayView:(CPView)aView forTableColumn:(CPTableColumn)aTableColumn item:(id)anItem; +- (void)outlineView:(CPOutlineView)anOutlineView willRemoveView:(CPView)aView forTableColumn:(CPTableColumn)aTableColumn item:(id)anItem; @end @@ -963,6 +965,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, CPOutlineViewDelegate_outlineView_typeSelectStringForTableColumn_item_ , @selector(outlineView:typeSelectStringForTableColumn:item:), CPOutlineViewDelegate_outlineView_willDisplayOutlineView_forTableColumn_item_ , @selector(outlineView:willDisplayOutlineView:forTableColumn:item:), CPOutlineViewDelegate_outlineView_willDisplayView_forTableColumn_item_ , @selector(outlineView:willDisplayView:forTableColumn:item:), + CPOutlineViewDelegate_outlineView_willRemoveView_forTableColumn_item_ , @selector(outlineView:willRemoveView:forTableColumn:item:), CPOutlineViewDelegate_selectionShouldChangeInOutlineView_ , @selector(selectionShouldChangeInOutlineView:), CPOutlineViewDelegate_outlineView_menuForTableColumn_item_ , @selector(outlineView:menuForTableColumn:item:) ], @@ -1989,6 +1992,15 @@ var _loadItemInfoForItem = function(/*CPOutlineView*/ anOutlineView, /*id*/ anIt } } +- (void)tableView:(CPTableView)aTableView willRemoveView:(id)aView forTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex +{ + if ((_outlineView._implementedOutlineViewDelegateMethods & CPOutlineViewDelegate_outlineView_willRemoveView_forTableColumn_item_)) + { + var item = [_outlineView itemAtRow:aRowIndex]; + [_outlineView._outlineViewDelegate outlineView:_outlineView willRemoveView:aView forTableColumn:aTableColumn item:item]; + } +} + - (BOOL)tableView:(CPTableView)aTableView isGroupRow:(CPInteger)aRow { if ((_outlineView._implementedOutlineViewDelegateMethods & CPOutlineViewDelegate_outlineView_isGroupItem_)) From fa3f18c88b59b95ca85f8b583d312a50686fa03a Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 2 Apr 2014 22:56:22 -0700 Subject: [PATCH 092/278] Have CPWindow setContentView check that the new view is not the same as the existing content view. --- 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 a86734ba5..2fc8a9c5c 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -1110,7 +1110,7 @@ CPTexturedBackgroundWindowMask */ - (void)setContentView:(CPView)aView { - if (_contentView) + if (_contentView && _contentView !== aView) [_contentView removeFromSuperview]; var bounds = CGRectMake(0.0, 0.0, CGRectGetWidth(_frame), CGRectGetHeight(_frame)); From 1b351ad5bb4355da92ee14b9b5f6c6c5369b0eec Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 3 Apr 2014 11:38:11 +0100 Subject: [PATCH 093/278] New: + CPColor checkerBoardColor for debug use. This color has a standard 'transparency' checkerboard pattern which is especially useful for our scrolling tests where it makes scrolling easy to visualise. Refs #2078, #2079. --- AppKit/CPColor.j | 6 ++++++ Tests/Manual/CPScrollView/AppController.j | 1 + Tests/Manual/CPScrollView2/AppController.j | 1 + 3 files changed, 8 insertions(+) diff --git a/AppKit/CPColor.j b/AppKit/CPColor.j index e3fdd083e..5d27584d9 100644 --- a/AppKit/CPColor.j +++ b/AppKit/CPColor.j @@ -813,6 +813,12 @@ url("data:image/png;base64,BASE64ENCODEDDATA") // if there is a pattern image return [CPColor colorWithRed:RAND() green:RAND() blue:RAND() alpha:1.0]; } ++ (CPColor)checkerBoardColor +{ + // Thanks to cocco http://stackoverflow.com/a/18368212/76900. + return [CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX////MzMw46qqDAAAAEElEQVQImWNg+M+AFeEQBgB+vw/xfUUZkgAAAABJRU5ErkJggg=="]]; +} + @end /// @cond IGNORE diff --git a/Tests/Manual/CPScrollView/AppController.j b/Tests/Manual/CPScrollView/AppController.j index ca14df599..47f6ed117 100644 --- a/Tests/Manual/CPScrollView/AppController.j +++ b/Tests/Manual/CPScrollView/AppController.j @@ -59,6 +59,7 @@ var scrollView = [self makeScrollview]; [scrollView setFrameOrigin:CGPointMake(20,20)] + [[scrollView documentView] setBackgroundColor:[CPColor checkerBoardColor]]; [[scrollView documentView] addSubview:innerScrollView]; [[aWindow contentView] addSubview:scrollView]; diff --git a/Tests/Manual/CPScrollView2/AppController.j b/Tests/Manual/CPScrollView2/AppController.j index bd5ced4c7..86bca236d 100644 --- a/Tests/Manual/CPScrollView2/AppController.j +++ b/Tests/Manual/CPScrollView2/AppController.j @@ -31,6 +31,7 @@ [scrollView setDocumentView:contentView]; [contentView2 setAutoresizingMask:CPViewWidthSizable]; + [contentView2 setBackgroundColor:[CPColor checkerBoardColor]]; [scrollView2 setDocumentView:contentView2]; } From 4602549ec8e927df5eec083499bfdc3bc0453970 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 3 Apr 2014 11:34:33 -0700 Subject: [PATCH 094/278] STYLE: fix coding style issue --- AppKit/CPSegmentedControl.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 36a691035..adfb84b29 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -476,7 +476,7 @@ CPSegmentSwitchTrackingMomentary = 2; */ - (void)drawSegmentBezel:(int)aSegment highlight:(BOOL)shouldHighlight { - if(aSegment<_themeStates.length) + if(aSegment < _themeStates.length) { if (shouldHighlight) _themeStates[aSegment] = _themeStates[aSegment].and(CPThemeStateHighlighted); From 6825e3f7cebe08d6b2cfc10de55d12103d5e08a7 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 3 Apr 2014 12:35:44 -0700 Subject: [PATCH 095/278] Revert "Fixed: path is wrong with local copy" This reverts commit de2397fa051bfd4cb83fa08457d71f72e8eb9ca5. --- bootstrap.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index 63acf1594..641dedb59 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -206,7 +206,6 @@ done github_project="$github_user-cappuccino-base" github_path="$github_user/cappuccino-base" -local_project="cappuccino-base" # The purpose of bootstrap is to install Cappuccino. install_cappuccino="yes" @@ -318,9 +317,9 @@ if [ "$install_cappuccino" ]; then unzip $quiet_arg "$local_distrib" -d "$install_directory" check_and_exit - mv "$install_directory/$local_project-"*/* "$install_directory/." + mv "$install_directory/$github_project-"*/* "$install_directory/." check_and_exit - rm -rf "$install_directory/$local_project-"* + rm -rf "$install_directory/$github_project-"* check_and_exit else zip_ball="https://github.com/$github_path/zipball/$github_ref" From 8bdaeab99814974e3ea7e1273ac94d6bb62979ec Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 3 Apr 2014 14:10:00 -0700 Subject: [PATCH 096/278] FIXED: Selection behavior when implementing selectionIndexesForProposedSelection Previously, when delegates implemented tableView:selectionIndexesForProposedSelection:, the selection with arrow were broken. This patch ensure to try to select next/previous row if the current row cannot be selected. It also cleans up the selection indexes when sending selectAll: as Cocoa does. --- AppKit/CPTableView.j | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 4800770d8..55cb0e70f 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -1343,6 +1343,38 @@ NOT YET IMPLEMENTED [self _setSelectedRowIndexes:newSelectedIndexes]; } +/*! + @ignore + cleanup a an indexset from the indexes that cannot be selected + according to the table view delegate. +*/ +- (CPIndexSet)_cleanUpSelectionRowIndexes:(CPIndexSet)anIndexSet +{ + if ([self _delegateRespondsToSelectionIndexesForProposedSelection]) + { + return [self _sendDelegateSelectionIndexesForProposedSelection:anIndexSet]; + } + else if ([self _delegateRespondsToShouldSelectRow]) + { + var indexesToRemove = [CPIndexSet new], + currentIndex = [anIndexSet firstIndex]; + + while (currentIndex != CPNotFound) + { + if (![self _sendDelegateShouldSelectRow:currentIndex]) + [indexesToRemove addIndex:currentIndex]; + + currentIndex = [anIndexSet indexGreaterThanIndex:currentIndex]; + } + + [anIndexSet removeIndexes:indexesToRemove]; + + return anIndexSet; + } + else + return anIndexSet; +} + /*! @ignore */ @@ -1567,7 +1599,10 @@ NOT YET IMPLEMENTED if ([[self selectedColumnIndexes] count]) [self selectColumnIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfColumns])] byExtendingSelection:NO]; else - [self selectRowIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])] byExtendingSelection:NO]; + { + var range = [self _cleanUpSelectionRowIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])]]; + [self selectRowIndexes:range byExtendingSelection:NO]; + } } } @@ -5260,9 +5295,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (i >= [self numberOfRows] || i < 0) return; - if (![self _delegateRespondsToSelectionIndexesForProposedSelection] && [self _delegateRespondsToShouldSelectRow]) + if ([self _delegateRespondsToSelectionIndexesForProposedSelection] || [self _delegateRespondsToShouldSelectRow]) { - var shouldSelect = [self _sendDelegateShouldSelectRow:i]; + var shouldSelect = !![[self _cleanUpSelectionRowIndexes:[CPIndexSet indexSetWithIndex:i]] count]; /* If shouldSelect returns NO it means this row cannot be selected. The proper behaviour is to then try to see if the next/previous @@ -5271,7 +5306,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad while (!shouldSelect && (i < [self numberOfRows] && i > 0)) { shouldGoUpward ? --i : ++i; //check to see if the row can be selected. If it can't be then see if the next row can be selected. - shouldSelect = [self _sendDelegateShouldSelectRow:i]; + shouldSelect = !![[self _cleanUpSelectionRowIndexes:[CPIndexSet indexSetWithIndex:i]] count]; } if (!shouldSelect) From 1557c567d453ae1d7e6151c8631d8e0643d17627 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 3 Apr 2014 15:56:04 -0700 Subject: [PATCH 097/278] FIXED: crash due to wrong delegate bitmask --- AppKit/CPOutlineView.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index 3b8ea68ac..e1c5bad01 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -52,7 +52,6 @@ var CPOutlineViewDataSource_outlineView_objectValue_forTableColumn_byItem_ CPOutlineViewDataSource_outlineView_sortDescriptorsDidChange_ = 1 << 11; var CPOutlineViewDelegate_outlineView_dataViewForTableColumn_item_ = 1 << 1, - CPOutlineViewDelegate_outlineView_viewForTableColumn_item_ = 1 << 26, CPOutlineViewDelegate_outlineView_didClickTableColumn_ = 1 << 2, CPOutlineViewDelegate_outlineView_didDragTableColumn_ = 1 << 3, CPOutlineViewDelegate_outlineView_heightOfRowByItem_ = 1 << 4, @@ -77,7 +76,8 @@ var CPOutlineViewDelegate_outlineView_dataViewForTableColumn_item_ CPOutlineViewDelegate_outlineView_willDisplayView_forTableColumn_item_ = 1 << 23, CPOutlineViewDelegate_outlineView_willRemoveView_forTableColumn_item_ = 1 << 24, CPOutlineViewDelegate_selectionShouldChangeInOutlineView_ = 1 << 25, - CPOutlineViewDelegate_outlineView_menuForTableColumn_item_ = 1 << 26; + CPOutlineViewDelegate_outlineView_menuForTableColumn_item_ = 1 << 26, + CPOutlineViewDelegate_outlineView_viewForTableColumn_item_ = 1 << 27; CPOutlineViewDropOnItemIndex = -1; From af83065df56e49384c2e7e0489b19427e1393d36 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 8 Apr 2014 11:41:45 -0700 Subject: [PATCH 098/278] FIXED: Warning due to use of aDOMEvent.returnValue This patch fixes a warning thrown by recent versions of Chrome about IE ways of doing. It simply uses aDOMEvent.returnValue if aDOMEvent.preventDefault() and aDOMEvent.cancelBubble if aDOMEvent.stopPropagation are not avavailable --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index e3a2c79a8..60b0297ec 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1661,16 +1661,15 @@ var CPDOMEventGetClickCount = function(aComparisonEvent, aTimestamp, aLocation) // Global. _CPDOMEventStop = function(aDOMEvent, aPlatformWindow) { - // IE Model - aDOMEvent.cancelBubble = true; - aDOMEvent.returnValue = false; - - // W3C Model - if (aDOMEvent.preventDefault) + if (aDOMEvent.preventDefault) // W3C Model aDOMEvent.preventDefault(); + else // IE Model + aDOMEvent.returnValue = false; - if (aDOMEvent.stopPropagation) + if (aDOMEvent.stopPropagation) // W3C Model aDOMEvent.stopPropagation(); + else // IE Model + aDOMEvent.cancelBubble = true; }; function CPWindowObjectList() From 2411edd461904c4163324b2d8f604e3fb7daed8f Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Tue, 8 Apr 2014 20:31:02 +0200 Subject: [PATCH 099/278] Fixed: Faster objj_msgSend Conflicts: Objective-J/Runtime.js --- Objective-J/ObjJAcornCompiler.js | 53 +++++++++- Objective-J/Runtime.js | 160 +++++++++++++++++++++++++++++++ 2 files changed, 211 insertions(+), 2 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index 3f684bb77..ed9cd62c7 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -829,7 +829,12 @@ Program: function(node, st, c) { BlockStatement: function(node, st, c) { var compiler = st.compiler, generate = compiler.generate, + endOfScopeBody = st.endOfScopeBody, buffer; + + if (endOfScopeBody) + delete st.endOfScopeBody; + if (generate) { st.indentBlockLevel = typeof st.indentBlockLevel === "undefined" ? 0 : st.indentBlockLevel + 1; buffer = compiler.jsBuffer; @@ -840,6 +845,18 @@ BlockStatement: function(node, st, c) { c(node.body[i], st, "Statement"); } if (generate) { + var maxReceiverLevel = st.maxReceiverLevel; + if (endOfScopeBody && maxReceiverLevel) { + buffer.concat(indentation); + buffer.concat("var "); + for (var i = 0; i < maxReceiverLevel; i++) { + if (i) buffer.concat(", "); + buffer.concat("___r"); + buffer.concat((i + 1) + ""); + } + buffer.concat(";\n"); + } + buffer.concat(indentation.substring(indentationSpaces)); buffer.concat("}"); if (st.isDecl || st.indentBlockLevel > 0) @@ -1023,6 +1040,7 @@ TryStatement: function(node, st, c) { buffer.concat(") "); } indentation += indentStep; + inner.endOfScopeBody = true; c(handler.body, inner, "ScopeBody"); indentation = indentation.substring(indentationSpaces); inner.copyAddedSelfToIvarsToParent(); @@ -1161,6 +1179,7 @@ Function: function(node, st, c) { buffer.concat(")\n"); } indentation += indentStep; + inner.endOfScopeBody = true; c(node.body, inner, "ScopeBody"); indentation = indentation.substring(indentationSpaces); inner.copyAddedSelfToIvarsToParent(); @@ -2022,6 +2041,7 @@ MethodDeclarationStatement: function(node, st, c) { if (!generate) compiler.lastPos = node.startOfBody; indentation += indentStep; + methodScope.endOfScopeBody = true; c(node.body, methodScope, "Statement"); indentation = indentation.substring(indentationSpaces); if (!generate) @@ -2118,19 +2138,43 @@ MessageSendExpression: function(node, st, c) { } else { + if (!st.receiverLevel) st.receiverLevel = 0; if (!generate) buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression. - buffer.concat("objj_msgSend("); + buffer.concat("((___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = "); c(node.object, st, "Expression"); + buffer.concat("), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.objj_msgSend"); if (!generate) buffer.concat(compiler.source.substring(compiler.lastPos, node.object.end)); + if (!(st.maxReceiverLevel >= st.receiverLevel)) + st.maxReceiverLevel = st.receiverLevel; } var selectors = node.selectors, arguments = node.arguments, + argumentsLength = arguments.length, firstSelector = selectors[0], selector = firstSelector ? firstSelector.name : ""; // There is always at least one selector + if (!node.superObject) { + var totalNoOfParameters = argumentsLength; + + if (node.parameters) + totalNoOfParameters += node.parameters.length; + if (totalNoOfParameters < 4) { + buffer.concat("" + totalNoOfParameters); + } + + buffer.concat("(___r"); + buffer.concat(st.receiverLevel + ""); + } + // Put together the selector. Maybe this should be done in the parser... - for (var i = 0; i < arguments.length; i++) + for (var i = 0; i < argumentsLength; i++) if (i === 0) selector += ":"; else @@ -2169,6 +2213,11 @@ MessageSendExpression: function(node, st, c) { } } + if (!node.superObject) { + buffer.concat(")"); + st.receiverLevel--; + } + buffer.concat(")"); if (!generate) compiler.lastPos = node.end; }, diff --git a/Objective-J/Runtime.js b/Objective-J/Runtime.js index 3d50604fa..295931e0c 100644 --- a/Objective-J/Runtime.js +++ b/Objective-J/Runtime.js @@ -454,6 +454,17 @@ var _class_initialize = function(/*Class*/ aClass) { SETINFO(meta, CLS_INITIALIZING); + aClass.objj_msgSend = objj_msgSendMany; + aClass.objj_msgSend0 = objj_msgSend0; + aClass.objj_msgSend1 = objj_msgSend1; + aClass.objj_msgSend2 = objj_msgSend2; + aClass.objj_msgSend3 = objj_msgSend3; + meta.objj_msgSend = objj_msgSendMany; + meta.objj_msgSend0 = objj_msgSend0; + meta.objj_msgSend1 = objj_msgSend1; + meta.objj_msgSend2 = objj_msgSend2; + meta.objj_msgSend3 = objj_msgSend3; + objj_msgSend(aClass, "initialize"); CHANGEINFO(meta, CLS_INITIALIZED, CLS_INITIALIZING); @@ -570,11 +581,25 @@ GLOBAL(objj_allocateClassPair) = function(/*Class*/ superclass, /*String*/ aName classObject.info = CLS_CLASS; classObject._UID = objj_generateObjectUID(); + // It needs initialize + classObject.objj_msgSend = objj_msgSendManyInitialize; + classObject.objj_msgSend0 = objj_msgSend0Initialize; + classObject.objj_msgSend1 = objj_msgSend1Initialize; + classObject.objj_msgSend2 = objj_msgSend2Initialize; + classObject.objj_msgSend3 = objj_msgSend3Initialize; + metaClassObject.isa = rootClassObject.isa; metaClassObject.name = aName; metaClassObject.info = CLS_META; metaClassObject._UID = objj_generateObjectUID(); + // It needs initialize + metaClassObject.objj_msgSend = objj_msgSendManyInitialize; + metaClassObject.objj_msgSend0 = objj_msgSend0Initialize; + metaClassObject.objj_msgSend1 = objj_msgSend1Initialize; + metaClassObject.objj_msgSend2 = objj_msgSend2Initialize; + metaClassObject.objj_msgSend3 = objj_msgSend3Initialize; + return classObject; } @@ -788,6 +813,141 @@ GLOBAL(objj_msgSendSuper) = function(/*id*/ aSuper, /*SEL*/ aSelector) return implementation.apply(aSuper.receiver, arguments); } +var objj_msgSendMany = function(/*id*/ aReceiver, /*SEL*/ aSelector) +{ + var method = this.method_dtable[aSelector], + implementation = method ? method.method_imp : _objj_forward; + +#ifdef MAXIMUM_RECURSION_CHECKS + if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) + throw new Error("Maximum call stack depth exceeded."); + + try { +#endif + + return implementation.apply(aReceiver, arguments); + +#ifdef MAXIMUM_RECURSION_CHECKS + } finally { + __objj_msgSend__StackDepth--; + } +#endif +} + +var objj_msgSendManyInitialize = function(/*id*/ aReceiver, /*SEL*/ aSelector) +{ + _class_initialize(this); + return this.objj_msgSend.apply(this, arguments); +} + +var objj_msgSend0 = function(/*id*/ aReceiver, /*SEL*/ aSelector) +{ + var method = this.method_dtable[aSelector], + implementation = method ? method.method_imp : _objj_forward; + +#ifdef MAXIMUM_RECURSION_CHECKS + if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) + throw new Error("Maximum call stack depth exceeded."); + + try { +#endif + + return implementation(aReceiver, aSelector); + +#ifdef MAXIMUM_RECURSION_CHECKS + } finally { + __objj_msgSend__StackDepth--; + } +#endif +} + +var objj_msgSend0Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector) +{ + _class_initialize(this); + return this.objj_msgSend0(aReceiver, aSelector); +} + +var objj_msgSend1 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) +{ + var method = this.method_dtable[aSelector], + implementation = method ? method.method_imp : _objj_forward; + +#ifdef MAXIMUM_RECURSION_CHECKS + if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) + throw new Error("Maximum call stack depth exceeded."); + + try { +#endif + + return implementation(aReceiver, aSelector, arg0); + +#ifdef MAXIMUM_RECURSION_CHECKS + } finally { + __objj_msgSend__StackDepth--; + } +#endif +} + +var objj_msgSend1Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) +{ + _class_initialize(this); + return this.objj_msgSend1(aReceiver, aSelector, arg0); +} + +var objj_msgSend2 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1) +{ + var method = this.method_dtable[aSelector], + implementation = method ? method.method_imp : _objj_forward; + +#ifdef MAXIMUM_RECURSION_CHECKS + if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) + throw new Error("Maximum call stack depth exceeded."); + + try { +#endif + + return implementation(aReceiver, aSelector, arg0, arg1); + +#ifdef MAXIMUM_RECURSION_CHECKS + } finally { + __objj_msgSend__StackDepth--; + } +#endif +} + +var objj_msgSend2Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1) +{ + _class_initialize(this); + return this.objj_msgSend2(aReceiver, aSelector, arg0, arg1); +} + +var objj_msgSend3 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, arg2) +{ + var method = this.method_dtable[aSelector], + implementation = method ? method.method_imp : _objj_forward; + +#ifdef MAXIMUM_RECURSION_CHECKS + if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) + throw new Error("Maximum call stack depth exceeded."); + + try { +#endif + + return implementation(aReceiver, aSelector, arg0, arg1, arg2); + +#ifdef MAXIMUM_RECURSION_CHECKS + } finally { + __objj_msgSend__StackDepth--; + } +#endif +} + +var objj_msgSend3Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, arg2) +{ + _class_initialize(this); + return this.objj_msgSend3(aReceiver, aSelector, arg0, arg1, arg2); +} + // Working with Methods GLOBAL(method_getName) = function(/*Method*/ aMethod) From 93e7133076e42375af1ae16d85f3dc7fbcd54d1c Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Wed, 9 Apr 2014 16:31:41 +0200 Subject: [PATCH 100/278] Fixed: Got decorators working with the fast msgSend --- Objective-J/Debug.js | 37 +++++++++++++++++--- Objective-J/Runtime.js | 77 +++++++++++++++++++++--------------------- 2 files changed, 72 insertions(+), 42 deletions(-) diff --git a/Objective-J/Debug.js b/Objective-J/Debug.js index 58ec0d48f..b22493dc0 100644 --- a/Objective-J/Debug.js +++ b/Objective-J/Debug.js @@ -39,7 +39,12 @@ function objj_debug_message_format(aReceiver, aSelector) // save the original msgSend implementations so we can restore them later var objj_msgSend_original = objj_msgSend, - objj_msgSendSuper_original = objj_msgSendSuper; + objj_msgSendSuper_original = objj_msgSendSuper, + objj_msgSendFast_original = objj_msgSendFast, + objj_msgSendFast0_original = objj_msgSendFast0, + objj_msgSendFast1_original = objj_msgSendFast1, + objj_msgSendFast2_original = objj_msgSendFast2, + objj_msgSendFast3_original = objj_msgSendFast3; // decorator management functions @@ -48,6 +53,11 @@ GLOBAL(objj_msgSend_reset) = function() { objj_msgSend = objj_msgSend_original; objj_msgSendSuper = objj_msgSendSuper_original; + objj_msgSendFast = objj_msgSendFast_original; + objj_msgSendFast0 = objj_msgSendFast0_original; + objj_msgSendFast1 = objj_msgSendFast1_original; + objj_msgSendFast2 = objj_msgSendFast2_original; + objj_msgSendFast3 = objj_msgSendFast3_original; } // decorate both objj_msgSend and objj_msgSendSuper @@ -60,6 +70,25 @@ GLOBAL(objj_msgSend_decorate) = function() { objj_msgSend = arguments[index](objj_msgSend); objj_msgSendSuper = arguments[index](objj_msgSendSuper); + objj_msgSendFast = arguments[index](objj_msgSendFast); + objj_msgSendFast0 = arguments[index](objj_msgSendFast0); + objj_msgSendFast1 = arguments[index](objj_msgSendFast1); + objj_msgSendFast2 = arguments[index](objj_msgSendFast2); + objj_msgSendFast3 = arguments[index](objj_msgSendFast3); + } + + if (count) { + objj_enumerateClassesUsingBlock(function(aClass) { + // Has the class been initiated? This should be checked in another way + if (aClass.hasOwnProperty("objj_msgSend")) + { + aClass.objj_msgSend = objj_msgSendFast; + aClass.objj_msgSend0 = objj_msgSendFast0; + aClass.objj_msgSend1 = objj_msgSendFast1; + aClass.objj_msgSend2 = objj_msgSendFast2; + aClass.objj_msgSend3 = objj_msgSendFast3; + } + }); } } @@ -98,7 +127,7 @@ GLOBAL(objj_backtrace_decorator) = function(msgSend) objj_backtrace.push({ receiver: aReceiver, selector : aSelector }); try { - return msgSend.apply(NULL, arguments); + return msgSend.apply(this, arguments); } catch (anException) { @@ -128,7 +157,7 @@ GLOBAL(objj_supress_exceptions_decorator) = function(msgSend) try { - return msgSend.apply(NULL, arguments); + return msgSend.apply(this, arguments); } catch (anException) { @@ -150,7 +179,7 @@ GLOBAL(objj_typecheck_decorator) = function(msgSend) var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper); if (!aReceiver) - return msgSend.apply(NULL, arguments); + return msgSend.apply(this, arguments); var types = aReceiver.isa.method_dtable[aSelector].types; for (var i = 2; i < arguments.length; i++) diff --git a/Objective-J/Runtime.js b/Objective-J/Runtime.js index 295931e0c..4eb12cae8 100644 --- a/Objective-J/Runtime.js +++ b/Objective-J/Runtime.js @@ -374,7 +374,7 @@ GLOBAL(protocol_conformsToProtocol) = function(/*Protocol*/ p1, /*Protocol*/ p2) return false; } -var REGISTERED_PROTOCOLS = { }; +var REGISTERED_PROTOCOLS = Object.create(null); GLOBAL(objj_allocateProtocol) = function(/*String*/ aName) { @@ -454,16 +454,17 @@ var _class_initialize = function(/*Class*/ aClass) { SETINFO(meta, CLS_INITIALIZING); - aClass.objj_msgSend = objj_msgSendMany; - aClass.objj_msgSend0 = objj_msgSend0; - aClass.objj_msgSend1 = objj_msgSend1; - aClass.objj_msgSend2 = objj_msgSend2; - aClass.objj_msgSend3 = objj_msgSend3; - meta.objj_msgSend = objj_msgSendMany; - meta.objj_msgSend0 = objj_msgSend0; - meta.objj_msgSend1 = objj_msgSend1; - meta.objj_msgSend2 = objj_msgSend2; - meta.objj_msgSend3 = objj_msgSend3; + // We don't need to initialize any more. + aClass.objj_msgSend = objj_msgSendFast; + aClass.objj_msgSend0 = objj_msgSendFast0; + aClass.objj_msgSend1 = objj_msgSendFast1; + aClass.objj_msgSend2 = objj_msgSendFast2; + aClass.objj_msgSend3 = objj_msgSendFast3; + meta.objj_msgSend = objj_msgSendFast; + meta.objj_msgSend0 = objj_msgSendFast0; + meta.objj_msgSend1 = objj_msgSendFast1; + meta.objj_msgSend2 = objj_msgSendFast2; + meta.objj_msgSend3 = objj_msgSendFast3; objj_msgSend(aClass, "initialize"); @@ -544,7 +545,15 @@ GLOBAL(class_getMethodImplementation) = function(/*Class*/ aClass, /*SEL*/ aSele } // Adding Classes -var REGISTERED_CLASSES = { }; +var REGISTERED_CLASSES = Object.create(null); + +GLOBAL(objj_enumerateClassesUsingBlock) = function(/* function(aClass) */aBlock) +{ + for (var key in REGISTERED_CLASSES) + { + aBlock(REGISTERED_CLASSES[key]); + } +} GLOBAL(objj_allocateClassPair) = function(/*Class*/ superclass, /*String*/ aName) { @@ -581,25 +590,11 @@ GLOBAL(objj_allocateClassPair) = function(/*Class*/ superclass, /*String*/ aName classObject.info = CLS_CLASS; classObject._UID = objj_generateObjectUID(); - // It needs initialize - classObject.objj_msgSend = objj_msgSendManyInitialize; - classObject.objj_msgSend0 = objj_msgSend0Initialize; - classObject.objj_msgSend1 = objj_msgSend1Initialize; - classObject.objj_msgSend2 = objj_msgSend2Initialize; - classObject.objj_msgSend3 = objj_msgSend3Initialize; - metaClassObject.isa = rootClassObject.isa; metaClassObject.name = aName; metaClassObject.info = CLS_META; metaClassObject._UID = objj_generateObjectUID(); - // It needs initialize - metaClassObject.objj_msgSend = objj_msgSendManyInitialize; - metaClassObject.objj_msgSend0 = objj_msgSend0Initialize; - metaClassObject.objj_msgSend1 = objj_msgSend1Initialize; - metaClassObject.objj_msgSend2 = objj_msgSend2Initialize; - metaClassObject.objj_msgSend3 = objj_msgSend3Initialize; - return classObject; } @@ -618,8 +613,8 @@ GLOBAL(objj_resetRegisterClasses) = function() for (var key in REGISTERED_CLASSES) delete global[key]; - REGISTERED_CLASSES = {}; - REGISTERED_PROTOCOLS = {}; + REGISTERED_CLASSES = Object.create(null); + REGISTERED_PROTOCOLS = Object.create(null); resetBundle(); } @@ -813,7 +808,7 @@ GLOBAL(objj_msgSendSuper) = function(/*id*/ aSuper, /*SEL*/ aSelector) return implementation.apply(aSuper.receiver, arguments); } -var objj_msgSendMany = function(/*id*/ aReceiver, /*SEL*/ aSelector) +GLOBAL(objj_msgSendFast) = function(/*id*/ aReceiver, /*SEL*/ aSelector) { var method = this.method_dtable[aSelector], implementation = method ? method.method_imp : _objj_forward; @@ -834,13 +829,13 @@ var objj_msgSendMany = function(/*id*/ aReceiver, /*SEL*/ aSelector) #endif } -var objj_msgSendManyInitialize = function(/*id*/ aReceiver, /*SEL*/ aSelector) +var objj_msgSendFastInitialize = function(/*id*/ aReceiver, /*SEL*/ aSelector) { _class_initialize(this); return this.objj_msgSend.apply(this, arguments); } -var objj_msgSend0 = function(/*id*/ aReceiver, /*SEL*/ aSelector) +GLOBAL(objj_msgSendFast0) = function(/*id*/ aReceiver, /*SEL*/ aSelector) { var method = this.method_dtable[aSelector], implementation = method ? method.method_imp : _objj_forward; @@ -861,13 +856,13 @@ var objj_msgSend0 = function(/*id*/ aReceiver, /*SEL*/ aSelector) #endif } -var objj_msgSend0Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector) +var objj_msgSendFast0Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector) { _class_initialize(this); return this.objj_msgSend0(aReceiver, aSelector); } -var objj_msgSend1 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) +GLOBAL(objj_msgSendFast1) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) { var method = this.method_dtable[aSelector], implementation = method ? method.method_imp : _objj_forward; @@ -888,13 +883,13 @@ var objj_msgSend1 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) #endif } -var objj_msgSend1Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) +var objj_msgSendFast1Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) { _class_initialize(this); return this.objj_msgSend1(aReceiver, aSelector, arg0); } -var objj_msgSend2 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1) +GLOBAL(objj_msgSendFast2) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1) { var method = this.method_dtable[aSelector], implementation = method ? method.method_imp : _objj_forward; @@ -915,13 +910,13 @@ var objj_msgSend2 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1) #endif } -var objj_msgSend2Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1) +var objj_msgSendFast2Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1) { _class_initialize(this); return this.objj_msgSend2(aReceiver, aSelector, arg0, arg1); } -var objj_msgSend3 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, arg2) +GLOBAL(objj_msgSendFast3) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, arg2) { var method = this.method_dtable[aSelector], implementation = method ? method.method_imp : _objj_forward; @@ -942,7 +937,7 @@ var objj_msgSend3 = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, ar #endif } -var objj_msgSend3Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, arg2) +var objj_msgSendFast3Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, arg2) { _class_initialize(this); return this.objj_msgSend3(aReceiver, aSelector, arg0, arg1, arg2); @@ -1013,6 +1008,12 @@ objj_class.prototype.toString = objj_object.prototype.toString = function() return "[" + isa.name + " Object](-description not implemented)"; } +objj_class.prototype.objj_msgSend = objj_msgSendFastInitialize; +objj_class.prototype.objj_msgSend0 = objj_msgSendFast0Initialize; +objj_class.prototype.objj_msgSend1 = objj_msgSendFast1Initialize; +objj_class.prototype.objj_msgSend2 = objj_msgSendFast2Initialize; +objj_class.prototype.objj_msgSend3 = objj_msgSendFast3Initialize; + var SEL_description = sel_getUid("description"), SEL_forwardingTargetForSelector_ = sel_getUid("forwardingTargetForSelector:"), SEL_methodSignatureForSelector_ = sel_getUid("methodSignatureForSelector:"), From 0f5b36e9c5649fe4ff5c1c8d02c38451a75e976f Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Wed, 9 Apr 2014 17:02:28 +0200 Subject: [PATCH 101/278] Fixed: Code generated in test cases is corrected for the fast msgSend function --- .../Preprocessor/OutputTests/Messages/colon-selector.js | 2 +- .../OutputTests/Messages/keyword-in-selector.js | 2 +- .../OutputTests/Messages/multiple-parameters.js | 2 +- .../Preprocessor/OutputTests/Messages/no-parameters.js | 2 +- .../Preprocessor/OutputTests/Messages/one-parameter.js | 2 +- .../OutputTests/Messages/ternary-operator-argument.js | 6 +++--- .../Preprocessor/OutputTests/Misc/parenthesis-return.js | 5 +++-- 7 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector.js index aff484c53..07ce0e2ee 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector.js @@ -1,2 +1,2 @@ -objj_msgSend(object, ":", argument); +((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,":",argument)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector.js index bb6a71ee7..35a123ac4 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector.js @@ -1 +1 @@ -objj_msgSend(object,"for:in:nil:",a,b,nil); \ No newline at end of file +((___r1=object),___r1==null?null:___r1.isa.objj_msgSend3(___r1,"for:in:nil:",a,b,nil)); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters.js index 1f88bb343..bd35709fe 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters.js @@ -1,2 +1,2 @@ -objj_msgSend(object, "label:label2:label3:label4:", argument, argument2, argument3, argument4); +((___r1=object),___r1==null?null:___r1.isa.objj_msgSend(___r1,"label:label2:label3:label4:",argument,argument2,argument3,argument4)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js index e66a87e46..b96b0c15d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js @@ -1,2 +1,2 @@ -objj_msgSend(object, "message"); +((___r1=object),___r1==null?null:___r1.isa.objj_msgSend0(___r1,"message")); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js index 99386a35c..a69f22f5e 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js @@ -1,2 +1,2 @@ -objj_msgSend(object, "label:", argument); +((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,"label:",argument)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument.js index bdd50a691..f5d8ca3e7 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument.js @@ -1,4 +1,4 @@ -objj_msgSend(object, "label:", condition ? true : false); -objj_msgSend(object, "label:", condition ? true : false); -objj_msgSend(object, "label:", condition ? true : false); +((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,"label:",condition?true:false)); +((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,"label:",condition?true:false)); +((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,"label:",condition?true:false)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return.js b/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return.js index 6664877bc..d09cbb0de 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return.js @@ -1,3 +1,4 @@ x=function(){ -return objj_msgSend(someIval,"someMethod"); -} \ No newline at end of file +return ((_1=someIval),_1==null?null:_1.isa.objj_msgSend0(_1,"someMethod")); +var _1; +}; \ No newline at end of file From 0efb7e67c9d66e0c8eca58985c198d44a3d16582 Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Thu, 10 Apr 2014 11:03:49 +0200 Subject: [PATCH 102/278] Fixed: Use new fast msgSend function for some foundation classes --- Foundation/CPArray/CPMutableArray.j | 2 +- Foundation/CPArray/_CPArray.j | 12 +++++++----- Foundation/CPArray/_CPJavaScriptArray.j | 6 ++++-- Foundation/CPKeyValueCoding.j | 18 +++++++++--------- Foundation/CPObject.j | 6 +++--- Foundation/CPProxy.j | 6 +++--- Objective-J/Runtime.js | 16 ++++++++++------ 7 files changed, 37 insertions(+), 29 deletions(-) diff --git a/Foundation/CPArray/CPMutableArray.j b/Foundation/CPArray/CPMutableArray.j index ec4a7769c..3815919e2 100644 --- a/Foundation/CPArray/CPMutableArray.j +++ b/Foundation/CPArray/CPMutableArray.j @@ -530,7 +530,7 @@ var sortArrayUsingJSDescriptors = function(a, d) if (value1 === nil || value1 === cpNull) o = value2 === nil || value2 === cpNull ? CPOrderedSame : CPOrderedAscending; else - o = value2 === nil || value2 === cpNull ? CPOrderedDescending : objj_msgSend(value1, dd.s, value2); + o = value2 === nil || value2 === cpNull ? CPOrderedDescending : value1.isa.objj_msgSend1(value1, dd.s, value2); if (o && !dd.a) o = -o; diff --git a/Foundation/CPArray/_CPArray.j b/Foundation/CPArray/_CPArray.j index 093023904..ba2e0cd9f 100755 --- a/Foundation/CPArray/_CPArray.j +++ b/Foundation/CPArray/_CPArray.j @@ -608,9 +608,11 @@ var concat = Array.prototype.concat, } } - else + else { + var anIsa = self.isa; for (; index < count; ++index) - objj_msgSend([self objectAtIndex:index], aSelector); + anIsa.objj_msgSend0([self objectAtIndex:index], aSelector); + } } - (void)enumerateObjectsUsingBlock:(Function /*(id anObject, int idx, @ref BOOL stop)*/)aFunction @@ -748,7 +750,7 @@ var concat = Array.prototype.concat, // passed in is an array, we end up with its contents added instead of itself. push.call(argumentArray, anObject); - return objj_msgSend([self class], @selector(arrayWithArray:), argumentArray); + return [[self class] arrayWithArray:argumentArray]; } /*! @@ -763,7 +765,7 @@ var concat = Array.prototype.concat, var anArray = anArray.isa === _CPJavaScriptArray ? anArray : [anArray _javaScriptArrayCopy], argumentArray = concat.call([self _javaScriptArrayCopy], anArray); - return objj_msgSend([self class], @selector(arrayWithArray:), argumentArray); + return [[self class] arrayWithArray:argumentArray]; } /* @@ -801,7 +803,7 @@ var concat = Array.prototype.concat, for (; index < count; ++index) push.call(argumentArray, [self objectAtIndex:index]); - return objj_msgSend([self class], @selector(arrayWithArray:), argumentArray); + return [[self class] arrayWithArray:argumentArray]; } // Sorting arrays diff --git a/Foundation/CPArray/_CPJavaScriptArray.j b/Foundation/CPArray/_CPJavaScriptArray.j index c3765ad2e..5589e75b0 100644 --- a/Foundation/CPArray/_CPJavaScriptArray.j +++ b/Foundation/CPArray/_CPJavaScriptArray.j @@ -196,8 +196,10 @@ var concat = Array.prototype.concat, } else - for (; index < count; ++index) - objj_msgSend(self[index], aSelector); + for (; index < count; ++index) { + var receiver = self[index]; + receiver == nil ? nil : receiver.isa.objj_msgSend0(receiver, aSelector); + } } - (CPArray)arrayByAddingObject:(id)anObject diff --git a/Foundation/CPKeyValueCoding.j b/Foundation/CPKeyValueCoding.j index fa86c5f9c..b67d78b88 100644 --- a/Foundation/CPKeyValueCoding.j +++ b/Foundation/CPKeyValueCoding.j @@ -108,7 +108,7 @@ var CPObjectAccessorsForClassKey = @"$CPObjectAccessorsForClassKey", switch (accessor[0]) { case 0: - return objj_msgSend(self, accessor[1]); + return self.isa.objj_msgSend0(self, accessor[1]); case 1: // FIXME: We shouldn't be creating a new one every time. @@ -226,7 +226,7 @@ var CPObjectAccessorsForClassKey = @"$CPObjectAccessorsForClassKey", switch (modifier[0]) { - case 0: return objj_msgSend(self, modifier[1], aValue); + case 0: return self.isa.objj_msgSend1(self, modifier[1], aValue); case 1: if ([theClass accessInstanceVariablesDirectly]) { @@ -341,21 +341,21 @@ var CPObjectAccessorsForClassKey = @"$CPObjectAccessorsForClassKey", - (CPUInteger)count { - return objj_msgSend(_target, _countOfSelector); + return _target == nil ? nil : _target.isa.objj_msgSend0(_target, _countOfSelector); } - (id)objectAtIndex:(CPUInteger)anIndex { if (_objectInAtIndexSelector) - return objj_msgSend(_target, _objectInAtIndexSelector, anIndex); + return _target == nil ? nil : _target.isa.objj_msgSend1(_target, _objectInAtIndexSelector, anIndex); - return objj_msgSend(_target, _atIndexesSelector, [CPIndexSet indexSetWithIndex:anIndex])[0]; + return _target == nil ? nil : _target.isa.objj_msgSend1(_target, _atIndexesSelector, [CPIndexSet indexSetWithIndex:anIndex])[0]; } - (CPArray)objectsAtIndexes:(CPIndexSet)indexes { if (_atIndexesSelector) - return objj_msgSend(_target, _atIndexesSelector, indexes); + return _target == nil ? nil : _target.isa.objj_msgSend1(_target, _atIndexesSelector, indexes); return [super objectsAtIndexes:indexes]; } @@ -408,17 +408,17 @@ var CPObjectAccessorsForClassKey = @"$CPObjectAccessorsForClassKey", - (CPUInteger)count { - return objj_msgSend(_target, _countOfSelector); + return _target == nil ? nil : _target.isa.objj_msgSend0(_target, _countOfSelector); } - (CPEnumerator)objectEnumerator { - return objj_msgSend(_target, _enumeratorOfSelector); + return _target == nil ? nil : _target.isa.objj_msgSend0(_target, _enumeratorOfSelector); } - (id)member:(id)anObject { - return objj_msgSend(_target, _memberOfSelector, anObject); + return _target == nil ? nil : _target.isa.objj_msgSend1(_target, _memberOfSelector, anObject); } - (Class)classForCoder diff --git a/Foundation/CPObject.j b/Foundation/CPObject.j index ae5a39ac1..912aafa09 100644 --- a/Foundation/CPObject.j +++ b/Foundation/CPObject.j @@ -364,7 +364,7 @@ CPLog(@"Got some class: %@", inst); */ - (id)performSelector:(SEL)aSelector { - return objj_msgSend(self, aSelector); + return self.isa.objj_msgSend0(self, aSelector); } /*! @@ -375,7 +375,7 @@ CPLog(@"Got some class: %@", inst); */ - (id)performSelector:(SEL)aSelector withObject:(id)anObject { - return objj_msgSend(self, aSelector, anObject); + return self.isa.objj_msgSend1(self, aSelector, anObject); } /*! @@ -387,7 +387,7 @@ CPLog(@"Got some class: %@", inst); */ - (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject { - return objj_msgSend(self, aSelector, anObject, anotherObject); + return self.isa.objj_msgSend2(self, aSelector, anObject, anotherObject); } /*! diff --git a/Foundation/CPProxy.j b/Foundation/CPProxy.j index ceeac578d..2234a6f39 100644 --- a/Foundation/CPProxy.j +++ b/Foundation/CPProxy.j @@ -106,17 +106,17 @@ - (id)performSelector:(SEL)aSelector { - return objj_msgSend(self, aSelector); + return self.isa.objj_msgSend0(self, aSelector); } - (id)performSelector:(SEL)aSelector withObject:(id)anObject { - return objj_msgSend(self, aSelector, anObject); + return self.isa.objj_msgSend1(self, aSelector, anObject); } - (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject { - return objj_msgSend(self, aSelector, anObject, anotherObject); + return self.isa.objj_msgSend2(self, aSelector, anObject, anotherObject); } - (BOOL)isProxy diff --git a/Objective-J/Runtime.js b/Objective-J/Runtime.js index 4eb12cae8..75a43bf78 100644 --- a/Objective-J/Runtime.js +++ b/Objective-J/Runtime.js @@ -466,7 +466,7 @@ var _class_initialize = function(/*Class*/ aClass) meta.objj_msgSend2 = objj_msgSendFast2; meta.objj_msgSend3 = objj_msgSendFast3; - objj_msgSend(aClass, "initialize"); + meta.objj_msgSend0(aClass, "initialize"); CHANGEINFO(meta, CLS_INITIALIZED, CLS_INITIALIZING); } @@ -505,16 +505,20 @@ var _objj_forward = function(self, _cmd) if (invocationClass) { - var invocation = objj_msgSend(invocationClass, SEL_invocationWithMethodSignature_, signature), + var invocation = invocationClass.isa.objj_msgSend1(invocationClass, SEL_invocationWithMethodSignature_, signature), index = 0, count = arguments.length; - for (; index < count; ++index) - objj_msgSend(invocation, SEL_setArgument_atIndex_, arguments[index], index); + if (invocation != null) { + var invocationIsa = invocation.isa; + + for (; index < count; ++index) + invocationIsa.objj_msgSend2(invocation, SEL_setArgument_atIndex_, arguments[index], index); + } forwardInvocationImplementation.method_imp.call(this, self, SEL_forwardInvocation_, invocation); - return objj_msgSend(invocation, SEL_returnValue); + return invocation == null ? null : invocationIsa.objj_msgSend0(invocation, SEL_returnValue); } } } @@ -1000,7 +1004,7 @@ objj_class.prototype.toString = objj_object.prototype.toString = function() var isa = this.isa; if (class_getInstanceMethod(isa, SEL_description)) - return objj_msgSend(this, SEL_description); + return isa.objj_msgSend0(this, SEL_description); if (class_isMetaClass(isa)) return this.name; From c23292db8a3b24ffe4900dd50338478f387e9c44 Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Thu, 10 Apr 2014 18:27:19 +0200 Subject: [PATCH 103/278] Fixed: Optimized msgSend code when receiver is an identifier. If the receiver is an identifier and not an ivar that needs 'self.' infront there is no need to assign it to a temporary variable. Also if the identifier is 'self' there we assume it is not nil. --- Objective-J/ObjJAcornCompiler.js | 70 ++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index ed9cd62c7..c2e1ddf3c 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -2125,10 +2125,11 @@ MethodDeclarationStatement: function(node, st, c) { MessageSendExpression: function(node, st, c) { var compiler = st.compiler, generate = compiler.generate, - buffer = compiler.jsBuffer; + buffer = compiler.jsBuffer, + nodeObject = node.object; if (!generate) { buffer.concat(compiler.source.substring(compiler.lastPos, node.start)); - compiler.lastPos = node.object ? node.object.start : node.arguments.length ? node.arguments[0].start : node.end; + compiler.lastPos = nodeObject ? nodeObject.start : node.arguments.length ? node.arguments[0].start : node.end; } if (node.superObject) { @@ -2138,20 +2139,38 @@ MessageSendExpression: function(node, st, c) { } else { - if (!st.receiverLevel) st.receiverLevel = 0; - if (!generate) buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression. - buffer.concat("((___r"); - buffer.concat(++st.receiverLevel + ""); - buffer.concat(" = "); - c(node.object, st, "Expression"); - buffer.concat("), ___r"); - buffer.concat(st.receiverLevel + ""); - buffer.concat(" == null ? null : ___r"); - buffer.concat(st.receiverLevel + ""); - buffer.concat(".isa.objj_msgSend"); - if (!generate) buffer.concat(compiler.source.substring(compiler.lastPos, node.object.end)); - if (!(st.maxReceiverLevel >= st.receiverLevel)) - st.maxReceiverLevel = st.receiverLevel; + if (generate) { + // If the recevier is not an identifier or an ivar that should have 'self.' infront we need to assign it to a temporary variable + // If it is 'self' we assume it will never be nil and remove that test + var receiverIsIdentifier = nodeObject.type === "Identifier" && !(st.currentMethodType() === "-" && compiler.getIvarForClass(nodeObject.name, st) && !st.getLvar(nodeObject.name, true)), + receiverIsNotSelf = !receiverIsIdentifier || nodeObject.name !== "self"; + + if (receiverIsIdentifier) { + if (receiverIsNotSelf) { + buffer.concat("("); + c(nodeObject, st, "Expression"); + buffer.concat(" == null ? null : "); + } + c(nodeObject, st, "Expression"); + } else { + if (!st.receiverLevel) st.receiverLevel = 0; + buffer.concat("((___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = "); + c(nodeObject, st, "Expression"); + buffer.concat("), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : ___r"); + buffer.concat(st.receiverLevel + ""); + if (!(st.maxReceiverLevel >= st.receiverLevel)) + st.maxReceiverLevel = st.receiverLevel; + } + buffer.concat(".isa.objj_msgSend"); + } else { + buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression. + buffer.concat("objj_msgSend("); + buffer.concat(compiler.source.substring(compiler.lastPos, nodeObject.end)); + } } var selectors = node.selectors, @@ -2160,7 +2179,7 @@ MessageSendExpression: function(node, st, c) { firstSelector = selectors[0], selector = firstSelector ? firstSelector.name : ""; // There is always at least one selector - if (!node.superObject) { + if (generate && !node.superObject) { var totalNoOfParameters = argumentsLength; if (node.parameters) @@ -2169,8 +2188,13 @@ MessageSendExpression: function(node, st, c) { buffer.concat("" + totalNoOfParameters); } - buffer.concat("(___r"); - buffer.concat(st.receiverLevel + ""); + if (receiverIsIdentifier) { + buffer.concat("("); + c(nodeObject, st, "Expression"); + } else { + buffer.concat("(___r"); + buffer.concat(st.receiverLevel + ""); + } } // Put together the selector. Maybe this should be done in the parser... @@ -2213,9 +2237,11 @@ MessageSendExpression: function(node, st, c) { } } - if (!node.superObject) { - buffer.concat(")"); - st.receiverLevel--; + if (generate && !node.superObject) { + if (receiverIsNotSelf) + buffer.concat(")"); + if (!receiverIsIdentifier) + st.receiverLevel--; } buffer.concat(")"); From c4ac7cf375df4f4c0eda458c3cc444c2bd3424ed Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Fri, 11 Apr 2014 10:41:47 +0200 Subject: [PATCH 104/278] Fixed: Remove use of hard coded call of objj_msgSend function --- AppKit/Cib/CPCibControlConnector.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/Cib/CPCibControlConnector.j b/AppKit/Cib/CPCibControlConnector.j index ddb64d8c3..70b36e273 100644 --- a/AppKit/Cib/CPCibControlConnector.j +++ b/AppKit/Cib/CPCibControlConnector.j @@ -51,7 +51,7 @@ // Not being able to set the action is a fatal error. if ([_source respondsToSelector:@selector(setAction:)]) - objj_msgSend(_source, @selector(setAction:), selector); + [_source setAction:selector]; else [CPException @@ -60,7 +60,7 @@ // Not being able to set the target is a fatal error. if ([_source respondsToSelector:@selector(setTarget:)]) - objj_msgSend(_source, @selector(setTarget:), _destination); + [_source setTarget:_destination]; else [CPException From b1507952df212a929b6c283558a26a5b382143dc Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Fri, 11 Apr 2014 15:41:32 +0200 Subject: [PATCH 105/278] Fixed: Checks if 'self' is nil only if self has a chance to be changed when sending messages --- Objective-J/ObjJAcornCompiler.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index c2e1ddf3c..aba266872 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -1400,9 +1400,18 @@ AssignmentExpression: function(node, st, c) { return; } - var saveAssignment = st.assignment; + var saveAssignment = st.assignment, + nodeLeft = node.left; st.assignment = true; - (generate && nodePrecedence(node, node.left) ? surroundExpression(c) : c)(node.left, st, "Expression"); + if (nodeLeft.type === "Identifier" && nodeLeft.name === "self") { + var lVar = st.getLvar("self", true); + if (lVar) { + var lVarScope = lVar.scope; + if (lVarScope) + lVarScope.assignmentToSelf = true; + } + } + (generate && nodePrecedence(node, nodeLeft) ? surroundExpression(c) : c)(nodeLeft, st, "Expression"); if (generate) { buffer.concat(" "); buffer.concat(node.operator); @@ -1410,8 +1419,8 @@ AssignmentExpression: function(node, st, c) { } st.assignment = saveAssignment; (generate && nodePrecedence(node, node.right, true) ? surroundExpression(c) : c)(node.right, st, "Expression"); - if (st.isRootScope() && node.left.type === "Identifier" && !st.getLvar(node.left.name)) - st.vars[node.left.name] = {type: "global", node: node.left}; + if (st.isRootScope() && nodeLeft.type === "Identifier" && !st.getLvar(nodeLeft.name)) + st.vars[nodeLeft.name] = {type: "global", node: nodeLeft}; }, ConditionalExpression: function(node, st, c) { var compiler = st.compiler, @@ -2026,6 +2035,9 @@ MethodDeclarationStatement: function(node, st, c) { compiler.jsBuffer.concat("(self, _cmd"); methodScope.methodType = node.methodtype; + methodScope.vars["self"] = {type: "method base", scope: methodScope}; + methodScope.vars["_cmd"] = {type: "method base", scope: methodScope}; + if (nodeArguments) for (var i = 0; i < nodeArguments.length; i++) { var argument = nodeArguments[i], @@ -2143,7 +2155,8 @@ MessageSendExpression: function(node, st, c) { // If the recevier is not an identifier or an ivar that should have 'self.' infront we need to assign it to a temporary variable // If it is 'self' we assume it will never be nil and remove that test var receiverIsIdentifier = nodeObject.type === "Identifier" && !(st.currentMethodType() === "-" && compiler.getIvarForClass(nodeObject.name, st) && !st.getLvar(nodeObject.name, true)), - receiverIsNotSelf = !receiverIsIdentifier || nodeObject.name !== "self"; + selfLvar, + receiverIsNotSelf = !receiverIsIdentifier || nodeObject.name !== "self" || !(selfLvar = st.getLvar("self", true)) || !selfLvar.scope || selfLvar.scope.assignmentToSelf; if (receiverIsIdentifier) { if (receiverIsNotSelf) { From 81e4b6b37bf9fa928c7e8933194333629488bdd6 Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Mon, 14 Apr 2014 16:37:21 +0200 Subject: [PATCH 106/278] Fixed: If the function 'eval' is called it might have altered 'self' and from here on we check if 'self' is null before 'objj_msgSend' is called with 'self' as receiver --- Objective-J/ObjJAcornCompiler.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index aba266872..43f046e1a 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -1449,8 +1449,22 @@ NewExpression: function(node, st, c) { }, CallExpression: function(node, st, c) { var compiler = st.compiler, - generate = compiler.generate; - (generate && nodePrecedence(node, node.callee) ? surroundExpression(c) : c)(node.callee, st, "Expression"); + generate = compiler.generate, + callee = node.callee; + + // If call to function 'eval' we assume that 'self' can be altered and from this point + // we check if 'self' is null before 'objj_msgSend' is called with 'self' as receiver. + if (callee.type === "Identifier" && callee.name === "eval") { + var selfLvar = st.getLvar("self", true); + if (selfLvar) { + var selfScope = selfLvar.scope; + if (selfScope) { + selfScope.assignmentToSelf = true; + } + } + } + + (generate && nodePrecedence(node, callee) ? surroundExpression(c) : c)(callee, st, "Expression"); if (generate) compiler.jsBuffer.concat("("); if (node.arguments) { for (var i = 0; i < node.arguments.length; ++i) { From ab5674aa4e2b42e89d1867fb4988d22bfd6d69eb Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Mon, 14 Apr 2014 16:38:34 +0200 Subject: [PATCH 107/278] Fixed: Send message test cases now work. Also added a test case for send message with 'self' as receiver --- .../Preprocessor/OutputTests/Messages/colon-selector.js | 2 +- .../OutputTests/Messages/keyword-in-selector.js | 2 +- .../OutputTests/Messages/multiple-parameters.js | 2 +- .../Preprocessor/OutputTests/Messages/no-parameters.js | 2 +- .../Preprocessor/OutputTests/Messages/one-parameter.js | 2 +- .../OutputTests/Messages/ternary-operator-argument.js | 6 +++--- .../Preprocessor/OutputTests/Misc/parenthesis-return.js | 5 ++--- Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j | 1 + 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector.js index 07ce0e2ee..1104fd603 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector.js @@ -1,2 +1,2 @@ -((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,":",argument)); +(object==null?null:object.isa.objj_msgSend1(object,":",argument)); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector.js index 35a123ac4..8e4bc3bda 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector.js @@ -1 +1 @@ -((___r1=object),___r1==null?null:___r1.isa.objj_msgSend3(___r1,"for:in:nil:",a,b,nil)); \ No newline at end of file +(object==null?null:object.isa.objj_msgSend3(object,"for:in:nil:",a,b,nil)); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters.js index bd35709fe..4c55b7aef 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters.js @@ -1,2 +1,2 @@ -((___r1=object),___r1==null?null:___r1.isa.objj_msgSend(___r1,"label:label2:label3:label4:",argument,argument2,argument3,argument4)); +(object==null?null:object.isa.objj_msgSend(object,"label:label2:label3:label4:",argument,argument2,argument3,argument4)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js index b96b0c15d..58a5cae2a 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js @@ -1,2 +1,2 @@ -((___r1=object),___r1==null?null:___r1.isa.objj_msgSend0(___r1,"message")); +(object==null?null:object.isa.objj_msgSend0(object,"message")); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js index a69f22f5e..99a3c5f0f 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js @@ -1,2 +1,2 @@ -((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,"label:",argument)); +(object==null?null:object.isa.objj_msgSend1(object,"label:",argument)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument.js index f5d8ca3e7..f879e332c 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument.js @@ -1,4 +1,4 @@ -((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,"label:",condition?true:false)); -((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,"label:",condition?true:false)); -((___r1=object),___r1==null?null:___r1.isa.objj_msgSend1(___r1,"label:",condition?true:false)); +(object==null?null:object.isa.objj_msgSend1(object,"label:",condition?true:false)); +(object==null?null:object.isa.objj_msgSend1(object,"label:",condition?true:false)); +(object==null?null:object.isa.objj_msgSend1(object,"label:",condition?true:false)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return.js b/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return.js index d09cbb0de..4b3da9ec7 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return.js @@ -1,4 +1,3 @@ x=function(){ -return ((_1=someIval),_1==null?null:_1.isa.objj_msgSend0(_1,"someMethod")); -var _1; -}; \ No newline at end of file +return (someIval==null?null:someIval.isa.objj_msgSend0(someIval,"someMethod")); +}; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j index 302ce7823..776b75d09 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j @@ -13,6 +13,7 @@ var FILENAMES = [ "Messages/ternary-operator-argument", "Messages/keyword-in-selector", "Messages/colon-selector", + "Messages/self-as-receiver", "Misc/parenthesis-return", "Misc/preprocess-if-directives", From 88d2ed9e935d5a6a0c71ac0752c855ed89cf41c1 Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Mon, 14 Apr 2014 18:39:34 +0200 Subject: [PATCH 108/278] Fixed: Forgot to commit the files for the new test case --- .../OutputTests/Messages/self-as-receiver.j | 15 +++++++++++++++ .../OutputTests/Messages/self-as-receiver.js | 11 +++++++++++ 2 files changed, 26 insertions(+) create mode 100644 Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.j create mode 100644 Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.js diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.j b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.j new file mode 100644 index 000000000..1d339fcc3 --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.j @@ -0,0 +1,15 @@ +@implementation MyClass + +- (id)mySelector { + [self init]; + self = nil; + [self init]; +} + +- (id)mySelector2 { + [self init]; + eval("self = null;"); + [self init]; +} + +@end diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.js new file mode 100644 index 000000000..561ad60cb --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.js @@ -0,0 +1,11 @@ +var the_class=objj_allocateClassPair(Nil,"MyClass"),meta_class=the_class.isa; +objj_registerClassPair(the_class); +class_addMethods(the_class,[new objj_method(sel_getUid("mySelector"),function $MyClass__mySelector(_1,_2){ +_1.isa.objj_msgSend0(_1,"init"); +_1=nil; +(_1==null?null:_1.isa.objj_msgSend0(_1,"init")); +},["id"]),new objj_method(sel_getUid("mySelector2"),function $MyClass__mySelector2(_3,_4){ +_3.isa.objj_msgSend0(_3,"init"); +eval("self = null;"); +(_3==null?null:_3.isa.objj_msgSend0(_3,"init")); +},["id"])]); \ No newline at end of file From 3e187df75b784b7167f1ffae2197dde4a873c558 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 14 Apr 2014 15:19:49 -0700 Subject: [PATCH 109/278] FIXED: CPPopover transitionend not correctly called in random cases with Chrome 34 There are some weird race conditions happening in Chrome 34 regarding the transitionend event. Setting the timeout to 10ms is not noticealble for the user, and seems to fix the issue. --- AppKit/_CPPopoverWindow.j | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 2f7f5b4e4..cc80bc292 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -481,7 +481,9 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, #if PLATFORM(DOM) _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), orderFrontTransitionFunction, YES); #endif - }, 0); + }, 10); // There are some weird race conditions happening in Chrome 34. If this is set to 0 + // the transitionend is randomly not called correctly. Setting the timeout to 10ms is not noticealble for the + // user, and seems to fix the issue. } else { From e8e10d42246245d604975a7e837e59bb08884530 Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Tue, 15 Apr 2014 13:52:41 +0200 Subject: [PATCH 110/278] Fixed: If receiver in the function objj_msgSend is a class we don't need to check if it is nil as a class can never be nil without the load has already failed. --- Objective-J/ObjJAcornCompiler.js | 12 +++++++++++- .../OutputTests/Messages/no-parameters.j | 2 +- .../OutputTests/Messages/no-parameters.js | 4 ++-- .../OutputTests/Messages/one-parameter.j | 2 +- .../OutputTests/Messages/one-parameter.js | 4 ++-- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index 43f046e1a..83f61621b 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -2170,9 +2170,18 @@ MessageSendExpression: function(node, st, c) { // If it is 'self' we assume it will never be nil and remove that test var receiverIsIdentifier = nodeObject.type === "Identifier" && !(st.currentMethodType() === "-" && compiler.getIvarForClass(nodeObject.name, st) && !st.getLvar(nodeObject.name, true)), selfLvar, - receiverIsNotSelf = !receiverIsIdentifier || nodeObject.name !== "self" || !(selfLvar = st.getLvar("self", true)) || !selfLvar.scope || selfLvar.scope.assignmentToSelf; + receiverIsNotSelf; if (receiverIsIdentifier) { + var name = nodeObject.name, + selfLvar = st.getLvar(name); + + if (name === "self") { + receiverIsNotSelf = !selfLvar || !selfLvar.scope || selfLvar.scope.assignmentToSelf; + } else { + receiverIsNotSelf = !!selfLvar || !compiler.getClassDef(name); + } + if (receiverIsNotSelf) { buffer.concat("("); c(nodeObject, st, "Expression"); @@ -2180,6 +2189,7 @@ MessageSendExpression: function(node, st, c) { } c(nodeObject, st, "Expression"); } else { + receiverIsNotSelf = true; if (!st.receiverLevel) st.receiverLevel = 0; buffer.concat("((___r"); buffer.concat(++st.receiverLevel + ""); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.j b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.j index 3292fea80..dc4f82b03 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.j @@ -1,2 +1,2 @@ - +[CPArray new]; [object message]; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js index 58a5cae2a..023c09bdf 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters.js @@ -1,2 +1,2 @@ - -(object==null?null:object.isa.objj_msgSend0(object,"message")); +CPArray.isa.objj_msgSend0(CPArray,"new"); +(object==null?null:object.isa.objj_msgSend0(object,"message")); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.j b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.j index dee678fde..8e01d2bab 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.j @@ -1,2 +1,2 @@ - +[CPArray arrayWithArray:[]]; [object label:argument]; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js index 99a3c5f0f..b8795333c 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter.js @@ -1,2 +1,2 @@ - -(object==null?null:object.isa.objj_msgSend1(object,"label:",argument)); +CPArray.isa.objj_msgSend1(CPArray,"arrayWithArray:",[]); +(object==null?null:object.isa.objj_msgSend1(object,"label:",argument)); \ No newline at end of file From b5f950100168bccf2b0549fbf8484993934f223d Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 16 Apr 2014 23:01:17 +0100 Subject: [PATCH 111/278] Test: CPObject isSubclassOfClass. --- Tests/Foundation/CPObjectTest.j | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Tests/Foundation/CPObjectTest.j b/Tests/Foundation/CPObjectTest.j index c10293124..f333ab2c5 100644 --- a/Tests/Foundation/CPObjectTest.j +++ b/Tests/Foundation/CPObjectTest.j @@ -4,6 +4,16 @@ { } +- (void)testCPObjectIsSubclassOfClassCPObjectShouldBeTrue +{ + [self assertTrue:[CPObject isSubclassOfClass:[CPObject class]]]; +} + +- (void)testIsSubclassOfClassWithNonSubclassShouldBeFalse +{ + [self assertFalse:[CPObject isSubclassOfClass:[SuperReceiver class]]]; +} + - (void)testImplementsSelector { var receiver = [[Receiver alloc] init]; From cd19fc7c81980aa2204b5962df6ca2cb69ab8aef Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 16 Apr 2014 16:49:40 -0700 Subject: [PATCH 112/278] New: capp_lint is installed with jake install Previously we had to install capp_lint separately from Cappuccino. Now capp_lint will be installed with Cappuccino. Before capp_lint was installed in /urs/local/bin/, now it is in /usr/local/narwhal/bin/. --- Tools/Jakefile | 2 +- Tools/capp_lint/Jakefile | 12 ++++++++++++ Tools/capp_lint/install.sh | 6 +++--- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 Tools/capp_lint/Jakefile diff --git a/Tools/Jakefile b/Tools/Jakefile index 40a8a1fb9..d57ab7c6c 100644 --- a/Tools/Jakefile +++ b/Tools/Jakefile @@ -2,6 +2,6 @@ require("../common.jake"); // nib2cib uses fontinfo and imagesize and capp uses nib2cib -subtasks(["fontinfo", "imagesize", "nib2cib", "capp", "dump_theme", "NativeHost", "XcodeCapp"], ["build"/*, "clean", "clobber"*/]); +subtasks(["fontinfo", "imagesize", "nib2cib", "capp", "capp_lint", "dump_theme", "NativeHost", "XcodeCapp"], ["build"/*, "clean", "clobber"*/]); subtasks(["fontinfo", "imagesize"], ["clean", "clobber"]); diff --git a/Tools/capp_lint/Jakefile b/Tools/capp_lint/Jakefile new file mode 100644 index 000000000..fd6dd3750 --- /dev/null +++ b/Tools/capp_lint/Jakefile @@ -0,0 +1,12 @@ + +require ("../../common.jake"); + +var OS = require("os"), + task = require("jake").task; + +task ("build", function() +{ + sudo(["./install.sh"]); +}); + +task ("default", ["build"]); \ No newline at end of file diff --git a/Tools/capp_lint/install.sh b/Tools/capp_lint/install.sh index 40a90bb50..847b66630 100755 --- a/Tools/capp_lint/install.sh +++ b/Tools/capp_lint/install.sh @@ -2,11 +2,11 @@ chmod +x capp_lint -if [[ ! -d /usr/local/bin ]]; then - sudo mkdir -p /usr/local/bin +if [[ ! -d /usr/local/narwhal/bin ]]; then + sudo mkdir -p /usr/local/narwhal/bin fi -sudo cp capp_lint /usr/local/bin +sudo cp capp_lint /usr/local/narwhal/bin if [[ ! -d /usr/local/share/man/man1 ]]; then sudo mkdir -p /usr/local/share/man/man1 From 973940fcb2348396a0f7d28002657c18cf593d93 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 17 Apr 2014 18:26:25 -0700 Subject: [PATCH 113/278] New: Integration of capp_lint in xCodeCapp Now capp_lint is fully integrated in xCodeCapp. You can check the entire project with the menuitem of the app. There is an option in the preference to make a capp_lint (on the file who was just processed) each time a file is processed by xCodeCapp. Error of capp_lint are reported in the error tableView. The messages displayed the following informations : path of the file, line and error. --- Tools/XcodeCapp/XcodeCapp/AppController.m | 3 +- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 1 + Tools/XcodeCapp/XcodeCapp/UserDefaults.m | 1 + Tools/XcodeCapp/XcodeCapp/XcodeCapp.h | 1 + Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 68 +- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 3072 +++-------------- 6 files changed, 567 insertions(+), 2579 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 8cbb1689b..ab6fcd38c 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -151,7 +151,8 @@ AppController *SharedAppControllerInstance = nil; kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], kDefaultAutoOpenXcodeProject: @YES, kDefaultShowProcessingNotices: @YES, - kDefaultUseSymlinkWhenCreatingProject: @YES + kDefaultUseSymlinkWhenCreatingProject: @YES, + KDefaultUsesCappLintForEveryNotifications: @NO }; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index 7e7726099..be194584b 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -27,5 +27,6 @@ extern NSString * const kDefaultLogLevel; extern NSString * const kDefaultAutoOpenXcodeProject; extern NSString * const kDefaultShowProcessingNotices; extern NSString * const kDefaultUseSymlinkWhenCreatingProject; +extern NSString * const KDefaultUsesCappLintForEveryNotifications; #endif diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index 4701d7052..2be6fcf22 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -25,3 +25,4 @@ NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; NSString * const kDefaultShowProcessingNotices = @"showProcessingNotices"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; +NSString * const KDefaultUsesCappLintForEveryNotifications = @"usesCappLintForEveryNotifications"; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index f6a5df812..a7b2039aa 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -119,6 +119,7 @@ extern NSString * const XCCProjectDidFinishLoadingNotification; - (IBAction)openErrorInEditor:(id)sender; - (IBAction)openXcodeProject:(id)aSender; - (IBAction)synchronizeProject:(id)aSender; +- (IBAction)checkProjectWithCappLint:(id)aSender; - (BOOL)executablesAreAccessible; - (void)stop; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 9b1e3af35..f6eb0249d 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -241,7 +241,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, // Make sure we are using jsc as the narwhal engine! self.environment[@"NARWHAL_ENGINE"] = @"jsc"; - self.executables = @[@"python", @"narwhal-jsc", @"objj", @"nib2cib", @"capp"]; + self.executables = @[@"python", @"narwhal-jsc", @"objj", @"nib2cib", @"capp", @"capp_lint"]; // This is used to get the env var of $CAPP_BUILD NSDictionary *processEnvironment = [[NSProcessInfo processInfo] environment]; @@ -729,7 +729,12 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, self.pbxOperations[@"add"] = addPaths; } } - + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + if ([defaults boolForKey:KDefaultUsesCappLintForEveryNotifications]) + [self checkCappLintForPath:path]; + DDLogVerbose(@"%@ %@", NSStringFromSelector(_cmd), path); } @@ -1723,6 +1728,65 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return YES; } +- (IBAction)checkProjectWithCappLint:(id)aSender +{ + [self checkCappLintForPath:self.projectPath]; +} + +- (void)checkCappLintForPath:(NSString*)aPath +{ + DDLogVerbose(@"Checking path %@ with capp_lint", aPath); + + NSArray *arguments = [NSArray arrayWithObject:aPath]; + + NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"capp_lint"] + arguments:arguments + returnType:kTaskReturnTypeStdOut]; + + NSInteger status = [taskResult[@"status"] intValue]; + NSString *response = taskResult[@"response"]; + + if (status == 0) + return; + + NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; + + // We need to remove the first object who is the number of errors and the last object who is an empty line + [errors removeLastObject]; + [errors removeObjectAtIndex:0]; + + NSInteger i = 0; + NSInteger numberOfErrors = [errors count]; + + for (i = 0; i < numberOfErrors; i++) + { + NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; + NSString *firstCaract = [NSString stringWithFormat:@"%c" ,[error characterAtIndex:0]]; + NSString *path; + NSString *line; + + if ([[NSScanner scannerWithString:firstCaract] scanInt:nil]) + error = (NSMutableString*)[NSString stringWithFormat:@"%@:%@",aPath,error]; + + NSInteger positionOfFirstColon = [error rangeOfString:@":"].location; + path = [error substringToIndex:positionOfFirstColon]; + + NSString *errorWithoutPath = [error substringFromIndex:(positionOfFirstColon + 1)]; + NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; + line = [errorWithoutPath substringToIndex:positionOfSecondColon]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:[line intValue]], @"line", + [NSString stringWithFormat:@"capp_lint error in %@ \n%@", path, errorWithoutPath], @"message", + path, @"path", + nil]; + + [self.errorListController addObject:dict]; + } + + [self showErrors]; +} + @end diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index 3fa8d38e3..d6597eaa8 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -1,2576 +1,496 @@ - - - - 1060 - 12E55 - 4457.6 - 1187.39 - 626.00 - - 4457.6 - 3330 - - - NSArrayController - NSBox - NSButton - NSButtonCell - NSCustomObject - NSImageCell - NSImageView - NSMenu - NSMenuItem - NSPopUpButton - NSPopUpButtonCell - NSScrollView - NSScroller - NSTableColumn - NSTableView - NSTextField - NSTextFieldCell - NSUserDefaultsController - NSView - NSWindowTemplate - PDFView - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.pdfkit.ibplugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - NSFontManager - - - - - - - Create Project... - - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - - - - Open Project… - - 2147483647 - - - - - - Open Recent - - 2147483647 - - - - - - Open Xcode Project - - 2147483647 - - - 1 - - - - YES - YES - - - 2147483647 - - - - - - Synchronize Project - - 2147483647 - - - - - - Show in %@ - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Errors & Warnings - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - About XcodeCapp... - - 2147483647 - - - - - - Preferences… - - 2147483647 - - - - - - XcodeCapp Help - - 2147483647 - - - 7 - - - - YES - YES - - - 2147483647 - - - - - - Quit XcodeCapp - - 2147483647 - - - - - - - AppController - - - 3 - 2 - {{196, 240}, {402, 202}} - 1685586944 - About - NSPanel - - - - - 1792 - - - - 1804 - - {{164, 20}, {203, 98}} - - YES - - 68157504 - 4326400 - WGNvZGVDYXBwIDMgZGV2ZWxvcGVkIGJ5OgogICAgQXBhcmFqaXRhIEZpc2htYW4KICAgIGFwYXJhaml0 -YUBhcGFyYWppdGEuY29tCgpPcmlnaW5hbCBDb2NvYSB2ZXJzaW9uIGRldmVsb3BlZCBieToKICAgIEFu -dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - - LucidaGrande - 11 - 3100 - - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MC4zMTM0MzA2NDI2AA - - - NO - - - - 1802 - - {{164, 126}, {221, 74}} - - YES - - 68157504 - 4326400 - XcodeCapp 3.0.0 - - Zapfino - 18 - 16 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - textColor - - 3 - MAA - - - - NO - - - - 1804 - - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{17, 63}, {128, 128}} - - YES - - 0 - 33554432 - - NSImage - icon_128x128 - - 0 - 0 - 0 - NO - - NO - YES - - - - {402, 202} - - {{0, 0}, {2560, 1418}} - {10000000000000, 10000000000000} - NO - - - 15 - 2 - {{1826, 825}, {550, 237}} - 1685586944 - Errors & Warnings - NSPanel - - - {315, 77} - - - 1792 - - - - 1810 - - - - 3858 - - - - 1792 - - {550, 201} - - - YES - NO - YES - - - -2147481856 - {15, 20} - - - - error - 536 - 40 - 1000 - - 75497536 - 2048 - Error - - - 3 - MC4zMzMzMzI5ODU2AA - - - 6 - System - headerTextColor - - - - - 69206081 - 2304 - Text Cell - - - - 6 - System - controlBackgroundColor - - - - 6 - System - controlTextColor - - - - 1 - YES - - - - 14 - 10 - - - 1 - MSAxIDEgMAA - - 30 - -1832910848 - - - 5 - -1 - 0 - NO - 0 - 1 - - - {{1, 1}, {550, 201}} - - - - - - 4 - - - - -2147481856 - - {{1, 273}, {512, 16}} - - - NO - 1 - - _doScroller: - - - - -2147481856 - - {{535, 1}, {16, 45}} - - - NO - - _doScroller: - - - - {{-1, 35}, {552, 203}} - - - - 133682 - - - - QSAAAEEgAABCIAAAQiAAAA - 0.25 - 4 - 1 - - - - 1825 - - {{352, 8}, {85, 19}} - - - {250, 750} - YES - - -2080374784 - 134217728 - Clear - - LucidaGrande - 12 - 4883 - - - -2038284288 - 164 - - - - 400 - 75 - - NO - - - - 1828 - - {{20, 8}, {85, 19}} - - - {250, 750} - YES - - -1543503872 - 134217728 - Open - - - -2038284288 - 164 - - - - 400 - 75 - - NO - - - - 1825 - - {{445, 8}, {85, 19}} - - - {250, 750} - YES - - -2080374784 - 134217728 - Close - - - -2038284288 - 164 - - - - 400 - 75 - - NO - - - - {550, 237} - - - - {{0, 0}, {2560, 1418}} - {315, 99} - {10000000000000, 10000000000000} - errorPanel - YES - - - 3 - 2 - {{1964, 505}, {431, 321}} - 1685586944 - Preferences - NSWindow - - - - - 1792 - - - - 1548 - - - - 1810 - - - - 1804 - - {{16, 81}, {271, 18}} - - - YES - - -2080374784 - 0 - Load the most recent project on launch - - LucidaGrande - 13 - 1044 - - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 400 - 75 - - NO - - - - 1804 - - {{16, 51}, {241, 18}} - - - YES - - -2080374784 - 0 - Automatically open Xcode projects - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 1804 - - {{16, 109}, {298, 18}} - - - YES - - -2080374784 - 0 - Symlink frameworks when creating projects - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 1804 - - {{15, 20}, {106, 17}} - - - YES - - 68157504 - 272630784 - Recent projects: - - - - - - NO - - - - 1804 - - {{124, 14}, {56, 26}} - - - YES - - -2076180416 - 2048 - - LucidaGrande - 13 - 1301 - - - 109199360 - 129 - - LucidaGrande - 13 - 16 - - - - 400 - 75 - - - 30 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - 10 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 20 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 2 - 1 - YES - YES - 2 - - NO - - - - {{1, 1}, {395, 139}} - - - - - - {{17, 151}, {397, 155}} - - - {0, 0} - - 67108864 - 134217728 - Projects - - LucidaGrande - 11 - 16 - - - - 3 - MCAwLjgAA - - - - 1 - 0 - 2 - NO - - - - 1548 - - - - 1810 - - - - 1804 - - {{16, 73}, {363, 18}} - - - YES - - -2080374784 - 0 - Show notifications when individual files are processed - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 1804 - - {{35, 17}, {81, 18}} - - - YES - - -2080374784 - 0 - Warnings - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 1804 - - {{137, 17}, {60, 18}} - - - YES - - -2080374784 - 0 - Errors - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 1804 - - {{16, 43}, {306, 17}} - - - YES - - 68157504 - 272630784 - Automatically open Errors & Warnings panel on: - - - - - - NO - - - - {{1, 1}, {395, 104}} - - - - - - {{17, 16}, {397, 120}} - - - {0, 0} - - 67108864 - 134217728 - File processing - - - - 3 - MCAwLjgAA - - - - 1 - 0 - 2 - NO - - - - {431, 321} - - - - {{0, 0}, {2560, 1418}} - {10000000000000, 10000000000000} - xcc-prefs - YES - - - 15 - 2 - {{163, 199}, {716, 654}} - 1685586944 - XcodeCapp Help - NSWindow - - - - - 1792 - - - - 1554 - - - - NSFilenamesPboardType - - {716, 654} - - 1 - NO - 1 - YES - - - - {716, 654} - - {{0, 0}, {2560, 1418}} - {10000000000000, 10000000000000} - YES - - - YES - - - XcodeCapp - - - - message - file - - YES - - YES - YES - YES - - - - NO - - - - terminate: - - - - 695 - - - - delegate - - - - 694 - - - - delegate - - - - 874 - - - - createProject: - - - - kGC-iR-GHt - - - - loadProject: - - - - 864 - - - - openAbout: - - - - 615 - - - - openHelp: - - - - 612 - - - - openPreferences: - - - - 796 - - - - showInFinder: - - - - 872 - - - - aboutWindow - - - - 613 - - - - helpView - - - - 858 - - - - helpWindow - - - - 610 - - - - menuItemHistory - - - - 621 - - - - menuItemOpenProject - - - - 869 - - - - menuItemOpenXcodeProject - - - - 873 - - - - menuItemShowInFinder - - - - 871 - - - - preferencesController - - - - 616 - - - - preferencesWindow - - - - 795 - - - - statusMenu - - - - 607 - - - - xcc - - - - 617 - - - - performClose: - - - - 625 - - - - save: - - - - 634 - - - - save: - - - - 792 - - - - save: - - - - 821 - - - - save: - - - - 841 - - - - save: - - - - 849 - - - - save: - - - - 854 - - - - save: - - - - Qld-lL-7rM - - - - clearErrors: - - - - 751 - - - - openErrorInEditor: - - - - 786 - - - - openErrorsPanel: - - - - 774 - - - - openXcodeProject: - - - - 866 - - - - synchronizeProject: - - - - 867 - - - - clearErrors - - - - 749 - - - - errorListController - - - - 760 - - - - errorsPanel - - - - 775 - - - - symlinkRadioButton - - - - UhG-7c-NP8 - - - - errorTable - - - - 748 - - - - values.XCCReopenLastProject - - - - - - value: values.XCCReopenLastProject - value - values.XCCReopenLastProject - - NSValidatesImmediately - - - 2 - - - 636 - - - - dataSource - - - - 752 - - - - errorTable - - - - - - doubleClickArgument: errorTable - doubleClickArgument - errorTable - - NSSelectorName - openErrorInEditor: - - 2 - - - 787 - - - - delegate - - - - 753 - - - - self - - - - - - doubleClickTarget: self - doubleClickTarget - self - - NSSelectorName - openErrorInEditor: - - - 2 - - - 788 - - - - arrangedObjects.message - - - - - - value: arrangedObjects.message - value - arrangedObjects.message - 2 - - - 770 - - - - bundleVersion - - - - - - displayPatternValue1: bundleVersion - displayPatternValue1 - bundleVersion - - NSDisplayPattern - XcodeCapp %{value1}@ - - 2 - - - 800 - - - - projectPath.length - - - - - - enabled: projectPath.length - enabled - projectPath.length - 2 - - - 875 - - - - xcodeProjectCanBeOpened - - - - - - enabled: xcodeProjectCanBeOpened - enabled - xcodeProjectCanBeOpened - - 2 - - - 876 - - - - selection.@count - - - - - - enabled: selection.@count - enabled - selection.@count - 2 - - - 765 - - - - errorList - - - - - - contentArray: errorList - contentArray - errorList - 2 - - - 762 - - - - values.XCCAutoOpenErrorsPanelOnWarnings - - - - - - value: values.XCCAutoOpenErrorsPanelOnWarnings - value - values.XCCAutoOpenErrorsPanelOnWarnings - - NSValidatesImmediately - - - 2 - - - 823 - - - - values.maxRecentProjects - - - - - - selectedValue: values.maxRecentProjects - selectedValue - values.maxRecentProjects - 2 - - - 810 - - - - projectPath.length - - - - - - enabled: projectPath.length - enabled - projectPath.length - 2 - - - 812 - - - - values.XCCAutoOpenErrorsPanelOnErrors - - - - - - value: values.XCCAutoOpenErrorsPanelOnErrors - value - values.XCCAutoOpenErrorsPanelOnErrors - - NSValidatesImmediately - - - 2 - - - 824 - - - - values.autoOpenXcodeProject - - - - - - value: values.autoOpenXcodeProject - value - values.autoOpenXcodeProject - - NSValidatesImmediately - - - 2 - - - 851 - - - - values.showProcessingNotices - - - - - - value: values.showProcessingNotices - value - values.showProcessingNotices - - NSValidatesImmediately - - - 2 - - - 856 - - - - projectPath.length - - - - - - enabled: projectPath.length - enabled - projectPath.length - 2 - - - 861 - - - - isCappBuildDefined - - - - - - enabled: isCappBuildDefined - enabled - isCappBuildDefined - 2 - - - HUA-hI-eLR - - - - toolTipSymlinkRadioButton - - - - - - toolTip: toolTipSymlinkRadioButton - toolTip - toolTipSymlinkRadioButton - 2 - - - bWz-Mw-z56 - - - - values.useSymlinkWhenCreatingProject - - - - - - value: values.useSymlinkWhenCreatingProject - value - values.useSymlinkWhenCreatingProject - - NSValidatesImmediately - - - 2 - - - aRN-Fd-MPN - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 420 - - - - - 538 - - - - - - - - - - - - - - - - - - - - - - itE-v1-Sv4 - - - - - 605 - - - - - 597 - - - - - 606 - - - - - 859 - - - - - 811 - - - - - 860 - - - - - 603 - - - - - 604 - - - - - 598 - - - - - 600 - - - - - 537 - - - - - 601 - - - - - 599 - - - - - 602 - - - - - 539 - - - - - 540 - - - - - - - - 592 - - - - - - - - - - 593 - - - - - - - - 596 - - - - - 594 - - - - - - - - 595 - - - - - 797 - - - - - - - - 798 - - - - - 541 - - - - - - - - 581 - - - - - - - - - - - 582 - - - - - - - - - - 588 - - - - - 589 - - - - - 584 - - - - - - - - 585 - - - - - 754 - - - - - - - - 755 - - - - - 583 - - - - - - - - 586 - - - - - 542 - - - - - - - - 558 - - - - - - - - - 847 - - - - - - - - - - - - 563 - - - - - - - - 576 - - - - - 839 - - - - - - - - 840 - - - - - 1qI-ol-J5k - - - - - - - - 272-W8-Ygy - - - - - 801 - - - - - - - - 802 - - - - - 803 - - - - - - - - 804 - - - - - - - - 805 - - - - - - - - - - 806 - - - - - 807 - - - - - 808 - - - - - 848 - - - - - - - - - - - 843 - - - - - - - - 844 - - - - - 789 - - - - - - - - 790 - - - - - 819 - - - - - - - - 820 - - - - - 817 - - - - - - - - 818 - - - - - 543 - - - - - - - - 553 - - - - - - - - 857 - - - - - 544 - - - - - 545 - - - XCodeCapp - - - 759 - - - Errors Controller - - - 587 - - - - - - - - 590 - - - - - - - - 591 - - - - - - - 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 - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - 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 - - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.pdfkit.ibplugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - AppController - NSObject - - id - id - id - id - id - id - - - - createProject: - id - - - loadProject: - id - - - openAbout: - id - - - openHelp: - id - - - openPreferences: - id - - - showInFinder: - id - - - - NSPanel - PDFView - NSWindow - NSMenuItem - NSMenuItem - NSMenuItem - NSUserDefaultsController - NSWindow - NSMenu - XcodeCapp - - - - aboutWindow - NSPanel - - - helpView - PDFView - - - helpWindow - NSWindow - - - menuItemHistory - NSMenuItem - - - menuItemOpenProject - NSMenuItem - - - menuItemShowInFinder - NSMenuItem - - - preferencesController - NSUserDefaultsController - - - preferencesWindow - NSWindow - - - statusMenu - NSMenu - - - xcc - XcodeCapp - - - - IBProjectSource - ./Classes/AppController.h - - - - XcodeCapp - NSObject - - id - id - id - id - id - - - - clearErrors: - id - - - openErrorInEditor: - id - - - openErrorsPanel: - id - - - openXcodeProject: - id - - - synchronizeProject: - id - - - - NSArrayController - NSTableView - NSPanel - - - - errorListController - NSArrayController - - - errorTable - NSTableView - - - errorsPanel - NSPanel - - - - IBProjectSource - ./Classes/XcodeCapp.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - 3 - - {11, 11} - {10, 3} - {15, 15} - {128, 128} - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XcodeCapp 3 developed by: + Aparajita Fishman + aparajita@aparajita.com + +Original Cocoa version developed by: + Antoine Mercadal + antoine.mercadal@gmail.com + + + + + + + + + + + + + + + + XcodeCapp %{value1}@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + openErrorInEditor: + + + + + openErrorInEditor: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + message + file + + + + + + + + + + From c28cd8a270ffbc729f692096329e33e640286a00 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 18 Apr 2014 10:47:00 -0700 Subject: [PATCH 114/278] Fixed: capp_lint on the entire project doesn't remove the content of the error tableview --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index f6eb0249d..305662ec6 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1730,6 +1730,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (IBAction)checkProjectWithCappLint:(id)aSender { + [self clearErrors:self]; [self checkCappLintForPath:self.projectPath]; } From 7f35ff5fe51d7c660030806d597f464ca871627e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 18 Apr 2014 11:18:53 -0700 Subject: [PATCH 115/278] Fixed: capp_lint for the entire project is not launch from a thread --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 305662ec6..3c9835b23 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1731,13 +1731,16 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (IBAction)checkProjectWithCappLint:(id)aSender { [self clearErrors:self]; - [self checkCappLintForPath:self.projectPath]; + [self performSelectorInBackground:@selector(checkCappLintForPath:) withObject:self.projectPath]; } - (void)checkCappLintForPath:(NSString*)aPath { DDLogVerbose(@"Checking path %@ with capp_lint", aPath); + self.isProcessing = YES; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; + NSArray *arguments = [NSArray arrayWithObject:aPath]; NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"capp_lint"] @@ -1786,6 +1789,9 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } [self showErrors]; + + self.isProcessing = NO; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; } @end From 372372a0aa0a976821b2419fd7ea869390cf3034 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 18 Apr 2014 18:41:27 -0700 Subject: [PATCH 116/278] Fixed: capp_lint doesn't handle protocol Previously capp_lint didn't handle protocol. Now it does Fixed #2060 --- Tools/capp_lint/capp_lint | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index 248adadc1..13e45e124 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -281,7 +281,7 @@ class LintChecker(object): }, { # Filter out possible = within @accessors - 'filter': {'regex': re.compile(ur'^\s*(?:@outlet\s+)?[a-zA-Z_$]\w*\s+[a-zA-Z_$]\w*\s+@accessors\b'), 'pass': False}, + 'filter': {'regex': re.compile(ur'^\s*(?:@outlet\s+)?[a-zA-Z_$]\w*\s+(<\s*[a-zA-Z_$]*\s*>\s+)?[a-zA-Z_$]\w*\s+@accessors\b'), 'pass': False}, 'preprocess': STD_IGNORES, 'regex': re.compile(ur'(?<=[\w)\]"\']|([ ]))(=|[-+*/%^&|]=|<<=|>>>?=)(?=[\w({\["\']|(?(1)\b\b|[ ]))'), @@ -291,7 +291,7 @@ class LintChecker(object): }, { # Filter out @import statements and @implementation/method declarations - 'filter': {'regex': re.compile(ur'^(@import\b|@implementation\b|\s*' + METHOD_RE + ')'), 'pass': False}, + 'filter': {'regex': re.compile(ur'^(@import\b|@implementation\b|@protocol\b|\s*' + METHOD_RE + ')|([a-zA-Z_$]*\s+<\s*[a-zA-Z_$]*\s*>)'), 'pass': False}, 'preprocess': STD_IGNORES, 'regex': re.compile(ur'(?<=[\w)\]"\']|([ ]))(===?|!==?|[<>]=?)(?=[\w({\["\']|(?(1)\b\b|[ ]))'), @@ -299,6 +299,13 @@ class LintChecker(object): 'showPositionForGroup': 2, 'type': ERROR_TYPE_WARNING }, + { + 'preprocess': STD_IGNORES, + 'regex': re.compile(ur'^(.*<\s+[a-zA-Z_$]*>.*)|(.*<[a-zA-Z_$]*\s+>.*)|(.*<\s+[a-zA-Z_$]*\s+>.*)'), + 'error': 'bracket operator with extra spaces', + 'showPositionForGroup': 0, + 'type': ERROR_TYPE_WARNING + }, { 'regex': re.compile(ur'^(\s+)' + METHOD_RE + '|^\s*[-+](\()[a-zA-Z_$][\w]*\)\s*[a-zA-Z_$]\w*|^\s*[-+]\s*\([a-zA-Z_$][\w]*\)(\s+)[a-zA-Z_$]\w*'), 'error': 'extra or missing space in a method declaration', From 9ad3e505112faa26f06934534406c7ddfabf64c1 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 19 Apr 2014 14:32:54 +0200 Subject: [PATCH 117/278] fixed: .insertAttributedString.. does not coalesce --- Foundation/CPAttributedString.j | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index bbb37abe1..04c131631 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -738,8 +738,7 @@ _rangeEntries.splice(entryIndexOfNextEntry - 1 + index, 0, entryCopy); } - //necessary? - //[self _coalesceRangeEntriesFromIndex:startingEntryIndex toIndex:startingEntryIndex+rangeEntries.length]; + [self _coalesceRangeEntriesFromIndex:MAX(0, entryIndexOfNextEntry - 1) toIndex:MIN(entryIndexOfNextEntry + 1, _rangeEntries.length - 1)]; } /*! From d1615567e2b3bbb373d212c96f7ebed29ca582ba Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 21 Apr 2014 10:30:00 -0700 Subject: [PATCH 118/278] Fixed: xib of xCodeCapp is in format 5.1 --- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 3229 ++++++++++++++--- 1 file changed, 2733 insertions(+), 496 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index d6597eaa8..d5d832d90 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -1,496 +1,2733 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XcodeCapp 3 developed by: - Aparajita Fishman - aparajita@aparajita.com - -Original Cocoa version developed by: - Antoine Mercadal - antoine.mercadal@gmail.com - - - - - - - - - - - - - - - - XcodeCapp %{value1}@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - openErrorInEditor: - - - - - openErrorInEditor: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - message - file - - - - - - - - - - + + + + 1060 + 13C64 + 5056 + 1265.19 + 697.40 + + 5056 + 5056 + + + NSArrayController + NSBox + NSButton + NSButtonCell + NSCustomObject + NSImageCell + NSImageView + NSMenu + NSMenuItem + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller + NSTableColumn + NSTableView + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + PDFView + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.pdfkit.ibplugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + NSFontManager + + + + + + + Create Project... + + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + Open Project… + + 2147483647 + + + + + + Open Recent + + 2147483647 + + + + + + Open Xcode Project + + 2147483647 + + + 1 + + + + YES + YES + + + 2147483647 + + + + + + Synchronize Project + + 2147483647 + + + + + + Show in %@ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Errors & Warnings + + 2147483647 + + + + + + Check project with capp_lint + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + About XcodeCapp... + + 2147483647 + + + + + + Preferences… + + 2147483647 + + + + + + XcodeCapp Help + + 2147483647 + + + 7 + + + + YES + YES + + + 2147483647 + + + + + + Quit XcodeCapp + + 2147483647 + + + + + + + AppController + + + 3 + 2 + {{196, 240}, {402, 202}} + 1618478080 + About + NSPanel + + + + + 256 + + + + 268 + {{164, 20}, {203, 98}} + + + + YES + + 68157504 + 4326400 + WGNvZGVDYXBwIDMgZGV2ZWxvcGVkIGJ5OgogICAgQXBhcmFqaXRhIEZpc2htYW4KICAgIGFwYXJhaml0 +YUBhcGFyYWppdGEuY29tCgpPcmlnaW5hbCBDb2NvYSB2ZXJzaW9uIGRldmVsb3BlZCBieToKICAgIEFu +dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + + .LucidaGrandeUI + 11 + 3100 + + + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 3 + MC4zMTM0MzA2NDI2AA + + + NO + 1 + + + + 266 + {{164, 126}, {221, 74}} + + + + YES + + 68157504 + 4326400 + XcodeCapp 3.0.0 + + Zapfino + 18 + 16 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + textColor + + 3 + MAA + + + + NO + 1 + + + + 268 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{17, 63}, {128, 128}} + + + + YES + + 0 + 33554432 + + NSImage + icon_128x128 + + 0 + 0 + 0 + NO + + NO + YES + + + {402, 202} + + + + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + NO + + + 15 + 2 + {{1826, 825}, {550, 237}} + 1618478080 + Errors & Warnings + NSPanel + + + {315, 77} + + + 256 + + + + 274 + + + + 2322 + + + + 256 + {550, 201} + + + + YES + NO + YES + + + 256 + {15, 20} + + + + error + 536 + 40 + 1000 + + 75497536 + 2048 + Error + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + + + + 69206081 + 2304 + Text Cell + + + + 6 + System + controlBackgroundColor + + + + 6 + System + controlTextColor + + + + 1 + YES + + + + 14 + 10 + + + 1 + MSAxIDEgMAA + + 30 + -1832910848 + + + 5 + -1 + 0 + NO + 0 + 1 + + + {{1, 1}, {550, 201}} + + + + + + 4 + + + + -2147483392 + {{1, 273}, {512, 16}} + + + + NO + 1 + + _doScroller: + + + + -2147483392 + {{535, 1}, {16, 45}} + + + + NO + + _doScroller: + + + {{-1, 35}, {552, 203}} + + + + 133682 + + + + QSAAAEEgAABCIAAAQiAAAA + 0.25 + 4 + 1 + + + + 289 + {{352, 8}, {85, 19}} + + + + {250, 750} + YES + + -2080374784 + 134217728 + Clear + + .LucidaGrandeUI + 12 + 4883 + + + -2038284288 + 164 + + + + 400 + 75 + + NO + + + + 292 + {{20, 8}, {85, 19}} + + + + {250, 750} + YES + + -1543503872 + 134217728 + Open + + + -2038284288 + 164 + + + + 400 + 75 + + NO + + + + 289 + {{445, 8}, {85, 19}} + + + + {250, 750} + YES + + -2080374784 + 134217728 + Close + + + -2038284288 + 164 + + + + 400 + 75 + + NO + + + {550, 237} + + + + + {{0, 0}, {2560, 1418}} + {315, 99} + {10000000000000, 10000000000000} + errorPanel + YES + + + 3 + 2 + {{1964, 505}, {431, 348}} + 1618478080 + Preferences + NSWindow + + + + + 256 + + + + 12 + + + + 274 + + + + 268 + {{16, 81}, {271, 18}} + + + + YES + + -2080374784 + 0 + Load the most recent project on launch + + .LucidaGrandeUI + 13 + 1044 + + + 1211912448 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 400 + 75 + + NO + + + + 268 + {{16, 51}, {241, 18}} + + + + YES + + -2080374784 + 0 + Automatically open Xcode projects + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 109}, {298, 18}} + + + + YES + + -2080374784 + 0 + Symlink frameworks when creating projects + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{15, 20}, {106, 17}} + + + + YES + + 68157504 + 272630784 + Recent projects: + + + + + + NO + 1 + + + + 268 + {{124, 14}, {56, 26}} + + + + YES + + -2076180416 + 2048 + + .LucidaGrandeUI + 13 + 1301 + + + 109199360 + 129 + + .LucidaGrandeUI + 13 + 16 + + + + 400 + 75 + + + 30 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + + + 10 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 20 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 2 + 1 + YES + YES + 2 + + NO + + + {{1, 1}, {395, 139}} + + + + + + {{17, 178}, {397, 155}} + + + + {0, 0} + + 67108864 + 134217728 + Projects + + LucidaGrande + 11 + 16 + + + + 3 + MCAwLjgAA + + + + 1 + 0 + 2 + NO + + + + 12 + + + + 274 + + + + 268 + {{16, 100}, {363, 18}} + + + + YES + + -2080374784 + 0 + Show notifications when individual files are processed + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 72}, {363, 18}} + + + + YES + + -2080374784 + 0 + Check with capp_lint when files are processed + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{35, 17}, {81, 18}} + + + + YES + + -2080374784 + 0 + Warnings + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{137, 17}, {60, 18}} + + + + YES + + -2080374784 + 0 + Errors + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 43}, {306, 17}} + + + + YES + + 68157504 + 272630784 + Automatically open Errors & Warnings panel on: + + + + + + NO + 1 + + + {{1, 1}, {395, 131}} + + + + + + {{17, 16}, {397, 147}} + + + + {0, 0} + + 67108864 + 134217728 + File processing + + + + 3 + MCAwLjgAA + + + + 1 + 0 + 2 + NO + + + {431, 348} + + + + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + xcc-prefs + YES + + + 15 + 2 + {{163, 199}, {716, 662}} + 1618478080 + XcodeCapp Help + NSWindow + + + + + 256 + + + + 18 + + + NSFilenamesPboardType + + {{0, 8}, {716, 654}} + + + + YES + 1 + NO + 1 + YES + + + {716, 662} + + + + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + YES + + + YES + + + XcodeCapp + + + + message + file + + YES + + YES + YES + YES + + + + NO + + + + delegate + + + + 694 + + + + terminate: + + + + 695 + + + + delegate + + + + 874 + + + + createProject: + + + + kGC-iR-GHt + + + + loadProject: + + + + 864 + + + + showInFinder: + + + + 872 + + + + openAbout: + + + + 615 + + + + openPreferences: + + + + 796 + + + + openHelp: + + + + 612 + + + + aboutWindow + + + + 613 + + + + helpView + + + + 858 + + + + helpWindow + + + + 610 + + + + menuItemHistory + + + + 621 + + + + menuItemOpenProject + + + + 869 + + + + menuItemOpenXcodeProject + + + + 873 + + + + menuItemShowInFinder + + + + 871 + + + + preferencesController + + + + 616 + + + + preferencesWindow + + + + 795 + + + + statusMenu + + + + 607 + + + + xcc + + + + 617 + + + + performClose: + + + + 625 + + + + save: + + + + 634 + + + + save: + + + + 841 + + + + save: + + + + Qld-lL-7rM + + + + save: + + + + 849 + + + + save: + + + + 854 + + + + save: + + + + 3Np-aC-Jh1 + + + + save: + + + + 792 + + + + save: + + + + 821 + + + + openXcodeProject: + + + + 866 + + + + synchronizeProject: + + + + 867 + + + + openErrorsPanel: + + + + 774 + + + + checkProjectWithCappLint: + + + + cNV-We-Why + + + + clearErrors: + + + + 751 + + + + openErrorInEditor: + + + + 786 + + + + clearErrors + + + + 749 + + + + errorListController + + + + 760 + + + + errorsPanel + + + + 775 + + + + symlinkRadioButton + + + + UhG-7c-NP8 + + + + errorTable + + + + 748 + + + + values.XCCReopenLastProject + + + + + + value: values.XCCReopenLastProject + value + values.XCCReopenLastProject + + NSValidatesImmediately + + + 2 + + + 636 + + + + errorTable + + + + + + doubleClickArgument: errorTable + doubleClickArgument + errorTable + + NSSelectorName + openErrorInEditor: + + 2 + + + 787 + + + + delegate + + + + 753 + + + + self + + + + + + doubleClickTarget: self + doubleClickTarget + self + + NSSelectorName + openErrorInEditor: + + + 2 + + + 788 + + + + dataSource + + + + 752 + + + + arrangedObjects.message + + + + + + value: arrangedObjects.message + value + arrangedObjects.message + 2 + + + 770 + + + + bundleVersion + + + + + + displayPatternValue1: bundleVersion + displayPatternValue1 + bundleVersion + + NSDisplayPattern + XcodeCapp %{value1}@ + + 2 + + + 800 + + + + projectPath.length + + + + + + enabled: projectPath.length + enabled + projectPath.length + 2 + + + 875 + + + + xcodeProjectCanBeOpened + + + + + + enabled: xcodeProjectCanBeOpened + enabled + xcodeProjectCanBeOpened + + 2 + + + 876 + + + + selection.@count + + + + + + enabled: selection.@count + enabled + selection.@count + 2 + + + 765 + + + + errorList + + + + + + contentArray: errorList + contentArray + errorList + 2 + + + 762 + + + + values.XCCAutoOpenErrorsPanelOnWarnings + + + + + + value: values.XCCAutoOpenErrorsPanelOnWarnings + value + values.XCCAutoOpenErrorsPanelOnWarnings + + NSValidatesImmediately + + + 2 + + + 823 + + + + values.maxRecentProjects + + + + + + selectedValue: values.maxRecentProjects + selectedValue + values.maxRecentProjects + 2 + + + 810 + + + + projectPath.length + + + + + + enabled: projectPath.length + enabled + projectPath.length + 2 + + + 812 + + + + values.XCCAutoOpenErrorsPanelOnErrors + + + + + + value: values.XCCAutoOpenErrorsPanelOnErrors + value + values.XCCAutoOpenErrorsPanelOnErrors + + NSValidatesImmediately + + + 2 + + + 824 + + + + values.autoOpenXcodeProject + + + + + + value: values.autoOpenXcodeProject + value + values.autoOpenXcodeProject + + NSValidatesImmediately + + + 2 + + + 851 + + + + values.showProcessingNotices + + + + + + value: values.showProcessingNotices + value + values.showProcessingNotices + + NSValidatesImmediately + + + 2 + + + 856 + + + + projectPath.length + + + + + + enabled: projectPath.length + enabled + projectPath.length + 2 + + + 861 + + + + isCappBuildDefined + + + + + + enabled: isCappBuildDefined + enabled + isCappBuildDefined + 2 + + + HUA-hI-eLR + + + + toolTipSymlinkRadioButton + + + + + + toolTip: toolTipSymlinkRadioButton + toolTip + toolTipSymlinkRadioButton + 2 + + + bWz-Mw-z56 + + + + values.useSymlinkWhenCreatingProject + + + + + + value: values.useSymlinkWhenCreatingProject + value + values.useSymlinkWhenCreatingProject + + NSValidatesImmediately + + + 2 + + + aRN-Fd-MPN + + + + projectPath.length + + + + + + enabled: projectPath.length + enabled + projectPath.length + 2 + + + b84-dT-kSk + + + + values.usesCappLintForEveryNotifications + + + + + + value: values.usesCappLintForEveryNotifications + value + values.usesCappLintForEveryNotifications + + NSValidatesImmediately + + + 2 + + + JL3-wG-7ik + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 420 + + + + + 538 + + + + + + + + + + + + + + + + + + + + + + + itE-v1-Sv4 + + + + + 605 + + + + + 597 + + + + + 606 + + + + + 859 + + + + + 811 + + + + + 860 + + + + + 603 + + + + + 604 + + + + + PcB-xW-jUW + + + + + 598 + + + + + 600 + + + + + 537 + + + + + 601 + + + + + 599 + + + + + 602 + + + + + 539 + + + + + 540 + + + + + + + + 592 + + + + + + + + + + 593 + + + + + + + + 596 + + + + + 594 + + + + + + + + 595 + + + + + 797 + + + + + + + + 798 + + + + + 541 + + + + + + + + 581 + + + + + + + + + + + 582 + + + + + + + + + + 588 + + + + + 589 + + + + + 584 + + + + + + + + 585 + + + + + 754 + + + + + + + + 755 + + + + + 583 + + + + + + + + 586 + + + + + 542 + + + + + + + + 558 + + + + + + + + + 847 + + + + + + + + + + + + 563 + + + + + + + + 576 + + + + + 839 + + + + + + + + 840 + + + + + 1qI-ol-J5k + + + + + + + + 272-W8-Ygy + + + + + 801 + + + + + + + + 802 + + + + + 803 + + + + + + + + 804 + + + + + + + + 805 + + + + + + + + + + 806 + + + + + 807 + + + + + 808 + + + + + 848 + + + + + + + + + + + + 843 + + + + + + + + 844 + + + + + RPS-9d-lvV + + + + + + + + TXI-VH-VwH + + + + + 789 + + + + + + + + 790 + + + + + 819 + + + + + + + + 820 + + + + + 817 + + + + + + + + 818 + + + + + 543 + + + + + + + + 553 + + + + + + + + 857 + + + + + 544 + + + + + 545 + + + XCodeCapp + + + 759 + + + Errors Controller + + + 587 + + + + + + + + 590 + + + + + + + + 591 + + + + + + + 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 + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + 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 + + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.pdfkit.ibplugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + If this is checked, when a Cappuccino project is opened, the file who is currently processing will be checked with capp_lint + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + AppController + NSObject + + id + id + id + id + id + id + + + + createProject: + id + + + loadProject: + id + + + openAbout: + id + + + openHelp: + id + + + openPreferences: + id + + + showInFinder: + id + + + + NSPanel + PDFView + NSWindow + NSMenuItem + NSMenuItem + NSMenuItem + NSUserDefaultsController + NSWindow + NSMenu + XcodeCapp + + + + aboutWindow + NSPanel + + + helpView + PDFView + + + helpWindow + NSWindow + + + menuItemHistory + NSMenuItem + + + menuItemOpenProject + NSMenuItem + + + menuItemShowInFinder + NSMenuItem + + + preferencesController + NSUserDefaultsController + + + preferencesWindow + NSWindow + + + statusMenu + NSMenu + + + xcc + XcodeCapp + + + + IBProjectSource + ./Classes/AppController.h + + + + XcodeCapp + NSObject + + id + id + id + id + id + id + + + + checkProjectWithCappLint: + id + + + clearErrors: + id + + + openErrorInEditor: + id + + + openErrorsPanel: + id + + + openXcodeProject: + id + + + synchronizeProject: + id + + + + NSArrayController + NSTableView + NSPanel + + + + errorListController + NSArrayController + + + errorTable + NSTableView + + + errorsPanel + NSPanel + + + + IBProjectSource + ./Classes/XcodeCapp.h + + + + + 0 + IBCocoaFramework + YES + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + {11, 11} + {10, 3} + {15, 15} + {128, 128} + + + From 51ffd0d64a55633e9592c48dd163d2e93bd52ee0 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 21 Apr 2014 11:06:30 -0700 Subject: [PATCH 119/278] Revert "Revert "Fixed: path is wrong with local copy"" This reverts commit 6825e3f7cebe08d6b2cfc10de55d12103d5e08a7. --- bootstrap.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index 641dedb59..63acf1594 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -206,6 +206,7 @@ done github_project="$github_user-cappuccino-base" github_path="$github_user/cappuccino-base" +local_project="cappuccino-base" # The purpose of bootstrap is to install Cappuccino. install_cappuccino="yes" @@ -317,9 +318,9 @@ if [ "$install_cappuccino" ]; then unzip $quiet_arg "$local_distrib" -d "$install_directory" check_and_exit - mv "$install_directory/$github_project-"*/* "$install_directory/." + mv "$install_directory/$local_project-"*/* "$install_directory/." check_and_exit - rm -rf "$install_directory/$github_project-"* + rm -rf "$install_directory/$local_project-"* check_and_exit else zip_ball="https://github.com/$github_path/zipball/$github_ref" From d6961889fbb934f76d69369e72e0c49344036f88 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 21 Apr 2014 11:14:57 -0700 Subject: [PATCH 120/278] FIXED: Do not invoke sudo in install.sh for capp_lint --- Tools/capp_lint/install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tools/capp_lint/install.sh b/Tools/capp_lint/install.sh index 847b66630..73ac9a904 100755 --- a/Tools/capp_lint/install.sh +++ b/Tools/capp_lint/install.sh @@ -3,13 +3,13 @@ chmod +x capp_lint if [[ ! -d /usr/local/narwhal/bin ]]; then - sudo mkdir -p /usr/local/narwhal/bin + mkdir -p /usr/local/narwhal/bin fi -sudo cp capp_lint /usr/local/narwhal/bin +cp capp_lint /usr/local/narwhal/bin if [[ ! -d /usr/local/share/man/man1 ]]; then - sudo mkdir -p /usr/local/share/man/man1 + mkdir -p /usr/local/share/man/man1 fi -sudo cp capp_lint.1 /usr/local/share/man/man1 +cp capp_lint.1 /usr/local/share/man/man1 From 0bd2a032bb5b1c31edef17426c3a0a0913473aa5 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 21 Apr 2014 14:03:45 -0700 Subject: [PATCH 121/278] FIXED: Give basedir option to capp_lint from XCC or it won't work once completely built --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 3c9835b23..3263b1f47 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1741,7 +1741,8 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, self.isProcessing = YES; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; - NSArray *arguments = [NSArray arrayWithObject:aPath]; + NSString *baseDirectory = [NSString stringWithFormat:@"--basedir='%@'", self.projectPath]; + NSArray *arguments = [NSArray arrayWithObjects:baseDirectory, aPath, nil]; NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"capp_lint"] arguments:arguments From eaa607b48dc63d705f21ca3bbdc0c24ab86c1e15 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 21 Apr 2014 15:34:12 -0700 Subject: [PATCH 122/278] New: Added option in xCodeCapp for displaying error in notification Previously it wasn't possible to configure xCodeCapp to show or not errors/warnings and capp_lint with notifications --- Tools/XcodeCapp/XcodeCapp/AppController.m | 4 + .../XcodeCapp/ProcessSourceOperation.m | 5 +- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 4 + Tools/XcodeCapp/XcodeCapp/UserDefaults.m | 4 + Tools/XcodeCapp/XcodeCapp/XcodeCapp.h | 3 + Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 45 +- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 456 ++++++++++++++++-- 7 files changed, 470 insertions(+), 51 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index ab6fcd38c..09d1363b8 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -146,6 +146,10 @@ AppController *SharedAppControllerInstance = nil; kDefaultXCCReopenLastProject: @YES, kDefaultXCCAutoOpenErrorsPanelOnWarnings: @YES, kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, + kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, + kDefaultXCCAutoShowNotificationOnWarnings: @YES, + kDefaultXCCAutoShowNotificationOnErrors: @YES, + kDefaultXCCAutoShowNotificationOnCappLint: @NO, kDefaultXCCProjectHistory: [NSArray new], kDefaultMaxRecentProjects: @20, kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index e40530853..efafddd00 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -152,8 +152,9 @@ [self postErrorNotificationForPath:self.sourcePath line:0 message:response status:status]; } } - - [self notifyUserWithTitle:notificationTitle message:notificationMessage]; + + if ((status == XCCStatusCodeError && [self.xcc shouldShowErrorNotification]) || (status != XCCStatusCodeError && [self.xcc shouldShowWarningNotification])) + [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } else if (!self.xcc.isLoadingProject) { diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index be194584b..37d846f4f 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -19,6 +19,10 @@ extern NSString * const kDefaultXCCReactToInodeMod; extern NSString * const kDefaultXCCReopenLastProject; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnWarnings; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; +extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; +extern NSString * const kDefaultXCCAutoShowNotificationOnWarnings; +extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; +extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; extern NSString * const kDefaultXCCProjectHistory; extern NSString * const kDefaultLastOpenedPath; extern NSString * const kDefaultPathModificationDates; diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index 2be6fcf22..9672c667a 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -17,6 +17,10 @@ NSString * const kDefaultXCCReactToInodeMod = @"XCCReactMode"; NSString * const kDefaultXCCReopenLastProject = @"XCCReopenLastProject"; NSString * const kDefaultXCCAutoOpenErrorsPanelOnWarnings = @"XCCAutoOpenErrorsPanelOnWarnings"; NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors = @"XCCAutoOpenErrorsPanelOnErrors"; +NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint = @"XCCAutoOpenErrorsPanelOnCappLint"; +NSString * const kDefaultXCCAutoShowNotificationOnWarnings = @"XCCAutoShowNotificationOnWarnings"; +NSString * const kDefaultXCCAutoShowNotificationOnErrors = @"XCCAutoOpenShowNotificationErrors"; +NSString * const kDefaultXCCAutoShowNotificationOnCappLint = @"XCCAutoShowNotificationOnCappLint"; NSString * const kDefaultXCCProjectHistory = @"XCCProjectHistory"; NSString * const kDefaultLastOpenedPath = @"LastOpenedPath"; NSString * const kDefaultPathModificationDates = @"pathModificationDates"; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index a7b2039aa..b75187df6 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -132,6 +132,9 @@ extern NSString * const XCCProjectDidFinishLoadingNotification; - (BOOL)isXibFile:(NSString *)path; - (BOOL)isXCCIgnoreFile:(NSString *)path; +- (BOOL)shouldShowWarningNotification; +- (BOOL)shouldShowErrorNotification; + - (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path; - (BOOL)hasErrors; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 3263b1f47..8cab4fae6 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1641,6 +1641,16 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [self runTaskWithLaunchPath:executablePath arguments:args returnType:kTaskReturnTypeNone]; } +- (BOOL)shouldShowWarningNotification +{ + return [[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCAutoShowNotificationOnWarnings]; +} + +- (BOOL)shouldShowErrorNotification +{ + return [[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCAutoShowNotificationOnErrors]; +} + - (void)showErrors { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -1652,6 +1662,32 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } } +- (void)showCappLintErrors +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && self.errorList.count) + [self openErrorsPanel:self]; + + if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]) + { + NSUInteger numberError = [self.errorList count]; + int i = 0; + + for (i = 0; i < numberError; i++) + { + NSDictionary *error = [self.errorList objectAtIndex:i]; + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:self.projectId] , @"projectId", + @"Capp_lint error", @"title", + [error objectForKey:@"message"] , @"message", + nil]; + + [self wantUserNotificationWithInfo:dict]; + } + } +} + - (void)pruneProcessingErrorsForProjectPath:(NSString *)path { // Remove all errors for the path being processed @@ -1749,11 +1785,11 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, returnType:kTaskReturnTypeStdOut]; NSInteger status = [taskResult[@"status"] intValue]; - NSString *response = taskResult[@"response"]; if (status == 0) return; + NSString *response = taskResult[@"response"]; NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; // We need to remove the first object who is the number of errors and the last object who is an empty line @@ -1780,16 +1816,19 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; line = [errorWithoutPath substringToIndex:positionOfSecondColon]; + NSString *messageError = [NSString stringWithFormat:@"capp_lint error in %@ \n%@", path, errorWithoutPath]; + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:[line intValue]], @"line", - [NSString stringWithFormat:@"capp_lint error in %@ \n%@", path, errorWithoutPath], @"message", + messageError , @"message", path, @"path", nil]; [self.errorListController addObject:dict]; } - [self showErrors]; + + [self showCappLintErrors]; self.isProcessing = NO; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index d5d832d90..ffd71b0e2 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -333,7 +333,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - {{0, 0}, {2560, 1418}} + {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} NO @@ -497,15 +497,15 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2080374784 134217728 Clear - + .LucidaGrandeUI 12 - 4883 + 787 -2038284288 164 - + 400 @@ -526,11 +526,11 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -1543503872 134217728 Open - + -2038284288 164 - + 400 @@ -551,11 +551,11 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2080374784 134217728 Close - + -2038284288 164 - + 400 @@ -569,7 +569,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - {{0, 0}, {2560, 1418}} + {{1440, -180}, {1920, 1058}} {315, 99} {10000000000000, 10000000000000} errorPanel @@ -578,7 +578,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 3 2 - {{1964, 505}, {431, 348}} + {{1964, 505}, {487, 401}} 1618478080 Preferences NSWindow @@ -778,13 +778,13 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO - {{1, 1}, {395, 139}} + {{1, 1}, {451, 139}} - {{17, 178}, {397, 155}} + {{17, 231}, {453, 155}} @@ -821,7 +821,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 - {{16, 100}, {363, 18}} + {{16, 153}, {363, 18}} @@ -846,7 +846,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 - {{16, 72}, {363, 18}} + {{16, 125}, {363, 18}} @@ -871,7 +871,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 - {{35, 17}, {81, 18}} + {{28, 72}, {81, 18}} @@ -896,10 +896,10 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 - {{137, 17}, {60, 18}} + {{130, 72}, {60, 18}} - + YES -2080374784 @@ -918,10 +918,35 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO + + + 268 + {{215, 72}, {82, 18}} + + + + YES + + -2080374784 + 0 + Capp_lint + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + 268 - {{16, 43}, {306, 17}} + {{16, 96}, {381, 17}} @@ -929,7 +954,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 68157504 272630784 - Automatically open Errors & Warnings panel on: + Automatically open Errors & Warnings & Capp_lint panel on: @@ -938,14 +963,109 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO 1 + + + 268 + {{28, 17}, {81, 18}} + + + + YES + + -2080374784 + 0 + Warnings + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{130, 17}, {60, 18}} + + + + YES + + -2080374784 + 0 + Errors + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{215, 17}, {82, 18}} + + + + YES + + -2080374784 + 0 + Capp_lint + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 41}, {419, 17}} + + + + YES + + 68157504 + 272630784 + Automatically show Errors & Warnings & Capp_lint notification on: + + + + + + NO + 1 + - {{1, 1}, {395, 131}} + {{1, 1}, {451, 184}} - {{17, 16}, {397, 147}} + {{17, 16}, {453, 200}} @@ -968,12 +1088,12 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO - {431, 348} + {487, 401} - {{0, 0}, {2560, 1418}} + {{1440, -180}, {1920, 1058}} {10000000000000, 10000000000000} xcc-prefs YES @@ -1014,7 +1134,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - {{0, 0}, {2560, 1418}} + {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} YES @@ -1271,6 +1391,38 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 821 + + + save: + + + + XTE-kN-O4x + + + + save: + + + + tWg-qA-1Jq + + + + save: + + + + 6Xe-Bt-eXK + + + + save: + + + + Buu-6t-pce + openXcodeProject: @@ -1717,6 +1869,26 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA aRN-Fd-MPN + + + value: values.XCCAutoOpenErrorsPanelOnCappLint + + + + + + value: values.XCCAutoOpenErrorsPanelOnCappLint + value + values.XCCAutoOpenErrorsPanelOnCappLint + + NSValidatesImmediately + + + 2 + + + du5-hg-MfC + projectPath.length @@ -1733,6 +1905,26 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA b84-dT-kSk + + + value: values.XCCAutoShowNotificationOnCappLint + + + + + + value: values.XCCAutoShowNotificationOnCappLint + value + values.XCCAutoShowNotificationOnCappLint + + NSValidatesImmediately + + + 2 + + + uwx-aq-p86 + values.usesCappLintForEveryNotifications @@ -1753,6 +1945,46 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA JL3-wG-7ik + + + value: values.XCCAutoShowNotificationOnWarnings + + + + + + value: values.XCCAutoShowNotificationOnWarnings + value + values.XCCAutoShowNotificationOnWarnings + + NSValidatesImmediately + + + 2 + + + IHN-Iv-1G1 + + + + value: values.XCCAutoShowNotificationOnErrors + + + + + + value: values.XCCAutoShowNotificationOnErrors + value + values.XCCAutoShowNotificationOnErrors + + NSValidatesImmediately + + + 2 + + + 2Es-cp-MhX + @@ -2156,9 +2388,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + + - + + + + @@ -2227,27 +2464,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - - 543 - - - - - - - - 553 - - - - - - - - 857 - - - 544 @@ -2286,6 +2502,92 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + + 543 + + + + + + + + 553 + + + + + + + + 857 + + + + + 2M5-3o-Zwl + + + + + + + + sZm-jR-Tet + + + + + btf-8H-I6o + + + + + + + + iiD-Nj-M6o + + + + + + + + QAd-SJ-XIV + + + + + + + + cP1-yQ-cDc + + + + + + + + PzR-WX-kJx + + + + + ptR-WM-qet + + + + + BYW-Rk-rZ4 + + + + + Jft-21-b4j + + + @@ -2301,6 +2603,18 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2521,8 +2835,26 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip @@ -2537,8 +2869,40 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + From 14cb6d21a94d9a87dca96e4219af0ac898d7afba Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 21 Apr 2014 16:59:06 -0700 Subject: [PATCH 123/278] FIXED: XCC Preferences Coherency This patch fixes various UX weirdness with preferences and makes everything aligned. --- Tools/XcodeCapp/XcodeCapp/AppController.m | 6 +- .../XcodeCapp/ProcessSourceOperation.m | 17 +- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 4 - Tools/XcodeCapp/XcodeCapp/UserDefaults.m | 4 - Tools/XcodeCapp/XcodeCapp/XcodeCapp.h | 5 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 46 +- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 882 +++++------------- 7 files changed, 259 insertions(+), 705 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 09d1363b8..055c0029e 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -144,19 +144,15 @@ AppController *SharedAppControllerInstance = nil; kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], kDefaultXCCReactToInodeMod: @YES, kDefaultXCCReopenLastProject: @YES, - kDefaultXCCAutoOpenErrorsPanelOnWarnings: @YES, kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, - kDefaultXCCAutoShowNotificationOnWarnings: @YES, kDefaultXCCAutoShowNotificationOnErrors: @YES, kDefaultXCCAutoShowNotificationOnCappLint: @NO, kDefaultXCCProjectHistory: [NSArray new], kDefaultMaxRecentProjects: @20, kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], kDefaultAutoOpenXcodeProject: @YES, - kDefaultShowProcessingNotices: @YES, - kDefaultUseSymlinkWhenCreatingProject: @YES, - KDefaultUsesCappLintForEveryNotifications: @NO + kDefaultUseSymlinkWhenCreatingProject: @YES }; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index efafddd00..e4dafc0d8 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -153,12 +153,23 @@ } } - if ((status == XCCStatusCodeError && [self.xcc shouldShowErrorNotification]) || (status != XCCStatusCodeError && [self.xcc shouldShowWarningNotification])) + if ([self.xcc shouldShowErrorNotification]) [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } else if (!self.xcc.isLoadingProject) { - [self notifyUserWithTitle:notificationTitle message:notificationMessage]; + BOOL showFinalNotification = YES; + + if ([self.xcc shouldProcessWithCappLint]) + { + showFinalNotification = [self.xcc checkCappLintForPath:self.sourcePath]; + + if (!showFinalNotification) + [self.xcc showCappLintErrors]; + } + + if (showFinalNotification) + [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } } @@ -179,7 +190,7 @@ nil]; info[@"projectId"] = self.projectId; - info[@"message"] = [NSString stringWithFormat:@"%@, line %d\n%@", [self.sourcePath lastPathComponent], 0, message]; + info[@"message"] = [NSString stringWithFormat:@"Compilation issue: %@, line %d\n%@", [self.sourcePath lastPathComponent], 0, message]; if (self.isCancelled) return; diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index 37d846f4f..11f71d303 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -17,10 +17,8 @@ extern NSString * const kDefaultFirstLaunchVersion; extern NSString * const kDefaultXCCAPIMode; extern NSString * const kDefaultXCCReactToInodeMod; extern NSString * const kDefaultXCCReopenLastProject; -extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnWarnings; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; -extern NSString * const kDefaultXCCAutoShowNotificationOnWarnings; extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; extern NSString * const kDefaultXCCProjectHistory; @@ -29,8 +27,6 @@ extern NSString * const kDefaultPathModificationDates; extern NSString * const kDefaultMaxRecentProjects; extern NSString * const kDefaultLogLevel; extern NSString * const kDefaultAutoOpenXcodeProject; -extern NSString * const kDefaultShowProcessingNotices; extern NSString * const kDefaultUseSymlinkWhenCreatingProject; -extern NSString * const KDefaultUsesCappLintForEveryNotifications; #endif diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index 9672c667a..6a388b8ae 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -15,10 +15,8 @@ NSString * const kDefaultFirstLaunchVersion = @"firstLaunchVersion"; NSString * const kDefaultXCCAPIMode = @"XCCAPIMode"; NSString * const kDefaultXCCReactToInodeMod = @"XCCReactMode"; NSString * const kDefaultXCCReopenLastProject = @"XCCReopenLastProject"; -NSString * const kDefaultXCCAutoOpenErrorsPanelOnWarnings = @"XCCAutoOpenErrorsPanelOnWarnings"; NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors = @"XCCAutoOpenErrorsPanelOnErrors"; NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint = @"XCCAutoOpenErrorsPanelOnCappLint"; -NSString * const kDefaultXCCAutoShowNotificationOnWarnings = @"XCCAutoShowNotificationOnWarnings"; NSString * const kDefaultXCCAutoShowNotificationOnErrors = @"XCCAutoOpenShowNotificationErrors"; NSString * const kDefaultXCCAutoShowNotificationOnCappLint = @"XCCAutoShowNotificationOnCappLint"; NSString * const kDefaultXCCProjectHistory = @"XCCProjectHistory"; @@ -27,6 +25,4 @@ NSString * const kDefaultPathModificationDates = @"pathModificationDates"; NSString * const kDefaultMaxRecentProjects = @"maxRecentProjects"; NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; -NSString * const kDefaultShowProcessingNotices = @"showProcessingNotices"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; -NSString * const KDefaultUsesCappLintForEveryNotifications = @"usesCappLintForEveryNotifications"; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index b75187df6..018a4b1bc 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -132,7 +132,6 @@ extern NSString * const XCCProjectDidFinishLoadingNotification; - (BOOL)isXibFile:(NSString *)path; - (BOOL)isXCCIgnoreFile:(NSString *)path; -- (BOOL)shouldShowWarningNotification; - (BOOL)shouldShowErrorNotification; - (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path; @@ -146,6 +145,10 @@ extern NSString * const XCCProjectDidFinishLoadingNotification; - (NSDictionary*)createProject:(NSString*)aPath; +- (BOOL)shouldProcessWithCappLint; +- (BOOL)checkCappLintForPath:(NSString*)aPath; +- (void)showCappLintErrors; + @end @interface XcodeCapp (SnowLeopard) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 8cab4fae6..735db4924 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -730,11 +730,6 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } } - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - if ([defaults boolForKey:KDefaultUsesCappLintForEveryNotifications]) - [self checkCappLintForPath:path]; - DDLogVerbose(@"%@ %@", NSStringFromSelector(_cmd), path); } @@ -1641,22 +1636,24 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [self runTaskWithLaunchPath:executablePath arguments:args returnType:kTaskReturnTypeNone]; } -- (BOOL)shouldShowWarningNotification -{ - return [[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCAutoShowNotificationOnWarnings]; -} - - (BOOL)shouldShowErrorNotification { return [[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCAutoShowNotificationOnErrors]; } +- (BOOL)shouldProcessWithCappLint +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + return [defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] + || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]; +} + - (void)showErrors { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - if (([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && self.hasErrors) || - ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnWarnings] && self.errorList.count)) + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && self.errorList.count) { [self openErrorsPanel:self]; } @@ -1672,15 +1669,16 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]) { NSUInteger numberError = [self.errorList count]; - int i = 0; - for (i = 0; i < numberError; i++) + if (numberError) { - NSDictionary *error = [self.errorList objectAtIndex:i]; + NSDictionary *error = [self.errorList objectAtIndex:0]; + NSString *filename = [error objectForKey:@"path"]; + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInteger:self.projectId] , @"projectId", - @"Capp_lint error", @"title", - [error objectForKey:@"message"] , @"message", + @"Code Style Issues", @"title", + filename.lastPathComponent , @"message", nil]; [self wantUserNotificationWithInfo:dict]; @@ -1754,8 +1752,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, if ([info[@"projectId"] intValue] != self.projectId) return; - if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultShowProcessingNotices]) - [self notifyUserWithTitle:info[@"title"] message:info[@"message"]]; + [self notifyUserWithTitle:info[@"title"] message:info[@"message"]]; } - (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification @@ -1770,7 +1767,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [self performSelectorInBackground:@selector(checkCappLintForPath:) withObject:self.projectPath]; } -- (void)checkCappLintForPath:(NSString*)aPath +- (BOOL)checkCappLintForPath:(NSString*)aPath { DDLogVerbose(@"Checking path %@ with capp_lint", aPath); @@ -1787,7 +1784,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSInteger status = [taskResult[@"status"] intValue]; if (status == 0) - return; + return YES; NSString *response = taskResult[@"response"]; NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; @@ -1816,7 +1813,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; line = [errorWithoutPath substringToIndex:positionOfSecondColon]; - NSString *messageError = [NSString stringWithFormat:@"capp_lint error in %@ \n%@", path, errorWithoutPath]; + NSString *messageError = [NSString stringWithFormat:@"Code style issue: %@ \n%@", path.lastPathComponent, errorWithoutPath]; NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:[line intValue]], @"line", @@ -1827,11 +1824,10 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [self.errorListController addObject:dict]; } - - [self showCappLintErrors]; - self.isProcessing = NO; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + + return NO; } @end diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index ffd71b0e2..6a0ad009d 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,10 +2,10 @@ 1060 - 13C64 + 13D43 5056 - 1265.19 - 697.40 + 1265.20 + 698.00 5056 5056 @@ -106,6 +106,14 @@ + + + Verify Project Code Style + + 2147483647 + + + Synchronize Project @@ -140,14 +148,6 @@ - - - Check project with capp_lint - - 2147483647 - - - YES @@ -216,7 +216,7 @@ - + 256 @@ -224,8 +224,6 @@ 268 {{164, 20}, {203, 98}} - - YES 68157504 @@ -261,7 +259,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 266 {{164, 126}, {221, 74}} - YES @@ -309,7 +306,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{17, 63}, {128, 128}} - YES @@ -329,8 +325,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {402, 202} - - {{0, 0}, {1440, 878}} @@ -342,13 +336,13 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 2 {{1826, 825}, {550, 237}} 1618478080 - Errors & Warnings + Reporting NSPanel {315, 77} - + 256 @@ -364,7 +358,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 256 {550, 201} - YES NO @@ -441,7 +434,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{1, 1}, {550, 201}} - @@ -452,7 +444,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2147483392 {{1, 273}, {512, 16}} - NO 1 @@ -464,7 +455,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2147483392 {{535, 1}, {16, 45}} - NO @@ -473,7 +463,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{-1, 35}, {552, 203}} - 133682 @@ -489,7 +478,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 289 {{352, 8}, {85, 19}} - {250, 750} YES @@ -518,7 +506,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 292 {{20, 8}, {85, 19}} - {250, 750} YES @@ -543,8 +530,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 289 {{445, 8}, {85, 19}} - - {250, 750} YES @@ -565,11 +550,9 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {550, 237} - - - {{1440, -180}, {1920, 1058}} + {{0, 0}, {1440, 878}} {315, 99} {10000000000000, 10000000000000} errorPanel @@ -578,14 +561,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 3 2 - {{1964, 505}, {487, 401}} + {{1964, 505}, {393, 357}} 1618478080 Preferences NSWindow - + 256 @@ -601,7 +584,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 81}, {271, 18}} - YES @@ -635,7 +617,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 51}, {241, 18}} - YES @@ -660,7 +641,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 109}, {298, 18}} - YES @@ -685,7 +665,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{15, 20}, {106, 17}} - YES @@ -705,7 +684,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{124, 14}, {56, 26}} - YES @@ -778,15 +756,13 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO - {{1, 1}, {451, 139}} + {{1, 1}, {357, 139}} - - {{17, 231}, {453, 155}} + {{17, 187}, {359, 155}} - {0, 0} @@ -818,93 +794,17 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 274 - - - 268 - {{16, 153}, {363, 18}} - - - - YES - - -2080374784 - 0 - Show notifications when individual files are processed - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 125}, {363, 18}} - - - - YES - - -2080374784 - 0 - Check with capp_lint when files are processed - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{28, 72}, {81, 18}} - - - - YES - - -2080374784 - 0 - Warnings - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - 268 - {{130, 72}, {60, 18}} + {{146, 12}, {171, 18}} - - + YES -2080374784 0 - Errors + Open reporting window 1211912448 @@ -918,43 +818,17 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO - - - 268 - {{215, 72}, {82, 18}} - - - - YES - - -2080374784 - 0 - Capp_lint - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - 268 - {{16, 96}, {381, 17}} + {{16, 39}, {126, 17}} - - + YES 68157504 272630784 - Automatically open Errors & Warnings & Capp_lint panel on: + Compilation issues: @@ -963,43 +837,17 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO 1 - - - 268 - {{28, 17}, {81, 18}} - - - - YES - - -2080374784 - 0 - Warnings - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - 268 - {{130, 17}, {60, 18}} + {{146, 38}, {171, 18}} - - + YES -2080374784 0 - Errors + Show notification 1211912448 @@ -1013,61 +861,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO - - - 268 - {{215, 17}, {82, 18}} - - - - YES - - -2080374784 - 0 - Capp_lint - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 41}, {419, 17}} - - - - YES - - 68157504 - 272630784 - Automatically show Errors & Warnings & Capp_lint notification on: - - - - - - NO - 1 - - {{1, 1}, {451, 184}} + {{1, 1}, {357, 66}} - - + - {{17, 16}, {453, 200}} + {{17, 101}, {359, 82}} - {0, 0} @@ -1087,13 +888,114 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 2 NO + + + 12 + + + + 274 + + + + 268 + {{146, 12}, {171, 18}} + + YES + + -2080374784 + 0 + Open reporting window + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{146, 37}, {171, 18}} + + + YES + + -2080374784 + 0 + Show notification + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 38}, {126, 17}} + + + YES + + 68157504 + 272630784 + Code style issues: + + + + + + NO + 1 + + + {{1, 1}, {357, 65}} + + + _NS:11 + + + {{17, 16}, {359, 81}} + + + _NS:9 + {0, 0} + + 67108864 + 0 + Code style + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + - {487, 401} - - + {393, 357} - {{1440, -180}, {1920, 1058}} + {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} xcc-prefs YES @@ -1108,7 +1010,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - + 256 @@ -1120,7 +1022,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{0, 8}, {716, 654}} - YES 1 @@ -1130,8 +1031,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {716, 662} - - {{0, 0}, {1440, 878}} @@ -1359,30 +1258,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 849 - - - save: - - - - 854 - - - - save: - - - - 3Np-aC-Jh1 - - - - save: - - - - 792 - save: @@ -1391,6 +1266,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 821 + + + save: + + + + Buu-6t-pce + save: @@ -1399,14 +1282,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA XTE-kN-O4x - - - save: - - - - tWg-qA-1Jq - save: @@ -1415,14 +1290,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 6Xe-Bt-eXK - - - save: - - - - Buu-6t-pce - openXcodeProject: @@ -1689,26 +1556,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 762 - - - values.XCCAutoOpenErrorsPanelOnWarnings - - - - - - value: values.XCCAutoOpenErrorsPanelOnWarnings - value - values.XCCAutoOpenErrorsPanelOnWarnings - - NSValidatesImmediately - - - 2 - - - 823 - values.maxRecentProjects @@ -1781,26 +1628,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 851 - - - values.showProcessingNotices - - - - - - value: values.showProcessingNotices - value - values.showProcessingNotices - - NSValidatesImmediately - - - 2 - - - 856 - projectPath.length @@ -1889,6 +1716,22 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA du5-hg-MfC + + + enabled: values.usesCappLintForEveryNotifications + + + + + + enabled: values.usesCappLintForEveryNotifications + enabled + values.usesCappLintForEveryNotifications + 2 + + + J8w-G4-Pzy + projectPath.length @@ -1927,55 +1770,31 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - values.usesCappLintForEveryNotifications - + enabled: values.usesCappLintForEveryNotifications + - + - value: values.usesCappLintForEveryNotifications - value + enabled: values.usesCappLintForEveryNotifications + enabled values.usesCappLintForEveryNotifications - - NSValidatesImmediately - - 2 - JL3-wG-7ik + 5nL-79-ZXW - value: values.XCCAutoShowNotificationOnWarnings - - - - - - value: values.XCCAutoShowNotificationOnWarnings - value - values.XCCAutoShowNotificationOnWarnings - - NSValidatesImmediately - - - 2 - - - IHN-Iv-1G1 - - - - value: values.XCCAutoShowNotificationOnErrors + value: values.XCCAutoOpenShowNotificationErrors - value: values.XCCAutoShowNotificationOnErrors + value: values.XCCAutoOpenShowNotificationErrors value - values.XCCAutoShowNotificationOnErrors + values.XCCAutoOpenShowNotificationErrors NSValidatesImmediately @@ -1983,7 +1802,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 2 - 2Es-cp-MhX + j0c-o6-KBW @@ -2030,12 +1849,12 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - + @@ -2274,6 +2093,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + @@ -2386,58 +2206,12 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 848 - - - - - - - - - 843 - - - - - - - - 844 - - - - - RPS-9d-lvV - - - - - - - - TXI-VH-VwH - - - - - 789 - - - - - - - - 790 - - - 819 @@ -2523,27 +2297,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - - 2M5-3o-Zwl - - - - - - - - sZm-jR-Tet - - - - - btf-8H-I6o - - - - - - iiD-Nj-M6o @@ -2552,26 +2305,41 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + + BYW-Rk-rZ4 + + + + + qFm-3c-NH7 + + + + + + + + + + 2M5-3o-Zwl + + + + + + + + sZm-jR-Tet + + + QAd-SJ-XIV - - - - cP1-yQ-cDc - - - - - - - - PzR-WX-kJx - - + ptR-WM-qet @@ -2579,14 +2347,17 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - BYW-Rk-rZ4 - - + cwr-C6-dkY + + + + + - Jft-21-b4j - - + dTw-kK-6IJ + + @@ -2732,20 +2503,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -2808,20 +2565,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -2837,12 +2580,8 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - ToolTip @@ -2855,36 +2594,12 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - If this is checked, when a Cappuccino project is opened, the file who is currently processing will be checked with capp_lint - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + ToolTip @@ -2901,6 +2616,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2909,167 +2625,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - - - - AppController - NSObject - - id - id - id - id - id - id - - - - createProject: - id - - - loadProject: - id - - - openAbout: - id - - - openHelp: - id - - - openPreferences: - id - - - showInFinder: - id - - - - NSPanel - PDFView - NSWindow - NSMenuItem - NSMenuItem - NSMenuItem - NSUserDefaultsController - NSWindow - NSMenu - XcodeCapp - - - - aboutWindow - NSPanel - - - helpView - PDFView - - - helpWindow - NSWindow - - - menuItemHistory - NSMenuItem - - - menuItemOpenProject - NSMenuItem - - - menuItemShowInFinder - NSMenuItem - - - preferencesController - NSUserDefaultsController - - - preferencesWindow - NSWindow - - - statusMenu - NSMenu - - - xcc - XcodeCapp - - - - IBProjectSource - ./Classes/AppController.h - - - - XcodeCapp - NSObject - - id - id - id - id - id - id - - - - checkProjectWithCappLint: - id - - - clearErrors: - id - - - openErrorInEditor: - id - - - openErrorsPanel: - id - - - openXcodeProject: - id - - - synchronizeProject: - id - - - - NSArrayController - NSTableView - NSPanel - - - - errorListController - NSArrayController - - - errorTable - NSTableView - - - errorsPanel - NSPanel - - - - IBProjectSource - ./Classes/XcodeCapp.h - - - - + 0 IBCocoaFramework YES From f14add279185abf3987a42816ee6cc068cd02eab Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 21 Apr 2014 17:30:12 -0700 Subject: [PATCH 124/278] New: open reporting window when clickin on a notification in xCodeCapp --- Tools/XcodeCapp/XcodeCapp/AppController.h | 2 +- Tools/XcodeCapp/XcodeCapp/AppController.m | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.h b/Tools/XcodeCapp/XcodeCapp/AppController.h index 7278bd236..0e41cc26f 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.h +++ b/Tools/XcodeCapp/XcodeCapp/AppController.h @@ -22,7 +22,7 @@ @class XcodeCapp; -@interface AppController : NSObject +@interface AppController : NSObject @property (strong) IBOutlet NSMenu *statusMenu; @property (unsafe_unretained) IBOutlet NSMenuItem *menuItemHistory; diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 055c0029e..551f74751 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -111,7 +111,10 @@ AppController *SharedAppControllerInstance = nil; [[NSApplication sharedApplication] terminate:self]; return; } - + + NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; + center.delegate = self; + // If we were opened from the command line, self.pathToOpenAtLaunch will be set. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -527,4 +530,12 @@ AppController *SharedAppControllerInstance = nil; self.menuItemHistory.enabled = [projectHistory count] > 0; } +- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification +{ + if ([[self.xcc errorList] count]) + [self.xcc openErrorsPanel:self]; + + [center removeDeliveredNotification:notification]; +} + @end From 30c48df1f082bf6466a419a2178a55c0ecce3279 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 21 Apr 2014 17:34:39 -0700 Subject: [PATCH 125/278] Fixed: delegate of the notificationCenter is in AppController --- Tools/XcodeCapp/XcodeCapp/AppController.h | 2 +- Tools/XcodeCapp/XcodeCapp/AppController.m | 11 --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 104 ++++++++++++---------- 3 files changed, 59 insertions(+), 58 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.h b/Tools/XcodeCapp/XcodeCapp/AppController.h index 0e41cc26f..7278bd236 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.h +++ b/Tools/XcodeCapp/XcodeCapp/AppController.h @@ -22,7 +22,7 @@ @class XcodeCapp; -@interface AppController : NSObject +@interface AppController : NSObject @property (strong) IBOutlet NSMenu *statusMenu; @property (unsafe_unretained) IBOutlet NSMenuItem *menuItemHistory; diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 551f74751..079c89b55 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -112,9 +112,6 @@ AppController *SharedAppControllerInstance = nil; return; } - NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; - center.delegate = self; - // If we were opened from the command line, self.pathToOpenAtLaunch will be set. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -530,12 +527,4 @@ AppController *SharedAppControllerInstance = nil; self.menuItemHistory.enabled = [projectHistory count] > 0; } -- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification -{ - if ([[self.xcc errorList] count]) - [self.xcc openErrorsPanel:self]; - - [center removeDeliveredNotification:notification]; -} - @end diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 735db4924..aeb2a13a7 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1713,53 +1713,8 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return index != NSNotFound; } -#pragma mark - User notifications -- (NSString *)applicationNameForGrowl -{ - return @"XcodeCapp"; -} - -- (void)notifyUserWithTitle:(NSString *)aTitle message:(NSString *)aMessage -{ - if ([NSUserNotificationCenter class]) - { - NSUserNotification *note = [NSUserNotification new]; - note.title = aTitle; - note.informativeText = aMessage; - - [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:note]; - } - else - { - [GrowlApplicationBridge notifyWithTitle:aTitle - description:aMessage - notificationName:GROWL_NOTIFICATIONS_DEFAULT - iconData:nil - priority:0 - isSticky:NO - clickContext:nil]; - } -} - -- (void)wantUserNotificationWithInfo:(NSDictionary *)info -{ - [self performSelectorOnMainThread:@selector(notifyUserWithInfo:) withObject:info waitUntilDone:NO]; -} - -- (void)notifyUserWithInfo:(NSDictionary *)info -{ - if ([info[@"projectId"] intValue] != self.projectId) - return; - - [self notifyUserWithTitle:info[@"title"] message:info[@"message"]]; -} - -- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification -{ - // Notification Center may decide not to show a notification. We always want them to show. - return YES; -} +#pragma mark - capp_lint - (IBAction)checkProjectWithCappLint:(id)aSender { @@ -1830,6 +1785,63 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return NO; } + +#pragma mark - User notifications + +- (NSString *)applicationNameForGrowl +{ + return @"XcodeCapp"; +} + +- (void)notifyUserWithTitle:(NSString *)aTitle message:(NSString *)aMessage +{ + if ([NSUserNotificationCenter class]) + { + NSUserNotification *note = [NSUserNotification new]; + note.title = aTitle; + note.informativeText = aMessage; + + [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:note]; + } + else + { + [GrowlApplicationBridge notifyWithTitle:aTitle + description:aMessage + notificationName:GROWL_NOTIFICATIONS_DEFAULT + iconData:nil + priority:0 + isSticky:NO + clickContext:nil]; + } +} + +- (void)wantUserNotificationWithInfo:(NSDictionary *)info +{ + [self performSelectorOnMainThread:@selector(notifyUserWithInfo:) withObject:info waitUntilDone:NO]; +} + +- (void)notifyUserWithInfo:(NSDictionary *)info +{ + if ([info[@"projectId"] intValue] != self.projectId) + return; + + [self notifyUserWithTitle:info[@"title"] message:info[@"message"]]; +} + +- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification +{ + // Notification Center may decide not to show a notification. We always want them to show. + return YES; +} + +- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification +{ + if ([self.errorList count]) + [self openErrorsPanel:self]; + + [center removeDeliveredNotification:notification]; +} + @end From e8fef8104d2073d5ff3d87736510552cbddaec51 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 21 Apr 2014 17:44:13 -0700 Subject: [PATCH 126/278] Fixed: check the entire project with capp_lint doesn't open the reporting window or a notification --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.h | 3 ++- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index 018a4b1bc..d127fca46 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -45,7 +45,8 @@ enum { extern NSString * const XCCConversionDidStartNotification; extern NSString * const XCCConversionDidEndNotification; extern NSString * const XCCProjectDidFinishLoadingNotification; - +extern NSString * const XCCCappLintDidStartNotification; +extern NSString * const XCCCappLintDidEndNotification; @interface XcodeCapp : NSObject diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index aeb2a13a7..6e811ffe5 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -74,6 +74,8 @@ static NSPredicate * XCCDirectoriesToIgnorePredicate = nil; // An array of the default predicates used to ignore paths. static NSArray *XCCDefaultIgnoredPathPredicates = nil; +NSString * const XCCCappLintDidStartNotification = @"XCCCappLintDidStartNotification"; +NSString * const XCCCappLintDidEndNotification = @"XCCCappLintDidEndNotification"; @interface XcodeCapp () @@ -1719,15 +1721,26 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (IBAction)checkProjectWithCappLint:(id)aSender { [self clearErrors:self]; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:self selector:@selector(cappLintDidEndNotification:) name:XCCCappLintDidEndNotification object:nil]; + [self performSelectorInBackground:@selector(checkCappLintForPath:) withObject:self.projectPath]; } +- (void)cappLintDidEndNotification:(NSNotification*)aNotification +{ + [self showCappLintErrors]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCCappLintDidEndNotification object:nil]; +} + - (BOOL)checkCappLintForPath:(NSString*)aPath { DDLogVerbose(@"Checking path %@ with capp_lint", aPath); self.isProcessing = YES; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidStartNotification object:self]; NSString *baseDirectory = [NSString stringWithFormat:@"--basedir='%@'", self.projectPath]; NSArray *arguments = [NSArray arrayWithObjects:baseDirectory, aPath, nil]; @@ -1781,6 +1794,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, self.isProcessing = NO; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidEndNotification object:self]; return NO; } From 41ed80e0c4cb462b0a6f35a4c70acab764dffb9c Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 21 Apr 2014 19:11:48 -0700 Subject: [PATCH 127/278] Fixed: capp_lint in xCodeCapp doesn't care about xcodecapp-ignore --- .../XcodeCapp/ProcessSourceOperation.m | 2 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.h | 5 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 56 +++++++++++++++---- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index e4dafc0d8..81e9b7cf6 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -162,7 +162,7 @@ if ([self.xcc shouldProcessWithCappLint]) { - showFinalNotification = [self.xcc checkCappLintForPath:self.sourcePath]; + showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]]; if (!showFinalNotification) [self.xcc showCappLintErrors]; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index d127fca46..88fbac78a 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -110,6 +110,9 @@ extern NSString * const XCCCappLintDidEndNotification; // A list of errors generated from the current batch of source processing @property NSMutableArray *errorList; +// A list of files name who can be processed, based on xcapp-ignore and path pf the project +@property NSMutableArray *xCodeCappTargetedFiles; + // Panel, table and controller used to display errors @property (strong) IBOutlet NSPanel *errorsPanel; @property (unsafe_unretained) IBOutlet NSTableView *errorTable; @@ -147,7 +150,7 @@ extern NSString * const XCCCappLintDidEndNotification; - (NSDictionary*)createProject:(NSString*)aPath; - (BOOL)shouldProcessWithCappLint; -- (BOOL)checkCappLintForPath:(NSString*)aPath; +- (BOOL)checkCappLintForPath:(NSArray*)paths; - (void)showCappLintErrors; @end diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 6e811ffe5..ac7ac96a7 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -319,9 +319,10 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [self clearErrors:self]; [self computeIgnoredPaths]; - + [self prepareXcodeSupport]; [self populateXcodeProject]; + [self populatexCodeCappTargetedFiles]; [self waitForOperationQueueToFinishWithSelector:@selector(projectDidFinishLoading)]; } @@ -374,6 +375,25 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return projectCompatibilityVersion.doubleValue >= appCompatibilityVersion; } +- (void)populatexCodeCappTargetedFiles +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSDirectoryEnumerator *filesOfProject = [fm enumeratorAtPath:self.projectPath]; + NSString *filename; + + self.xCodeCappTargetedFiles = [NSMutableArray array]; + + while ((filename = [filesOfProject nextObject] )) { + + NSString *fullPath = [self.projectPath stringByAppendingPathComponent:filename]; + + if (![self isSourceFile:fullPath]) + continue; + + [self.xCodeCappTargetedFiles addObject:fullPath]; + } +} + - (void)createXcodeProject { if ([self.fm fileExistsAtPath:self.xcodeProjectPath]) @@ -1361,6 +1381,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return [path substringFromIndex:self.projectPath.length + 1]; } + #pragma mark - Shadow Files Management - (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path @@ -1725,7 +1746,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(cappLintDidEndNotification:) name:XCCCappLintDidEndNotification object:nil]; - [self performSelectorInBackground:@selector(checkCappLintForPath:) withObject:self.projectPath]; + [self performSelectorInBackground:@selector(checkCappLintForPath:) withObject:self.xCodeCappTargetedFiles]; } - (void)cappLintDidEndNotification:(NSNotification*)aNotification @@ -1734,16 +1755,22 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCCappLintDidEndNotification object:nil]; } -- (BOOL)checkCappLintForPath:(NSString*)aPath +- (BOOL)checkCappLintForPath:(NSArray*)paths { - DDLogVerbose(@"Checking path %@ with capp_lint", aPath); + DDLogVerbose(@"Checking path %@ with capp_lint", paths); + + NSUInteger numberOfFiles = [paths count]; + + if (!numberOfFiles) + return YES; self.isProcessing = YES; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidStartNotification object:self]; NSString *baseDirectory = [NSString stringWithFormat:@"--basedir='%@'", self.projectPath]; - NSArray *arguments = [NSArray arrayWithObjects:baseDirectory, aPath, nil]; + NSMutableArray *arguments = [NSMutableArray arrayWithObjects:baseDirectory, nil]; + [arguments addObjectsFromArray:paths]; NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"capp_lint"] arguments:arguments @@ -1752,7 +1779,11 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSInteger status = [taskResult[@"status"] intValue]; if (status == 0) + { + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidEndNotification object:self]; return YES; + } NSString *response = taskResult[@"response"]; NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; @@ -1761,21 +1792,26 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [errors removeLastObject]; [errors removeObjectAtIndex:0]; - NSInteger i = 0; NSInteger numberOfErrors = [errors count]; + NSInteger i = 0; + NSString *path; + + if (numberOfFiles == 1) + path = [paths objectAtIndex:0]; for (i = 0; i < numberOfErrors; i++) { NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; - NSString *firstCaract = [NSString stringWithFormat:@"%c" ,[error characterAtIndex:0]]; - NSString *path; NSString *line; + NSString *firstCaract = [NSString stringWithFormat:@"%c" ,[error characterAtIndex:0]]; if ([[NSScanner scannerWithString:firstCaract] scanInt:nil]) - error = (NSMutableString*)[NSString stringWithFormat:@"%@:%@",aPath,error]; + error = (NSMutableString*)[NSString stringWithFormat:@"%@:%@", path, error]; NSInteger positionOfFirstColon = [error rangeOfString:@":"].location; - path = [error substringToIndex:positionOfFirstColon]; + + if (numberOfFiles > 1) + path = [error substringToIndex:positionOfFirstColon]; NSString *errorWithoutPath = [error substringFromIndex:(positionOfFirstColon + 1)]; NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; From e8528271ee1e782b14dec0414593fa91731022fc Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 22 Apr 2014 11:42:19 -0700 Subject: [PATCH 128/278] Fixed: tableView doens't update its content with capp_lint --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index ac7ac96a7..3fe93840e 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1795,6 +1795,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSInteger numberOfErrors = [errors count]; NSInteger i = 0; NSString *path; + NSMutableArray *dicts = [NSMutableArray array]; if (numberOfFiles == 1) path = [paths objectAtIndex:0]; @@ -1825,9 +1826,11 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, path, @"path", nil]; - [self.errorListController addObject:dict]; + [dicts addObject:dict]; } + [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:NO]; + self.isProcessing = NO; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidEndNotification object:self]; @@ -1835,6 +1838,10 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return NO; } +- (void)cappLintConversionDidGenerateError:(NSArray*)errors +{ + [self.errorListController addObjects:errors]; +} #pragma mark - User notifications From 07f7ad0a050a2d928560b128676299b1cc84553b Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 23 Apr 2014 11:28:41 -0700 Subject: [PATCH 129/278] FIXED: Crash when hit CMD+Z on a control in a CPPopover Previously, there were collision in addition delegate bitmask identifiers between CPWindow and _CPPopoverWindow. This patch fixes this collision --- AppKit/_CPPopoverWindow.j | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index cc80bc292..852136230 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -35,9 +35,11 @@ CPClosableOnBlurWindowMask = 1 << 4; CPPopoverAppearanceMinimal = 0; CPPopoverAppearanceHUD = 1; -var _CPPopoverWindow_shouldClose_ = 1 << 0, - _CPPopoverWindow_didClose_ = 1 << 1, - _CPPopoverWindow_didShow_ = 1 << 2; +// we don't start from 1 because CPWindow and so CPPanel already +// has this delegate bitmask identifier for 1, 2 and 3. +var _CPPopoverWindow_shouldClose_ = 1 << 4, + _CPPopoverWindow_didClose_ = 1 << 5, + _CPPopoverWindow_didShow_ = 1 << 6; /*! From af37616e4828a8a3e00416f41dfc6d3878a68d6e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 29 Apr 2014 16:43:32 -0700 Subject: [PATCH 130/278] =?UTF-8?q?Fixed:=20CPToolTip=20still=20shown=20wh?= =?UTF-8?q?en=20closing=20window=20asynchronous=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When closing a windows asynchronous, the tooltip of views of the window could stay shown. Fixed #2110 --- AppKit/_CPToolTip.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/_CPToolTip.j b/AppKit/_CPToolTip.j index 96a9b7b9e..52a0d2cac 100644 --- a/AppKit/_CPToolTip.j +++ b/AppKit/_CPToolTip.j @@ -80,6 +80,7 @@ var _CPToolTipHeight = 24.0, [_CPToolTip invalidateCurrentToolTipIfNeeded]; _CPToolTipCurrentToolTip = [_CPToolTip toolTipWithString:[aView toolTip]]; [_CPToolTipCurrentToolTip setPlatformWindow:[[aView window] platformWindow]]; + [[aView window] addChildWindow:_CPToolTipCurrentToolTip ordered:CPWindowAbove]; }; _CPToolTipCurrentToolTipTimer = [CPTimer scheduledTimerWithTimeInterval:_CPToolTipDelay From de4bc6715928eae69e1a142bbc4c3336efe2ddd3 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 30 Apr 2014 13:24:18 -0700 Subject: [PATCH 131/278] Fixed: the way to add the tooltip's window is wrong Previously when adding a tooltip, we added it to the platformWindow. Now we add id to the window of the targeted view. Fixed #2110 --- AppKit/_CPToolTip.j | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/AppKit/_CPToolTip.j b/AppKit/_CPToolTip.j index 52a0d2cac..25594d920 100644 --- a/AppKit/_CPToolTip.j +++ b/AppKit/_CPToolTip.j @@ -40,6 +40,7 @@ var _CPToolTipHeight = 24.0, */ @implementation _CPToolTip : CPWindow { + CPWindow _toolTipWindow; CPTextField _content; } @@ -78,9 +79,7 @@ var _CPToolTipHeight = 24.0, var callbackFunction = function() { [_CPToolTip invalidateCurrentToolTipIfNeeded]; - _CPToolTipCurrentToolTip = [_CPToolTip toolTipWithString:[aView toolTip]]; - [_CPToolTipCurrentToolTip setPlatformWindow:[[aView window] platformWindow]]; - [[aView window] addChildWindow:_CPToolTipCurrentToolTip ordered:CPWindowAbove]; + _CPToolTipCurrentToolTip = [_CPToolTip toolTipWithString:[aView toolTip] toolTipWindow:[aView window]]; }; _CPToolTipCurrentToolTipTimer = [CPTimer scheduledTimerWithTimeInterval:_CPToolTipDelay @@ -92,9 +91,9 @@ var _CPToolTipHeight = 24.0, /*! Returns an initialized _CPToolTip with the given text and attach it to given view. @param aString the content of the tooltip */ -+ (_CPToolTip)toolTipWithString:(CPString)aString ++ (_CPToolTip)toolTipWithString:(CPString)aString toolTipWindow:(CPWindow)aWindow { - var tooltip = [[_CPToolTip alloc] initWithString:aString styleMask:_CPToolTipWindowMask]; + var tooltip = [[_CPToolTip alloc] initWithString:aString styleMask:_CPToolTipWindowMask toolTipWindow:aWindow]; [tooltip showToolTip]; @@ -159,7 +158,7 @@ var _CPToolTipHeight = 24.0, @param aString the content of the tooltip @param aStyleMask the tooltip's style mask */ -- (id)initWithString:(CPString)aString styleMask:(unsigned)aStyleMask +- (id)initWithString:(CPString)aString styleMask:(unsigned)aStyleMask toolTipWindow:(CPWindow)aWindow { var toolTipFrame = CGRectMake(0.0, 0.0, 250.0, _CPToolTipHeight), layout = [_CPToolTip computeCorrectSize:toolTipFrame.size text:aString], @@ -169,6 +168,7 @@ var _CPToolTipHeight = 24.0, if (self = [super initWithContentRect:toolTipFrame styleMask:aStyleMask]) { + _toolTipWindow = aWindow; _constrainsToUsableScreen = NO; textFrameSize.height += 4; @@ -204,7 +204,7 @@ var _CPToolTipHeight = 24.0, - (void)showToolTip { var mousePosition = [[CPApp currentEvent] globalLocation], - nativeRect = [[self platformWindow] nativeContentRect]; + nativeRect = [[_toolTipWindow platformWindow] nativeContentRect]; mousePosition.y += 20; @@ -218,7 +218,8 @@ var _CPToolTipHeight = 24.0, mousePosition.y = mousePosition.y - CGRectGetHeight([self frame]) - 40; [self setFrameOrigin:mousePosition]; - [self orderFront:nil]; + + [_toolTipWindow addChildWindow:self ordered:CPWindowAbove]; } @end From 4dadf0cb9520ce8b287f407779bc3a3b9eec70af Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 30 Apr 2014 15:38:13 -0700 Subject: [PATCH 132/278] Fixed: CPPopover doesn't change his frame when with setContentSize Previously when we changed the contentSize of an open popover, nothing happens. Now, we the frame change and it's animated if needed --- AppKit/CPPopover.j | 1 + AppKit/_CPPopoverWindow.j | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index c887fcf7c..6685ca92c 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -151,6 +151,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, - (void)setContentSize:(CGSize)aSize { [[_contentViewController view] setFrameSize:aSize]; + [_popoverWindow updateFrame]; } /*! diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 852136230..47ffea603 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -170,9 +170,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (![_targetView window]) return; - var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; - - [self setFrameOrigin:point]; + [self updateFrame]; } } @@ -366,6 +364,20 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return CPBrowserStyleProperty('transition') && CPBrowserStyleProperty('transitionend'); } +/*! + @ignore +*/ +- (void)updateFrame +{ + var rect = CGRectMakeCopy([self frameRectForContentRect:[[self contentView] frame]]), + point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + + rect.origin = point; + + [self setFrame:rect display:YES animate:_animates]; +} + + #pragma mark - #pragma mark Actions From 9d694a1589bc2a2ddb29c86e049bd8db01d368ce Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 30 Apr 2014 16:23:00 -0700 Subject: [PATCH 133/278] Fixed: setContentSize doesn't work when called several times Previously when calling setContentSize several times, the final frame of the view was wrong. I removed the animation as well. This doesn't work, and need a lot more of implementation. --- AppKit/CPPopover.j | 3 +-- AppKit/_CPPopoverWindow.j | 17 ++++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index 6685ca92c..e382b1a58 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -150,8 +150,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (void)setContentSize:(CGSize)aSize { - [[_contentViewController view] setFrameSize:aSize]; - [_popoverWindow updateFrame]; + [_popoverWindow updateFrameWithSize:aSize]; } /*! diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 47ffea603..ddff584c5 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -170,7 +170,9 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (![_targetView window]) return; - [self updateFrame]; + var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + + [self setFrameOrigin:point]; } } @@ -367,17 +369,18 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, /*! @ignore */ -- (void)updateFrame +- (void)updateFrameWithSize:(CGSize)aSize { - var rect = CGRectMakeCopy([self frameRectForContentRect:[[self contentView] frame]]), - point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + var rect = CGRectMakeZero(); + rect.size = aSize; + rect.origin = [[self contentView] frameOrigin]; - rect.origin = point; + [self setFrame:[self frameRectForContentRect:rect]]; - [self setFrame:rect display:YES animate:_animates]; + var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + [self setFrameOrigin:point]; } - #pragma mark - #pragma mark Actions From 5bf5388552bfad2bf5338d1853c836d82ae63e97 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 30 Apr 2014 17:05:51 -0700 Subject: [PATCH 134/278] FIXED: setContentSize: to work when no window is initialized yet --- AppKit/CPPopover.j | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index e382b1a58..a03885e80 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -150,7 +150,10 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (void)setContentSize:(CGSize)aSize { - [_popoverWindow updateFrameWithSize:aSize]; + if (!_popoverWindow) + [[_contentViewController view] setFrameSize:aSize]; + else + [_popoverWindow updateFrameWithSize:aSize]; } /*! From 4806c52ba66a9ffbae78286a4fe433fe44b31c85 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 1 May 2014 18:52:28 -0700 Subject: [PATCH 135/278] New: updating Cappuccino from xCodeCapp This PR add the possibility to update cappuccino from xCodeCapp. How does it work : - Create a temporary file for cappuccino - Download Cappuccino. The downloaded Cappuccino will be either the last release or the last version of the master branch (option in the preference) - Make a jake clean - Make a jake install There is a small window to follow the progress of the install (3 steps ; download - clean - install). If there is a issue with the install, the developer will be notify with which step failed (xCodeCapp internally log everything). The environment var CAPP_NOSUDO is set to 1. It means, if a developer did a bootstrap or a previous jake install in sudo, the update of cappuccino will fail. Changed the credit of xCodeCapp and pass it to the version 3.1 --- Tools/XcodeCapp/XcodeCapp/AppController.m | 7 + Tools/XcodeCapp/XcodeCapp/Info.plist | 8 +- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 1 + Tools/XcodeCapp/XcodeCapp/UserDefaults.m | 1 + Tools/XcodeCapp/XcodeCapp/XcodeCapp.h | 9 + Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 255 ++++++- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 635 +++++++++++++++++- 7 files changed, 885 insertions(+), 31 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 079c89b55..f6af37f88 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -527,4 +527,11 @@ AppController *SharedAppControllerInstance = nil; self.menuItemHistory.enabled = [projectHistory count] > 0; } +#pragma mark - Cappuccino methods + +- (IBAction)updateCappuccino:(id)sender +{ + [self.xcc performSelectorInBackground:@selector(updateCappuccino) withObject:nil]; +} + @end diff --git a/Tools/XcodeCapp/XcodeCapp/Info.plist b/Tools/XcodeCapp/XcodeCapp/Info.plist index 2ac7f472c..7f59ef93d 100644 --- a/Tools/XcodeCapp/XcodeCapp/Info.plist +++ b/Tools/XcodeCapp/XcodeCapp/Info.plist @@ -2,6 +2,10 @@ + XCCLastCappuccinoReleaseURL + https://github.com/cappuccino/cappuccino/archive/0.9.7.zip + XCCLastCappuccinoMasterBranchURL + https://github.com/cappuccino/cappuccino/archive/master.zip CFBundleDevelopmentRegion English CFBundleExecutable @@ -17,11 +21,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.0.6 + 3.1 CFBundleSignature ???? CFBundleVersion - 3.0.6 + 3.1 LSApplicationCategoryType public.app-category.developer-tools LSUIElement diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index 11f71d303..a89476cd0 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -28,5 +28,6 @@ extern NSString * const kDefaultMaxRecentProjects; extern NSString * const kDefaultLogLevel; extern NSString * const kDefaultAutoOpenXcodeProject; extern NSString * const kDefaultUseSymlinkWhenCreatingProject; +extern NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch; #endif diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index 6a388b8ae..aee5793ae 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -26,3 +26,4 @@ NSString * const kDefaultMaxRecentProjects = @"maxRecentProjects"; NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; +NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index 88fbac78a..09f9ae64f 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -101,6 +101,9 @@ extern NSString * const XCCCappLintDidEndNotification; // Whether we are currently processing source files @property BOOL isProcessing; +// Whether we are currently processing source files +@property BOOL isCappuccinoUpdating; + // Whether $CAPP_BUILD is defined or not @property BOOL isCappBuildDefined; @@ -118,6 +121,10 @@ extern NSString * const XCCCappLintDidEndNotification; @property (unsafe_unretained) IBOutlet NSTableView *errorTable; @property (strong) IBOutlet NSArrayController *errorListController; +@property (strong) IBOutlet NSProgressIndicator *progressIndicator; +@property (strong) IBOutlet NSTextField *fieldCurrentTask; +@property (strong) IBOutlet NSPanel *updatingCappuccinoPanel; + - (IBAction)openErrorsPanel:(id)sender; - (IBAction)clearErrors:(id)sender; - (IBAction)openErrorInEditor:(id)sender; @@ -153,6 +160,8 @@ extern NSString * const XCCCappLintDidEndNotification; - (BOOL)checkCappLintForPath:(NSArray*)paths; - (void)showCappLintErrors; +- (void)updateCappuccino; + @end @interface XcodeCapp (SnowLeopard) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 3fe93840e..b8869a21c 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -230,7 +230,8 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, @"/usr/local/bin", @"/usr/local/narwhal/bin", @"~/narwhal/bin", - @"~/bin" + @"~/bin", + @"/usr/bin" ]; NSMutableArray *paths = [self.environmentPaths mutableCopy]; @@ -242,8 +243,11 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, // Make sure we are using jsc as the narwhal engine! self.environment[@"NARWHAL_ENGINE"] = @"jsc"; + + // Make sure to not do something in sudo + self.environment[@"CAPP_NOSUDO"] = @"1"; - self.executables = @[@"python", @"narwhal-jsc", @"objj", @"nib2cib", @"capp", @"capp_lint"]; + self.executables = @[@"python", @"narwhal-jsc", @"objj", @"nib2cib", @"capp", @"capp_lint", @"jake", @"curl", @"unzip", @"rm"]; // This is used to get the env var of $CAPP_BUILD NSDictionary *processEnvironment = [[NSProcessInfo processInfo] environment]; @@ -1265,15 +1269,29 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, #pragma mark - Shell Helpers +/*! + Run an NSTask with the given arguments + + @param launchPath The executable to launch + @param arguments NSArray containing the NSTask arguments + @param returnType Determines whether to return stdout, stderr, either, or nothing in the response + @return NSDictionary containing the return status (NSNumber) and the response (NSString) + */ +- (NSDictionary *)runTaskWithLaunchPath:(NSString *)launchPath arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType +{ + return [self runTaskWithLaunchPath:launchPath arguments:arguments returnType:returnType currentDirectoryPath:nil]; +} + /*! Run an NSTask with the given arguments @param launchPath The executable to launch @param arguments NSArray containing the NSTask arguments @param returnType Determines whether to return stdout, stderr, either, or nothing in the response + @param the currentDirectoryPath for the task @return NSDictionary containing the return status (NSNumber) and the response (NSString) */ -- (NSDictionary *)runTaskWithLaunchPath:(NSString *)launchPath arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType +- (NSDictionary *)runTaskWithLaunchPath:(NSString *)launchPath arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType currentDirectoryPath:(NSString*)aCurrentDirectoryPath { NSTask *task = [NSTask new]; @@ -1282,7 +1300,10 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, task.environment = self.environment; task.standardOutput = [NSPipe pipe]; task.standardError = [NSPipe pipe]; - + + if (aCurrentDirectoryPath) + task.currentDirectoryPath = aCurrentDirectoryPath; + [task launch]; DDLogVerbose(@"Task launched: %@\n%@", launchPath, arguments); @@ -1336,6 +1357,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return YES; } + #pragma mark - Source Files Management - (BOOL)isObjjFile:(NSString *)path @@ -1843,6 +1865,231 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [self.errorListController addObjects:errors]; } +#pragma mark - Cappuccino update + +- (void)updateCappuccino +{ + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; + + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + [self.updatingCappuccinoPanel makeKeyAndOrderFront:self]; + + self.isCappuccinoUpdating = YES; + + [self.progressIndicator startAnimation:self]; + [self.progressIndicator setMaxValue:4]; + [self.progressIndicator setDoubleValue:0]; + + NSString *temporaryFolder = NSTemporaryDirectory(); + + if(![self _hasInitializedUpdateCappuccinoFromFolder:temporaryFolder] || + ![self _hasCleanedInstallOfCappuccinoFromFolder:temporaryFolder] || + ![self _hasInstalledCappuccinoFromFolder:temporaryFolder]) + return; + + [self notifyUserWithTitle:@"Update Cappuccino" message:@"Updating of Cappuccino completed"]; + [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Updating completed"]; + [self.progressIndicator stopAnimation:self]; + self.isCappuccinoUpdating = NO; + + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; +} + +- (BOOL)_hasInitializedUpdateCappuccinoFromFolder:(NSString*)aFolder +{ + //Be sure to remove an old install + NSMutableArray *rmArguments = [NSMutableArray arrayWithObjects:@"-r", @"cappuccino", nil]; + [self runTaskWithLaunchPath:self.executablePaths[@"rm"] + arguments:rmArguments + returnType:kTaskReturnTypeAny + currentDirectoryPath:aFolder]; + + + [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Downloading Cappuccino"]; + + // Download the file + NSString *cappuccinoURL; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch]) + cappuccinoURL = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"XCCLastCappuccinoMasterBranchURL"]; + else + cappuccinoURL = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"XCCLastCappuccinoReleaseURL"]; + + NSString *destination = [NSString stringWithFormat:@"%@cappuccino.zip", aFolder]; + NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"-Lk", cappuccinoURL, @"-o", destination, nil]; + NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"curl"] + arguments:arguments + returnType:kTaskReturnTypeStdOut]; + + NSInteger status = [taskResult[@"status"] intValue]; + + if (status > 1) + { + [self _updatingCappuccinoFailedWithMessage:@"Unable to download Cappuccino"]; + return NO; + } + + //Unzip the file + NSMutableArray *unzipArguments = [NSMutableArray arrayWithObjects:@"-u", @"-o", @"-q", @"-d", @"cappuccino", @"cappuccino.zip", nil]; + NSDictionary *unzipTaskResult = [self runTaskWithLaunchPath:self.executablePaths[@"unzip"] + arguments:unzipArguments + returnType:kTaskReturnTypeAny + currentDirectoryPath:aFolder]; + + NSInteger unzipStatus = [unzipTaskResult[@"status"] intValue]; + + if (unzipStatus >= 1) + { + DDLogVerbose(@"Unable to unzip Cappuccino"); + [self _updatingCappuccinoFailedWithMessage:@"Unable to unzip Cappuccino"]; + return NO; + } + + return YES; +} + +- (BOOL)_hasCleanedInstallOfCappuccinoFromFolder:(NSString*)aFolder +{ + NSString* path = [self _cappuccinoPathForFolder:aFolder]; + + [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Jake clean"]; + + //Jake clean + NSMutableArray *jakeCleanArguments = [NSMutableArray arrayWithObjects:@"clean", nil]; + NSDictionary *jakeCleanTaskResult = [self runJakeTaskWithArguments:jakeCleanArguments currentDirectoryPath:path]; + + NSInteger jakeInstallStatus = [jakeCleanTaskResult[@"status"] intValue]; + + if (jakeInstallStatus == 1) + { + DDLogVerbose(@"Jake clean failed: %@", jakeCleanTaskResult[@"response"]); + [self _updatingCappuccinoFailedWithMessage:@"Jake clean failed"]; + return NO; + } + + return YES; +} + +- (BOOL)_hasInstalledCappuccinoFromFolder:(NSString*)aFolder +{ + NSString* path = [self _cappuccinoPathForFolder:aFolder]; + + [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Jake install"]; + + //Jake install + NSMutableArray *jakeInstallArguments = [NSMutableArray arrayWithObjects:@"install", nil]; + NSDictionary *jakeInstallTaskResult = [self runJakeTaskWithArguments:jakeInstallArguments currentDirectoryPath:path]; + + NSInteger jakeInstallStatus = [jakeInstallTaskResult[@"status"] intValue]; + + if (jakeInstallStatus == 1) + { + DDLogVerbose(@"Jake install failed: %@", jakeInstallTaskResult[@"response"]); + [self _updatingCappuccinoFailedWithMessage:@"Jake install failed"]; + return NO; + } + + return YES; +} + +- (NSDictionary*)runJakeTaskWithArguments:(NSMutableArray*)arguments currentDirectoryPath:(NSString*)aCurrentDirectoryPath +{ + NSString *launchPath = self.executablePaths[@"jake"]; + + NSTask *task = [NSTask new]; + + task.launchPath = launchPath; + task.arguments = arguments; + task.environment = self.environment; + task.standardOutput = [NSPipe new]; + task.standardError = [NSPipe new]; + + if (aCurrentDirectoryPath) + task.currentDirectoryPath = aCurrentDirectoryPath; + + // This is needed to log the jake + NSFileHandle* fhOut = [task.standardOutput fileHandleForReading]; + [fhOut readInBackgroundAndNotify]; + NSFileHandle* fhErr = [task.standardError fileHandleForReading]; + [fhErr readInBackgroundAndNotify]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jakeReceivedData:) name:NSFileHandleReadCompletionNotification object:fhOut]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jakeReceivedError:) name:NSFileHandleReadCompletionNotification object:fhErr]; + + [task launch]; + + DDLogVerbose(@"Task launched: %@\n%@", launchPath, arguments); + + [task waitUntilExit]; + + DDLogVerbose(@"Task exited: %@:%d", launchPath, task.terminationStatus); + + NSNumber *status = [NSNumber numberWithInt:task.terminationStatus]; + NSData *data = nil; + + if ([status intValue] == 0) + data = [[task.standardOutput fileHandleForReading] availableData]; + else + data = [[task.standardError fileHandleForReading] availableData]; + + NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + + [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:fhOut]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:fhErr]; + + return @{@"status" : status, @"response" : response}; +} + +-(void)jakeReceivedData:(NSNotification*)notification +{ + NSData *data = [[notification userInfo] objectForKey:NSFileHandleNotificationDataItem]; + NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; + + DDLogVerbose(@"%@", string); + + [[notification object] readInBackgroundAndNotify]; +} + +-(void)jakeReceivedError:(NSNotification*)notification +{ + NSData *data = [[notification userInfo] objectForKey:NSFileHandleNotificationDataItem]; + NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; + + DDLogVerbose(@"%@", string); +} + +/*! + This return the current path where the tmp cappuccino was downloaded + */ +- (NSString*)_cappuccinoPathForFolder:(NSString*)aFolder +{ + NSFileManager *fileManger = [NSFileManager defaultManager]; + NSString *contentOfCappuccinoFolder = [[fileManger contentsOfDirectoryAtPath:[NSString stringWithFormat:@"%@cappuccino", aFolder] error:nil] firstObject]; + + return [NSString stringWithFormat:@"%@cappuccino/%@", aFolder, contentOfCappuccinoFolder]; +} + +- (void)_incrementeProgressBarAndUpdateInformationFieldWithMessage:(NSString*)aString +{ + double currentValue = [self.progressIndicator doubleValue]; + [self.progressIndicator setDoubleValue:++currentValue]; + + [self.fieldCurrentTask setStringValue:[NSString stringWithFormat:@"Step %.0f/%.0f : %@", [self.progressIndicator doubleValue], [self.progressIndicator maxValue], aString]]; +} + +- (void)_updatingCappuccinoFailedWithMessage:(NSString*)aMessage +{ + [self.progressIndicator stopAnimation:self]; + [self.progressIndicator setDoubleValue:0]; + [self.fieldCurrentTask setStringValue:[NSString stringWithFormat:@"Issue : %@", aMessage]]; + + [self notifyUserWithTitle:@"Error updating Cappuccino" message:aMessage]; + + self.isCappuccinoUpdating = NO; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; +} + + #pragma mark - User notifications - (NSString *)applicationNameForGrowl diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index 6a0ad009d..75992e3c7 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,10 +2,10 @@ 1060 - 13D43 + 13C64 5056 - 1265.20 - 698.00 + 1265.19 + 697.40 5056 5056 @@ -22,6 +22,7 @@ NSMenuItem NSPopUpButton NSPopUpButtonCell + NSProgressIndicator NSScrollView NSScroller NSTableColumn @@ -158,6 +159,24 @@ + + + Update Cappuccino + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + About XcodeCapp... @@ -209,28 +228,31 @@ 3 2 - {{196, 240}, {402, 202}} + {{196, 240}, {402, 247}} 1618478080 About NSPanel - + 256 268 - {{164, 20}, {203, 98}} + {{164, 20}, {203, 143}} + + YES 68157504 4326400 WGNvZGVDYXBwIDMgZGV2ZWxvcGVkIGJ5OgogICAgQXBhcmFqaXRhIEZpc2htYW4KICAgIGFwYXJhaml0 -YUBhcGFyYWppdGEuY29tCgpPcmlnaW5hbCBDb2NvYSB2ZXJzaW9uIGRldmVsb3BlZCBieToKICAgIEFu -dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA +YUBhcGFyYWppdGEuY29tCiAgICAKICAgIEFsZXhhbmRyZSBXaWxoZWxtCiAgICBhbGV4YW5kcmUud2ls +aGVsbWZyQGdtYWlsLmNvbQoKT3JpZ2luYWwgQ29jb2EgdmVyc2lvbiBkZXZlbG9wZWQgYnk6CiAgICBB +bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ .LucidaGrandeUI 11 @@ -257,8 +279,9 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 266 - {{164, 126}, {221, 74}} + {{164, 171}, {221, 74}} + YES @@ -304,8 +327,9 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NeXT Encapsulated PostScript v1.2 pasteboard type NeXT TIFF v4.0 pasteboard type - {{17, 63}, {128, 128}} + {{17, 108}, {128, 128}} + YES @@ -324,7 +348,9 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA YES - {402, 202} + {402, 247} + + {{0, 0}, {1440, 878}} @@ -342,7 +368,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {315, 77} - + 256 @@ -358,6 +384,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 256 {550, 201} + YES NO @@ -434,6 +461,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{1, 1}, {550, 201}} + @@ -444,6 +472,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2147483392 {{1, 273}, {512, 16}} + NO 1 @@ -455,6 +484,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2147483392 {{535, 1}, {16, 45}} + NO @@ -463,6 +493,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{-1, 35}, {552, 203}} + 133682 @@ -478,6 +509,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 289 {{352, 8}, {85, 19}} + {250, 750} YES @@ -506,6 +538,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 292 {{20, 8}, {85, 19}} + {250, 750} YES @@ -530,6 +563,8 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 289 {{445, 8}, {85, 19}} + + {250, 750} YES @@ -550,9 +585,11 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {550, 237} + + - {{0, 0}, {1440, 878}} + {{1440, -180}, {1920, 1058}} {315, 99} {10000000000000, 10000000000000} errorPanel @@ -561,14 +598,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 3 2 - {{1964, 505}, {393, 357}} + {{1964, 505}, {479, 415}} 1618478080 Preferences NSWindow - + 256 @@ -584,6 +621,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 81}, {271, 18}} + YES @@ -617,6 +655,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 51}, {241, 18}} + YES @@ -641,6 +680,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 109}, {298, 18}} + YES @@ -665,6 +705,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{15, 20}, {106, 17}} + YES @@ -684,6 +725,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{124, 14}, {56, 26}} + YES @@ -756,13 +798,15 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO - {{1, 1}, {357, 139}} + {{1, 1}, {443, 139}} + - {{17, 187}, {359, 155}} + {{17, 245}, {445, 155}} + {0, 0} @@ -799,6 +843,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{146, 12}, {171, 18}} + YES @@ -823,6 +868,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 39}, {126, 17}} + YES @@ -842,6 +888,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{146, 38}, {171, 18}} + YES @@ -862,13 +909,15 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO - {{1, 1}, {357, 66}} + {{1, 1}, {443, 66}} + - {{17, 101}, {359, 82}} + {{17, 159}, {445, 82}} + {0, 0} @@ -901,6 +950,8 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{146, 12}, {171, 18}} + + YES -2080374784 @@ -924,6 +975,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{146, 37}, {171, 18}} + YES @@ -948,6 +1000,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 38}, {126, 17}} + YES @@ -963,14 +1016,16 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 1 - {{1, 1}, {357, 65}} + {{1, 1}, {443, 65}} + _NS:11 - {{17, 16}, {359, 81}} + {{17, 74}, {445, 81}} + _NS:9 {0, 0} @@ -991,11 +1046,75 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 2 NO + + + 12 + + + + 274 + + + + 268 + {{16, 12}, {411, 18}} + + + + YES + + -2080374784 + 0 + Update Cappuccino with the last version of the master branch + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + {{1, 1}, {443, 38}} + + + + + + {{17, 16}, {445, 54}} + + + + {0, 0} + + 67108864 + 134217728 + Develop + + + + 3 + MCAwLjgAA + + + + 1 + 0 + 2 + NO + - {393, 357} + {479, 415} + + - {{0, 0}, {1440, 878}} + {{1440, -180}, {1920, 1058}} {10000000000000, 10000000000000} xcc-prefs YES @@ -1010,7 +1129,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - + 256 @@ -1022,6 +1141,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{0, 8}, {716, 654}} + YES 1 @@ -1031,6 +1151,8 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {716, 662} + + {{0, 0}, {1440, 878}} @@ -1054,6 +1176,91 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA YES YES + + 7 + 2 + {{139, 81}, {357, 84}} + 1685586944 + Updating Cappuccino + NSPanel + + + + + 256 + + + + 268 + {{18, 22}, {251, 17}} + + + + _NS:397 + {251, 750} + YES + + 68157504 + 272630784 + Step 1/5 : Downloading Cappuccino + + _NS:397 + + + + + NO + 1 + + + + 268 + {{269, 13}, {74, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Close + + _NS:9 + + -2038284288 + 129 + + Gw + 200 + 25 + + NO + + + + 268 + {{20, 45}, {317, 20}} + + + + _NS:9 + {250, 250} + 16397 + 5 + + + {357, 84} + + + + _NS:21 + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + updatingCappuccinoPanel + YES + NO @@ -1218,6 +1425,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 617 + + + updateCappuccino: + + + + M7T-qw-MgB + performClose: @@ -1290,6 +1505,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 6Xe-Bt-eXK + + + save: + + + + 30N-ga-LBo + openXcodeProject: @@ -1378,6 +1601,30 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 748 + + + fieldCurrentTask + + + + P4O-YG-v1J + + + + progressIndicator + + + + Z7k-63-Ujv + + + + updatingCappuccinoPanel + + + + HJ3-bt-3EP + values.XCCReopenLastProject @@ -1732,6 +1979,34 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA J8w-G4-Pzy + + + orderOut: + + + + dP2-Fc-one + + + + value: values.updateCappuccinoWithLastVersionOfMasterBranch + + + + + + value: values.updateCappuccinoWithLastVersionOfMasterBranch + value + values.updateCappuccinoWithLastVersionOfMasterBranch + + NSValidatesImmediately + + + 2 + + + 1fo-ym-Q0u + projectPath.length @@ -1804,6 +2079,26 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA j0c-o6-KBW + + + enabled: isCappuccinoUpdating + + + + + + enabled: isCappuccinoUpdating + enabled + isCappuccinoUpdating + + NSValueTransformerName + NSNegateBoolean + + 2 + + + aof-Pn-nzf + @@ -1856,6 +2151,8 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + + @@ -2094,6 +2391,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + @@ -2359,6 +2657,86 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + + M7S-MC-N7d + + + + + + + + GR3-Dn-qSe + + + + + + + + LOW-1X-7ih + + + + + om5-3M-ZoK + + + + + ubl-jf-ybu + + + + + 8BD-V9-Gcp + + + + + + + + E18-tY-KOl + + + + + + + + + + 9wn-zh-iT9 + + + + + + + + 5vI-kk-gfO + + + + + D0i-5i-RLQ + + + + + + + + KxJ-gX-jZV + + + + + o12-G8-NOm + + + @@ -2481,6 +2859,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2578,8 +2957,31 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + If this is checked, xCodeCapp will take the last version of Cappuccino on the master branch to install Cappuccino + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin @@ -2614,18 +3016,201 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 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 - + + + + AppController + NSObject + + id + id + id + id + id + id + id + + + + createProject: + id + + + loadProject: + id + + + openAbout: + id + + + openHelp: + id + + + openPreferences: + id + + + showInFinder: + id + + + updateCappuccino: + id + + + + NSPanel + PDFView + NSWindow + NSMenuItem + NSMenuItem + NSMenuItem + NSUserDefaultsController + NSWindow + NSMenu + XcodeCapp + + + + aboutWindow + NSPanel + + + helpView + PDFView + + + helpWindow + NSWindow + + + menuItemHistory + NSMenuItem + + + menuItemOpenProject + NSMenuItem + + + menuItemShowInFinder + NSMenuItem + + + preferencesController + NSUserDefaultsController + + + preferencesWindow + NSWindow + + + statusMenu + NSMenu + + + xcc + XcodeCapp + + + + IBProjectSource + ./Classes/AppController.h + + + + XcodeCapp + NSObject + + id + id + id + id + id + id + + + + checkProjectWithCappLint: + id + + + clearErrors: + id + + + openErrorInEditor: + id + + + openErrorsPanel: + id + + + openXcodeProject: + id + + + synchronizeProject: + id + + + + NSArrayController + NSTableView + NSPanel + NSTextField + NSProgressIndicator + NSPanel + + + + errorListController + NSArrayController + + + errorTable + NSTableView + + + errorsPanel + NSPanel + + + fieldCurrentTask + NSTextField + + + progressIndicator + NSProgressIndicator + + + updatingCappuccinoPanel + NSPanel + + + + IBProjectSource + ./Classes/XcodeCapp.h + + + + 0 IBCocoaFramework YES From 3e5e88b3699819c0c1bc8333daf92802c5af75eb Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 5 May 2014 09:50:16 -0700 Subject: [PATCH 136/278] Fixed: fixed type in XcodeCapp --- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index 75992e3c7..65dbb9774 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -109,7 +109,7 @@ - Verify Project Code Style + Check Project Code Style 2147483647 @@ -598,7 +598,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 3 2 - {{1964, 505}, {479, 415}} + {{1964, 505}, {388, 415}} 1618478080 Preferences NSWindow @@ -798,13 +798,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {443, 139}} + {{1, 1}, {352, 139}} - {{17, 245}, {445, 155}} + {{17, 245}, {354, 155}} @@ -909,13 +909,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {443, 66}} + {{1, 1}, {352, 66}} - {{17, 159}, {445, 82}} + {{17, 159}, {354, 82}} @@ -1016,14 +1016,14 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 1 - {{1, 1}, {443, 65}} + {{1, 1}, {352, 65}} _NS:11 - {{17, 74}, {445, 81}} + {{17, 74}, {354, 81}} @@ -1057,7 +1057,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 12}, {411, 18}} + {{16, 12}, {320, 18}} @@ -1065,7 +1065,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2080374784 0 - Update Cappuccino with the last version of the master branch + Update Cappuccino with the last github version 1211912448 @@ -1080,13 +1080,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {443, 38}} + {{1, 1}, {352, 38}} - {{17, 16}, {445, 54}} + {{17, 16}, {354, 54}} @@ -1109,7 +1109,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {479, 415} + {388, 415} From 2a88e598fff9b5cdedfc9b61a29d96ab42353b1f Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 5 May 2014 12:52:58 -0700 Subject: [PATCH 137/278] FIXED: Crash when using setContentSize: on a popover that is not shown. --- AppKit/CPPopover.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index a03885e80..f66fc8b4d 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -150,7 +150,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (void)setContentSize:(CGSize)aSize { - if (!_popoverWindow) + if (!_popoverWindow || ![self isShown]) [[_contentViewController view] setFrameSize:aSize]; else [_popoverWindow updateFrameWithSize:aSize]; From 951e81158c8eac98f43a5daafc654d35073c7a77 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 5 May 2014 13:22:55 -0700 Subject: [PATCH 138/278] FIXED: popverWillShow was called to early and contentSize was returning 0,0 if popover was hidden --- AppKit/CPPopover.j | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index f66fc8b4d..56837548f 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -137,9 +137,6 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (CGSize)contentSize { - if (![_popoverWindow isVisible]) - return CGRectMakeZero(); - return [[_contentViewController view] frameSize]; } @@ -150,7 +147,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (void)setContentSize:(CGSize)aSize { - if (!_popoverWindow || ![self isShown]) + if (!_popoverWindow) [[_contentViewController view] setFrameSize:aSize]; else [_popoverWindow updateFrameWithSize:aSize]; @@ -243,13 +240,8 @@ Set the behavior of the CPPopover. It can be: if ([_popoverWindow isClosing]) return; - if (_implementedDelegateMethods & CPPopoverDelegate_popover_willShow_) - [_delegate popoverWillShow:self]; - if (!_popoverWindow) - { _popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[self styleMaskForBehavior]]; - } [_popoverWindow setPlatformWindow:[[positioningView window] platformWindow]]; [_popoverWindow setAppearance:_appearance]; @@ -258,6 +250,10 @@ Set the behavior of the CPPopover. It can be: [_popoverWindow setMovableByWindowBackground:NO]; [_popoverWindow setFrame:[_popoverWindow frameRectForContentRect:[[_contentViewController view] frame]]]; [_popoverWindow setContentView:[_contentViewController view]]; + + if (_implementedDelegateMethods & CPPopoverDelegate_popover_willShow_) + [_delegate popoverWillShow:self]; + [_popoverWindow positionRelativeToRect:positioningRect ofView:positioningView preferredEdge:preferredEdge]; if (!_animates && _implementedDelegateMethods & CPPopoverDelegate_popover_didShow_) From 584955caa8114a8cb1f79d8954a3e83d9303701e Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 5 May 2014 13:23:44 -0700 Subject: [PATCH 139/278] FIXED: updateFrameWithSize: was always assuming the popver was open --- AppKit/_CPPopoverWindow.j | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index ddff584c5..8861a9f56 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -377,8 +377,11 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self setFrame:[self frameRectForContentRect:rect]]; - var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; - [self setFrameOrigin:point]; + if ([self isVisible]) + { + var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + [self setFrameOrigin:point]; + } } #pragma mark - From 448f2913eb00cda7285af34994ebb8f73dc59e07 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 6 May 2014 23:48:23 -0700 Subject: [PATCH 140/278] Fixed: Jake clean in xCodeCapp Previously we used jake clean instead of jake clobber --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index b8869a21c..36ebc6c63 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1952,18 +1952,18 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, { NSString* path = [self _cappuccinoPathForFolder:aFolder]; - [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Jake clean"]; + [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Jake clobber"]; - //Jake clean - NSMutableArray *jakeCleanArguments = [NSMutableArray arrayWithObjects:@"clean", nil]; - NSDictionary *jakeCleanTaskResult = [self runJakeTaskWithArguments:jakeCleanArguments currentDirectoryPath:path]; + //Jake clobber + NSMutableArray *jakeClobberArguments = [NSMutableArray arrayWithObjects:@"clobber", nil]; + NSDictionary *jakeClobberTaskResult = [self runJakeTaskWithArguments:jakeClobberArguments currentDirectoryPath:path]; - NSInteger jakeInstallStatus = [jakeCleanTaskResult[@"status"] intValue]; + NSInteger jakeInstallStatus = [jakeClobberTaskResult[@"status"] intValue]; if (jakeInstallStatus == 1) { - DDLogVerbose(@"Jake clean failed: %@", jakeCleanTaskResult[@"response"]); - [self _updatingCappuccinoFailedWithMessage:@"Jake clean failed"]; + DDLogVerbose(@"Jake clobber failed: %@", jakeClobberTaskResult[@"response"]); + [self _updatingCappuccinoFailedWithMessage:@"Jake clobber failed"]; return NO; } From 59a97272bb78aaf6b4a94623525d6b88039ae69b Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 7 May 2014 10:52:57 -0700 Subject: [PATCH 141/278] FIXED: Crash due to tooltip trying to be attached to a window that is gone Previously, _CPToolTip was not testing if the view and so parentWindow was still here. During the timer, it might be gone, which would cause crash. This patch ensure the window is still there before showing the tooltip --- AppKit/_CPToolTip.j | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AppKit/_CPToolTip.j b/AppKit/_CPToolTip.j index 25594d920..38f881392 100644 --- a/AppKit/_CPToolTip.j +++ b/AppKit/_CPToolTip.j @@ -93,6 +93,11 @@ var _CPToolTipHeight = 24.0, */ + (_CPToolTip)toolTipWithString:(CPString)aString toolTipWindow:(CPWindow)aWindow { + // the window might be gone during the timer interval. If so, just ignore as + // we don't want to show the tooltip anyway + if (!aWindow) + return nil; + var tooltip = [[_CPToolTip alloc] initWithString:aString styleMask:_CPToolTipWindowMask toolTipWindow:aWindow]; [tooltip showToolTip]; From 1ddf21a256f54bbd549f49f81150860d21e6725e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 8 May 2014 09:56:06 -0700 Subject: [PATCH 142/278] Fixed: type in preferences for the update of cappuccino --- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index 65dbb9774..c605f0570 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -598,7 +598,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 3 2 - {{1964, 505}, {388, 415}} + {{1964, 505}, {369, 415}} 1618478080 Preferences NSWindow @@ -798,13 +798,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {352, 139}} + {{1, 1}, {330, 139}} - {{17, 245}, {354, 155}} + {{17, 245}, {332, 155}} @@ -909,13 +909,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {352, 66}} + {{1, 1}, {330, 66}} - {{17, 159}, {354, 82}} + {{17, 159}, {332, 82}} @@ -1016,14 +1016,14 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 1 - {{1, 1}, {352, 65}} + {{1, 1}, {333, 65}} _NS:11 - {{17, 74}, {354, 81}} + {{17, 74}, {335, 81}} @@ -1057,7 +1057,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 12}, {320, 18}} + {{16, 12}, {226, 18}} @@ -1065,7 +1065,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2080374784 0 - Update Cappuccino with the last github version + Use latest master branch version 1211912448 @@ -1080,13 +1080,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {352, 38}} + {{1, 1}, {333, 38}} - {{17, 16}, {354, 54}} + {{17, 16}, {335, 54}} @@ -1094,7 +1094,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 - Develop + Update @@ -1109,7 +1109,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {388, 415} + {369, 415} From 8f5aa0ea16c30fd524f6d2fe294897ca4e404eaa Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 8 May 2014 10:04:51 -0700 Subject: [PATCH 143/278] Fixed: xCodeCapp documentation is outdated Fixes #2114 --- .../XcodeCapp.xcodeproj/project.pbxproj | 8 ++++---- Tools/XcodeCapp/XcodeCapp/Resources/help.pdf | Bin 403974 -> 535470 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj index 0154116d1..dce859d69 100644 --- a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj +++ b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 68A43034191BF044008A68A7 /* help.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 68A43033191BF044008A68A7 /* help.pdf */; }; E10E4CD717298E5F004AB09E /* project.pbxproj in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2A172188F300263CE3 /* project.pbxproj */; }; E14015421740248C006C2792 /* XcodeProjectCloser.m in Sources */ = {isa = PBXBuildFile; fileRef = E14015411740248C006C2792 /* XcodeProjectCloser.m */; }; E1401543174025B8006C2792 /* XcodeProjectCloser.m in Sources */ = {isa = PBXBuildFile; fileRef = E14015411740248C006C2792 /* XcodeProjectCloser.m */; }; @@ -36,7 +37,6 @@ E171D26C173C1C8300210893 /* xcc in CopyFiles */ = {isa = PBXBuildFile; fileRef = E171D25D173C168C00210893 /* xcc */; }; E17A822D172700B90095CD83 /* XcodeCapp.iconset in Resources */ = {isa = PBXBuildFile; fileRef = E17A822C172700B90095CD83 /* XcodeCapp.iconset */; }; E17B55411732F57700809FFB /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17B55401732F57700809FFB /* Quartz.framework */; }; - E17B55431732F72700809FFB /* help.pdf in Resources */ = {isa = PBXBuildFile; fileRef = E17B55421732F72700809FFB /* help.pdf */; }; E1A5594A172C5EE20088FB61 /* FindSourceFilesOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A55949172C5EE20088FB61 /* FindSourceFilesOperation.m */; }; E1A5594D172CA8D40088FB61 /* ProcessSourceOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A5594C172CA8D40088FB61 /* ProcessSourceOperation.m */; }; E1E90C411735D846005C6D5B /* DDLogLevel.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E90C391735D846005C6D5B /* DDLogLevel.m */; }; @@ -106,6 +106,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 68A43033191BF044008A68A7 /* help.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = help.pdf; path = Resources/help.pdf; sourceTree = ""; }; E14015401740248C006C2792 /* XcodeProjectCloser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XcodeProjectCloser.h; sourceTree = ""; }; E14015411740248C006C2792 /* XcodeProjectCloser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XcodeProjectCloser.m; sourceTree = ""; }; E164FDCF1720E77100263CE3 /* XcodeCapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XcodeCapp.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -140,7 +141,6 @@ E171D264173C168C00210893 /* xcc-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "xcc-Prefix.pch"; sourceTree = ""; }; E17A822C172700B90095CD83 /* XcodeCapp.iconset */ = {isa = PBXFileReference; lastKnownFileType = folder.iconset; name = XcodeCapp.iconset; path = Resources/XcodeCapp.iconset; sourceTree = ""; }; E17B55401732F57700809FFB /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; - E17B55421732F72700809FFB /* help.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = help.pdf; path = Resources/help.pdf; sourceTree = ""; }; E1A55949172C5EE20088FB61 /* FindSourceFilesOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = FindSourceFilesOperation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; E1A5594C172CA8D40088FB61 /* ProcessSourceOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = ProcessSourceOperation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; E1E90C371735D82B005C6D5B /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; @@ -273,6 +273,7 @@ E164FE071720F25400263CE3 /* Resources */ = { isa = PBXGroup; children = ( + 68A43033191BF044008A68A7 /* help.pdf */, E1ED6B6F173414E100641628 /* icon_128x128.png */, E1ED6B70173414E100641628 /* icon_128x128@2x.png */, E164FE2D1721A34900263CE3 /* icon-inactive.png */, @@ -284,7 +285,6 @@ E170C3FF17298833003DC489 /* icon-error.png */, E170C40017298833003DC489 /* icon-error@2x.png */, E17A822C172700B90095CD83 /* XcodeCapp.iconset */, - E17B55421732F72700809FFB /* help.pdf */, E164FE2A172188F300263CE3 /* project.pbxproj */, E164FE191720F49A00263CE3 /* Growl Registration Ticket.growlRegDict */, ); @@ -418,6 +418,7 @@ E10E4CD717298E5F004AB09E /* project.pbxproj in Resources */, E164FE181720F44B00263CE3 /* parser.j in Resources */, E164FE1A1720F49A00263CE3 /* Growl Registration Ticket.growlRegDict in Resources */, + 68A43034191BF044008A68A7 /* help.pdf in Resources */, E164FE2F1721A34900263CE3 /* icon-active.png in Resources */, E164FE301721A34900263CE3 /* icon-inactive.png in Resources */, E164FE311721A34900263CE3 /* icon-working.png in Resources */, @@ -427,7 +428,6 @@ E170C40517298833003DC489 /* icon-error@2x.png in Resources */, E170C40617298833003DC489 /* icon-inactive@2x.png in Resources */, E170C40717298833003DC489 /* icon-working@2x.png in Resources */, - E17B55431732F72700809FFB /* help.pdf in Resources */, E1ED6B71173414E100641628 /* icon_128x128.png in Resources */, E1ED6B72173414E100641628 /* icon_128x128@2x.png in Resources */, E1E90C62173B42D0005C6D5B /* MainMenu.xib in Resources */, diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/help.pdf b/Tools/XcodeCapp/XcodeCapp/Resources/help.pdf index 550ba1d081dda405ab004b5ac7dc2531f91c377d..d0361b49da70bb416e8171a422f7fe99fd80a3d5 100644 GIT binary patch literal 535470 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

Cd9`L_LT+PWiydR&G`WHm;( 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%0De1%^Rv5a)Chf=SecAe_$qAX?56&bG%|CpLS##JK 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 {^O|p`4 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


=dU33FptmRqd-9@%Xc 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 z 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

NnCb?3m{^Fb@6a5jfgv-j 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�fYoOWHM>il=8&OARbZdx$*|iJifWLzkp262}J1 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

n4t&-RJ_U@?MA6QGFRTaEY7KSaKybkLBLg`B7 zj`6>v=ezA4*F%Jon8G4@TY5oQh@hqXhC7dr*bi?rokh#mIKfNa#m_zfk}u?TH&+D0 zFgAr9YLJ@SfcACBUI5ZQmC|%7%B#c=*&Z&jG^lk{`@cU3uj}vFNR5OF7;G4KzW5Tg zm-^^>!W8FR62W_C7f$x#xGCXMObVo=L$A~?<`GiGKwkqVsU_XBy>$Z7sN9JP z;Kk{qk$zQ>l;OuoA;TJ?>yJJ${5bAZs*Mi^Sx37xxM%s0F+4|}dlV9DCH2g`dHmT_ znD8zfg0FA<>nM2=twh6w1z1$DyFBoPOwyhMJ{$SRuRN+~?Gq(wv8Kb~XeFZ8`HpKg zn0zp>ZG0b-cY#UR7NnDXu^2wYPJ|>89fjI2PXT6nc6#mE<4WA{#8bl#a>I5+x}LC3 z1XexJ96Kq>qP3kvlzq;mHe*Fs@>Ei5kwXM|V3R+l-$bW!5g<3ZtJS)>=N)-gyv^M9 zM;-(&cMp^V%|)s?)R-JH2X#05?;@R&jr?zi-0qXkCtz*#uiE490YLb$F2ElfzU0)t z>Ee*+Ksxe*L&Mt8^lB*{s0~FXO=E{w%8kbR7^rLyIDu`{gg4QQ@uGD2Ae_J3&15zt zLtcio$ohBk)a5+(r~VXeB+t!35XI^vq_+u^qIp=3$aZkZ5tPzt2z3juAzw~vYnrmc zp^>sxugdwFwMhYbv4(0N3HCTj<%ZOzRlJ3wV9th*kp3W*MRBmT7LC+9d66r9lgIU< z7@WKSeIehG2flHbeuntbRvL&gViC=lh?LvZ$zMRd{IP7F*{&|*3+DGOXv<-5Av$>~ zrSJLA&1Bm$N;AI=Yn-$3cf!{5-N7Qa3$%q6D??- zGs!|l@*pNLNx(zyz_%xcXeKcc9=WIkC#GT4=YAD<`F!X+6FfX_c{OJvb28IK7SeqU zClC!7bM4gm_A_FlqV_sMz}`=QJ38%dTq}y;`cVWd+a10Q`)|M@)pjO0>PJez?i_f! z$c|c?%zzEC?<9Hi*Y`}*&IYTo;6F8IQR`It1@NmFxzy-jN*2po&sLSjP+_>RVSAL~ z2X+MG+3)4AO=lP=Fp8iNa^)p>$S>l8Q7wvfu_eN}v;|d5Mwx$DP6AlUxdjf%pR&&*w7vvN1Q_KcedH?&vrRDTTW2IO{~x6LtWK>pUr)fIj>k`m;zcJyqX14G@4Z>x z9M%S%tWf3>#DY3p-A>-$xV{h-zHdCVZc_3e#Z4BpD0)xj;AaJzPRf@B@HC29sTRrx z0MLp2y;X{v2)vOBZET9OhgQFB-)7hF2Tc4948~85uG?t$;X=ja0AjL6y&TV$3!VQ5k#V-TPp~i;0{YLSjW`6p5oJphJ6 zu=%;}_2P6RqREwc5U0V#Wxxf=UKBJ-v`~!cC;x22NQ+&FV1 z5353mo3@VqZv}P~yyr}IGlA0r2QeGzXt*+K?zdq^;98JH#LS zrniEtM{6etL^gU4hA)Rg@k`&9KJ~?&?*48drQv)$zoO|q@Fft*u#u)5;zCcOV3EP5 zWQ4b)_X(c0|KtOw7$BWLVZEbP$sasu?HnKa7354S|kf`XcRiYd8ez#AM z-E%=cIIv!oQop`ropV>ick*qr__9OEX9@~(>)SvoThka1>c^AXUGO(l7o*$|rCJnN zQ(O|V;ucA)!^6YE1eF8ot5^cApdhhqErAR(qPxDeOXxm9z#TIxoBZ*4EcH;xvjk*mb-&2GOHqHs5Q6 zSy5jAfE4$mhVKFlOkQg9GV*5{xxiR)Zba*R>FH9qKn83Rm^0tv7M{zZQHwLeyL^tI z0Ba*Q9qEzdEMzK+GfK;r7tk@#S zg1wQ54T}F7Z4x5EodYX1KSq_YLsX89zLD`l1!XPH|EuT3+ht_uCdME@rB9h;4xOZy zP#hlIybK!;l9wWOoF-3vOW@;f(*K3w6{4rXFR~|9xx&Fv2=$MlJt)pvV0*J>u2!eH z8BbF`hL?J?nto@h z#ZoHRWvX|UPg-YsT0#Ia6jB8p^IjayRSL^Z0xRlMfma0ce)D7Z^5bpS^Hph4T~ z-}qf}gjT=|b#igJ2|%Efask^-3j00+kR9*~(@mlddnouO_wdr2$GrV363U2AUgt+2 zX)7*)^knp79y(Fa_Qj`X36~ zZli&&*DwdAJ&Je<$%wpV65i1*zD}AyI!xhL3*h;>j*oUqel)-fcHtqFGgbbz(kH*w z{hDt7rG4Ej4K^xQ5)K;)W)c;|nCLZrB#G@RiRmg14iA>2PkZ$swG^td5!#e2 z^_5mvLPFr{?y_j*v0dX?Sh7f?-H|qveYjI#h>{7n9NN!I!ODb$H{=MYjf(p__!YY^ zsN@5%iCe9ew6we|5%s8~E=LiJCu@EKViFQ;4}w719@)y{sT#}Ms;#Vj7Kt2|&@YGq zcY*Y=IVuw9#-zh+^gB>wL3l+J4D=FV9`DSicOT~dAMd-=s(Mq?@jd3RYDE;&Wj2~Z z)MHCJPBBue50`i6t9yqHfqt#EfB6stO_W7Y3!54xa)x4X@jY5kha@hC&K|q*s+pPx zw~GYL&-e3gc9ML~n(0gqq|W1)AiW0!x{R+%D7WCCXh zn-Du(@BA=%b0#3JPKnx`aE4)mT?Y<$UA3(~3dQtNCxWa<|j;g&qy?BdD8$9 z!ID6X!9Dp98{#uIv~G-A0cEeC$UIp3qRc?R44zb z=zt@ajKkycrbkU0v1>meSM|lE=&Xzv<=2NRn`f>h2G`7?$@FX9v^rVljHR1MK_m?# zz2K>g3i<;pY*ge>MXK{Up }i0b#)E754J?_~5K9o3Zin@Q;w%@k9-TGU9W%vU(!6ukd2U~FM$Yc>X>CXI^b`)c zTLM+af5!0YC;7Q^EA_-Z5GiP4%EtkHXz42*!=Tuzf8jp-)Jih0ceRebj{_su>WAqb z!S}@=j$x?w-@J1tweP%Qc2B|W}H;36m9n%v%Hor;KJkd!@Mo5dyZ<- zjxO4cE?4c??c`;okGi544N+5+Wcl?Wdw)W}UwSTYmB(Z%R1Iz?7vIXWjH2Xlw%e+D zL3+l#XN)|;Pwi>IAWLCfh|W6@7FI*eS^V6%L&w<}mxLV$7f$A8l*`+}ZhTXUfcvyS zy;Gbn9lz!1KoS$% z&2iMiYLn)>U2`~RS3?Z>MFZs8*FRT2vB1f^-R7>)F=H>n8WbrO#T-GG3$k9BE_L-7 zE=Q@Dm=YZ=wNZh6juz$q{NaGaaV5Ie#YazLH&+-@x;KUmn?CbIMoZ{X^=l5`L5u*g z3@CH?fc zc2Ts>w#P9wrxo4%s*Ufe@0CGi`Lf3;y-=ZTGb*Or3OWK-*b_GEajR9K+k+t31=n1S z0NnT#tg_*eVYBE^<(Yvm-tc<-mt>&RvfZwK1-_VkLK;#e0s|_e+(sF{m<=^HVmt4FN64L>@kLGWW$C}WPWV~+LFc6fdy6x1aw z)Fp7l1lw5h01>W)2*_@FU~UL%NLO-~t|wGuam#^6pU}6r2n45=155uV%)z{+!c(9s zR1TT2$&rCD1WAa9_NQ%En-_{s#9yl*xp=p2ZuiBF0;UfFlin4`?}|H zB(Uiu9hq}{D%-p15dS&g>WnuR8(W&Z3cXs&+$Y4!N8<2%6{Cs$Y#E}tqw z%w51p@z*bW@Za1CoR%uKr#&vU_9vnjbMe!lc0xV)JTU)~{g#=Rg}nN;;JP0Pttv2i zPC^dt&qe*C=flJdv*aLr{VJ>vcZ0e8jDbz-=C2*r!8V<)TNm42NNDd$-wNFXwiF$@ za(F-Z+_E0_crDeT%;%doe|_-z5zoCFX|{d_A+GLVT!oF$i>M*RVUrgd)SJb~jj=JK zXhMCuAsYfn(C8N{zqeXLg{|!vnJxPiwL!~ww1u67XZ9k_D4GJqSc6-=v<>E?z8R2JbBtms={B$xg+`~xw z#<*4*Oq7-XhUX&hRYR)N0C3Mgg(*t+p=fI(dc{0Mwjggs)&jSNxR{gIRLSgo07`S- z1d}2+bbG*RyZYL|xsdjc{uW{A*Ip&2)<*Va%y4QDF*dU?aZo@Vv=INQ0Qg1R!JKh$ zoplP`Q#wCfsA)jZIpGnt?_gkeZGib8PH=dSIm)-Y_! zNlc32@Y}Z~@fX0y89prAdcCyCrAVm@s?xS-1!oblH~U6WAwEX-&r_O%09pKyU$5D`fbAdX8cJ<%U!bb&$ zrOADsShx5lQuD70i8(gBX3jjKsUczY_rC5uNclt8HBk>J@ICBy-%ah0Np(Y8k~U@% z|HXqe|AyEEReBJBK;(*XQ+{AK6HET~#WhZBJHV5pDnxBcSN}@t`DwEp%35)D&1Giz zQj>vy(``X-M@0oMUe84Omz-~2{>n+a#lTDrdPt&(rJlRW_(LXxb-x8Ud;^oF?UY3a zaeU8H2$6&EOjeJ;jR^lS->OWK87tghkz->08ZaC0!d*~5NPmBSm0>stWzY)y9onsl z<`&AY^%|TPh|4XpP9$|Ccvz-L)iMmk)+fiewO#mdSQ5x`&a5k z){kg%0x@G{HU(U2gs3e}21GF9i+VHEa2GA|UXU$W-A0SlUb7SySh$?uJ6m>k+wgYq zrUEpcMhBjTAXkO&l%+4K9!Y?0UKV6Wz*s!stJR_kRY}0=Hc!JC-pr(H)QYrKDlG9E zD_D%k!VW7DfLE%t{rN{}6HRNrtlFqsp%`UL8|`!1inagL2Gv;xy7oj8H11Tt_GwG^xoPun?1Dyoy{xzgMe_^sVt>t1`OfbXtD5q~ z^}HdP5r(=%o&Bt5ur5)O5S?_goiej-OJH_!B1l^z8xwOslSe-mQEn?;Wk3D;(`+lC zMPoRW7z4C9c<6^XS!Ibx%-kR8HDBxT8L=q2QF%WefF4xT^D;!Z@fS5wEg94)xDO_B z66~F8iz#9H9=_D-w0mnu1`>q-QG7eRe=Da*R<&2ad!u9FiE(@`M~N2MV@b6e+$AOgcYHtW zImsH3ruGsRLG|}b7YfM@LeO#FnV3v61Pxw$l_QCLonN8TYSCMW+ygXznB^*`LyZ@k zGImM_yD6hKC0c}w@Bz(h7n>q!E(^+bjFF|rQBHaO>ebDTL<**?C+TO# z)+=s1p}|?|LmEkH1LEOwz&imjCOCmEm!(dwa0s2OIE}o^YwJk18w5G#(3~(<)W)Hw3YWURuPaGEW9(^)dU^Z6i%7Pie6W2y)4gDQTuuDUE@_0 zq1+)q7S{}SezdkW?AB$LBatA~POi3P-D`o9cd?Uhv6F2mzy@m$isdgua7X`fdf<*| z`YfH_3>+?%6J1kd-Jc{Lr9a$>3F^Z8%z@8F&g57D!Y?91NH)xKFyxC1NFn!!-_Jx> z2z$c7U#B>0kW!%fsm^lpjl&t~+zrFY~AOuAQy%GcA zKfWav`n>t5WS!DSe>I9IQ6HNFH77o&?I=_&*{coUb?D(ZlNa`oH;<7wx1p$x2&mEF zlGw(76HJhqIC*JNR`m~maKWT$G{|yI=>qeO#`gdbh*lXsA#c>+8JK$zBT z9tu`M?Bqy~H7nWqsf~0YQqwyQd0tHml+Dp}ym9Gnm|7Q4FJIo|&2Ly>uVWb9UcENR z6knAKDHrU~?Ejz%UlTf)eOtsZj8+zf9p#xN?-NBsDh~V&H%oPp<`GI-h2dbt4acgl zh+|3UnBqy@YnKVy0_-&Bc9Fc#-+Q8!Q16W;Imy%h=o1UjB7!5t4XtmNJb_f!m5_1b zhZ~~Sg$Agz+#z~z zy~`I^^$-NW1fRk=eMO~2W0SsGVd#MDdh-wUSwu8nZ!&Fs2QpOQZec%0fep9xr|LuW zb&!$pMkvz-77^Q0U{tT|0!BvgR4yQ9C;9ij6|_rUjUbUck<8MZq{k--fy0vdIVPZx zU}FeDJjEAh=_`+eAG48CZc{|(^uPo|7B~f=SCvn~KSuROC(uYrny7Yp{domVWHY%( z`@uC0==Styw+^PllEBLzh;t>d-{?zI>ZII^9R;~%HqyiSS{m#|y+UNEk*-cbC>f&m zMG1duD?o=J2x9a$;DTwx^22xIeH9s@O?Qj;+a|j0Q9!N{wWWciak}XAN0?Egh&J4IJ3OzksVw0KU_p032o$7<*lBhA3 zoO7WQdtxxuxhNaV%DZVDeg2jXO>=TRwnjMSQSrNOSIB~l(6jR`5`+-EBv)1NOq4Y* zl}c8Bquj`6DOT~TUixJJk~D=<-275h#MM1!(*;glQb=J)RDsQxU3uuB2)HClOJhI} zM}Ysp0va2fbQ)yn{$LKVOmsL{HKnfNDqhBChcO0RJWRX%8W?N9N63JvA#^ZialFW# zhR#33V;hX}SWcKfTE;dL$uon3EU(Tt3A?(p`I$C_g zHjIJ&14@>Wj^8C)lBPvlm_F7fn+~n<`S%f053iFb6B7RymksHEum}goJW{9OE(v z)eGL{HFG7|1nbHWED-fFNS;J_-?{h7j4{QC3dJV56##ScYa;W#%t`fFIT4yzbe$Hd zznty0N*#m4kf5X$Qu~5Sqfs^26O@@bUW)Rm=9vyEnc$;` zs%aN$x4vPQA@CyBkbEMLoR_h4BJ5d^qOoyR-CfAY&Ms|qe4L)A=UWf?E)G#{&C$`5 zgs8{Pj#+?=TwI{Z+gtB04xy%wD<<~}oHa|!)licc%-{rHfO}7nnDrn7H@nGnA{;_| zOs0qNSz9owh{qcEPeRqHwxc1>E^t(oKqN8tmZKr<2qs>{1`O;T_%f*8r~W=fBz+Vc zL-E1@I0Vvf8Ei_rqN*6!s0J2b87M4T@$%Y0&mC~vZDxeMr;t!sNZ#RO76fF7fu5Hj zav@@M`Giff_!~ji70aOtE9b4lzG7rMtgQu`9i9<$T?W(;^-2H8i!{?v7KF26KzM`2jLVE(Bf|ndG4n%y=}>t; zJSXPL!$zM(XCTE!;~B6Fk;fn$z{hr-SXX*sNe$q6r6Q5Y(2sf~AtaJgQ#y5^SCgx| zWjTJ0^hYK&!&auqTPqW-U#N|fs znq6k_yaM>)JL>b@*>A|7d?V;50-xTmZ%I2)^1=5*2yulzy10Xa)l=IzYrUVp4<;D` zwcSXK9>OW>s^DdD+4w&4M|#APHM6x0ybK-YLnB8g0U{NmL(MXD6JRQOUW$JEUh`Pi zO!CmHb!;c2lZv|Eyl3jvAV-xd7=*;u_e-egd01>Rg{gLCl4<1>OIb(yim9mRd6D%U z`thzx=>>Su>g1F_0A%=KMxn~Ov%Mm$5{>j6bp!XPMq9c`VR$~26o3gn^N4wRPBv_z zT-hj1f~pZR%4DhNb`pl|sG@@5H%s_}0GlNPUsZ=^op}o@z}`So@>nt(MtV+W&C}QJ z0t}4wu39w=7RcymC3#&CIs>4V#IPPCgUVP~92hCOiy1}&hw-UW4+0SurS%*gM@IiZ zs>%(5yHe8i_9l~O);WQns1Z)f4KkQ7_8S)Q=;<-5feHcR0pNBXJ$aJIDaQ2vtbO7h zhmvD`mf@u-z7h|;@rT|B;{LYHf^XV&8+HUx9u-%-jYNI3+Ud#+-ULw?+K9@R2PPXc=RGY?QvjHeS$-y4s-*cy8g&R+updoM%aGCtEV?e(eCP_==-D| zz%9@`6>lT9IGd@COX`zFmA8mkn7G5vrtd_2ui?0rrfchC1`(4u2f~u=Xn-Kxx7`{Y zlT{;-?^?kwfBPQkW8j)35$qAblqjx$VSIwyek%p+dzqOlXj(-=YTyZqTJr3CPdWr^C{pwIy0c$OuIr|_H%Gqg|SfU?l2d4?3BtFd5T+}QeNuVs0G|; zlV_7-zfe{?XWQGCIGUHVys!$d4{44MS&rcQ+|P5C(=jRPI8?Np6trybmkqe9#X8Ju z8D!gg$~dGpv}{Y07gM}FHL!B@VN(Lf9@-HNS*Gxy- z(lLoXf4vg+y_et+n_?0UVL=7|i(kP6a%LKcP?!h97)O^3;PngNP8@Y#fEITSFsRO6T~&?@rU z?%2ZFbQ8UhDFMsVnq%- zzWF*CHIQ*&B0ZDSUrp5tf`emvz~mwGz|G~q&{^?h20(MZ4pA*iet$M4cNwC}6fCJb zJM;96yG6Ji`kB<+hY?g56;~s3Wqyp8T5LsG1%Lt~bGzwyf4;LwT6j5aK~7VML{rnI z);;KfE<1Iz<#ZF}mAvsezJwD9)?G(4Y(-$l27w97eTgf#80kA}{P9Rgd^Ia0xAiE& zc`eFv2N^>=_w%J9pN_3D3rF!KIZx;+RqWI>4d$5JisB-*zkOq+?YWx4BnQVFnsZ}R z<7%@0)yeACs}buqp~i*E>Q%X$!V#yo$Yb}*86a?pD^+=!{I$?|B7?#>gkC$JMq`e$5G{Rl^nCl+VU z49q4Z&J`q0Gp__8M8+~v_*c?Dei>$QXyAj0wN&JiT~N8$H+hpB3j|M@a2h?4nRMy~ zP;E?^TO!Isk>7tHfh0;INt2)jx|quGZ`woMC03%g36lFw)xvcNS+uvulyYIJkQkiF z2-6s&5X$u2WU$l_#VQN~g~MHK zvB3Defz!v@(S31gi`B32^iE-sovYQxv4ztw_;fC|N{v&0|Ed07i=C@kQP0DIH`vB5 zhkcPxNpF{XeF^Nl39_d0ySA=cB88dW&ta}?QlXS@wJHnDKrIjFQQcI~`SVwZ7nh8#9dB#d!dPH5f3_n6u zAoNSEQ$96disrj9^6Z4nfiozBp0M>7o@8|NE+Zo z*Kz$hfEn`h)11maQ^|E1AJ|Ma3L&Q2G>5Y!MQnT}9DQ&Ii%1(WZ!~(qPEqz34CS8B zze66(!ELO@+IE&yLPKMb(l{YIyhO2ihhglS=}BuuWi#^kaPLUWp(Bu!BiQ;C$A=7K zfqLqY=MUPA+PGmjB{O014$IzT8Wf^p`=%~idZ_1Y%pp;|EuzY>V6sb+U`o~oEdEcD zfko4JB~b=nd{VY8I*R3Wp>m{|xX+g^%nKbOW)oUq&1a&b>t$6aD-sybKtpgl65{U3 zWogcHye9jfYX!fg1 z+>E#pbqj$bv$(4WsWH$G!tzMB#H7ZX0rYwF_T1XvGGI@@7f9emN#Zmh#lH-56}gQ* zQcNu)OA_EPumOs}w^z%_=!7X+q+Cc}wwjeiNvMq*V>}31sW<2JnZ zzMhXgs39ie&2bz+4I)uw(}h5Ag9BVs>!4Kv@&G%`QKMhyxU0C1NPg1ceM^MXs4t?q z4a@kVdwU|;1l`3cy#dagib*af$l427=$2F)one5jgxaj>tc~Hx zPjjwOH1M~8H&8T^V6m;yw41%p)Z@3b2jzj8v#r=!TRFNdinfl6`Lu5SI`3d>^qE|_ zD0Da}aX6{A*VsG@GSUTYu?Ze2Pl02vM7>{+F*G*4!zFWBdO7>KZA;jCjsO1vazKs0+6Ga%7^2;P z&U$Qs@Pu|<+OFx)w}lk>4B{G091%6v*ihl4it#Z4<;)HUT#x|N*U&W&CLIiXbKnk> z61F%IAYbb2xTLFMY}aZiD3lBWXVr%b3?zZy%Ao5U+Lp-*>1VdoaScPx*wSHyRl14| zv8tqtG42xFAb*fgDp;H#gb;w@K!9}u9B!{c)sQyoGXLp_F=XWfB}TZez#?SPK_RTb zA{7p0ZbVd37Mm#9|eUNFQP>)b6{P3Lcu2>%)7JtYOHD}c6EWG zM#e}Ss|EK=up8t0ndh0}Wit*3kXv@!iY1B)flnU}Yg|&=X+Q~5fomd zwgUHda8vh$$|5`k!!2CgR>kc;ddx%*#Q=+rOvIxlJQSnnV)U>Kk2Y|Nk3Da~BPRjI zfu16t{n&gg7THJ*u`8N)Al|g&wXEU3JOPNsEt61hVuPKxOGsz@(+P z_l}#EB(4So42us>0xUX2{ABkCv`K(2o|iEz?70Bkn2#q=41nW_#{2^l79CO{_oxeg z0G@-;Lj-#0hFG{DxipcD!ePdY$8DsC#g6;2^iYQGcGA;B;h7zA;%NnYe#f8Ok!fZK z834jtATUHekUw~sMF0wLo<{yq1383dSRn*@=#eF!;1J*e9G>U_Avz10RFU%(7h-`z zB!?66M1hD$FtEiYk@7R1o`u1gqhskwC2j%}5gNe8 zEs|QWiLubLFg%f=bpp=A5t@-<$_Wk8 zTu?jrz<8P?JQpJ=7{vo73V{;Bo|;jXXfEIe^9s&T639=ai&=;Ggavp=hX+jb^a?E~ zU>m<+|Ad8e9jb=z!=I!Z)HszkT$#4TZ5lo!Z*jwg^bAy`>5W;YJ~K?b zwYGW9H1U~fazoeDSI5*>dxwwCPG7y9!P;hl9CUVuXzvP{xg$`^G*EN9FI76)ZQe7t zc}?GdBijvEgR3o^9KE75b00q|sRTS{E#bu#&t6p$l)M$-)mwoA1Vlb6wOml*=Sctd zxu8naDKK*@B2hBehmd1(bEJo4MF7r$*hIG_V&9O+CJsF5y=YEAWVvc_gBS>h-sj;T7eaN^X?;ik4Qsv+$y=G zfzQtTq{dbB_8U58et?;{*f#Z>WfnNgGyvDzI;Q?QI|6W0>+KHHHVe`<57oDf)Y%m} zb7!y)D7(XE?g*M?>aV*qPNyQibGr=6gi0Y^CHi!DSX zL5@ozN?nQmbC56URPqO1NrdBH)yiF!s{(zX9*HPP4dfY=BJoQaKF21}hvwvLKaGbw z0}Wi9cO_hMK#uTHiK5h%=)W|=T~)F&9B1S_a$HH3QkR>Px13=hrB4urhH|_Amv|&ZKEwr;hR~IGBt(hGMWj(VA|H}Tb#-+0L?_Uz=s(rL)6V z+te4w?kqZ*=^)m{S-dku$1D`J4A3)=(Aym`n~FNpU{8#}-dO!T(Yh89THx6oria4c z;XlLVhSnBO06yea*EYb7*7mOdA6nYG0LTMxhe(LTIRwuyI`l;kc@%OsIsWr~`-a-& zsyL2Ti70iI5UI-}LRW$>#>hE&qIfIUCXGsZBnn5QuB1WY925b+oQ|SH>EUDhOk9WK zb{Xz+{P{Jr}ot@#c%tEzM+IwU4t>W}7qjfBz_4mZ;TgA+_iqW%( znzf5|0KJ_dv$h9loA_#*_~16U%EE&kowOavE&fO2Lpw9{Xus5bF%YFxf02J6!_U|7 z>*$oM$XBC8{DlxHITG?kL)<;iKYS^ul>{Z^bGGDaInG5SC0tM<4ytG9(LqHd{oE*u z4yA{ia$59A+6%Y5a3QU|0~g^z+Pgw^QOFjNy1OEDc1P-%N9kBZ>RCn4*_Qy&-)D-k6TNy9K*Rnj9#eU2_M00ECs*Yo${ zZLt|!JaEpky2kD9AiZ7T?4vZ!>xkKwF$Vh*aX{-@M9s!Ay(doJD&AmEoSsFr&TcS- z>+ZtMv|wDonP*r?Hxv4WA?vc5e=$JiKx`&%MZjs>BC)|^2GAo$|=K{ z4mtn-LO4Q`qLYySJpM~ANq$NcI4Q@!=<}e=N<^jZ7j;SuUn}@Ieop6gjqf8*U3+EL zRu9chcwr1T(CEIIE^eCb#K&rUnvOzU&$f!iCHHKrXoJ1+2740>EEDHgB^X%5&o+9=Rdl^6n5)@*%m%pc*8Gfe6zPODQ&Gq2nA6p`a2;-$pl=bU zZxK6tceLKFNIl#Y-w}vsVOn_QY?~)u8ppec_&WKoSl3F6Q>kqEsJw6nG7O|B>HKNk zZ=m*P&hmhj@L88&=$qOa+|Upvh8U7ZF-*4Mi+oWbXFw}~T={TtE(lIZgM>)pph)=7 zL3mx`H;C}Y>GTa(wKn1HZcoiE-ZM?`dWqjmQ#{p*(AgC}8=s&pV^Gw%2shYA=k;uh zxY_100KHvNIIs20!gWjnW|{clb2{EJ!^`A&Np;lho$VcT9oyX6F%0M&29I3NF!{kY zG^c!2j>~O*d%Wp0Ir$u2O3oJwQ#d|EXp)qY+TnCt+dENusB64{jc-|MZgQKs1@D65 zH8Y&o0r<$Qy%TrOBJeN^7vb!~b)5d5cmmuNH^)gGg}Z9>N!%<%2Y1Z2;H6U!`l82% zD|pu(Kkf20bv^iWe5kHijz#*$W2e$99SiaoYZ0D{kS6z$lKYID<&2VDu&m&*b zz~x;yz$r?^!5!CZVom`gt;G_GGs8}BL+Kj+CWN{0_ayD@N7qI^+S z@>~*;C~{=@dgM~W#KpQc#cS>Op2gI4`1XezZj7U@@sf$&?oe&B5P+UV#B8f5_DCyQ z-x7Ds5^!Zc2i0vJtG6p+_RbLfoq>28jh)vX)A3ENwNChs@Mzr~Kc}uM-&LKrzUb!e zm7JDwFR$?FvlnmQRW&v?mX?;?zMXAr=e%i?iLYP4FeB|>vr_$XL|VGPMp+F#-NOz? z^7$JeU+dD>@*^m|jCspr{0U0FHaP=LNEEpz+`X?=F7Zn`CCbo<694BsQDXa?PC1*T z3Kz*JJ^a=szG8;&3gJ?G+WKpnn>_GZIG$MH9W(aUXb2t3=21AH@kq;n9o7a`aR!!g z`gAEC#a==S!iVcwCO5Dx;A_|PeM7@b_^HF6T-Qx4?Z=LvICc88k&%(Ufv{_NTM z^A;>9FR%Rc=~M5gPw@Qh`|8bGwq@MBJ&c1}sbH1L`KOo0`wt&aoj&7!-IJ&NPWIj8 zl(dGX*3Zqt&~*76$vHnqm-7sYm%J{6KhIti4?6lELX_5?gbd-vPY#^xl#5F^N2Kl$ z);~A&b7Y}YNnEM>Iis9DkXcRv&bz#>$LMUQ?~CEv(D)gI^{)6T){L!qLB$^hi(6;f zJ3{a&o7Xj3{e1~2?YWjXuVW1?V(=6U@0#lE4yO0X=}oii(>7eim-3)+l#WSTJKYCB zkq#dko7+CrH9dY)wb$nQPFuedL74{vv$uNQUT&ZAyM+h+0zzu*n;Ki%TRXa%+d6XY z-g9xewr>3f(;a394jvAVh#K0EiOKeP^X9!ODIJ=vsilL#7v1hCt9T2AmX?-Wp~-gA zUtLrGCH+HbMsx$k2PF<82Hq|xW zH>0;xETZr(%Itj!vvFiw#L(*~yCd-W3cW+VoqbOPKe@2U9Y4-MUu9ioJyLty5Ov+q z+*VcF^t___&eQUUyyEM(p4lcnIU4_LPwY#}*fOj5_xqEoPGr=czSHQG-|F?KGvHa5 z|Km=z<(BxwjrI1iw!!_n$I6w4NlB@}VG(U@?Uj|4Cfj!moyHwIc3_>qE-n8I8!u<6 zMSTGuq{<{>dBr6cRQlSlY@6T^$Vu5tZDM) z&zuDvEBx58YB$F3C`9tqi`SFbr6h?_TWf!d1~FQ30)4Ysn1cYH`{i%Z^se)+OZSa{@y4I7P(jeY(6 z`6wtDicd&7d+t2wAVM5^)~s2B{~^0)&))pP`qrQ5cd zWMtmvM1+r!O-xJ>J|gl92*h6F!%@QWh!V@LG6C|>jh5PUhyGzgEd z@u&;$i}Jdjvo~JH5^sse;(arHt7z2qEYm=3(*RtDv(MMprmmx(A;OP6ey*;U2Rw7Q z*Ai3Q9T<}tv42UCBat~qt?(hMuFoh~U3aZe`h@t&ov{V)IW{lEYF56_+#%cEm>dt);| zSVDu=wWrq&tl^_akLBm*A2@IjxSxLjL{M4o?$`4R@K?BW=~8oZ3$Dk*(;Gbd_U*fM z>(>7L2Y_2zTJa%MQ@S4b@UaeEA0J=fD3DX9PM>gHDd#+x+ihuWv?(>(gB+aW=8yz@sz{SNCg^9SJ)7RH8 zJtJf7+O^P$+5~4zEM15Du?>OSMb#G;7Ft+XELpOo;%yapyl?n`2O84T)02~vZ{5E0 zv8LYn$`uf8Y;1CK?@2EGG=#4}CD}oV5)Vct{ENuYs=g==2FaX+3{y(U^jC???Q(NU z+6FQxdByn$N`Vb^jZ5VpwKmaD?Ba)*jP0gxysEX?4eyNMXO4JX>+Hmd9D#>isB5&i z4L;j4mR<|DiosX9=)5)y!Fw#Y)rQx?HR-&*f}c~s=j+kz^Yy^wF+G?6+-?1R%jrKyUa-J5~QxW`Xg|uuKB(p)U~f4h8&%o zy1RSI$}52H*|P`Y4vtR1QG*cg?Cb^+-Lmqxa_2EwFJ6{_Zf0iI(a{MvyuE2N!NCeP zAEx=rl`Gvny%@^M&czTs#4AQ{8Jf{`a=rr2*tmG$e4E124?HO;x$^CM|9}ACaq)@Z z!DR#R;^J5Er>&zC8X8;LV%dfe5Ew|^uc@-1z>Hvjf|MkpBtGammzckZC}|rGKexyQ zzgAq*Kd9iKL`h@_gxB?mnOpF)!}J@%^m~0ysB66At+fTemx8BV_|A1Gs@PypERN~f z`{Gd7bN1pnR}8Mq0jO)bXTCjvepvDdDieLt*rM%PS^Q+U564% ztlcB=IoiiBc+0grCt^$N^Ez|NyLU%c1l=r>>zCne4NU-87ZBmReqAc@;LO6R#@fb* zVi22K+7~Ta1WI*HU1|B-GiT4OS-Tda{8W8k^%3{PFbbX~?DI{nrRA0A;=UPI$n{s@ zJ915}KE8Bb$0sBL$Ibv8B@F!J$y2~_EOHTE*U-beXzN+Ja5RJM$dMzQo}7}3?)mc< z(B+yF5=k>4A|eVy4h{~y3(e@_g9Ez4dF}5H9EUsTIQOxSAtL;RhKBL*K|$bL9M%ER z(J^2S2ngiFU%KTX%dK!XXjW2wmu61?< z&DickKa;Y_4L=@Eb-l`Z#H_7@*7b?x7w(146>+YO$H%>QSY3K$YxdzqDC&}u691#7 zPj-!ayho$ba^w?}zvRB{eOCV|wzzvwcF*R32hX3sY-nhlzI?~g=oe0fJ(u%3GfTTK z-u!qpBx|r_@>-_q8=|f;iYrpAVSJhfj*s5JSFT*y*xY*V`~~25@80e0?LBnp5OCBr zcs6g|3>=)mapezuh`Pp!2{vB-ysiTS10jNIW66S{9$UGud8IzXweagz{i z?(Xgw;&sh6qkH>K7KZlh-OB|7gM!g@aBxIdUe~s^wxCBvMd3jq|7-7{vzUkf=8#GzR4AU`)v3< zH2M{B)HSZdao=p#)|OWKY+K*hB8RJYO0M2(d{x_3c`Lfs_sA=A^@m3P?6E=DW&6_H z4WnLc`SGRcxYUhm_p)Ev*Fw_h(wU?MwT3BB%3YPDgBU zmsftnR?k~__$4LWt-3PxMaS~{NcSH+2HnNQ1@!#~4unNSa)qdCZiRPoTMu3S`5M&+{7so~9S;22^A`}u z5ou#%2Y!5lMi+&T`+*#|s^>3g$1pTBgcUp%U$<@@x=)@yQ__rXZGGd04I6L?5gV6K zc>f{y;laa47?M6;1AqAFF+PLi(|2T445~OWIW_z4J<##t9h&jE8&--QJi42k4 zT6$&*Ord7;byePg0&#&92%DJbW;z2j9}gdaO~>12F`$DJ2C?z09yfg(DLqZTBS(8C?fGo2p5sM5&}AK-jx&O zCOE_AM&+DC<6O_sJi{FQDrbhnEY$UkE%*md^dGF&*lFMg{5QJejZpe!Q4>G94yT_l zi=_8bEO4VNZr%YL)_B=0W*&ZEVK1I`MH*P*M-_tcE8<$X4&Um5A1=nvM62SwW_69r z1KhBcLw0f1-o&bV?|QF2?g@I)8)>!BWAzy8Gbh7>f=mq;x^0{po%QrXOSjkkuFLt| zE=8U9sy@wLXJKHVi?>SDmYGLp7Co)*eOBFbEUVq6s3X0kb92C>hfj)SCR${8Khr%u zy^8*S*m;or4%~j~?yjz`?&-l#EOym5k`z8cqubEXfE!b>aJc zU7Q*B^l;0rsi~=fg#&MK-Oh)Apv!TXMrdex_g848MDf_UMTz(;IPeope9=A5@I|&^ zn#K~vUEdM2w%{Ll;muF_mlkWB@NG?8hvU5zE&57VAnu3H#+`8dWXf)QppKifFMi&> z#5wq-1@>x+zC|Q{!%$}@eqx3Fq5?i&kbcl ztn)e^RrMavYQK=%o?YIxJMv9fdcG`Vd0or#el;%R=X5&w1`wNhk%A6H!qMfceIWl3 z6h3RXsg8o(w0ScgVDVEjB_(B`)KjspA@xOD!g|2j&1w+ZE?l^H*~S(-2F~2Nh9VQtqN+;%nV2Q=XgN>+|Z!5I1zP?J^Y6moAD0;SzY6w+FYT! zrr$)OuXN!VmM(kFh4b3L3QxG`m_}V2(0eJ-2A0ut@O=<-{Q6k{em`6j*Wp{QgCIqEp2qX@)?v`+^P2U^~HtyaC{p$^{J_8_6`oX zbjOo8l;?1iNInd~JkZb(%->{aP>X{Szlpj38cL+P#(%G7|4hUl|5S?}L!++wSGw>L zscA5NT0w7jB#vy!v4>gtOl zw72o6Cs@f!us!5?LUCuTr_+7YKc+1IZKT0((-!?x`l5e|o%cT@=KtfvEx&g*nsB|a zIr>$vPfppN{_@x3$B)gOJMSMyX{Q#wdR5bV^j7=X?DkXH?MH66GB|YJk_kzslA?{(%&(5cJOt4b3pL)K_`?%Q4HHl;gjgMY(2J9MtHbM7iL9AU=HG zI450)x3vABwP^zWKRf<^s4>+w{S!U>Q1CW-k979VP(5~DDBbP&h>8n2RGbo+M?8yp(&#q# zAMULE-D8h~Pi{s%$q?Xq-1Y3WzYAFO4`Gq<_+-83l#QkN?(N%6Crz5P)XMSJ!`JuU z_awjSw#sZfp51=*PCH&24|>qN)Fm4SoRXFQY+byDHiS#^QQ-0}ml{YJLfgKTt+MP4{;endQ#||wT>P`Vt@v+Te)KEi z_+ju};rQMM>RM+Peh?{U4!u5#pBlzJH2lsm-WZRZwKEw17KGKc7ycR0v`x4U$Nwq2 zh`Pq@6j@z2Nj@Krdm4Jxp}}T)%lUCFXGXQ08`E;~-&#)og~7kIocg!sQ-2LQwaY5H z~2^f{x5*G8NEuXw>t{IqJX-di{CB8`{DG;8GX3M z*S_dWojd$y&~q;KV=45%4(Yv={&n4VTG^z(v^{k2$&PV_$5s>^TUmHy>5Gm3`f}Yr zN$_gx_t$qCjhVjuRe*}ci+(AFBV1O@h?WDS%zb}cd#;s!Y@zOYc+Yo0u`z2C5 zm!TjSFvwdmZnadY^sl3BKQPAhXRXqb>7I zmqpCGQ$e>r);7vO*{G5a{}Eld*XI@9HkEhfIEIE8Wt{y~$z}WF!(Ls8q^9@yozC;Qoz?}tQ#PK!yI6~tEk=ur z@TJz#`;tB!y48O8R$I`6PM@N7>+JSRIc+X^?Rn+hj+u3|+z1Hep-Mx2ruQv1cO~e1RjNPufxFG>G zGDe5#F%S2W^=t8~fL$}}vcp7N7s~b4{oLgdWgm-SUrOazOw~kO{TcR~$%zlyfhOPA zR@;EJ@?>zyvCz_EA%&gTwcI%_eidf5>*wBhzkKx1kG~~*yf^*&tNl-2dHK?RpMU-D zyB_~){bN}AS5;GQf9HSwpUTP#mS1CHV*c;_VQuGLntJ8Rh1aeyIzRsAmB;^d<Rsei?3dJ=B+Dzzx&j`^&%%VZkIAO9d?jD@#NEUqv`TF~g7{0};*TPJhIg}% zRJkM_WTcj>0a)s)9Ai5Q{=;L$71AW8ja`RVk8+b2b{$%R*YTsl`G;jPpUw9*=ecIJ z>o?!MR5b9)PhY>X@2M;7^xpf#S1*3>-<{8V)%@s}8-MlXLqEGzvHj#iw+B*E7PGVB zyWjn8*vgjn3$LDh_RIDsKHv4&XPYnnb=yxrshj+uWaRCP?pIjtb?s*nw%pyz%BcNcYbB9~vs$()b)&UgNI z#@4g;$q#b}-b_FG`?&p&2kf|zyyaBw?#Y8aKRNf4Ctu)_@^{|D?xvUG62mTQ4l2Iz zhnIEyk)vJE#}YsI=o1%A{kner`l-`rfH~XMKQN>tKluxjoWIV5FGL0ghuB#?Q|jfX zo_dEQD} zf9;Fs-}}cCZ~o(%cmDC4H~(?|l`B0@e!lCMpDo!m&hi!;%yM#a+}+*(?ccv|E#A5Q zz?owM7k}}~XBm{=dGDi}Q#)r8ckI~F)qPB7FDWV6x^=6v>&xpmZ2bAfM~P=0JSQiY z6O_QZ&EwKDJv{?%s%vVA#2(xB9{^xvgt|+>S+Kvjf%?3RYgTOEYeAatg`)v24mun~A%RTvO>cQWJ?fiN4jZ z_uTUw>LiJ9;^fKATebjT5eSH-1Hb&rt6yEY@`pdXgw<;_!>(uK3a@LpU}AK}oH<-c z7J#*D*YVi?@WXg1B*w|)Cosvh=kVe7zy0lVq`>PDsYAn~4{qAT`8W=Ov5ctgT4$l9 z&6owbT3TBE_Bn3f{zMkeghJ!`F=0d{&Ehh12q^n~Gow zTaIdS?qfKF|L07_R~^OAa6ncoUX|uY6k`$mz-Q*E!sYirBxv~K)~Tlhww_+HeY|Gh zsRKRd&pq-4(__XF3@Rr#?|a|-o|l(bKtKQ=*W;(Are`y-OLHTYSwTfb#V!iivzKz229V`Xe|{6RH~#!Kj+@vVt_gAygj3JQj`x73V~ldA zbH#NDP-t!4-MV`(XET`+kOjNOa&cQ!S!u)Kh%wlJNv1uV0-&+s%wgZYHd0&GZ#aM9 z0&HLU_%HZg!>(t{0)o!+9{Oo)yzs~)E?Mw?hWizM8c=aia0%ohxJ1tOI(N+3DEv>n zp#h8z(|aJS$R~Z9|FRtcTn&IfQogVG8O|Zi@&UQjUe0NbaBd5`=JrhH;j#EtV1GF0 zuN%)s*G($B9t;(`W}WMZCI1lq51EJ0izwzRk0LPD_dfXe>){fHLsM6gq#6OVOT=G% z^jAg2CI9)K|8J3(_e(FoW};wV8h~V(W5960#E}BV#=Q5^<-cGcc>5u;zM~_Zb>y?py@1OCb1EK7Ha+yvQ%^rb`2FvH z|Mt5dkcxXHT(2-(GUPE#6Z8CwFX3v5(U6IRW{*gt-057s_WGZ3kMN5}AB8M4f!F@{ zI{4W2#HmS^EFb^PZ*awc0?kZvbQ&B2$2PHR0Nkc&VS$aZuAQZ(w)Wil3!09R1(yzQ zz4aDf^vpe&=jhaHKi~b}5&<0jyf*SbbLu}c{}>%pLH?V0rET$Bwu5=fbYT z*^we2&O>Y}i>cxJn&(t(%@pfgvGr%;8qdWyosVfaZIvqn*s?MjQO-HdE_|8d(KK-7 z9{=SsUUQPjY1dSxVSw7kb&QVGF$RLvJAt!`PdxcFJ;2xNcRI3bMuk5^q&A#qo_!7n z0!$!5Gwd3#p~EAin6vgP=wjFV+S-mD?b2+R+dp3lOf!h@?d|6$7=V%b=%c@6V(`}6 z?=nLmFet0+AD=&eVa1A-eAVKPn3%Eg2`rsK|94M5jc*5S{@QS8In%lN;G>W2c02#@ zHCcZ7LIk^p4gfBf8J*FXW&;Z5&WBvuuJNbDDNbbM>zn@=y6-YLH?ol3$kNx>&!;p= zeFH;Cjo&tkd;L#u;k=aN*!*F5_W2ixnK7760NDIGBmSL;yzPa$5Y%$HMBWKO=0X#r zV@TEi&HQ8@z8AaZJQscy*g}R~hn5du*KxJtNP$C|I4z8mdwfo_)FloUYESWHEpv5o zamIhM?ob)8m0f4;SP)TSvTJROj<#*$%^W{-t1xv4AZYvcvi=l0Nd}8`|O;?bcmxq;+#oYdB;e52(>{a}O(&Mj@N{4yk#0fUb zan725TwJN6IOM1OB_`6w=>PUR@8LKFFW>k`#MpQ5*$0|2AkN6u8*lsxKPsHy=IXatwn>A9|r;DZ0{zQU>zzFkfz-DKCB z^!aOU&Eww}evq_(Gwm-0qt^e!^|_A-UU8h#fHx%ZTPS{zD*73(v1@MR#Peamirq2~ z4=)zGzVykv?=$Om2_HFQ0B$JA1b$kWF>*TEM>q-5dG$vz@ZUcF0vLcPCBMJ$>C1-+ z4nQ;-BN6=`Fv&OtzI5qhVDQNW@Z?j^&<_CfF~h$j=GdlGVTp+`9!NgAbO~=KjMqwJ znR~#7E)*Q%akuj6r~mc&7hity#g`vnMqM8n<<7_z1wrugC!bI>MSzc!6C9Y}^Ms#i zmp}QG7=ualPdqUMkonLC`0%64Wcll7pHYzbhfy-RWO>Jw1sJw*4|V0r-!Faq34aS; zc=09Zpa_1){TFnVLUbw9pPH0@PER$*m~qUo8D}>5M)7B(b93?EZs{&O)5oguy1*x6 z3!B7PqGG%@{2;0SX2Yys%V1q4>s;7%T>T_Q&0lfZM=HO{Ih4&B_fRC`J68j!@j6I< zUn{$&2&V}f)~8#z@j8P6y6`!-*Bc@@12Rol6*NPVX5f7Xf`eh~nxT*+XU6G*2r2$% z=Nm+%W3c>hbuxv6z~X$g;ku@)IEi?Lpk*vvN;B*3JcyWtTsZbsWCq zSaDWQ01dmmx*%vY^V5uPrr;89&N3JHma@OgR}FvxI_isqS3c=m*-Ro^ z#a4(PB>ab4Im{)_&Gh+e{H4eZx!ljiPBV-;uAa|roQiWUdpNdcB--8|W$TY9J04ol zVaYofl)Wcl`HuPF#U{I^u~E_HV8qPU4qY0?wO?l=;u7yd#3l8{UT?M{ZYK}s+PtIi z%?f*CDm9BRV~I0Hnsa@-ux4*Mlhb4FD4*J{ABZUSUB2BXQ~sOb-%RfD!O1`CR%P-_ zoZsC{#pRqPcFi%adIElsPVtjGrk0=NqcPRP(e?rC+FINlS<-DS>3cw zPdSqaG--3Ic6l|o0i7h1v}sv1noGPn?>7zKVy%(=7AcrCe3P=@b_PsBQBya=m5IX5 zWS_0j>q>fE1Snq@$6#J#UKf8hZf`E$Fn&ba9;9IY8-GmG}2B4dS%j<0IWR7UFWuGzr=4j3_*DPo^ z*%)S__OH=|rYqlJ*P%teXj%~4h^yZ8a4o@x~@;;PGB00-3j8iPV<}5 z)ioG>buQMggT9 ziFK0+^^Jl>-YOFjmUf*vm_Ls%$ zJzQPQxsRZNF6^31e7LZly=3a>2kTs8`rbYKhbQ7!p^md%Sof)D`>2|Yk3?4vM3wi3 z7k68Wjs)el@rmsgUCww-5l*wEebTm#=4}AF-RdOs)4(@ln&Im-__=66;oJ$Dw~M#y z)0um{&mD6{)!kzD8EJmIkw|nyLfsJZwv<7nV%IC$a9S8t&=Dk;0vxxN_Hz3z zci=J)kK_n;HHWXKxb*|OPH5yxO>W;i&A`q2b+m0Hs&X)@q941CDmxKbb}VdFdtlC9 zkA!NL%h}7}G-nr^HO$rtFbTOjtecSy*l6SirV(QXuAOSe)G+wdBX2QAXnteOz+8|S zo<*)ZA@6n6H3zP)Ltz$KuAS@plET=x#M`wwzok^{nuVl!k>!5N8L!&{^A2IxTnd0) zhjC7`a*%mAcFkr{x$qhnXZG>9rnB))=MtOG$2G9pHN}t}V;hdMkHp%CqbmBa>+s?( zS?bC=;Fa9?$i?6AYYyu+nYLyag`30sd{%rtX8Nm<5rEVi68uK-uS0weEkW~t6RcjR z=otmqjnjpzYroD&=e9?>@NnDd&yC>BwQuH4!{(T|QNEeVy3>^TJ&w^`xcD2l*cxu4 z_h++NJ~v;>B|a=#5kl|^&V3)OUvp_D4#R6F#jaPMBg8hGi6^j-%}$l7u~??-I~r`?2Jvd4<35%g;(@ZCYP;lxBe+bCQwKjH865*1k?et;Jl$cP`BcHB*v)b)ZSS z5V`uQVACqIR@YSuMv|uE;L0h!BhvY5Ae#YaO*sp7lz5d5O~i@zu2IB$vNKjVaf*MH zc|&h54DjmA;?TAU^J^t)O!HGPoq99)*VGgb4$5EW$Ebb9s*{3bH(&taN+a+z08LO{ zua<(aU#}pYWFTn9%&)-jJE|3Pd-jD_s#^AYEN=13-W`;8Fd&!lx>GqB?uoSZbNg*5 zmjYA{+Y- zGh%eE7hit8clb<6(;lDHb)4j4u*RbTx6-qNlu0nRdPw+iSUx+;j6l=`R!~_3C`K;o4(02xzR1AVnI~N z{P4ng*8F+a+#g%Ae;k~3U(m821!UakpMGCJ`i}zA@AXgnQBdZ6L76`cNdKXK`j2$* zOaGAy#Qe}N{Rh5F3HPdSk8di#5B$=M*SmdF?~$0L_xdfBQ~^|~pP&h*g!CWyrQhR| zc8?D@>IvYp^j>28;30#j1mCo~e3strr=H%Bg--h2K2qX6KB;&6q}=Vhl-KWjEdjpE zTVBC;1n<|Gz4UH^PukrO@m2Kw(sT?(3#QDR82h`My`m_o3iT7GXw$PYN0kJ{eRp6ilR!zgM^tK7Zho zDyb@7p2*^*SaRk?9G%5rRmciU60ZaG3p2vM)QHj&I#hyF3!+Scb)`dJSQVP0d}P#B zfWlFT#5nZhWZ*998l9-8k_cf_X*T!LHl&tSy$~a%sEUAs;z1aI4O)@30a2qUfmf>D zI~8sn>ZLjeaISPHj8T?i5`Ivoa4RiD2TG)^X58za`NN>B`+{@s3(n<2u6Yq93*&1& zm$Z1NZR0usbuCvrp3MUCkA&ci)HZA_=hm%3JPF6vaUqu+%oOKl*!AiQiH+wH8_y?- zb)S{%KRB~lGm*dnkgCzx%E8#m{>U;8c6EjowucrR3|hI{KkH%tW!wBSxB8?#=##p^ zC$+^pWeve=@oM+P29JbV!a_n~-NN`fcL}u~akU=tb&C?~J%9IE^?3*%~e z66QzS=f~I=#8&ZCp=y3?^#W33tLMj5xy4o!7Q|HXDj}w7esq;&l+@~ZWCw_rNM0rI z8e4OJbk)3=ng^nYsd*r}N`gXuAi8>9bTzL~m`AzM_6G=2HsE#1viqVn8 z2)7Z!^8&OTDe85IBm7GsBQZuU0o1FiUm642gAKdVywt3)2hZdZ<*0fgi!clWj#fk| zypju5Pzxfj5fncUL{zAPgwFlpB9W7(@F`8g86)x1sDw!gv`?iRr39%Un!)@?iKKCY zNv#Q*!j~enI7(6}2)#M9trSkYW?mXkjayvZyqMYrarN#=%?lHoJ(AZhN_}t<7wx5Q zmAi45wfghNEcZZQ9v+6dzUKtX*0@OtWAMcTQZ;w&iCZ%{n^`NL*hx(?Uh~Ad6Zpht zDqcI8SUZ_ejcJd?*@j~)1|r!|TG|y^+7({h5n8a{lDju3yETyezcROD-HhNqX&b#$ zTYQ#o@Jd>;lJ(HWS zgYciwupqu(xRvZMBQzH{;v471K%dlx`LT7N@g&G=T%E-0kkEu&s&tsFpYOzX(2qxu zdQ}94q7z3!4t%IVmRuq)Ne-5TD?~%6xO!;nTq?EEO+;2`6huaPFvZM5C@X%@p*c{S z)USi{xcY^v2vM>^bBF*<7>Fgck)|Si3aJJni2(rFQ93F`d!loRB+#5RKqC=kRf9@i zVUie!R#io781;%WW9WP9-~=2&6ItqXi8_WSuWqpo65^z#iHyR(lpJ~@k zN^zR)`AVF<1#l%hvnFU}X7({NbDNo&nVA{e%*>2!w%g3i%xt&aW@e@~to#1=y`7ky z*qPlE6-OnNN?EC@_>}djl!@`HqCc(ELQ+MFim6E`QVI>i3f?MFJzc+Q%9Cig-lWTX zd|1>nt2G)l%&dFD?Zx!M%rmMXBUKgaVXhWMa}$Q@`e7mZf^wr^Y<6-E zk@j2p$=mLs_S+9w(4&dZl84b07*V%bGT~mr0WWf~jTo;HofRS-kHwg6!+vdB z^7lRN_cU8Xjp^&IA&xzwyy7gM1@_kx`+GURSqA3@MDo1$xwxZwNN~BW{ham$Ed7Uj zso%#bVjf7n&NtuUhR!;bv^$knq#5d5NSqO$hR!^^itUgl7vTx0=yJ<(zXFZZMJX*y zSCif9B)89zmk_hqst-?%*q_v^{djiG=NM7#&=$e5-A^u z{~LFG6jVMH7!bTQp1E5=Ex?j4KnKE+LUyhqusr;sKZssYlwPYoHy;*!Bq#pdK=^1^ z5|B%gP5@MKiFY$b+;n6lnYg&`YCtceL-K6F>4`5$!s*0CLN!6>2ro~nD>6idU2F!u zm`^R&0*UNdcU@zOd86teuh_0Tzk9eCy{pi=B$^~TXMe+NL7z%0Pb~-9C}85QmQl?O zvlJt%PPwQ61)pBZ#c7m0TqI(sM2h|%?iGRjt&uE_tg#Y<>1a{5QDe(Ad;J&v)2?X~ z#I7h2Bm+!X&|P{!!^qF9zHjsFqiZtJnOml-Y(Y)A!6S>2y2iharelt3t$7_-Oeom1 zr41USrc6K@ZeGU*+oAayNoeH6k{?7;@#82@hS!9!%m-l*?uPI){o>;;x3hnzqF424 zb_Awgz>WSo%xmIh^cFXGloRT`tz=AldMUAgm{<*6F$(;w4~s|`jkevi%xd!j0IVSi zhiGM%NIS##Q4(7gR@dw4jZkaO{vVBW23{pXNJ_EW zDPqXnokZz!ZR_7z2q6GUL-tQnTM)7}lNVq!_qMtHDYbP_uR1|cnz~XrCWKC427_a( zamG+@rJ*W^5u!0IoJnf|`*DM*$ljCRtDu+$!~@xkaYU{dP+`r0exKwdYm| zD|^du=vB(QUt_ak`zK_}Zmh@-?^n<@o}08EU4^4cX;&p81T$O=e;iCq?NvX(N}8;L6z{bq|B>|D2PPWA$ib|7|gpy@MvjRERr51Jid zdVO_{Zp~Ny{8>=pY0c+qZ2(&9(yK_dyq~(86YkgdsH@06_`Pxt4r^d+dC|H$pBD|$ z=9M$IYFp>L-D?}n5cqoTQYa=3S_j=h=W1i!c&~C+8QdCVqz-j~09d|)C2r$V2H(Yo zM-O4126T<^N}!*hBAo?EUF+7Kl^jqL+Fi^9hepa0M6gB2h8{xM5+HCM3|j|e3H?Bt zJ`HZ(rk8-Ue4+;@)_fBpvo*PEY-BxJCw18z)Hp7W4%&8jG7H`?(H zN#smUNi-8Q$V@fzgnleK7@1X!rt=*tf9h!tXUr{kDevU!)^U_Mw9W}ad@Ioe(J^!Y z%nl9}GOBHmn4ZVpG^c8*0_f_FJP&q?FH#a|-wbItdU`%^u1F#nez-(IqWTW)mT1pZ zrBc+f6jHJp=3GV;NX{)a0{VbdF*c&~!WV2#8ic|aB`3^_f}ONPtQ9zJvj}AVutL{T zB1^W*kf<0cvRFeb8B|$Qm3CfkrT?|9Upd5|)uUP!%|}ct>jHk^N66o`RC-?kL|6+Z53{Q|%hKVYZla-(yzZ8BVW2BdJ;v^mD{??kU?u*$pT zkc}!=pGg^^YUSAQlQ-<~ z9vi4j^Nv`AB8dI-ry1VkJZAyVJkHS>u^x2D=lGk6Ur}B`q`rjyv-+OBn3=N$E^Si| zdHQa+ZFof9egcoapR|;O{`vNof>-E&e3pFqBl9_-V5t042CsrZfRz*;$2KXxPe*pC z6x*xenn>Pic4yJ{)7k73T+eJCwM5$~a1vp5wJ?k-{V4;<`~!_9uE(h|F31A;?u77q zT9jhTxAx}51y=tRr-(r9@~$BN{C79a(`x}Ly$HtK0v_I8czE0`pzh&M6r>hW<{X#f>ocdA}ng zz<=iJ)ylHQ^}D}F(^29rp^eGSfsvwocupOpNR&oL($e^wnn&)9G+Fuk5D#7b4{I#56l%7=%gqY2IeDh;0|%<>HzJbaA|19OeuR7 z^BD;MJ9LZ3Ne%<)@PGld{eq4Rhy^?XjaCxFN`sqli6D)8;(u_tlDFKwx9R_VJ;Elip&1X1ANKDLFs5!rtx>P~SX^ zPPiaJ6m^N(M09<*!g|BB1oTR$qaFhbvKI*a{mZ1kUaxcK--1;TcpEGrcDFfAM3m5q zLvb04l~|2`xQ$sCC@fMQ!5?6!J2N^A0ZY?!r{*N!X$EQ^Ttgyrp7_g=TG*DUpvqPV zn5y7KqJ=afi7PA4Q-!LYIFN}R;lUJ$9^k>G{xUJ)ktik7g@hgSgv1UKg8lVUQ4HLR zyH^62gCs60l`2qOGzt3U_AzlWD%foURr0rF7P6$^G8B&`C@|Nopn4-mUs{gwOM7`G z`M4db+jmS?Z8g_0G(+-wi7DCEW#-F=-sM$_WkO9RBwen_6FTyp$zJ2LS|hv3?8x1? zjAuChpd>@vuUS=d#?v8d22$1&U2}6T=s?|uciQe);WgTrodl0S7Ja5{m~xz$x;RFb zxC*TB3X{YwOjF$L5iOAuXtlw?B|}9H2MHL`>A+RM)U%SMA6STCy*`Auy^PifCg;+et@H zy -g6#M>}NctSIvpsgfzyk<-gs3ng2%8nJ5C+HaZ=V-m628%x6Z$XGe8fhvsCD z41|e5fJn6;Ye4Cu8QC7VPh4adHG7hXL*xxyn-7kOv^9mQA*H#5ud!-Nbpnl&Il@Rk z3x$Q2DykQLjmEd5240}%p&}FEfi4^(HOFb6_G)V1!x(M0XgV@7I?Wu`)XC6zZ{lzR zEqx;?4b727^1<}WpLnSlCZsrbb{F*;BR$S6e*skoO1cP!Dp)9wQKk){IVuiP5(WPX zx{Azk1egMolI{lbE<+SbfSe@D;{4`+(eCDb=rQ6HAUW7^flw3 zP1h*QRXsF_JHTa0XHN5s#3$-#73@4m$)#H5n|32ehv{Uva+_RS{q5`15>#KJHpz1> zNE@DV!FL%@gENmk&Csi7FD3^W?!*hL$2qV!@-^|=8_IPBohgk*TO{1LW_Z!MKaHJn zpEgX*M0~@J(*R#}>enA9U^bu$Slxw$+fFljdR(Z~38r04Z(B5HO{ot2_J}pe=-&-> z-o!t9KikLkfIfgLR(yXsTda*i{Q;VZPfRjwbZGk#9teh{>R)~=fg#RGwP;bj;Z5ux zcp!Ovkgjc^nO9u2qBK~Ev}1(UhFk0+kOV`s7fvI|`^`XPmZ-4lr#?UM&*FC@9i;ul zo7-*!V1o{h#%Gh+ioHIK7RC~)>{%J3xIU!_l<)!_{Js4Qa48scWEHV@Qi$>ZZ(*t~ zpLp0QU`os{U(D!gzpRlr1XW5WI0FG| zRN%uRNft8BWo!O~RWcNL6m#~|T;Oz`xR6KpwoZbcH`ATDD^-)qxR!eOWW<|$|sNc${ z9V}8xc9AM1rlrEwP9jymJic3rYDh!~rr?bvf5mOy4$!33ZyIqexGn)xe040#B=%Y@ zib0_iGAOrD#DBY{rXQ6mH%b;rO2xpXEtXI&0w|VvDLGla`VYH?Ge387(yo>lUcy%_S zGx+OUUnuII$@DkO4H6h-OAaWckKK7+k zS5spVGk~CsW$KzdNVI+r_inGtkH7U*J31NZA4m54a@xv{rp4~h(h|?y)ysjUH78Hs zhz8*_lrJ<)`8qHzK%R&$P>q8JouYn2F>n=r4FlAU(05b|C%V8`WIKC4fkmU(J+3|M z1nTV@DkKdl#Ke?~F5Gtzgi#S{8Xid`ZAr)|gVLHT=x=my{PN}c zo!MPqy~20|UB|6Ti*o(haZypVxn>>jfM3F8w7;N@P^iNie@QOE75cpz7RdO~cYOub zGwx@ZhZd|(A_#_mMJ4aL*Rm2giBcE}pv6m!Y7Q8cvvm+oHA6q3gpXHb*&?*Vg{#cB z4X-9`GK%+2Q5Q##N-X{!+KWg&iNPFTnH?U19xag*DY`9*HS*ERtc1D>PoO@c&#YEi zYIHi(sA@2pitCe@HA7)MI)#~-IWx3#_A?-*##vfTUqbU~VV@22S|}Q{@%dGxw|b> z>==4nLVsL{qvS@5ZSo`p7hu75C}j<`YE4t2TP0Ld;Yb;dG+YIfi~qn->xQq2nY1aq zA~6Bq$Qlx2mMZNhiiRn+LowkwEb2>5uaqg_!Nn(-9Wu6$6Twyms;P%A!9h8Ss)3?t z5?^Fof=|rvI=gd0-UvX2NGx&kh^yqlRN}#=m?AieM96y#MGMP#1Th&IpbPXF&qq*^ zLD@GWOZ0Ks1kZ9)h4_~^pz)=Bix}(>8xqgEJW@rWRctQ;$1)(oIT1jSh1I=zb=vS-KKjzz8{&!S?Be{>q(5_wI_1p3?0FbKpMHrmUKA~T&G1f> zR;A9^E;ljRGF^N5w&uv0)O93e^oj@#m>8iR`cYS>N(Xx6_7C68_-Bl)$PTW^1C1=z z;mGZKxS)r1m#zj*k91@M_G-9&6*5%fLnI6nJNUjnmX?&OhWa`DI1&y90Ah4jc#4u0 zS*qwI^o~uc?EP??L_H7)z#8w@|MsE2)YW?rVe|)X3b{GrTB^+x=|Dq~#El5|unjwa z#SV2jQqd+Ul*ldkeHXdfC_VZ({`Uh~feajb$&ZRwUllt%1e&mtMG4B^AbcfOa+(*$ zYNpE3L5!$m(J@FSwnBAaR3L6({EPUB6?1AA_<@G6UqRRbG{7(*t8FhM@fpR%A@FdRJ30sq0sgiLgmjiRK_~)A zSz5VBlew#}Otd&Ykv>qx0WVox;)h?pLU4+n;>Jykh}yiPWSd&DWnn@bOX0wyW=zVK zctyAbp6QBQ@S0e9>UDH&TtxM8T0ZEV5ql?`w z5a^L4k}!Q~5b;%dZOo8igq2G1XJa4)u3I@nxyu;m@b86rj{b;D7@;Ht@zT?8#n}GB zuy8HTK0)m4lHujNpm?gh*t)W~g~t&dB~uS7b&ZC^2PpJ>mDnb@j3#TbLU0&#zM+*A zpZvv^Y*;X+b|%g)PNs&ofA{Q-tYBE!0gQlucGx(Wnf|+!^WRb)9sq-kshzot1%QR? zt4s;NAO~OpFbLYXm^#@Rx|jkOL`>Z*jZKxrg#Zj~5m z{{*iy5UqUz*Hl?_tuqid)!&BfICA&>vt>V>kulS8m-EN$ax&W)_?S*7f)rI1cob!# zXpZRPJR?HVW}c)sfSxi4X4TQN4W*~74C;C1c847h*@xQIl zKSf#=d!Mm)pP3Oq0@{HTa~rG}|3{vzS_xj%ipAWBmY1EF4Ciu|A=AW>W029XCgnEe zw9O)Y!i#uZgT!zIzIg!;t6la1wxjP}b^<1&lEXMCTNz?Gk*-yv6T9u+d1_CGJBR-`}6j9I6%;oY{r7KuHgh)o; zy?dAqZH`+BvE6`&xm3|6vCRuuUHa+A@VXWXt>ecFDRu!!BeH|>Gw|8rbc2CN`v3?& zC;=F%c=!weC_7jnl#^iKcSm4uy9@wfhcOWFS|YfTVy43I?49) zzK1akd@uL%@w%W!+DG$2BXDb)!BKhZrcDTpzcrl0ITg^|z!v*ni}BOF2&O#!6z;+f zIzDjO>bfeV?JT5mEs(YY80IyYK2#uM_@G-NlygAX1qJN-n2!e7L;;qRA)QSy^(sP# z0Rx`D@GRWO4r_MU#4LErHt@Z`*Qx@+XP^P7z<4Bxevw9G&_T31F+60BL0o7d;&=;E zWJ$4kBqm~U3?iC%r6Rm?Ava>zQHD{beO4#r6R}I8u2G;{jF-S&g>MzHrv+xmCX4V7 z!UJ;}E(n>Shxy(g~4 zssUFdd8GOj{3M9VDwHK?h*G2>@|psg!fUdY#X5!e%Aw^ID$W&{Y^j-Yx^h)T>KDHSQ1$<;JnY9*9e)PJaEROuC}75IMo$iAe&hz`k+ z34~PEixg`eq>tmL5UG|_1X&eXrCMd2@-0PG%q&S*nOO;1`7{wX=~|gDzNT}QFtPZL z8CM%zn&lclR-!IVEpeTmoED!#E^;qHvMsWfSPWY4TdP=S&mJ4@XqeF=&?Gg5x`w-E zJ%}pHFUTwBw@Eb!-nAc!S4nDhYk^duREbq-Yw0(x{Sy3z{p+kTtBLSr+x4f5+41Dc zT8XpV(Gux{WNwm2k`y_9ri(u2Qqz3QvTj+2^i$+zd~Ua1c&>gj17KD3fZLY+1Yw0iy9k^q+0EoW*T-)=k-EW*;T=6OKK}W6|FI?6CTvg>~I5PI$~B!h7V)u zelO3k&opl~uf&>S8me2Y*gSdFkL?$YosqlCeAr#t+F{~=)8fY#pl-o)N% zKvRBeentLBpIDz|-$P#z(KHdP@Gl|gf}Mghp(}@bP98aYbH+(F8^_f(2QLp957p-+ zs7feHkuz2ot<}bd1p+ya9Qxc%Jm`e%(T9Y%ACrYnKYVipvys^fy@nSo!j47f@R=sl zJ(>O(@eRI?R7ZSAGDoI}vyM}b&BNEn{A40xEZ`|HKitoVGS`z^ltd$ICQV4(O?o7S zpMuG3a#Z`YIa(WPu%BVdOX5G;)yZkgaF(A`&K=2d=gf%Dj_+i6q2Wl>9>AB{DYB8o z-Uq*CztOw>{(}1q3c?`RwyjyAZsmD;$6C|)ULUZJX0tn&tLN}-WyoX5LCBRl=}!x~c^WOX#V6rW#D^iNq4`~I8eVm~ zPvp_f zwjS1x*hJ{Yz2Pu;Kbl%NSx6=;u@G3&XJ+UuFKs0KR999KX^<`fl& zVmZ4gm-ZW%Q^oe8LRQhm(n;gO_lvtXiRe4f9LUQciXIHtGuH#&W+ zU#l+H9b2w8GrpG|(SKgvd1pLrZp?J>zZt9v_YWkBQ^!#gobgq^Ox?B&6Qt#$b_H~) z=MM6C&W@aUzj$9>>Hmq!WzJROVewFV+PHbS3D^#(#%$2L?@8{&^HqHdJ0;ZC)9&QE zExpQ9hcHKY>`Cax_SAlq`=fjDhw5rQ>_;ep-{>pjTit%rV`*33Z$5V)$>&=ej}P_v zm2vyjEv=p~KR?byHfG`-skXv4AO!2VMHT;+CZK2$TK8j+eCn8k-a;4?TKf@=gdUoT zA8(j(2V;dK^gvDBK#mhY#J_-=4VTc2zb(_uw`u4Lft*ccN%f{#6hZfQa+W0?`crYYGI#Q6^8tdo``+-s zFr5FI!+#BDW)4=)|F)Ys{w>r7Fh~ju3mH0_ngCe-8q-Pu-T$h@%Jgrg|G~IsW&Wqm z|K5UDpKw|iL+ae4`EpY$6<7<4MCx2mMxi<`>RU@KS?mPVR}76wfJTt`kTs21Y+mP~ z5Ntu|_yWk(nUtGxd4jt<0sWm6_AZC5`#U-CM} z3e;Z<)0qyT)ti;XN?{cUsMJO}=bqmJ(HeU%j06>>)LY8UyCxE_oZ_=VOOKog)CpBl z)NX>>$C5h3l~upIgNdNLPLh4@=pY|?$@X(>z2fP&N?XS~pN%@}0BK(xGt{rJXvKG_ zCm))M4#AC#s?9}%yp5UdC+U*OCljiaG`lcD-ZF3+>B1oPDCsC=r@-**O7U&-bQITm zW>SmTcTXZFU)_IRA;t0SLi6+%K(x$7f0R7f-%n_9n8Pq*D}+s2C8Ru%t7^t<+{gF< zWdb?`Q|*^xAP5K$220HvN!JU`$O|ccRp@F^EKP#+!@j?HSjN%_l@LotYyF^=%pTU| zLV}~b`vjVK^7bfkOr`rh*D(Q65@hY8^F*O=Tg4`7C^pA8$ybQ|r!@WHxb&lvoRYL^FU-G!JbXl*(>k#sJ7z)UxAZ{8dcDYm*^i5&%n5I`zyz)>EZd7 zo^<%wfWFWCAWm7_l=R6_o&?Now6cOOkT_fzmR?4U;h$+tQHu93l&RhQCP+-NqUaC=Z;# zcEsxN0H0x4Dol1ag+;Ys#EhPq)#S`=a|1|xVq<8}jKO;l+E_reP*rz?#87Sb(SX3d zc+b)wq_n%|EWZVDoa@i16;&k-n~Pgo@tK2Lbm})~j*;ltQG0i9cz`pH=yL_Rb8H>G zfJ7=Y6brCz8!OkAakhq+%t^gwQKyY{-N73ggA6`WE`kfomV$0l%y5+W{5Se=u^pCI zk01Aa!1Op}I`LL@b*Uv9et|~2vfjnF;Hj>@WNWWmPDx?|d8Hu5sIKx)S-c;-xZR|9 zBgji=s^=)8s~k2lePdD9n=zYtYR?QeJC55opoknnw<=iR=1A5Van&`fD%{y5-S0=H z7t?Y7{mVYWw#PE_)oFjhEb?GO6WV@rK?;J3-e#R}^ zO@9y8k_@}!fkJla@Z{Ogiua0c7UK$oP18mC9ezO=#E7wvUJEnibi#=-G0Rl&N||nt z@|>^B%g7Vhtt%;}S=C(E<;Oa)_yy&b;m;WSr=w~atsISPT^pr|zKHpsInhZgImpi!p8c=oA(t-iJTTXe)~CTZE^s)zhj4YHm9QURd00vz zNqtepcyL}1d1{uzmw8q++bi?qR-B*xEM&iYZ4Fs%hT#`^dcQw%&QNKg29RX1;9v61 zKx^%#R37-u)AwxfETHPWO|4^-UkQ%@5%ie2I8I~6Z4n2(+>r%RR23u@kGQAF281-< zxZB}Ts$zc}K&veG?04*6!7|IPh#&X+V}mcO}wM~=TaCIHhvioyJCLqp!k%GCHj%}Cm^09gNRMADWO!1|Z< z`A5|MpxNK!|E1Z#oDVD8zk>hi)BkFbLD|*F<)4y&R0J@nTbleOh`x9s2~$gR3l{)0 z)0f&`UF+mv|Cb7aadC3}x*Pw4`mFyM6aT67r7DAh>DPU6aB(%X0Wc`b8ai78SpTJ) zge+a0zm5vq+d9~Py(+lCaQ^Rkrtfj<^2(ZM!=C_nBEx<5069rzi>~~|O)3chKmu81@^Rh!2@j#T{&r$q zYwKe<&3V_Fv>O&0MPAU-Onw0xWPUyUGJ~Xd3h4+ctU9mkSkT;HH86)1@#dSf{cv?+p_(X{l3#kWbPzPn zV_Oa849_GK@~WQ4S1d78-wXk@0ot4idzofARSG7d#9(lj29z=%9oFMx45MGa@h@+= z)6-web&W%SX+(JX9NLP*!iug8jS!hZ1~H08t&Nqn&CJM&VPRpTA|oTCqHu9=e*9!K z2nnaaGT`3&*%SsPDi?2b0c`Y;1k8W290$kuXY2z-RZvh+Qc^NQ#ka>V7ac;9CJ4BB zSLp$WU;c!)>XTQp?>4|c5>$0mk!JktAyo6lhcD!3DE#3ERpLJAiTZ6W)RmIwN36d# zj?|{eqp-D!H5a+}d(mZXFMJBQ59OvpxojR&M((Zz z*AX-n_9;HE&58IQi5c?4J^a|8VxHjaXbN*YH&c8sT{l9?uC5P)qK3SFI~Ct=#jn6R zhT3?pSqVm67FN~eW+s|)72_GZbc{(KMvV0tbge}Xi9`*%Ru_$Mw9{t%IJP%9>!mz_ zyKRh3nsB45AET@Fdd&L?@zl_k4>63NBtQtV2bOs=x3OOGIj>w8qRwLor(%=-hxxum*<~j;aq2J|mRMRoK|r#L+|0 ziE|D7rvUWWgEMe&(K}?I;yUx(M-Q?10xr{Osi~@JYP&(!*4D`SrIbIBZoq=t-x#`_ zcM_uJ17b4@+-ViEVcYxU^S?W!1{g+t+BYsP;cs=t;#YP!-P!%w-WVvj5J+gXkDB1A z9ZJy{#vBf!*>sTsQwPeOHS{*f+Bvpi$#z@+DJNtcVMU8fH-clk9=nWVI#@)M>GCMv zi02hvsgXtIww0OdEfl{%4dy3YrV2I2eh|OA0!0+72F28`Mf4N7zXu4=)Mfv_!0^AQ z@)v2inEsn_{s)o%XY~0mp!+{TAGR+h`@iAm3(o)F@rUhSy#EVQ|18eL55lTP0z2M!t)!3pLM z?|x|Dx&%c7lRnZt?A<;9Ey|w$d7mTCb8B4?Zgj+F;|2RkhnlK;$L~uJT$@_MCW(#e zYCYA5M%_5|cg?txIYB5SkYFGpf&ZV0gEq24<%>?;Pj)u_^3<&PUovG&D$kY6nK3Pv z$KM*3fFa_KOblE{zX=@G-J# zi)wNU7;m~-ln4hQw9wK!&ihdoK|RHTbNlXv9mMcN!?AT!ONj^{emG8hf@WMbod9Px zZs$aZH;u9@ckkP@)Mvxd7EG6KM@Q219U@iH`QSCfEq})Qj|cBE%b~*2_4pCO+t0XM z%?0WJzqhmLsJPUt*edL%^fP_;k3IdT&x%$0#v6?Bn4&?^M#G5uO&_rFHQue;^U2A( zj5b$k3XR7Z-Vu?#s}?t}Q5FShPc?tRR9}9|%7fqFoOxSZto4{E%Dp6rfoUh7cX|8C zr1reIgoNEj1XSMnxALTgOh?_3ckUozERp;Otr}_EjgA@9+6d7&yd2)Hx{DfyFqiJ& zGi44mX|W48t!Vl=cz9U#x8dYc_CsdsxBG8Ns{>hndlU*XV~Cvwl5eNxK_nl)o;%3i zr+qvKtyQ7lj(RR9aXqt7Gd!4~A$mH%;`WaUr1&ATqm^-pX2S*8xWeG-Tj74z)mq+g zjc38m9QhDdHd(c4(WO^zL~aGWqQr=)W#ZfHEq4;~A5nDA%BVDc6hA z+S#X6pOP;B4Yi>p9fIPGa@77SA(^iH805TLmh@rJi}z8FHfGCuH=%z_kFpN;+bDKV z&d_5MXED}c%IT_M*||Ecx)}v+GN2TOjBmkzJ^4kC_*gEw@CAS_rU;; zpV=U7O>DIN;2Y3!{L9fS^!cU{(=KG;-GnayI~ z5Lh1MU|QetSJQQcKj*a)?$|%yGCW1!lzHPGinBjX!Xrd+K@H2L8eLa0NW^WAe0IH( zJzYK2pr|-qg{%*gyv#NaO?UE#>gyMLmvx@JQn>u~ksZxjzA{K@8sx3oENxHxQ^(NP z94|k7zw*@pfOaDt9wFQlFWILhN$H0B}yDdF4b zj6U#6u$0z$i~S4qjQ$%Zbc=Db)OOxBt&9-+@2Hm=_YJehkc7ZAa*CUUvDl8DX%)-*qd9L~XAZu|o zn)+#E|Bh%z*d=iu*x<0j`@ky`Vq??uj7=_*Z(r3nS+DgQe7E))+1mjfvJa()2PpN$ zlcFB>zV4yCgbF3r|98&A&xwP;&R}O^>t*U+o+2rEf**AT2&cN7>5$Vn!$S#qk;kR)t&LdD4}e zZcD*dfxiuJWkMh{zh>XK#Da20H&R#LaBU~;0A2B=06GJV$1&Am95EBeN!{)PT|7ZY zjU;+jw9?OmV*MN@=_)f55uyvmphS)N|0Id;P$ussX|v%-AlrXez}(Vg0)4 z{dlw4c2dwrs+x|(f5h;$4v^VmgPaQONZW+a-Wv+IruC-}a31mXmm1T!%;^_8oF^e7 z)~*rN^vcZlK86TBPYPZ!{Q(~c%bOqtGVQ1M9?+$t4xCYUP}yNd2TJGQuMGSSTZKAf zn9?s!RrilaHD^!DMoGQkpYM2nHYvo%D?GmAQ{B2E%&#@Qa&=1I#?G&yk(-pL)lnG8 zuih?>nvANzAfnJ0ntrZiPD26Xg2?hHNr$q3|8VWOdLYgs)`ZvoW4ZpjsyifsaK;O+ zz3-(eX+O~0ho`;+hzDhG>-fC(;ggfc^(n4X?G8a06CQsa7%qw~By!fTe{7QGHze2V zZ`i@ci4GA8?&495`02$c4QAqtA*Bz(zNr^ad0+y^W`^;ZiJX=1dB2u9uMPQB8kzhWS;h@cqsZsl$a0`x zVPx=Cb^Sm+>ZM6YsrlT~-xA3@`dn>Y<~Q?8|9lDaBc|HOxEBR{5@+)_--dtML&WvI zg`cdLZ1&;7yfQ44JXTDT4Dn*Fz8zJr_+5Y-%}>|BD#X|uGX|?h0rkAu?le7!?eQQM ze;S7zio@|7H-Up?dJKBWPeV3PL;*LnwCGu%;dMsnFT3}ptny9v1n9XFrTDZBLJ4sg zpYgw}*QR~~!d5eKRt~)Cpg}8=le){=(T!N#wNcn+4 zn0ep#7GjS886%eFXd&I_SXEvdn~xF_fFp()=)$hde{3wQruOGs&vB5c77<+c4AMM& zi!qY?o=u3qxW7)xfZCn|eWU%pb(DDiL#lCdj8xq?Yl?Mx&-vNdC1*61Ep`v&=^<9! z+r{u=zyQ)}b?Se8(98ikJ$0bQzvP1WW zy$x-p9`<{*M-eoN6enUpkZd+#`8V?kk~rEPR2|pu5vB*^`^UWA6phFO6D+jb&J@F< zv(k`PTA9SDxU67T_P95cIqSwhB2NsHLbh(4476Qr@MqYfkD@OzzS@MA7A7?NAvZU= z4G12$mYC_*!$GjntW~FN=1=11FPePMGisl2>-@d3`tu{>i42CBl276;My4F>%Oka> zo(Dl%sne)(;*-9(Jai$8y(1Z@hL5u4IiTrFCHoFXdJ3^T|Bka? zp3nDvYjwS$xXpM|OgVO+xY>RK&-CsbA`ZJe(@gs4BYeWpV7hIio#==q-5jx*c}7oe z=WW#QqtlFI;7I)5vFdfG$LERYvj!V~rpMRVUYYEB?(b2;KqA^p{YCqwOwawHY94(qw$D5}cR^nTRtkvgH|HAA@uUhYcmPah2e4crYH$nTu8%{N3Zs(_&`_To&WK}QT z2+!^SxzxwYosUdp=Y!!ZzuMaaOdShNoQ2jd^f!{N>QMLj3=Nx=2Gdp^d(42KOaJn4 zFwxdSP^N*{)4UMv?hh`sXIQt6VB>EY*l8yzNVNd}Gw&%`VviqJ#C4a1nj3Gktigs% zbFWmBag+9@aYD#f6Id=)_Ifr~gU|Lw^&=bnqnd{Vk6~jWWUCPUp8KVk*Oh$W_cyR` z=Gb==*>SnNOn#PJ>j5~a#jDZ9;dy%bsHBYyqcv0-z<3(Qkg?X9ZnDb=s1L;VziF0o zC|Xs3J_$U2*G}g1RTpy|U@r4x!U)Z6EEd*P!F^7BH~a2ER`t2p36{0Zj#9^spM4D+ zckStRu2Vqb=IJ^kn2hjLd2%rJDjQ^M;{%8B0sh-26z>8qMo!v`cOc&4Mm!WU^q~#0 zkrZ+`-gmX&>O&ycDwDNOi+g)K^hHOg_FwkMddVRU@@lhgRF6 zmxntR2_c7nCKkf#PY-=RHSO__n=AWEAQ^^eGHT>z=o^ z(#6RAd@ZXdjM8p;Rx9mK@6NA1r#s#1GBABt{JMWJIhp-@*tuhVOU%4mv9FU`z;d6b zA#&gYVcXyU$r7KQS#yfbA*@1Opxau`PMBg~=$f)d0x5o};4J=`EFHowRMMD5C`G^5 z-w-Obq*3rgitPyVAo#M-MiZKRdiewW(7hFe`APZoDQbQS4~D+pD%03Zx+YU;Dhp5E z;Y3YY26ZI6mnXIuhB+_gr~2nDe^bGwdCG!IRbW)UR;>1qRHBA~ujyY5H8$Vn$-qVZ z&kn=i3_ZPS&RoAi1XX&IJzEaI<_#;O$O7b`1FXgJA1yJLYhwAIjm>Ggn`$4A`_vY~ zZLQf%{*cS`+`9x9#gO^S%(IzPW{npUB)9WYCbI-@t=iTS>=Qf^_k>C4_X1ssNDblc5h{Zup1i(kl&?V+SN^YMbIqW0* zDIq>)!PiVrzIoRuLRjtD?zc>Bzdm|@w1ggg{^`V-*la6TggclzIGUc2TY>(oGyv=s z47h{9=mYc_(BnI+izH4EAhA%hyak+P1MwOBssDb{tYKqYcIpA@gA#UJ|2+_0HR(Sx zdjtI?5ECpnva{FgF-Vyc_wNZ{4w;|Cheh@W0?QYMZHx50@Ir6PEGUs z_oVc{aI({#!c0-tEy0<_h5th*&HDR$;pOIH;p5=x*)4Bdk4o78^8ozwT>b5m|Fc~F zAE>e=pK6WEajjY{*^nNqDw<*L7?~!QUzSNGHHb(G$;(30_kzl0k>7*;brI__A>ju@ z_qHVvo0rb2Du(o`W43Y*{Bj@8L(a5cU69rrYuhIxXv|I5cJbQ45Tb0@VYZ^mWn+#z_QgG^7pip^uVTH zofI`dq0P@3bUNOlt!JFUu#-nhr|j*NnWS7PF3i=s*zi2<#TaU+@$;BZ5wV-;QBA_b z!^we9J$-d}W2}E6ff3hB=#@#!8$T|ljir4Ttz@Fsj89!Q)eH>d==>F=X;Wth(9s=t z7-oaYBM>%kojT{Iq@3jK^4`nM4u(UYH?H)9# z-5?@jW!o4H-)rUs3y^($Z>4FFow)}( z?2qhqxKjA&llZSq*~wE>uj{uvl7~oR_1WB9ugOkZIp3c-oxmcLQcJTgetXxk`qo5< z!%%n=)%wM=45Ljq8RM|Z)l<~?lXrh~=5g|>%1cKm89{31;{eSNx8%*SHl^xv5A$rP z$~E=>!f#6u=d0NmV~XUWyHuBdqzU6r@hKc|0!eLJ@DW*i;&^3N_`k?{%YZh&WqTNH zf#OnVf#B}$F2SY6-P+==!J$ZT*A_4CQrz9$-3czi?M;8@od13AxnJ@n$$s`cvt{<0 zwPwq`zalCBB82vWqz2E<04A=>dEF}8#hEn;Tx6dp5>SynF<{RF_9#vBT-dkLIV9oS?LKgOLk-Z#Wdlg6)@nqvIRbi)_~nP zSIi}YW&(=+8NS~TdVQE^6z+SPjI8p115k~kqUFX!E!b3YB?`o=!IqX=f&_9phkqR2 zy`6mJ0sMWdt(&_${O(jQc{bk*GP190Y#%8;I7_zxbv*Wam!6`n3Hg1G6C3EXM{K`cxe2Y)=YI;tdoYi-1HQj`kyADbJJqGz zv~cZ~S=bOTKzR1`#H<8IYkf3;u!vT!U!zxs_L?Uv{V!nU`S|XZaGAviiWWC}5x}>( z^8!YSbnZW!yeaAoCnmo#6eMePpca@(u+$!8UQPGDqcr$b@>{&o?2fTz@2gTPS@9F9 zbrho0d7C|}ubr!xJK@8%)5$?SA&Vt8zYQhQW2gI$Q}E|hofQP~I{^jFLADr;?2}F{*hL~VuTLT=qs2*zFQ+UkBoZ%z44(hOA@$%d8kO#~r>Qq${;fPQk ziz*NtC@qbQKon&GbA&$?@6I*2gi-c$ZI652O(Gv$gxJqf2%>R(m<~&NgJEK14UcUk z{{5|RFS!~OYtV;7gGggv=B(xU)elr7(jEDen#Oq3{dHy}xLmw@!G%(C{C>Yt6*`d4 z-l%ya4b27&I~jyZP7>IwD|)JGn-Bc{tY*3lUbPVw?V*s`i@4jGtBMWZp0x2rkj@c2 zV$1sRzc7&zYkv-Ql0E}Kv|yXdS=YQmETEG~QLxK#GvOik+s!?et8C4M3|%$i*uei_ zA*M_6*9U<+|Ej_W!L2_?>P|UTmq=#jl_KBQN0>I;!f?x-LvW)&gWS%Q*)$0JTfvw06!vBtB-|`mgOht`uq6-!_qe*IOz|e5RNEHd+C|d>aSHO zkOBK%ONPpjS;&jLH$$wy4VPo(Y@dhecoCB8eC zvGFC^n+P9mBRP8A)m$ek^Y*OeGk}T&RVS)E^@H5jyYxj78lzdF{el^f4%0k(_=Wp| zdnd|xN4wn9z;9>w7hMcEP&2;z*|HLD|9T8+kMU*)_?WD%4U@ze6zaA%m(NST8dtbI zSudcpB9Bo-Fpj*c$lyNSZ-Qs(4#pf*hU%L5*;$D=h1ZP!qyqi?^8;KT^K1i!FpA;GU2arX)2mKd0k*vBvY@bGNqa(1=CsyrfNCvA{>tRRV4zetuYSbiCx zAPrY$oo&M%9=zHx|2Hn7_HsfpG5AR3okMz$ov)fA@=4U!?8OZLdFg?dFuqpTvi@;) zS8kdcZ=JEK*WULW`@8;Yz;%AjvDQ^5-_iIPk!?4U`gZ5PkbvLQBcJEu*ZCHs@w_(l z7FJVHl(I-aAH1#arrsj!HT!THjjOakAdlGJcGqOsXXOTQ*5bO^_x=T35FFbq5eP|- z*Cs%?@=4Ub?=&LJWdylM!+4k(jV#+&Irt5j!H!WdpCf#X7T3z;OhxI@G~Tg7YWB7& zr&Y?@fJyKPJ?8K=(>57z#gvq{_Sxa};~)by`CZ=qUz0?cChNf2PAo0|j!T)n97xL(0&3GP@d_FLD{0 z2Q^N(Z(jFC3qIg)$Jz}Q=rDEC^xRjb=qPrhFuZ>IDcflHeO4p22fv|g5`7!%Xa4*= zUWFpP1x7kTqZ5Hi{N8UaZkAVlHe%I=+s*X;Cu?z%Fy@~L6GgBU-xZTn@N#k3;EM70 z34`~%I?Z`EmP1WxPAA4|?%fo-8nLyynz54dpt-(lLtRHvQ`VZKvvC}6)7>2PG zinpopQkdCf$4V1tIk2}yHEprs#D#he#bA;wo<9m78d)`;KoQJ=Cyg6g+>5pdD$^f4 zEPvcg_?dRZ#k8vVC;$YBq@UDs&)I%m*NCC2C=$Yl-^wnmsea3E&zzBb9rOqV zwb8h8c}x)0_*jEiIR)HB^bGBT>W%Sjj>*+14TU&vu8apdJdZo8)V<~qp_)P7!LNKM zyyRbm7OI(t1DKn=o%H7>dVYF34*YD04YcjUF}E^z)|qN&!KQy(RjqcKuAq$%9*ofa zC`iE=jV_*5fw^#x_4A!x0|T$+ZhoR>%4dH(?Jm_+_R`f)*RX8VDn2`+`2J?OUOi4K z5aa*xo)xsM_9eu~frSzKG*aiV?qKV-q+m%l(E9XPTVY<2 zQZnEj4#DL6NlN`muI0_MBo%QH7z4$W>2fp>({Ff;a{qvGZkyAfcRPn26ZSo0&>0C) z`5ESX6(4ZD5}rTUQIG)X@|<>GI6BI^eT?Y`I|K_Z3KXjHy0aH2g?e#s*G#;y;Dh)w zP&Os;y<>|Cb;?}jjio-=*xK@5YnM`EVG6#5$BT4)Qns|;!nz@R%^Amk+gXsgSJSw; zfodw$V1w@=IC+YVQ3iG%>5b_U=}z3u#7w`nI{n#$oHx=AKU!aq#Tdnv&El62M23Mo{-873%W$kAz; znkL5)6&%&r_(c8H&12;9AP*T9?;36MR^)pCPgf*?$B0b3bb!oyj6VJWLBL_Qq6n5F zz8P}RJL7S_1fr;;Tr)XLIx~BM)V$R85xEqaZ(i*)mP&D^WOVQODi0zL-S+YVTUF>A zlbN{C$N36)z+sLITnfpq5~QOsbvIHu&d|&M%A8Y#hGseIQc$T(up03M&aEPy0i)4= z8`2bo7bRPz zAzJcBWI?I(SL(28CFcW~qF!a1x6ul-Qijd+=hBh3i&nX9n;pR)c4Ib;q#w9cunq_V zuyaKFD<|8^Gm$vigA~|?gfJk&(v2WbvV(ViBQjp-+weSdy@dh0*AZvQiVs(j*}YkG z?7@@V;>(dD+_l1p;Hah?m7qSzVx_94DoDr{z@RfPGCKr_7;a)me7&NNMD(B}jU}c{ za|SSx_&X`3Lx7f^=>Vd69W5OM?9_X=gATdXeXZv5;d(_3)oFG?KyJ&81luV21Go5k z4+Z%zNq@kW1!`ik*SJHvBb8&s%0)sW0HkL^ov8I`t$X1kIGR)Z>?vwIP@xh@?XYTv z)^)9v5bo);)Q)z74flWsE*eHPYu_I`M9v=lyF4p;iwEaLvd8aD$-8H`qFpT$Ws@#G zKIHE^0O84d@+Sgv)A1(5-*R$XEWb@Wn;N2=nnX2m#lr#$iOf^-&jYoFN%kVgWMY`7 zphg-ZK$-jISYM=Qv zEW7<^>X2cbt~Yo9cT}(|Gloe&FQo8MAbUPhAU3r@m#3uog9Xv;YkbJZw&9~AvZz^zESGrr z1ubHgt*2T|7SmpFyxZN^VK}i2qEFgZ5hE@1Wz>ZHu0llmj`I<~-wwhY*F0{_1fcs2 zn(IzV1`aqA&JZSAaKaQcFWj5q-JWD7VH4$gI7|Jjpa1>0UyB}jKlLQP?bNHaG5Rk2 z47}Z98vgE2Y5Q#8IEnD%3gqT+Ob zY|}kW8}ru!mI~D^<$!pVsl7ABDyy;4_PZ+s=&$=HRA44YYw%~3B>}Kh2JfBLYAuAS z7V8bFGs4>pH(2iaC(r!aL#zi5XqaX6VN@FzL-w?iEaYRxJS0gRrb4<<^;NkZ_t*x; ztDsy1hE3(ZiuVQ1*)Mcg0sv@H_>qqmO0I{R;8HFGYf$JH>fyH3sZ`%HO@gIMB7*30 zu6XpurjzIuZXrp+o+0i7?3}eGkA-W@$ajC7V*%v*u`51Kls-Cy)}kJrnp6OLiI{7# zWc7B5nj?abeKz0~5{o&u9l@#6%)%?AX?{)x?v|xv9=)0tEbsPO<>rZQ35?E54P*4K z!{~_D1xos%r`SCRhl`YlP;pVcSQdxV%1EKUM3c&E!WGg!@Ag>V{2PHjswof77|b>l z2&R+oR@U659m%J+gLlnec+cJ@y59M%G7I&T($qiKrbvRjw>RsrU&U)yvIT5q-aDx3MI6+*khQgAQJhM(zY%yO)b- zvb7lTZmc~F23P)&>gO@&tX?D3*Hda;B$^54TqRJ;;2&mgd4)Mt)WyOHFotjLqQ#Hp z;#K!KWdls;A%y7Ps@fZS=Py=%w_+(C{Sk3If?#5lg%_O?l{eGly|_c|sT> zKA`Mkd;l^Jd-mstxPvbFtr~Y#NQS%au|9KDUEoNajfsk8p6$UaXK|P_cHkWlbn!C) zy(K0T40j!y;JJwlKG%I4Lz>1C=mZPT$V8 z@t^rx>oo~H9#h?FXCdr6`|eb1Dkn~p0fnMxsbG^$kRjNv-iA8^1R#UptW+reLtILq z`fqUif51_H!oPtA&$0g}r~krB{e{Ih4xeI~59?+v>7UfC6pt`GkHumDCecDMPQ?@|Asz)gXy5MR54;eG=0fKF`%XZh#@1uEb^sw9b7qPy6 z#g|KrAc3ICKMKrZvmktO9lFCW`gzPz7u$q5B~fZRS@A9D*-x`PBqi#Nw*iTDbv*)% zFns^t_<}Z&`I;CGPN+v`rQQ6;ZFB8Bk!jI$zJb5U6kqF~>bE!h!m-w6BffE;<600W zD?@a5u)Ya!*Id_2i3D3#yhd)HG6CxIGVY+j<-8E3P!GSOx3{YzDD;x^drSq1=^SZC zl)LNc6_0~Iy>I=a zqcpUK>z!+Je@^KXsv0@m7@w<57YcWA?y!S|{hLvl2W#QqXk?o6%D-VqM%%&p%v&62 zt$GVORk`C0>PyQFOfDx5%&X?VD5NOWy7~qjnCxT6^`sRB6kqRm%BA=$oFMVTQ@?{I z_w+zpCgb9nT&SnUulZvB=QU=@TiA(m_O543&$h+XM)ZS2*JTnuiHcEek}^`E7J+7n z#{8Udnl0gm`(n?kmRcs-5$)VRXx_)`nZ0MWom{7r1!04Nknv8OK_5=e?UCVGm>yL@ z*&|`HzUwbds(B&igVPai}Uo_p3 z+70tUXnT%b^(!xs3dvrE0-wiV11k&L-$8F^Bm@5uA)m4u4uwqOB8waITp@YhH4T`Dy)X-;;9&c>XZS0<{aVU`^yi z5jt(xL|0d{>4b`#VStmj(5M;FZ?(xxAQ}c{R!^`62dU+;GTCb%_Bqz&S<@546h7~K z_~CSBb@8P8i4gPSe}ER`>q*{dN$21FI{_|pxi)~w?XSzwVUavm1h2D9GVb0+&kaB7 zu`|m9v|0z)MBzJQ#XLlQ1e57>9Dt_*GZKR6tp0tI8`^D10rU?(&;VH3cc;A4kz1%I zI4+!bylrFMN~UEZ9Xi#?Te-7^b)fyZUsu+$QWDHs)iVt0O}dNXk!`FhmE|5UpT_4t)v8QsbGB2mm=vZ0C;} zNC_&Z)H=(Q1Se)wT?L$wWSMK_t+Cs!cSrqDU!4XEOR*;+COlmXfE))I>i`f3*uwKd z8K=+bhhWa$5$Hk$c=_JygxU&vRl5h4oj*!}Lca+?mhBaxqbzUy`BC%rQOTT)JZ1F; z*aNa5_vS2Xi#qBg$spP9Z(rx0|1yh?!_jR$Oopls_K{mO%|E{=@qFNC_Kza`vowgF zFF*o4=9bxwK2uymZ>YF!hClLAh6qtyKPt&$RG~{7{=7~Bn2;@0dL!_C;iX-RqJ8=M z8V$Xk3gei_?Ee^~tB|0%%zZEJ%-Yt_AWm2zV%RC%?sNL{1t?+B)nc>WWcs5r_dC@6 z0}yj|FxealD)gf&t40Is0J>kjyI#@>%DBXWOP2m;MaH<8%1mqHv_FC@JzUbM{(i*s z*S-Bab=MvXp_3Hc`u=m|e=WMujHo6isc)WU2EuIMf90?mypdLDeRpbSmYPuyDcrH4Y5YmF+ ztKJMezVwahT#s>!R4U?fQ zY5l6>-lSu%Ot0;jS<75m`CR^m%08s!MNeq9Ey0z5YX$gAto+s?<@Hkp-Q&xU?5b5E zG*1&R$<=N+dYVu}s$$MZ|F~OgC<~mSc2rd+--ReqrSpDCR+4|T^r3kxW!I_}{%Bt5 zeqZ>Mlr~|3L6OzB3J)LXpMOpMpvY46@RNj3%0~6BxWRZ@E$Hw z+(@vGQqM|xaDnwo>TQ+Bk%gWCT(1#^&&cA`^?43Cg?=z251?zn)5f*IIjU|rZy27k zl&hu$jjbz;lq#fcd)GmxK~4K5UD=)QW*2_UI}Rt2uzm>$PLizU8{A?rIKe5HDt`~V z%gf}CvGof9pp7PPaVIQeAuNWiAJp@}Mm&=!DhZClqiGcfYSCWMW6_?L!Mokvsyvh9 zX{DuV!;Mqo1I3Mf!!N$-N0gKrzWY*FLZb!ezl5jR3SVJ=zf?L#(LwiP!GbDD0$fOP zcL4wHD`ISg-0u@8@iC(>#?5P-O_?gdXSAeX#oFTCAnmQgeyvXNFDUCVmIYI|ByFH< zCANOP12=f8*wxWK7qO6bmSW{TSyG>ZeIMv19)J=yh3Eq9 zEi7w-mpamps+n0IrjVd}Jts$f6Zi@yaHQ;%a#2r~*Xre=&8Q3-qt}+u+1|Rsq%qzQSQm@10nb%h-{=>a-;#!6}5n6B*j?1^(2fn~Q;;B?u~4wczxSC?-YUKp#o-uSecqV48Ch2W9{}i9J0GYp6N{BtK;C8 zEI0|RmG(-(h_8Ub6GA8QuiSglX52zw19lNSC~HpL2jjw(?1u^L){B zZ6_L~d?gc@1HMC0qy|(#ZdiqbCDsq7r}d(|Em!E#7#=&}xrS`sbhXJ#@1EcMoWjyy zJ^h1Nwl7j6d(u5xz&fV)bTDKq-0y)>F2CGDl2`l22l#c@$Jn<3_ZgNLW&H_%V4PYm z>d*dgNbFQ*3Uhn+y~C05E|%V#2&diky?BAycrB0h&zzJq^12;jZXF4ZNKy?-!hNU| zmJYUN?#{bdbnWRHslHFCChWY8@d4>%<~R(ATht@K zrUdWfoc*~8o3dG~t+^JplGBD_zY|n52v8^{lWPW#DLGwuILA3#xTsb8!84ZlnwS5_ z>55iMk-0yW+^HQxc^3(oTAX#0xx&ly^5uSzAH<-spOfAjXCt0Pg&Z7J9mTe|UR{+5Cu;y~)2p|l9IH-aqk|4GeWJyNM9n~;n4~{tG zS>~gtxx)tYg;jx98KB6zqw9FRV7Tt;{+vK{DluyVif^8fkYpVMol@rTal+{_-%R}x z6oe-t9c^eDs|C9K@p%*pmH`eiqI(O4n-Wpm`u&RTcodfAofo@9rD@&b79W`J50YB+ z7o0D!$@Y9^z1VQ?zeBg!l&LlBI$H{vR)6qIck1BRy0OoMvaUz(j1FYW2j4z+VT`>x$9NfadD9w-Ev#xLGHeXK~p!aj#urJ4G zo_Qhx^KqL_xzT9|N!DBzjrzL902ONV`7JatumWf^DmTI|moR#ryH+xp=NM+TkvU{< z<4j_Adv%rM6()MfBYLkrgxrMB&U}lcNvSJaMz`K*x~Z&NdIMHcr;p`B`AQ4ikn!1< zIgqRsOuh*>eq^T2Y6i^FP$!Vu538x{$DTtbIyN|I{P?8#73fuw$0E<&FDIr23Q8P8 zc|}+crCUS9o#FUG@3G`CPrsWo$7m!TAYewkyO&qrh!M?mfF|RO#9C5HlYRklaTO*@ zXn^p>!lsTy2&;WHC+0a1NPxFsJ`_J_d3%rsrNbcE8 zNrdk@e3I(5;wpvRCpSrjfNxbEXp3YqCQCiPdGv5D|BiRP#ypzk9c7qwFpGb%WPpwK zBd`^s_F9DzvD(9`^oW})kYdcS*R$2NIw9TfrPzzy}XiqR^Z zH=2Oh1@|XfH%aH12fy{`@R)YNYQor~jkDlkKkYtN-)FBv*>~{BU}z!R!q*B0?)M9| zk3y_LCg@?B%EF}2%vG8f>me8}?19`--;7tvVh)2dS zu`vPc55j`qjDj(BdDTMmJDm+j~6^3Xjo}7N~I(r6a zJsf%9`;aWv9iHA;Z!b+t2#$grmzBe1+v9HV*K2;9JrwH$Tg9=W3)QvS5^sFho=_4N z!yhXX!bksb9 z$M=tp<}_khY7f!xh-v!78Hwh%w!d1hQEuPM`CQkPvOt>betom3RJ60jg}c0@%!Kp- zd}l^|m#rq%wS0!7u;y_UVvdfi9fVge)7KHi6Uyo0>`O78p;tY46?tnTQ2|u zi-`)?yPimo?iMBnde~_wMoRAVq<4YTS;TWqT+5w=L`Q-7MCema&M-l7DJ;M0L9#u`^Cs%wmSUyQ_MsOUHw0tFG$e=@8!vU;e z#bfUx9m@n1V44eo5J?q&YQpm`IR}>RULW%5V!#~v^uHr9+>;QgoHbcj9}$Xd)v+nY zC!0`5kQuKkIgh&_3=x&RKj7DSeDfR6&^vzB$G~6c(is!39su2zTdqm`uV6`icf2BK z-~Nl2`TtY%I=_Xz1U3aSXjA<+)zbg!pFJK-mhnoLMf4mEQ+j%0Ng;y)eWGiBgA9gh z!rCt#=Lvc+nJcCOyGu8g`5c?tP6Jtpd7I9RLKKhvcx#c&l(9SXAKiWiKlow+IkeB8 z5}Qzbp=WQF>(GO}Mf(*grQhmTv zKg#Ki0c=Ud=028V`UB=A5R9?^5DN<-iqn>(E$rLc*0N+-oA3jqxFm5{C!CZ?a(|+j z$BX_eY8ejW$qt;W>i4|CIx6oaJ&6^$M*^TaSFr{GkZsN};7pc^8z zr@e2*7R%B6eI_J0J1nB;^^C}y8A0<|MMgP@{&sJ)1c4Og_^6(Ui>N4IvP*N|{lv}P zs`k}*43cPGqe4nKuBqsHdj&LsIzglg!uXQ_!Sp=OR!J;Hf&>9_R5!l@jIqOtu|Cg?M#O#%qVsg%;nfj0SqY zz++Cl2q8f80kqHJOecRt#G$Nc5To<7I@tsbDD({xI#g(?o#4v`8&vg1uRo1HWZQ_e zjG*_n(-gq7AeK2v+i@cYMd3srj?4b>UdbqhP>+E(yBbTdXyyUgN97V1fY`0%B<@CR zHl2zcYBz>8(r3F!5xWTYSisitU2EcbfszIM$MM4@L#T&xAo6Mr%P&Y^GJ~zniLzB- zmNEnrjr6-9_LrfSz4zFs8KLe_PooKL)}?_65gN-wl(Ca~OxIT+jxb5IkQ1^g3Ebbe zAPFd_GoLxZRAFcc?ZbFsDo~A%00{x!DXW%?^$-og$oM_#y{?DZ#8z|+AjjX#Wgcf` zEiTS;k#aj0IDS}a>~8Zggs`2|2EqfAg-x-{H$eALErBVCmKBbi=H>`d5@@qXoL4fi znqRe}#b)*+b1ZX(%ee&6P@-wuc}M3cp%E*5&GB4$tgnCE~ths*ZEP~7C% zj{;0~)BQPz-+&7)FT{N|^s~qF-&SsJuX2~%kYT4Jj_XU$rG96N*vlXY{ICfkliO$$FuFz z)69z=g``O-rdmFPukze?qs8b4ra^ipI_i5f52YTq6 z7e8CZG8;dptnLYXZwl$vE7y_|p~Q!-sTU`BkFfdN*O*nZmJU}X5&P&*#IJRBe=cfM zROE|Y)5`Lm<)~dP^)P>16;NGM=I6o7QRiqt*n+0Fe0C{6yE!S<%v$HTZj*a|T$ng& zL@Lap)>7e$kqlW-Qyo+(-n~V3h8Hu(4A4Og*yLO(BKfwo>A%ACK>DBv_ZX}=Ttfcr z>~@n%V?~)L(7 z4j?D@`p9>=!uK%kwAC7~?P+^1^t`ubUZOmThDrJ=|W$s7zk8G5wa zu-TM+ebCIgEwih5xc}raA0ezp8E?ye!~43=RyYtc%7b+7?T^}O~xA0TUR-I%T6UI)hWVC9Brm_<{4pSd%o z$S5OiRVA@sBbh$o%pXttYvE1_mzB2<^5!kNbFSd+*ZvUA{0-l7ao+bWHcj7AL#*y9 zWN#~z9?pd!w%%C4dY|DXUyz;z+Bj3Sw~!>kOj=J{YoW%PZ~BE-u9`a;XvN6mxe=uE z>3nMbIF45TGsg2S&dp;P?f~d?VA+RLO(%ZTDe_)!t>BINujP+J_S={$0klL&OGIrA zpF*2s)TmVvq2|&)`Z>PoU#TwkFA)f?S2D6=t~Q1Fx{np>P0@Zb`)YJE8Qyam{`;c& zl+GyRjOUNxli6FaX@LM?aM*Lm#kM?95^{lxaO#`Lt&XE0a(Xk%w2Wp z3$XL!U~e#v@FCvT9l;RXGVlLB)ki`8_|<0_8H~LIlU)x*xbshqx!UVdm#Te&l2<1POIS=gN*e_=HnJs7P7}EmMr=Z zA_?he``5qGxQjKY+2_KyH_YfQqK+FI>TlAizIqnP(liSboZyWRB# z!v!LUWa6Mx+)GVTp2lEkLqe$J1KK+RYx+R-r8WnrfCB^Tb zje*vNSf{S1#pNDr-vvVNu;bn=S2so%pEv!4VgK{6Uq78#F~%Uw+W*(@`o5L0XKwei zLPB%p@%Cr<<2x$v5g{m9)a7tnQ=_afADigpww>Advp@x{SfQtuQlAJ^ya`ory0tTP zg35M955tO`i%cN*;eWBRjDN7Q>iY{z7%wz?6ze|@D#KT9M3wyN#_H-!SGWhH$$nTG zu!f;i;T4@Pn>WKl*{?Mi#5mI={@4t@TM+&yZ{eMIzdt$?%esLugwY=zn1I_C9qdY3 z7>XAc%E;0UexFwejb+0^;0+8h3lyPP*~YsR(u+5_Vl2EA8`6vv$jB$WM|g42WeK?% z-1J>qpyKc1q_w77Xa`7rK3O#Y_L=?-t3lAPdXA>YWd*07wa(uF{xY_=fR!YiwpDE< z*qC8&zVunBe$L$vxixWQsG-qvniEJ<{|?sFhv)+=Z|5#ozA$I3Z5EMpt_DCLSh|4f zbO`D1bKwTaAEWNN|1aP1iAKd`A9+N(MoI;v#Wp3X;;4J?IXY6l@@onUw)D{$_zN93 zhc#n@2NQ-tnk-8wH$&`fuy^SnpMALVxb3ePYH#SPjr&Vz8c19nB+c9Z{HNWD0zg zgf5iM4Y_)>$q5>o31P?3PMl<4A1^~gb5PNRob#nSaea(gi?Z%>!tJN$B4%P~zmvxl zlr)0@sZqC~s4TB3DqI+e!S5Yhq%pVNOzjWU_?Mh78%@D!DzQTTe%P5rA6xJAZ&6RMOxwZ-AUWb-}<*I?0>?8jsR$y|2^wL!ha=|ND<0${Y$QZO@-SU zB}M0&bxay9pNNWB-y+PgRHi~|A-#aNpA$}vwxlUt)G#hSVq(o2CitMK=aCa*+0RID zIwoO!s;nRuzrP)xWFxMhDuCy(E}C=)xFwu;KKKk9SA@onKOCC%gIe!f3?W46M~f>- zSD%%xu&Assxa?nS(D+zi{Ms;Pj;dLI(6(;w5kmG%K%pqs*|+yzg#MMzrFJ{eHITFz zJHpUWwx;kU2l7rW-WL4kuXwMuR1GFDXJo{MwBfy03!HDB6TfZYD#sWnerdzL$RM5U zS^({0H`8Tk4ROh6@RiS`lXK}e33(l_coF|+u4O?%necjEvyxrY#CR>^qmmH@sK7VJ z`7I6)`QKHM4@Rt+G2|#mL8YUCseFS<75A^@gIfnT=wzfb5(tlVE1oKq;sEUxL5e(` z5X&iK4rprGpV~jrR)>k^i&LM{!apJaE6u=nTFCIHbMcK~q?D=6cu%s^Z8>H!e>@*>>y<|0)-wc{5Dvni^G@G`c9>D&P8DzU^m`DeVNq zaXw&+O&S+K04+`vRxBS1 zJOAY$^p9%ul#%+Qk4@H>+Y3`L6^Y|Aq)E$nl~;}skI92t?*XJ_wsHn1j-JMNR^rl*?u<^0EPLkr!TX#>j> z#1zTK7ujBc0zy(WZj?q&_QX3P2!o(B7l#x|u6B^;1H$TT%94({-Q&bG^*1N&ZSo1; z;pT4)O&o-Jc+ZS3b}qK5!t1VhQfON#;crkg;w#V@Bh6#HmDb76-9}n~VD3)PyOVF~ zDWWsFh5`8vzNL$0N2SZ~MBcMx#Eel;3y30QRLAKz@jRZ(w&ZEZD^7Zj`~)E){B>&8 zY&&$g2VI*vM5l&QHUNB(0+BZpF8Y1AV3rIfEPU72Uq3|}u`1-_-y?QqspIe=)wH*| zf^_)Hc9cuJj@kkBi{(JNYP*dE`skm1mBMZNT3S%*Yd)*jxn(!f6Tt&cQvyZVADQ~E_SJ@;* zj>gj=v_Us$NKgt7GqWo$NPiGvC`2G=v;yr1+rA^(RkF{Q3%t?wS128&@W_lSlH^xe zH*dDpP)P|XM1b?lNWq5M-9&0!7-Q+Pi<%zE8>CQp zmCAfH|5=849vTn$J<)a{WgZTU5MvT1FBH?a6-7ug zKc4F#{-lf_7=nfO;o_fvBgG6mr|k2*;xF+y*7j12HuxV1#OZu)4E6w>z`-ejLeok8 zwB|`B$MK&A<=?OW<2mXXMTRU9_SZ*btN9=Mo=C|yV;MD6ZQF|2c8peWqc!QZp!~LF zZC7jeoA8X>!i)&RQ(Ps;I!K{I{uWruZxY!mq?^`!YVo}*R*y5=dwVa;C}TBg>^XL& zZOp1~_54t;oT__Q$x{JC^~d(pK&4gpTyc#H!Ki!hKmQciv*Fy8VTO9Zp+<3hQpQ$) zf3i`p8yyVzDC2yn4n-=r-zL=Tzw(qm+Pn<86r&K=!sl(Qiu?9#eH^hPnXABE^z<^%*v|u<<1NwDO;_71nPRnQ-KegR$43 zvqLs>1sxycbB>UDSgpe-z-2jrZ~Y1Rh~#6ZC?phKo{X}7LlU`zM2Zag!YaP zY>-pJYuXRd=l9MXVoc?M!1L>U$*i~w{CGCZeB7IT^2aot-bBrp@pRTi-*%*uUUuZK zz=WuPFRV$4%BO0|CcECsY^~z}*?A9y5DyR(JIMqRWTd=92yB}LS0Qs_FwYr(PYsd= zY+ixyh+0`k5arvwI%$uk7ei}EZ~|WR%nWg$xvVKf{{FJ?pr#Kebn&7dAjz2zx=JQyB~4eI=A#~-I8$*^J4yAWr$P{n#X=d zTa=C5bo%FIY~$q^`qu$~ zoHT=s?_j%U0wU9<)->t~V^nwy9d|Q#BdyFw7}39a5uAl%g0!!Jh6A4!0oc@~q1%b-i_ zucIOz4FfJ%dKq5C&jn0MJ_bE)rd0(BUDb36VWw+Jloe|+*J@V6b0UJ)m*FBi6fW+z!&eoe6* zC;UR^slXV)3urh2^sOhcR8Y^o9sNyjfa$MWuQ5sLZll|bgl5OU(Z?jm^#us za?<1JID6SCl-OxVKqKiD#@a%z|5FrkLKb0w1WcJ`7XE+Yvn4Soq~kh~(^8KD8@rZC z+q%4=r`fn_JD+;fT$l^`+Q_q&0~LAyQ{+&HL^oXIhb4X7lBw@t%1<6R%L}V4c>;s= zRRiTbN3>=sqUqs~OM~OQS#JuSEmP6R24Ms(6|6s`E=DP58`~~ezYRo9je74% z`tUf#1r18Mh}%j``HP9mHGNZXz+_3!PH1F*e3qvJOQ6JJ{aYXka)j@v*Yw+92rG?j z^n9G~(c;v0Qs|WFIO*jeiF8E5FlX8+6~Y))Rd!1wC$gTy1Wa!VS!GH->F2!dUA6=< z*$EWnf|zF8Z^WV4;1|rQv@7q@x#C^RI=%9neio;EnrZ~1Yz?QX0cBArNx9JDxwygdsgtbm{BQr?40tcP8u( z{YK=IFBgZXM)Ru&BsN#W;jETT6Z@a~fHwxLG{nb2p9Wj4i(p+w`C4UJ5;e1f!Be(K zlr+^}4>TJn<=m!RX5~T_bM?>yW~n58Xi3`kqQ7Aa+bWm{lYBcy2*Hd6zUTf-%xc9p z>Eipn*Z-BOE2J!pAn*dV&vZriP8*-dIFT-h+fPF$BPhMSdV%_mh9Vj@eSaAvxna!3Bm3X}62@wX+IL8M#16$P^ zezSScJ@JN49bLd^PqrUyGkwA6OV>~BG8{OzV;tB<2s;*?)Sn8no{^9Qq^73o8{Cw> zJW$uV%^-PIw3)Uu1AAruV65{VGG*o-cA&%KuwJP z$3(6zbtSulrZ9LMVS{`QVQHUqbPDGnOcQJqdAJV@7wSl9Ts; zygGyDhoUO7WXsZ*8f~Kxu6Bl|7^qmFED6=-;pxa{{YZ*hvijpGOroB@NPww!lF03u zb_XghGE*1%d6BXoqriD6EwL>bz&MlZq2daONPZJ7lLhlUD(9zBpkG$&IyXxF?{El$ z1A(Qvl4>qNhntzUu^>CX`qG?`b&cMgG~Xd0YzQ$Ru%Q#JDJ(F*JZH~O*~zE8TT4`c z!bw$Qopxi;L%Z}}cIM>{dAel%I0sqZo}AV+2a6ViVD>S5Be>H1{mJ(s9FR|ZXM z#LHG%v)g~AA5Cy1uz#f=iT_*raazi377r~eKq@$VZ#3r3W@P_myEg;$ZI(x^dgMaV zTX#mHY&M{ALf@W%FhY!8k-U3}s#feS4&U9;CyE{G}xN?6}sgkB+C z3H13|W6R^^Wfmn5S*a_wqKU76iAw+AVgprKG&uq`T{upyy=*E?^$veB=V@W6u05tG z5a- zQIiA@P{^OB8(T57)c}^Y*H=A;uQ5F<2Gw$f#r;ODP@6S!Cp#dt{M5lv#`Pmk9(3g5 z&7?xdeSoZ*tL0>T*OtzV5H1)yYzXfV0|oM)*xesYA9jwl6N2Rf<6u6s>)M>0tl8Rz zMiEybLo<0_14rCY6Gczha0iy9{2>1XB|*9PBGiIOnzIR0LD*rvS@MgQEmQNzNK;av zqFH@qdr$cQJVV(&3Vvma0O#y-hOt0`Tb*Uv%I<0c16>+tvLI0C+%rXZI*D^asd`I? z$L;^e-dl#n)ood$xCVC%PH=a3cXxLW?gV#tcXxMp4;q5ILvR8FxRB&M{q{M1`#b$T z&%J*-`BTNNwQI>v?KSqCV~+6@6ECFb{QNcUbIj)W9zUP`(a!Yu+ZY5^_4v*q4^%_! zXJ;F~+gQzwkXfn-2vY7Od~Q~HKz9FMGkp7P7Kk0Ff`6E$Rm3$~I#vMe0J1uK59J6c zv>SQ@jx%QDVRDAcH#+Nx0{T7p^2$*M*iS$}U~sEyn)Gp$BDRWp5(0!B$JzrP=375| z>8n0h^<11I(7%?PbeF%@p3x{};qD7@VlImxJ|&Q9AZ(C-$|%-&bo0%a<~mVqnMALTlvxT2^HT9) z`ifuIR9)F!znm+*^_9Jpsep1$La8jLoaQpqR$c$PZe?z#b8gBD8&FRV5OhWfRCHV_~A#50bO3byJ-^M0UA7LLHjYTE~%q z>S9%ru+9HMJqsyXa9y=MH-tGpJkc?FT5MP75wuhWMI%HaKU=m|iU zEaG4t2@GD-Y4>%oc;3-5aWPK@t6^$;`3CKu|TnlpWw=RG6yjK%5d+(SlE59|TFyg3wI%X(BucwGiGx0hvj>79a$PTF2a#4y za_YQe1tsVdjA-M2OByG+usa+p;br$1xljr{+k4ALdCwQZ;%&!lvej9zSWtuSUw2=R zcOrn-(pnX&$8%c-)N-h{_Ybn3QZBUrpge1pTXoyfCKNJUZ(cip z?G(oLdJwDZy*}05K6bb%l?!JW{E4&E^c6|UH}Ig>C2`-b6KsITulDgl1}9PJ0|oW! z3YrKBxpe?=eCo*|yQBASb)0Ge<}_rV1;<8D5ys_>k;R!##^vi0QUX$-HKMnQw4gHq ztAlA}hN3K2;?tY!cQI5~Ig#x^lHG?S0*IN+=FLLb>bokASNNG)`drn69=oUamP5J< z97LL-v+U0UUt>DLPmD{mR5zS{vHpPk9fr;5Y+@I9?X?g|AM9oqpYb&(4bH8h2nr0C zV0MdvSu0%nyc7tVonrt^C~wRAjT6RPDH{l}zXi5xO@YCR%umDxq zp%oc;8(&l7)t3D4eS(z;2?_I%D(AC%Bsa}AN(O-)!2;MrJUl2Z6-l9*;IQWVdaZ8g zkm<^aqa!y@nw37paMfx5n398|dja%_*5Nsz7A`{6-KYqgG}RW>tqPgfDiqm}{z;nd%V+N=tKq{XL}V<+y6MR^KKc^frO)x~zupRIiN^tu%7iBSkBOYA_G z^apsD;91T9#P%i`f-$h!%C=vuvZ-dj(SDJFks5FL5ETBpaS_aEBmg@e@^ULLs8%*u z5oGYO9WW>5z`T-(R}$#d3w<|5dvNt{OtY@L4m7s_I={} z79#9{8AJ8^RIxlWS5d*_Kb!oG9kinQ`b67O6P1W5{7(u7ugZJy>C~7JV^%a0Cqa#J zI6spW%@q)=2l&cY**=T5*w}|XjnqMi&;!8Bv0$ru1~N0d?`BqiKQ(^|{Z#iiQL}IT ziB6{FcG!a(U!@*0zk~v#NdM~4mJZ~V^3q^F&04w({JB0=?ZnW73U%K;^wlbzi=p-B zleW)$p=>_58toxFJDhez@7g#$Osk9BC3m1c9#50_ayXSdrKUeYq1Ek+Ac-{|y za`u7AV=kgKkPp?tHuXo0wXOv7ueFAOu1`pj80vj*jE%9C||ApPgU#4{Q zO!V~su&Vp%uk%la8%)0(h-iLUDE-gue*VMU2kN&aw1}Oa>wmK0!24wb^l$oW{3qw= z#}{wp@W5_(Xh4A754Gn1I?10yf13^+%iD)<@0i}4k^Xsxzm1>%m{|WYvHoLX{l~=m zkBRjk6YD=F)_+W_|Cm_+F|qz%XkyLu28Z7u^50FYe|mGi9sIkA^-nPUHxp~7|H3Vl z>9k;rf57!0aQz2d{{h#3!1W(+{RdqCZv@wW*mtl{ugll2B!ZG zuK$YIb8_O*NE%t2IGExwvHomBBWz~rU}T3!BW$VXU?gZ{U}I?XpCaW2s>{~P!pI)$ zRjh{se7TL3^2o$D6;ct*fOZxjL_)LRsp@L)Tw=sVE4}N4UW)8*`Q;I<6zF`35XsIm z$Hvpu);@!`=FmO+XUfzC$Q0zu#Lo_ljpj8IM3tgD-%Bt2AW_O1j4%D5u=H8|-S>zk zi@og}y!3BYx7vv{D+_I;1@s6kN1aemJXd7t5oD7GTT09YI#A`8w&UDG<1&$KXIPsh zQTsn|i#{oNX~&`^mjPCt1#nZ(=d8ny|zPlz> zr}*S&0VQ+t(c9KY3FUo<$~m^V$!nhZQ=%4(FPkT9N)j{ipCK@E4B0w%FQK86Hg`Wb#9QFouOiG# zskQ2d>PNk&lAy`;Tqjsc)C8FR);tLy-O)4Sa3(X-B0(+PHp5KZr#JK6b#cYqCFbuThXTkjdI!AJt5>3^j-+!f_#32GInu= zmKnHoPl2-@Ra55W6+o@|jNnqD<-(b34W#dfB#?aw@uWH_s#4!m(K60^y84iXaS%RL zpN8>z-(@?2V`RH$Y4Z1V%S(xAwNMkwaTQu>v<4aF4bQsg;gGgdd~Vw}4LYPReMdT- z(5_5D;tD(5yaP^He}{$1mX-GosCI=B(J1&5MeGOFf;q#as(_Io&#UB1vi%;SfRb2> z679zAw4GMT&^I&UFVoZ&hntr*M^J&~a;pc|J0#nYpRqFLwz!ZJm0L?HI>WbMj0Vh` z!A4M&1}3X#ZD&dHpkDj~^T3URX+b? z8nvlGu|DO&zzVz5W<~&cV{%pl9-9L&Jpy~~x3uQ5j+X41pQBG%vA4pqS7!1Z@yfaTKAs}s$PdiVfYb_aa9C)zrf*FTjC;b7y<%H?U$R6r&1~lNmFG*M|{K~agqQdgQ$Gi9ke0bvf6dWT& zNR}kWrn&`aj2_eu>U?j5>uc5Oq;3?4;%wCsy`H?GV8pp5KZaS-#<){PcI$Wn^l(hL zEyb8(cJhzq7Uf2?bd>Wu={@9RGTEz=242gbwXgL|rzA1q9QZ-eJPD&x;O3bNhr4S< z&9HXq3us`of!n6pTWF{sX9R3!90_yRBXsedazDJfT|~8m!Gog}o5+aZ1btSG0;H@~ zkr*4K1d<5DF2ZyNRnF$4ljKX>5o;VH9SzkwBma_HXc#M|Rm`xp>FO36=L%PGG*L-l z3^U1o7ccxJ`wR?B3=$Gc)Khi?SgWf#1<<Kl0;RZ7_6Dd{$@Y294XIv9PmABpeeRlzm4wnI{xu!VELwc05t z)DOvsuseHZ+9Sl7U}c#o@6SrN4P!OxlVq$^$3!sqH|RP$8#BE0Bd>nYPfmo_`J&9Mk+5nd6UHW?x3t zI9PgX$-|6?8BayB#CR?;i>G-IpET?DstZ=3(H*Nx)-EJVgH0QNwZH?Kiu!&S+Rm}? zlh1Z6H-m3vND3ocv*}WF4zn^%xg0l@9|K!H!LoV z#&uhoY)2acTGtq3X`IG=t!NnHkz$fqcoR1;HqH`!q`*8FGW_J8nia&5GODy$pTf#O ziZYYQ_mBKI9br^E=_y`jjC_tT<)1J;Y)U+!hWWi`e8V|&*3CDO*#N29di}OrQ;RsU zmBkvQDvEiGV@X@dof@FfA4pXD-;HMzcRYZ7-ultXV!-nQPFCj&`hSsJecOB9HZ3}4 zTE>5*SDAkweA}dcWsGI@OpNeoWcBQftR3)vXIkZr>}?$F42pU;;MQ4zCSf z54>%2@^~~-Muuj3{5CF78gKb$W;%L27B+gVw_WY8Ozzv6Z~eb@C2MD6pkU;H_Zpp& z6%>B$+Q`M>HO*}G+Bg62SApNJVt873H2;y9#(O(mz@858XTMOdZ|U*qex2fspX%aF}!{D^Dn5^mJDy_{hIjO zH~y7Df9qGwiV2VTcYa;WiW!gjAI<(_oRo)we};HlQS4A#)?i^>CP$v4lIRvAvk)>ZbCDs*i4*6^?CtGM=FlOHtS=867Tiy^Qtuy>$pcoLV3Y(DF)-(I`% zCQd#9(_YVur-FFGjra0$Qe@_gf@s$Q@ps*aBP1N$520%ftwPm&AX9kwNYGo&VMtJ$P1#3L!+INfx>IS}?k`GFiw!kDFq!g3`C53^$mn^28JkZ%hf z!txw9Q&(9STM!58ckF@!p)LZU*KrfrjSdC`_g+$ZEXj-5D#SUg&kHLNPG0 z@ej3{v^@c{Rblhu`$&g3y7Zl$3Wd&B{9boA%69EHYd1E1RZY$eAsOS1Zc{oWL2Y8x z80)3AE6Dg=eOysOzG876_m28Slw`V>f|)~GA*BRDMSk^oij3;KjG%P{?T65QkkMtd z)S_-HXp@FabU)6l$?I;69{a+a2}&|nBNVL-g3>8$0gWA2AP}cPtr3KuiF?WHm=ng# z3yI-`Oublp8k3MJ3nQVVYh;pe*PmnNXAB4udZnowC@AFF5F=@nFhzb?!!Ch_2u{se z`>a5y9s@(j}7@a%SHxn(#={>wc9&g?Z#LPfL*V#q5r7kWme73O>ExM1b5djg zUTas4lc?Now`9o2@1-ZQ1~H1ou$w8)F~A>b7aes9%zGL6PO1DO%1x?cx2NDnJv?4I zePeVvLY8CH58BNtsj3l|2gqk1=H>~R6!KAcLZgQUf_8LIx0kY_DB-@VrlGE!Mlk2c z&NFzwjFjrzuHCxIDJ2n%k#nneJ4!}{pdAjfNM0TJMx8rMFMZox7_cnEFBZ|6lq8*i zDM{g_L;K`shXwvvq6N+irh?SvGk{o?`%JGsI!{9*Ot~*J#q6bZ!;_ z=<%)@3gT&K%eZS0rP~ZtXAG}J&(e}#ZN;Tp<6BmqtNSKa+aIb+Y}B^7H;sq-3aO`z zz8h!OKN|(k4E{(L6SKP&ZZ2OusB`cxE$JvVt0Z8Pu%zioYw&;!9@^MRF6fhn*;!C#>d3CD=1JmnUFL; zr_NLCtE6whW7)Tmob`N#{36*d>pA7EjJXG48K>heT9__&X z+Q4)c-Z`LwaAsJ=hXa5NneL~Zn`M6vU1(1Uupbxeu}0dIM6r~g2n0wI*IgYTYlX&Q zRjHwjw5>?kh(lt$BXrt!W(R?VzV7Mjws=uRCn4)mfL;15(c@*vz|*K5cO34w(Pwqq zlqM;|>Xbb1?KSp%avI)3V_@VY+II>)Ql+wT?oR&NCF!A7API-j1WbD%>N^bGf`tP| z6IqF-tIjV*DvRZB7rM+O;GrO3QCr_wyhPT!XL1T>)2l1pqz+ahRWp_Xjd+)8Arkq# zV{Pti7RjUsLJD?L=(Af+L>;4`uoGVm3gYk)4}|>+3jzH_Lu6a9HiDbxL-s}=*40H0 zH~k*ZE-UHQ=%;&w2;gDBds#!GW(vrZ_r+nOO?^R3;-m02Qd-bpd2vXnPf+p|RUBFQ z+Oj%elsZd#67x3&HBp(;=BpBq_u=f-W7suJfx>q=l5FE~7v90?h?z0hnQ;CI z6TtZ6eb4zx!6?2&PYZYSi{1R;J0=&%9BkcW!0}RNk!J!JQ$+=tQN($Vh%wFhKt&ge3@&=!}`8FV(Aj*MH+Eg7Z)KAMG40yLN)798+q!LgUYW2CcJE)YeOE)v^ zBkx`LLqcZ3QEQT)cC()9ivB(ohvdx-%24pMTqbsGY+7r9ZS^gen1lNclWj2QT{>=( z8+QT#i_aq24}!LrnA^d#U>5|KG-P$24smeR79 z@%xxX1Mpm5_zZ8wrDV*HW2jU;97W4d3A-V#gO;Jo+`{KrJsniiLqT9Ge(V|DI8Z!< z3Z9TQ=cFVYKzU9_rd($+Uv(|1^hHY*t{5$K2anFpb1g|ZfA3+mrh^Wg7U=$(t=~$Y zik4ay>1)aRph+^IqO}IGGZ}HubzmeMA`z*;K!m)e1mJWa`@R)EDT*ILAZye>puJ=Y z5)KaTpp7B>2}>hb!(>A?dI>5%5Z}STZmF_EL^QdfBT2qoQM&YXVo8u|AT(!Tf1K9s zAZVpFt5GyB(tIS>SK`==xA;OSL-uhL_6Q!#;Q8tW`2GrVo(DC{zdF*qNLE_Tk3fkK zv4RoYNjw2OsxWMNgZ^FqiC1Ps0Slvb>0DxXiWD$PVd5xR{?aLRLLh0;=Vm`t`E}x) z=utIo1kAiI&C|t2-~!uq%bjV?d)6yD+PQ*a`O63PtVOCD zx(44qgQ;%hF}>5j9t^jjn$FcRD=Mwxs8g6b)|N!St9U9U;Dm=)ZzbpF%$4#tL>(K#MrPo1~_n;RYmz-lWT?jSoS58o~f*;}5?7eI63 za5LNWGjT>~2&4Ef9Ozpah4m?*kAhtn*k{C;V2fNQk>731a_bj$LsWU5(O8dBu3fC2 z+NOs+ElIsYkl@4=EucZUHsrnm*0g(=PD14Wka5nxY&>kwOHcb*(oew&A4 zum=Xl4i^DOEbuxj&tgU?G=)R>@iyaAWaHjt8NRN=mRodIVeL3rfC>TAaehKOph=m% zGc+aGF>qkRe$m%gQcW~{XE*mmM5(O1a`SPq&wSa)K_#H(;b|!V6;EM?D}`8Dq4ZS< z95*Q=T|}q-5ejo>+3CHaAc6N(TSey1b*>6A7*@|p>%CIC(Pfmk_$zZ+u7*w`;8<}L zvpu(RekY|)hQ(bjSjjO5RTtTAkv~4WfV*s}w-r(YmBf&95>4ikCO*IyX?`KN^7Lc| zluM?fwGS*Fo5Te7F{B*`(Nu2}MQQjRt%!JrFR6l*r(*ty!q|P*dVKZNd2jx4Z~3D_ z7lG28rVf?zB(|o&`Y~UGUwzTLGqOb3^>GA`f{?Sp$Mg@3#5z$()Xws2h{_ z6}#0gP)lSxsT;Sq@X;goWaqY_1z^|6ZS(b<-pnCt^h7Mq$8ghK-%FVxtW627_*+a@ zv0dDRHX=-H!|7>LqeHYE8x>I{8T!ZhDeqh#JR%HKUoEcpe7}m*`h^ua@hkCZ!$TD; zeJP68RvKG+;iE$q9vVFLl@NT|3#FxS7%_i*g0 zjVmdXhYbd+zyfe7%k`+BKpWgIYEliBXb$%dLs2Z`V!gAgr0 zyE9K2sb?%QqJeN(-HrBg*Nb)&!S%EUy$Wded_Hnt6@Bm{TMsak2M4PF!F{XKQCH87 zQ~QTjdgw}h)w zU5&}9-o5Mz-L@Yjs{^cPv!{00ODHLWe)VCi4NuD>BBShXc+3WMf$^ZNZ}24Ivfc4q zewTJM8K(ln0aj?wWRcrdVn`YF>y&e5gle^YIaG-y5-2m(EDOWjkKZ1*M#=(%%9Oc0 z((rUwe@_91uiH99M4%Zy3pmY)d#zbT^b)^X0StKXu`PVm7VcM^VM8YTZLo!43440@ z!!<2~bWoJKLZ~y2?>ihq#h_P&egz}GBjM?GOy*U(gkX}@$(;slJ%q%ao|ko4?F?vD zcm8-he=dvj@h|wf04^WkX%}4QQWXfw=2=YVb;%hxPO(pjXfVzUk3r2*Hfeq>a5qQb zC$kKZCHh9+Y7wo1vX2oHu06^2a=$KKmVC`*Uh-|91C7jq;M>4ADhO>4*rSSawPHB4 z=ylb_?i9`Wa(=JRH&CDwFZ%nk0%u#!_y%?MyAA+AtdL)e{23i2U(>X?sjgyxt|9c> zqxrjhQqcc-WQNrp#4hB3d>PS(zD#l{X+vSHDJ_{KAs_>%Mw9yyEK@!LruQ_yo})=W ztXi9FS)Q$})6P0UWPlvu^(U188A^aNd`^ZtJpW;B=HlZ}LDOfRiZ8DDE(x_GDlrMe zW$SeTV3ijxOG&w`!)x+lYl>{PGk1q*UN6f*YtYxTc4dthRU$7cT<)8F!~A~hjIwVb znbH#Sq|x@B#%mb|5mUxUn4XIF1)-CTdx<@~TxwXcLx@uXM7T8G(^bw*iGVNo`cvnM zYT8$!fKkne@zCXjeB!bMS=H%l<(Ti`8vFD&(C9Yi>2Y(&CcXjQBciRbI0}d+#SVR^ z!Di`dP#5BH_0+YOxa(Ftf+6dmRXDoOW~4RDP4NBv0w_jwxSlps;mGzhw;d&6ljEJ5 zmB;dWxox+gqsAq;xI-8>d>#Y|K0Z{V1?dfAo(sIhuIb{4;g38aY$LvWFT1muPp`$r z0_MMXF*u1br0;50rEJ$zsq__W{`y>P=1@nk)cp0L8gk}lD#OJnkcG$mowegZ4{%X^ z22PRcmTPe8(8N@$8mikW2J@))OMBD!An#3^4en)P$5D4Ni5HRW(FV(0ppV-*j zr7mMV7SDOVXBA@WX%-CXsXNJHKIRO)sENTX{9(C4J}%RZNDf`75$jg@d3jV|PMCxZ(iih?u=Y!(bha# z61OLcqpzE3(nrjPFWcHm#ut)K;b_)E@|~Pm78_6`g+B)e%9$4ocqUr?23Kwzp-7e>icDOP ztbX(OR2DKy{#_IKNbAOlMMWDAnoXQ84X=`jtO<%KC|4N97=Yr=;$!0w5-ogP$!Wp) z9%9n;M-ED!IVJlJ$(!X|lTmxHHjeAg2LnA~VNT|NWORsF1bG)Q!R{)N+OQmptyp1%x;|4CB&lq?Ttk z;I8mYx28N@WJLyc+7tvyceCmJT);?XUFEk+eU}2eyHX)n${2hi`bnuc0P1W<5i-oD z^6|jAw}tHp@l8wLEl*~XzIe1xQ zlKW%tQjbIfb+*8cdL}yqM?s>3{{Tm86O_}nx0um`4ofczm-+tQ`b0XxDN&ei+K)$a zTX6z(iUIur)fvWC4Muh}SoA@m$39mptGdx^+z($Mswg9#O(!MqJQeXr$y9(F1S|}V zCp8U8%VD>j4rQTnF-ce)CsfFju&PfS#i=*)Q|4)^1`!husgCN(t}8eus9ITyTfCJ! z?8m{oy}@@x2}*L4C}3R;g#E;~_za-X_-s*}f3;2LQygv@GkmP+I#^ zV8emS>T#o*=0qmWhvy;A>K+ZpfJ=edXi3=DJ zPkDcC;Rw1hMF>eivt#YR+0NRk9UaUi51)L<$5ya<#oBxbJ-DAWl-I`S`N0h#Jk`f2 zIjq}cORJxOxek#2bfzR!-aNHAd$|-FG_g6Re{WB_v@3qh95n>_)PHC4W3Knd1~lPk z<_{QG_W(D1j2us7kPAA%EG*D;=lHQ+M#+n`9{SlrbqXgtq(UDkX{6eBw$(!5SaTfG zUTEcO2EV?SA#OwUPRaE7ted zxlPN%680N+_vq#Lygv3YcD+f5vg|}ANZdmCWI2H|w1u4ZlB8zj`7%C89QN#r&E*(y z{Iy1FUv9jUc0fUML|ArIqh4VK9;4-aGt7I0&)puV!=!=%(sB9qFB%pS$Jq8tyJQbE9cY@+RhOWWr24LecthZg9fgp?j@{J#4o0%LL0=7#QNZ zt8ikCYj)Pnf-2)<@4{7E6dGOSBT4BPp8Z7HeoXplln?NE@j4 za2?w9h_Z`=+oRHTHZH`|@%HWd_DIWD&4e7XmqS{9O~a9Ytz zl7?3ERQu6YUQ0Hr79qj>RAZEr;}#vI;s0ZX0g@j)iL8}!HOTp`+2VU&6Fv4hTsS} z<18hGSE_~d;bjRlwZ+SJ!6UD5CGlx5GApj_sJvK>1P`(|#|q;1Q$H!bhC~sI5GBnt`ZHlW|w z&Zi^ecF_+!9>&qlLeBzKXbOE`9pX4B+$iV#*(3F!#gHy5*W@)zo6q97-^2RboyuS6 zr4L{7J&tE<>ujPFzNsEqvB7NBrMtq(hD?$LR+TfS;-TfU6_0UBjQSF07kyiu$2J{r zF^mot@){&7g@f{si^_wQ#`si;@%b6qEsx5n)Z-J=Y3(*_n?o3RWExS%M6;sK3uon} z$o?zRK|Y|rh8Ej%kz3%}c(yB;(9X##P}^|{a|$h#x{nHQe}=|=zRQA+?qwye)s=vA z#muWZsuReR3@rWoH5g&T3|}u4A9S*B2S~x z53?h5g52gHMbf_qbTf2dM#g=F3vS_mUyF|RZq6-_TxAflr-Ne`+35pYLN+fdFs~ft zh7mPtl&V^go-5@g%3BVS zuCTo(OMn1#Ut|J2S7X#e=GV`z2Zx}EaSdMBgA0~skj#~(PgvB6pV}Dc`E~Q1NyT~o zMd6e%VNAn!Sspr7NvBXHuifb50pwSlKms~t+JyJ+^RoLsykrC7%cJL4F_S^%$bvv> z%l9f-1~$Z`lYEq5`WOZeoOGU@bi2ri0z9J6y)v*NW3*&r6mF(o2747mzG3D22KeXU zoH%vk2yAobWK!I*EbYDUOsemsYeuX3MNbO%XFGQB#y3EnQ;Jg*11Fi>%eFrksTUrl zV5x@qtx?;$jTjcDsNltr1T}9ZEU4BGQ+EhMD)>&kjK%jYa@Bnt$@MnZ1_~OO!xiX5 zI!VcrDN)_0!|>qO)V|(Mcfp?Ms!7NtwV9G86V#|TLEoH?9cz02>`NkV$zIH}=Cav0 zkj4k4znMT5!#ebACt$;~8^7@2p@Z@Gsx>X{NDr?xi zqAdY-HuN414U?R^*Tv_UEOnxnvABSzo1V#^JOnmXC#QYQ9gYAG$u6UGA+d7Wv~W?o)3E<6$3R>nZDJm(>%G5QrdiU~;GTluT)6!D)_Cgp>NoPcDSv5)Kfj;J^~;krBp zn-wm|xru}GZ)R&g!Xh_Yv^`9cJh4J$j5Hfg^K5>t z^0L!dloD_=@srrLV0*>oU#B^^&m5%hD}t&An@(_|MVrw-a@+>Q%UgdK-^C=E&1eX+ zj-jrbJ#f0BAJ#Fsv(YbMvn>Aso;&WNN?!H#4WxkG>(oyR|Y8u4w;I8eXJS!-kt z>I1~F)@64iKv0E1U}XY1dH9f}6>z7ih#p^5*k=aCjl{9bi1n!!;h&it8yNxsr}55b zvHE`h#PaZQ1_a~=AKMaYa7O5ars`$>9ep~0z;2w}hE?0YP-0x`HhK^2cOur3cp-Zu zu-Pi!?Dsnwv@h8G1G~dDLxhc;N6(GsBJXBNq*-Q3mm7_Mrfoj6n!5!3AHk+I_-gHa zIY}D897(G3zPNI`XXndE{i!mrQt5SS(Y4GVtiM7t{y!sFOK``wW>v(>3nt$pSg~51 zs-Fj!oFT+4p?)=cYjdJ?cO|!X9;-9KZ93d`=GbheSkRQ&)Ojdm3;sL8v_hy`_Zp(P zsZK)V@R2%L4jJ0RM3eJDfhwABnsaKqNYLExjLY`@74iW9oMn%aRUa1-p!xA!pmKac zj8>jSufpylnno}Hua;h1;jZi9bTjobijgL)Pycfu-0EWJ7iE+$}u zzm)}4E?gViRWtsck}H4r>vNotbX8ZVp!S2w>fGI~*HwVuM8zO_2L{ZF$j@+*7GL)d zkI>h}L~R34`T{)lV@$aGLKP5Q4KTV=Q9C9S{CDWc+X)0#WB;OlX)hq?eT;%Mv{roB z+x6&v^yOuy>DgQ0G5=2r*vt zpy{NCBYyZODG7r~Q%obPv81k^BU`fjInf@9%F0ZsTUoBUNR}1PCmYWw&~4;)*}ch@ zwL4nJX+ir@Bdjpn65fbME!VU-?!=5*Lid|$q9B@>KO_xeq&Cm2G4cmLeXIx2Ye%1@ zE0mf|SHvZ$98ahKuy0og0siPjeF0ux(OQ0Wh7fz`+I2`zpVI4=2Hd3{ypO0EaVYMO zc@Y?KXj7x;|1*s7U&<;sE2?b%LoO7CFQ&xe=>E&ohf}x<252 zv*Bx1_J((9=F+-sWDQm0PA@TZ;Cq%&TuF8}B+;wXCF@mg(pUXIES!R;`xMBUZ^T^~e? z+;h`@fnKd*ZrzSPb#3VROwyb^u%uF?K!bKP+4{czuKhX6C!^vP6YuXx_}0%|OkNHZqwZbGOw+4&D2`no%crlk6G8Lm}HiV{T!lhzPNLZ#QJFj8#mesu2yzuYN*ivZRuoDTc-4>i! z3{31n{B8+DNlV(;g4=kL#Z`6xLD8Gd<>(7jD=vDu&wz;^M^0aT7?cSr3e)<*WpO)m zXA+$&%(*`jT^;L`TEFWgIkjqXQ6~oB{#3FP{R6|eWzO(U+!_X<2sj;+#pOifPyUj=j{IGvap$T7epf$P6C zEB+3ye}d`1gX_QI^>4Bbe?_i;YbE@jl5G_#QucYm@EucCru)&ptY@J+kZ`|ICPAkfm6kThP4m-g9BDPk@i{82eV+8nI>VOkXHX zlJj^SBYq#hTqK7hkEnY#k4+%hoNX5H-6MFv>X%n;^@Re2f^wUT@ zYH+8hhlwvZs>DM^xsGLP$Z)JU$@iUy-X-G!!U50`m`;e{-hqs0C2LX&)3(_BTJtb0 zd2z)=kIkY&!wZ3L3$=JFNr`P!;!9hDX)%s{EE{fa_G<5N^=EPGzx$k_u|HaC>(kQE za88Vo`{d8)N~EF6IL=sS)Zf5(6GysM8^+iHJ-JuG>fo>{)aK|{j36Xx`V!$XIDpHTQ9t|S4 z_U`K|LF~mku5vPn-c^SK>0BFKYv90PZYe6bnji@xRDG$RiYJJ(n(!b0qCuYzuOf~% zii$&^nz`StkcuIPIqfTYGZSbSktnd~u*m`Q8Cly%NJByEf{#0J7tQBDTZ5@U843sl z$vyE)3~Ff;*v1B*=avcgecdpmpQ(0MBSePqluF~LewufTS?qxPH|l{E09t9gv6cwD zn9v)8LQ5c8FC(#iC`ugb8GgmUU%nJuOgPBe8$|Nq@IF(`HnjV=q3=flyd%b3HB%yp zyIOoK0Nv)JWgGf#u_*M#jcMD*=4gR#UGD^UTA~{^B&atuOk|+a?)?Mp>GU;-+Yp@a z^m`%jrG@~g&tC5CRXCE%%c{0l*?{0!&o-&akKncyBxlM69|`8kb%_Q)+rQAP1}2|* zt};VOd3kmZ(H*!bK(L)ozGJB1MP2!3_)c%*ASFWy{VTn7J43+})E<@s{++)V$#t?f zy9@ay;H^mte+)V+tY^_GuM#a2-1f1$NVLvz)-G7hk)pXFxSzR6HAXIK)MqFb9c#e! z8|14Riw0%w!moP5Sv&~Wx|mmXzDnTCsCuSp^_4Zjc)*Lx&=_rffq5`kijKdx3=fZ^igpz`ZjKJ+ zR+}$fDY-t1ld4%Vpf{BnV86@dYA~-WX2Flv6pJ1ylj`s$Zlk{3Qz>n%fgNh-HfZm~ zD@@$5p3Pq<7pk%Xc1u7=WM~Z`XwoBOR}c2C1sx^@qyQ;z+Rkl_`Kja3 zh=4wZYh^mX>pF1g9u82MI>o7{KSU>8@Cho1RN8KR@|GGAfc9?HVV}5s>{-`9G;+=y!JT1xBo$YulDW^H8@0%Kj`eGMO9`Yv z&r!v)h`V;W$vcgCjn{D2{Z8DP^z?AMm=9mV+$_hSG*QT~@~Q#A#*hM|=mbMx98cQQ zr33eNb&_%cO;66f39)oV^i_{QX>MNil1u`Qu%pfEp0K7HZz#edN4b9h-^$DY{%eYq zcr44Ov zcf|P7uy*%zVJbDZr47nT9e2`7U)I{nsbm)Avodn5!2%7n%xdmoUF56Pw2%+Ip&9+F|_*B?N zAanxMz8%E)fKt=8ZU(fzx_3emJTE`48Z5p=?!dP|$Sy@h zBxymag$t3jm?|Pm@!D-$!$G@$jFD%H$JRcu6r@28iReJ4zZTtrg9r?Sz|Ven1s`rl z%H|v01!x3rs=|-DlpCM^!)Hu-2Q3B8Kj~)4>>a z7rryBq2U5VNImGm?_28oo5OU)g+3vUkRpHt4ab~_#|V{h#Y4juIJtuyOysDBCON>@ zis_RCog)H6T1-U%p5O=d59Lf}E1Dx0OpoPs&>!XxK|ucA|?luAR8Gok8vN=cbJsEXW)D554}%^VD{;-<@6s<79fKN@VG(jA$s!S z;>D>8h9mH(w=7oV%>0e6l&8EdiTKt+4{iwM}sJTMz4l{rz#iQm5qcM zJC;CV=wFnP&;om^ODqcEL06rI4@((?RWPT2E$>ero&u?V6aa%*^?H7<)(CFgWQ+Yi z`|Cdr4t&wbzRF5!Yyz|hh+Ka#Ncva=JijQ@4Qjd=LNog@Ax2sTrEK1KTePp4%cnU( zgt7g|fNa;I`eb^q%TK_fJy_n+fg>K5e=(@tidVqyQG|}}UIN6%Sjg@Y0`?KFPpGu9 z3F>wRY-B(S`~P9@Era9ifi+Q63^7B@%*+fiGsMhn$9Bfd%*@Qp6f-kJ%rs_ZW;@35 z_4l1Ub${&Lx?6R&YJcobY5q*TuUgZRx}Sd3lJesfjhVU&P}y#R|3i>0e7--Q7e#8? zm~h873fyqX*JE)w*Z7MzjPNcoKZN2@w6ClQnlhS>)G5Yhrm)OpzM^PCaic^i`(rFv zR4CyRP@)Jjqf!!n6K6#0P_R-W&?vCPWc-NI)beN{yRgN}VFF0S3$WZ6c!3+R)VLJB zn!C0JfFyk336h|U+grUe^sUVIi2@j(j%)udk*C{0XT^S5<*=@s;O^!MezJ?e!Joc9 z@6#U$b=2{)#WRt7 z4%8GG@fR!?sN^NfnSL(d(8jU42|)?E^wE@JaGvO67{YKkG(kNZbDLJ9#>kMcqkp#Y zP%Hw56j^0%TMVRnNtbdA;ruB>1Ez9BnI1=?f`^rpEMS?c$*zQ4LK}hp@#_#4y3z z;20Uv*7t`IaP8TRF2wt{RIS?)qPZi$4B(7op^NL{)8@$c0+h*F0_O;Yt>nrv!aGJs zjKf)0W0@VC#MRr!`Ca%yxg!oG#bP;W-|fPU0l>ioeYcK1L2$GCq?g zA(OaGwj&<5noqO-a+p}-LrEe|(;YXY4|Ng{PRz-jr0gjdAD=ml&4jLE6-5{-^=X*m zhR}Et@JYEIQ3eSa6AURKBF^jG@?ir;Nr^S`-%}}|;A|XBD4kaZRwHK&@iQvqQ}aluc*m#9gf(plWcb%vC?+!oie4B{G@_b083ruxrcf=G4FBq#QT`pt{2Lrc`GfPVP z#uSlzcLfjP=-TZfthpl+72GpuY1wVKb@ln1`W^PBSUQ7yu<^R~K5-I-r>#fW&^CfNw^+H?vF}gP%eAIo3q$gc%9^^%GPX zVtle+wpzpd*11=o@z`#L^2zc05r8B(y2_E%6u73E5fV_XqBGd^QN||c_7)H#DQO9K z25`Z;xR7i#XyC)zTebGXJ)44i!LH68XH~6;9kOy=*U3;=uxOG{e@3Qy^0)V1uX=oE zOGMpsd!R`;YJ@+n2}cgi7M!=&FwMsK{I8Ga8gAWGmEvbE(9--T?lGg3!2Fee!zxdJ z_z@sKz3%I4%pvmh18N<0%x;DvqL=$xLnCPrt53hi38syG!bv70)a(4M_-i?CTe%XH zs!>IVpXhQ}`e6;|#m-_P3X5He8z0fP9HI?%F!ilZI4#UicTc1A*Ztejm&a=nc6{0y z1_r(@gV)E8CqYXP``t*=gWxBHP`WSn7U(ySL1kWGvDE%|2y1w_vb-GbRwI|(%I&tN z$;SJwbTJl&w;8nF4);O)wvh3aB7(KK`Wsf_0IK~=)WQ#RqEAEEcDNmxjK!Lj`j~UR z5$ua%*Lt|UrFgHj%IiiF9to%v%!i-JjQk3)wg5+^OA`4NAx2}i8@4`(YQhs#j3I1c zWfi2H07oIb|LOFn!od6~kc#z3QRMVW03FdR>Pl~2wH=}<+yzPaDar&$s0L^mUxh>A z#?E8n5PjiD?az^niR0tR!iQ~4t}>2?&^+d$VHFEhBhJlMOBjD1+L~F@CSvUY@iI3q z&@fY&{Sb`ao;r|fJ}zv1U;mU}R>!Pwy&rO&IRbl`TvUfX4!L@CZju3NCVg~0 zN+;=vZ53n>ZPRa$EkyX1K@=IZCzMYuxjjzLw_n~^D$_ttl}|cx@>s;{G9UL{bEBOx%5&JoDIZ<`zeSd6C&+T2r!4nL4sN&^YZlbceAVbP7qxt^*$-JVC{>>4Y>{UnWUF;T- z&YQ{enxIBaUk?%8ZqKv<1Vw})m}er2u<28G{Y%ZX_frRQB&PSJcGJ~FD9qaT;T~^u z&hs+8rhJRpJ3L<)NNic)@OUFsmmfWNyeyh04Qon45cn#+y%;29UA%76XmBi}>P>uJ z()uzUmI{=x=|%o9DLPERwg@V|II;=)AXF%rEK8vO*Zf3HTmcX%d0x3vLEpr(5PFUx ztqfe4E|e-nSJLWF>Y-k@KP2=<&|122|0zb8*>_2@4tbE0ph07HUAN19_Wqg3YOR*~ z&>zP5QJsrOL5thlNO}110D0SONPm!Cp!V4v_v_xu%${ZZza21yX&O!v(O`2@`|UU84I0G5V`%q{b|Zyo zm$pRt!>fTr{MWsXUnVb0NtDzHUyn2GJ?@?7|Gk!VM&fkDVv(w3!|XJK-Bme!gYhbTyIPey;s%L zNN&!|_~Ap@!9EYbd`v#i^mzY$P4h1`1MM+2eB8{zpKckL?Ok_____jaA&C@xP|T#z z`WTA_<*T=t4?4VmfSk^4At_`*N;l9T;a-v?>HzTbv(wWgU(rBzq20Hi&sSTcS=n9y zd+m)|ri{%$+=+g^2JGDpzy}G3g95I{Nziy^Y-I8HK>(9!xS!~tu!v?`rxH~00;ySv z1b&2s+SUy5(MGjDTE1L$lv5x@efbxeQQkC>(kj)&xI9S_$bH3#JX9=}&me?EC>GzN z&fiaTRKhQcoU?!(D9m(88b-*8vTtj!8`<%RmD!^R1C(&tJmr!y9;1*yD)t4xKW+CH z>29h|+oW&Nh;P4(?O)qLvrr{xHF%fq}OcSJ<3N+Qqe*j#pYlDYC}^vw;m zZ7ZAaP3~~JT{;E38pSe9m{f&WKt#mQD*dV34j{SJymOxQ0-==uHzE<#g}T^6Z{Oz;`p)C#vFju5e8Ml7lr;8DEaJ4Bn35rxD-W)yJ=VTijPM?%OeaV?p7N_T<*?mVj~d*w>hk z2Vb64Bw)|;bcxzOW~Y0PDGwI<8ckC5D|k}ez;k-rJqv`0H2bl5%4Q$f;|w-R}Fl-I|{2R3sIsKCK!bo+Kw--R1|(ut{(n*f7r-*Y`8FoZs_AaGI@x~f;r-zD9x=$Rsi;8n zguNC)llPdrD{USEsdl@S*$)9@kgHv6l|OjDV*~VWRE9{8%p1CwnKjOpIH1Z2SPOkeXFqKHWt%zzb*jmi8% zFr_YLYz;%>F~oJL8Kzm0T(Q%M*T$4$m*YF>Su<#&_6{C6ziNIuZ)vufoi2HV@PB9_K_AV}zo|9l5SXP2F7t6KFvhEO^>G~t8& zpZ#$CB7P*Mn5qJYD#3JDLx?7J(T;NEVtIbbGI4L&9~~panIbJ!^DhAXa%^ogU@t3%G3q6c&N^(;;YEf4d)s`$}_y{NHwZu^C^A zw5V9v-rq$tbDpN2ZxvrVK03_rfS~NBzdcM={X4E|vWkr#kKf2$p zFRZ7pzIV0f(E%SOH5j%Ib`37L3<$1Xp3XvCw-hoP4kF312fjRveF+pLZzYpvJFowR zcYYz=Nsh%7Zv-jKt{geKYia8kCeaxu8XJj|g0fAQ5tn9>Z$Tc$6NH6^6itYVBEJeI z00l=Ee}KYhOf32p0R{ihG07(v6R*4{&;Sg?v#%oV~lP*aZ&Q~#w%j;nHKF`7ekCd#ILpvUj zl;n&SGGn4>@0!!I49v)E=BK1IJ6H-XvCR0mX__YrclV^Kuxn~{t?`29{4qGle>;Zt zP>lj|UV*D%r!*VRVO=UejX=)vfr29$SE&5czFi5VmZcMjw9d`a!Q#IiHK-r!?a_T8 zweMkve(sAt7XOMHYNo1YT3CM85J5sD;||?Lw?suC;BD$re+rgxIrRcLR66DWx*a8( z{=G)__QR~SpndRNyaKC9UJr}0nJbx!Da?I8{)kluXuxhvDvgj>m`xe(|4Cp3SPaUV z+GBv?ieUq0!>}Bv4~)^-W`hP7daHVj)6zx7MEgmS3M9o3m4h}n$;08;TBXR0epLh- z-p3V7&-ChB5l4aJi zyZ>|>bSo4~Xjm*cwIURF6CQ>GwNZX*8h216J6cK!FRTQzRt8jb5Ca_@Iyev7`nUqd zxz9s#KSgBMFCCbMN91g3Y+8O6H|FsUZ=Ib=roys)x9{uYeU}V`bid(UgI$zM^uHdFOUO5HxYt%%G8^c{&z`A?@5<`#Xk#m9$h{i4jwmAy2|sW_?wN$%_p_-> z*3)$K{7E-E2>6|j+w4!tglX@`g=cK=iUeMf^)0^lCpn$F5p#h=1E%jFV{}E=W=a#D zh1g-+O%+vrpk}uo0so7|Z9Fc=SExItaT(R04V!dT;6zK^e-)<-8#Y%AD*FzvJal+` zlASF+9*f6p9#bV{X=zoLim>KxvM}yRi#1(4e!B^ZkP}c#$U0pqN8IO{HlO~A08oP- z#~ajKkuZ`q7KyZL0A4%ML4P-Wq=DDRg)}hCI^S${T5MkZ2a2caqmmm4y`B0{oliDU ze1W+7A3dKZ?f<=FqNSy!q2Y1AC1-SoZC#Fwh>Wz)&zYFo{CLy}-E!MVZf<(r?z_wi ztZr-^7*Dnv);RHb&!MX0EeGV+79UUhx-@|4K$sV_gZabwP^SGaJwJ3GuEt?S- zn<_1187^E#f4>NdpaZ|>z#~^;w`OZ8aozDf(%YKewXpF^KXOZt`_nS`Qv}O;{ERC3 zV0;QOEE-ZV1}oHH5F&oDyIrWVDTc66fJA@)7vGJz_##+bo}|&ZA%Xzx0fZaWuO4+Q zZRJw9G>p{2V2G zZm}3BygwvTXjtXAtO=Y^q#ykYJp!0XX4T)-wbS0tO{S~2VmYNOk$v9&ju>+p%Y{Hw zRn}KGv6IcZ3A|1{mNZLz$)`r|OKA9N6yk#U)4Flx+^&6$-DjYuv%HG&V$vLvv!?sS zm_7#dcwz*lQaU_SR>6I}YZ5Dv8K+kMoJ#lv<`S+|;m+)+{;hitxxquF0MlTMo^id* zBOVTtB~d>M1vK&C_GgRWT5w}Cqv<3Y%WOJ>gAb&r zwAepF=xKY!k~Q}uCGAi!B~9s^_UNI8(N?!?n~Dc&Csq_zidiTC#Mug(jp*=tLp^Mr z62{98_Cr@v^gGjIxV9W0`zpBQvz?vX0RrXz8-f=|O(8|aZ-;Rg2qPgL7Oqyz1q5ay zSsAJ5%qUni39!dZP~l*n<+4f4DWc1wLJ72XVWf@1t8fR{PpM5VFq~Ba zvF{`T31^iH9_@VEwEOMU&PHsC zuF)_1V43w9DTJ{v-CmZKsip4|G*zk_%x~ir+PwS(=D7A$A5M;ZE*W=a42B)2w5pTB zZ{ugv&aR%Tr?Xn*M<*`JO^fBooDsh6@|mUZ2G~|tyjz#w*Mf1^Hq@xpnE0z0m!(9Q zX83rx#3`CA0J2T(^p+bHt|I8S&o+Ohy_LWISd?l?tU0&TefzEyG|B)&PdfHoy zEr_L%&pr|$Fu%#+ulPLD3A4h2@O;*1-vTee;po9PQ~zUegg=Xn$KG}8DNt64*ZJ+q zz703upWfG46KnfHKsNCY8JgM#w!h%W}`bzw__-ykm0lqA}PTqEXx9Ssm;)47|FWBp@lQRu|A)~ z9UU!JDZp@@4eR2TDULfp5uYIrA7&T5AB`u+a3E*rBlWcpWfAE^u#Z#ZV^@a4fn$|1 zGBMqQ5J(C`mSl-jk0$fwC^pHjfYww6ctm(W);IUHiHsKupcJXD!fhqgf1Swr_LE|c zCQUdTN|@c4DMqm$wI06!7MI*lIIbT8i0}(NDK4Ho3CaELjV%%DV+Yw+_wBU4^~*HB zf8%ijp!6jx@JXBs82UJu*pk&FLGq59(nADc_e%zo%MAyl2sc-EqY*F9=10-~Hp}^o zP&;N+A|(O}BB|y6rAPE>uLz&V0crqAlSHs0arF85nfjYeYY5ABWrL<_Qf6i(DRv?C z4=UJNu>iEMNup#nc-7xy(&Pha3qM!QVaiM~k6!1H@V|35+gTU!$p;-bc z65NEz7*e0&hM?Q9rDBv-n7n4aHATqaaA7S<(^is)QSA+hHE;t4BsfI421c3VB>J&s z_N6|(u#7$R1%7(ZFKF5TEC7yxuWAsKWI61H7?j1nqBbKByHtBLrY}pN079H%5I$^;G)eowSkY)jVw(HpOkrn;xd9l6NIRsg_(p!ZP}Ie0yT+@O&~qYCBl)Ao^q~-9 z>|ueYitxK}9~*ri$KiAB^YY85U)CVmRW%IrgMD`B_s;j6KEDflQDmuf^3`8wdxffX z+Q<$4$Wy;M)CCde#YLtLO4^7Be-gK1NV4SELJ}h4qwep4f&S37f4M()3wA%rORBF5 z_|t;=eoaF+0sZK~iXwg>&CR-keo_qKKzvq^a5!mQ5ZSp>5Pp3SE9xLBBXvMm7v?8v z9Mn$&BB}obicnaHB0IU|BHE_SinN-8U-HQ*y%0$)$YFP7m zCx)~*+L#!M~NCNbqZ8Et@P!Io?mhp-V-U`O*)@n!6}gypDJ5sRNhe&Nyx=f%^KV^LVib)iJjvs|dbOwFgq$U8wSRsJNnsZCR3w-AGxSAVYIuTL{#9NGR;mQ?x4Sq3jTrpDR{UpCv2pJo|33cp^bQm)bZq6R z%-_tqmz&;hvXp3T{pxfcrpXg!t~Y>qu_BMf zB&J};gt0nz?>q+J9(de5`{|@W1aRatD8? zj9013A?%<+phsH|bTOjU$l zTz*Nku&b_|u7VNtOIT9UeEtQDtQvYeWig*~@FTSZAwcY}ifD=_YVvR}#J?K4fP&t5 zVkeyEcB;at{3ftaI1>E}kR(6q^zgSMk=bc#axe+Kx^pfK+8`A-J5a@za6R!WUr6<{ zj0#XSBz>YZ3Y8YPaiw(U-`>YjmMR5j!~cj~zdK^id&7UMT?89%hL3DxGF0By8wpgl z3c-6gZvHW5=e%8)(4|$qkQT=?st+*3&mE_CS@4R$#B#aks=%!DwCQp$W7c<;t1>=p zC#wlIJ;Ab_+*0R2O@5?Qr2HJ8{vBCDB$s7FB@akQE*QJQA!Gwp5+@QI+&Z!RFF@={ zOoE-UyHf?#Ae@oJz#FZ$vZ6(@n5Y|V`7 zq_P4N;f`AGsYv3gGN_LKOq^CO*r%))lg@Sq4mh|r!aLx0)+#mZeW?eBx0vEfR+{`S zyy#U$8{46AnvEp8#FH3<9PWcyP3Cpf~DLYS=9FJsaT|!MUWu(Kh={uHmMu8IqL>KP6 ztQ=u24^#FE`=zSkRs_k z|JgDobj5LSXASGoGsJbSh%yYBr^cG@hcGJ8V^B-6H@K^(bS?ie9)cF#)3_v_5$w0< z>x=n(k|qoq`QA0lTe}LbDVB0(i~gG>?)DGo4vG1u+2F!&|IWJsC|&8q{vLW9C3i`o zeqEZ#JcO1EbQl45>62pNtGW%;4MQ?%KPai~YH~m1o1O8Pura=ZSJ7_$*wWm{1ioF< zy7+(k_rEW8M<~6CADf$??W^P1^%oKiGl}xmk>_R^RP6(2tdioRFFjuc95TtEa8^hZ z0h~>b?QC;%c(z50LMXEB`DW{J_L^!w;*Fd$m#znz4hsST*M!@B9o!O@;LVDERU z*d?u$LwzbPY1DLb)8F|AR@us2JQN0W=B0!U8WHO7l|7q=I6+_G^Mucd0Nqh!Rdag@ zzK}t2Arjy5%Pr#tqSP;dzr0OgI~K}okXDpy@H{nQZN6*hqrMo!W0JD}a8Em(jw@ za~jEyIo-3&68JgOGcfCvMD&_1iKc=A6klr))3fm5ThyKQ1bVLn+RptP)Y;+$ z3d?1Zu`@ZTTq>XQm(B$^S)TEG&CO&;*BKI;SUVos#+~EjB<4?#6tyC_n#6Qk<|LJJ z&JQcpvN+EF1aJgZ;ZQxvz-}ga3Y*0M5iGT=GwnSFv@JNyiu~+(-0SstIPINZnd-^k zo%eg;Si!t6@z2^Ln{aJkWc{I}46|U%y1w88d{}-d+QLL5A03(i40+i0mDXfOjvgwn zoHIylq%Q7pQUj+iqdi{DqAqeoCQuU{*4>y*KcueaJ9tg-*j;VOd`g9wz(YJ_Wr5V| zSAznjn(vST#+)=82PdQRj`CIj$sQ^Kou=|DTZu9SYYE)Mh)L&{4FEGjy1m>I>HX-c z1uy6P!HMfppQ{a}#O!wUP}!Hf>B2_|%{-q;quRQKavz_*%EzSn9?6-?GbRFjT&K!E zN;UR!Rp5O=52saxs%0P_oC-*Z_!qQp!RCPS*&m}#sT0~J_Mno`h|*-S=MGPCiFFwo_0Psf&J7bh~EiZUXJ1XA!#@1 zB%2}x96PgI!Q=yxp3fRFU+QxL4?xw{$&JFI+Yk4JDtT9qg(Am$P~oWV6YYlZ-cJGG ze{Uo`q=3-K&;M>LR8K9I@S3^xVFb97k_m9Y85uuVQ+GW(mcK1VJEB3`MZu>{?YBUa zs+JC;f242(f=VQWj6#IjH*HITpgty<-45wK84`V$-#kv49WPJA++P$e@zs$*s7Qsv=3ygy`2*{~l3pUm$tAubkz{L69?lhq^Bv{JcWN z=3#{c=|?9pFTa^aR5`Zu=dcoblF}G^k*(9VS-LORPv>0eScaV*V-)O~iEC1wEDF;k z7xu%lKjMgH&3*HNUxh6Zjdy^*qCZ-utGV{lhF?8{qDxfXk+ZT|mx@!AK+p(nz$3Sh z#a|vS3V%QCy_HBv$3XA{LhbQZa%5e}lF}si@uZ=NetUN%I?=s@a8b9|Dv^%7oJU`< zV#1p>k|klpa z8Y0(GdsHs+)7)^n7;%WY7U{V;0gB|$>2YNC!>U^;dH`ZSrBon;0Tc7r?3`aLS|t(iWFbOGs&lCfqx!1Cl&6Jd#u8AVBw z!{PYLir@z+>sOq_xI#ix_sOgD3}}RdJZDEX)$$tDz_;}%Bmv32qoP^k5BbbK3FiTZ zLVJr*oiZOEMkmi7ZfE<*eEZHFz-YO5`wg#!7Aw*R3NK$PL?dOdLf32DW|i6vwaA&y zZJeWwZu4aAimM`HKHl}O3q47x{#Q4*0?;0i@oZF8u>PuFvnB z`RK@ZnVFQACaCxMIyfF1T~`0xqela@9R>{c1Y|6fQu|gMsyXOAQNk7-XVF}~rl=tq z4hG;V#D+f6e<<;q^OSE3yF!iCR&p;fpWh%R{KrtBvpe@(rEe3WXwA6!T7mlv`ZB=^ zZjA?Uxi}|^YZcehwQstyoWyvPEEXC+@o>0&I`eeEr7WGE^>+sV7E3+5g+)cspx1&2 ztKV+gp7cRVfGq=~a_#HY6MoZhJy$Q5A3Az&`7m|oDRHtEgSsqF!=&>Bgq+gA6!&7u zVqi3L0{hZS_7}CvqA+i`H6lEe`}4d)sEag$I`_Uzhw%ks#2Gqn+mg;=|GRduQi?a8 zn3Z{*Dtpt}(iF7%^v68DP2YU-A^8LfJCnTO-ef~Zr9{u)zIeB8&pfsbEUg|$W#4(0 zwU0{+K}3vs*28r!&q%*V`@vqWM`vXmRe-E2KLS7x9bLTtV82*W608uHulwfVwGCqgpH{RBp zN7!~o&s3l~a8;;jxgH;%CO{x#l-7(qs)F6YK(&~JaR4fOp)(GX`cSyf>F&ZC!5;fr zaR;xD=U!%J9A`aL74hK?zKZyFuuI^K-($Vefuf)CK=+fS-tl(R7LBO_f7_LAv2{iX~CT!z>N8Tx!!Ccrlz!Y95>qI?Pl0%_RK@AU+a~*O6hNO+UJ0{fX9l9DI1(h?+(>sbPb#Fs{}l) z&64ElsdTQ7;uSV3UdoBN{w%!*0Bb@ApaPJKSH=26It!1;Wnz70seL2^!)dK{F)e%3 zRIt=vE$T9?3)Ufzy;qDuGiBc`so21s*Mug64>>HQGA2l{x_uX~^}K6;VsQU>8I_kP z*l(BQ-`Vi5ljbR-wtIQI$GzC*Qhsf-`0`0W*Gz!-#)vbku1ewWIB&i`&(8(6 z7$4$d4SgTQQa0wY3e@&G|x1US9g^TWqL}eqUndbWaB9aQxLYYZ1-y|0QRr;L`jTaNWG0 z@eU@z5tbXqUVPhhKNGLjSM5|08?a?>)}f>Yx{02OD;;9-BW8nA8<_XDwL*L}CR4k< z-eJrQQZQ96A#4W1g3%7lNV(n zVt$SP9p#($e(-$b9jQm?>b_RbcYi@mupUM<`NnN`+1RYQ(MO_#?sy$#>a_$1x@js7UPVkKemB5IABVOS^}=bUYE&~qeY32L2ju@tpT_lOO9*YTsL;i_zvSTQ^GoTqG*HaF zjo#$`H@7q_(OcS`fb;hFungfaDe^z`eJujuoztDx(}>^Qae5ejO9r1Itwy~d0cfv+ z6FynmKB)T?2z2$8W+uFoDzK{%sjd2+ZyQ%kBaXgnAlpKmyAf;nvv`y*xR}dP9!`%f z5PQrFZGjmtbjrrSPpe@JY|wL z&OERh&G``VLOVm>Rao-ioMwcF(Ian4pneP)KWc$u%EwuxvQS z$&`I4F$XC3hp>4=cIz=s_od8^vGy-c#=B~B`Yu%87vFK3U1-Kc+vB6_Z=O_4CD>Y4 zPxiThm+`u-0dhB|<$r|U)oMk9N=~Z_`3}}fEZG=R3#?g9cuTrEH`igNc(fb`5ZP>O%G3Klb#}HK%|nAmmWi`r&51b=t;4 z3+q5jl?_isoyYFxi~hrbV$Et9jwpq07QmeCVF0jtu(Pgy_04t!S}ZF!n5p=XaRd{R zhGEmc+JmF;1c%CN0Kf(|b}2B>Ok4Xf>9;DT&>V8sH%-mGfN7V?^jJ}KHm}$JXvx-GP9RxR=Dkx}GGFDb z^)M8kOPbNfW|55X>*y4-OL1fEd?h&BH|40(_V9)ODWCM*ZALBN0@bX%Dc@yqn(p51 zrl1vOvU%@en!6{dJU2Ivs0x0SPA#`jO2_eUB?AFzcIr04C}gU?E_s8Cnu`;#a@^1b z`aAzq)|Ufoi~S)7=dlGzT$TaV-Qi#?Xha=6=`PtwUe5-N{K=RVyt_5+$XV>J9!nU` z@7e|5Q_8a6%?w4C@*FYzYjv~6S;smUPmxvqp^~1WH zRypHVZ!&O>MlQXaDH=g@rH|&YF9(Hms4a&vcKW1QGHXBc7!#5y7RzF?iGH&kpG{7$ zr?<19s)T^z@+MMNID=vROO`s(9UoQ|1%nd0Vt=z$XP%~U`qE%mz$r~WG<#2xp)RHh z&jd^@9`*u7C_dNGdd8V-9xF-0 zUNDuWYS7I`{?IU&pYa^bR*>wH)v;oWA*dlL4+sgK3p!X^nnHN5f)SX05d=ec`cHl0 zVLHcKT?=B;Yje%|zw13PAx>&G%>#9t(1@@Xq7~PgiWWU~X5R2BSGg=6YWkSC_FU=k z@nY0@>b`jVOqP8YNxZ-pC$&No!@)G4?kDPZ{S2b=~8PGW(-s zBip+k6IA4--FW?8H9V`2W9ws{`8vEHOCNkP9W)r61^{clmUsY&3of7RHza7Vh1IXV`~sb^ z4w*E9({r!aXlrM_fe*jZ)-L`Yvnl(tO6{qU*(e(jB0J5rywy<&<@!j-*sm?Lr8aO` zlGgLm4%FlDMxXAtw5>>CF|15hvWq3Po+LQw49bGW2?iGv2BlZaWkli47sdESXJ$I()gmY18eAJ6(b~Dg0p{0RV+e>^@rCzFi zhgF}aeB5auWP9me*q*h|%)40(T#JmqCbG->yiNIL^t)7d&!xi;5Zp#O^G=Nw67mBi zx8f=JJ5;;M@=|}5Ix06JrB6_TcRrRt@L}S*5t{NE2N^XVHv2TKW0JqAW;|BHu%nxu z(tX`9sBT#r_C!*5Jfc^sF*P)@>`0mU`LI?)`z24jn-IeCXuRrK^Fjt~RQQNGs`i4l z_L4j@^@Q)sCpNz!L#a={`&q-}c4c7+7T)OGfTLq00lU`xk~;qWC|^M~h_Ds@BAHu5 zW%|qS2p1rFp7)6pYiX!BZn*b__azoS=mrz`^CxKX>n+|NH7o@ zg;Z5Q#sVZEqxp@^;>Yc_BRkrTl)zUc8*PP8ivJ%vffBBD;SAuvRy9j#=G(>exn4^0 zZ>~Y>By1T_Y{r&kV}F8UT{ZX#b!mKHMdio;5KjIRDgIBFmW1B_1z8RM#iWS;lVA7m zi0O@m?71fTCn)~E<$sR`di5l>anb*;`v3Q7pjS_Fd&J-1zwwWLP&VNHr2m<1)k*=? zZ9@9L&PcQ#KrtG0pWnD?Yir};;#O2vX1mIY7|f8}!*_`i+45+pOF^{2`^%;>a&U2_ zrlb&l_j0@1?CQ8m3F^+1JjU_}{k}Y|?Udc{%)t*YQwJLt|+u66>lY9>-fa zc82L5$y@BlNK7QE)OHNn%<8JPrlzKn((K}5h+srtU!TF{|65l8 z;6bwqga=p9Pu&_*gzeU)AWLWw-y~&&(7U@L4od5n&;3v`@r7v60^+{2mauzcDSgu0 zF2sJJ7|UCzXD?+_9D*&FRvCx2rRH>u?_TA*qM;`Je`E`DNr#8f{(0vNHRmJ>CS@%> ze1dOjh;>tgepsJ>wO0xWG%J0iP;6K){oJ1a-d`+>HLZSB{)g&dyX{ykRsrK4t4m^Q z1dnMivA0G6EY(9x3kN!js4#W4KGmo`y^Exy@@g!3Jhfw0x6RYBqxx<6=reJxB>6$S zrX({u2vo3i{A%}B7<2Gw4w3RH7r)x#84P`@1Tet~a;ko_oZxY1 zz+%!noq8uf5R(40gx3~rT zKl7K4JsX)>k>J*wp{}8^7@Z9;5?hSwGHhMk28{LjAL<5Jn(hl|j|CmAZoC1gPFv?i zAwI=7Idr<5dX@MwLqtT2yapFBL-VQD8}ZBpF~O@!=@Mk0wZ7UNQH*Iyj0}1<+ZBr& z0+iLOfa4%G9jwAv+OF1zBx=jQbqJw!+Ap7c#a#jy8WdJs_I$wEd9?p*Q)u8VCu>& zUq!rFFD*_!)EVXVD4*Tl&+9zS~vsc|yCzOS3mSeRu9_ z&i7v7)R%LS9m@Jy1z!G*iQ3`Q^U$vox&Nr>SU)p=X8?M>e+1(uPGrkvP7vva#HY_Yr7nGAC zHK__NGi>>u<|`kr?{TOrR#0zBqB=ST1qWz$N0#R1Zs)Y<%;!!j{rwW>j)ZP%befx| z2^~lOwWbDZonCJ0S5H*Mwlq0CX5V@-2rq?qBvPfN89aURp!~neNGVH%c)WQi6WmpD z&aD{|n=Sd|d_4?9q!HSYxOeO7B_OmM#l6P$B06ms#TogYS~2J^@BZ>~x8@z}Ex!f< zlZ|oaH~aXKw5Fl^>cTk}dsq40sf~9zsaixwpTz{*5A3fh-n)?f&}&~pE1F5FG)Z~U zy|vR#()i`6IX5>y-)Op$9tmR5ot|T+s<}8HtCwd9Nw4TbpJ|!RYuX>z@trN zQ~bwAKVWiqHowPt{AdzYadv`6Bi&;wGoO*X7=lS=0>65Lul-C;_Tp3ktiTC$bsvVv zzSsTsYY4>mDxFfv9?!)5fpfR7Q~&I*5z(GFm8479QF7hG+?RSWFn=~@8Na9DBnINz z5>q8PErH2*J_R;M>)SmG4iAm*`7#8y)Z?&efCFzXQrm+I`MZEfRf-@omT7@G0Ybov9fVy|>uT_t3)>Nn^T z+0!((jIx#WKGms-eiW&myfgb^1X}a0;Z@YsvIV?&TE}?n&#aN6qf0PGemULUy5yAd zX9Lbp@=woNN8*_yh3~7HWs!3j$>v?kF6-)+R?k`!N`&f9WI;zF`>_;Kb!NiUl0JFp zU%DMb`h!}l&zbK~qiVeHiVI9uvmUkDB8z${Sal5XpwVn~vF`Y|ZaSs&h`$b|wRzn0 zPIvEuef?^wiKP34Z;P%hYFCn-C3(Y6OvdN+`J3lVOfQ@b;-q7fVaSQN=3&YMf!YDL zEU9HY^U;1{dr2vf<~#RgQIY7kV)q7>fFbH3!L4;QU8SZ`fhPAKWT2JzAFJZBjjO$V ztyLS^K)cBr>>FdSSVFeO%K2Dxw$dn<{QGYz{MqSV7E^I-@iqvlvwyxLiL+>eyvBW_*G97%>K zlFUCl(cKAZE$DcEe?Q8_Vi3#yf<hg|`@)AmgrGPVHi>=P8s_cz+ zh+R(lysrHlIG?Sp;GI_4_x=-|cN;s43M)IEgwTv-u~iW}m^weOhiV%yL3z;fxe8G+ z$}pP8T@ss7mE9v|_NgBuhHb#L)jmNqLxM-zEokAm#t&Ww`Sbq7`a?hCHZVqhdj6CBv3U5!?69AtIooS)}#b&4_lFdr5rFsvT?1C@d_q5DJ}Y&_y(20ehO)656I-zRts&DOh9!WW#0 zl!fR*0B={1h`9z#2Cn?5NvQN}$G@6ivPl8Mj{3{2npD1aWy=gRW=s4r1hd72$%~zK z!2;Py@U8ioI0NHPnRy5dmtt-?qQ}>St5pTK%Mw3naBtj^{4Sgxq|<4 z@Xo^!hrgCe3qpXx%ah+3$wOv2x@sToF=$mR?t@5Nca|iW58Oi1QAv(>Z*jD%vhZ({ z>~vQSp>`Rc(>?Bg$J1K2gt|wV>u~w8sQ-JT>0TA?=hJAWllO=Fip1ZZ`zZkg%Zg5$ zOO!rGi>n-uhxBjnyE)r8&F0nTM}08WzsXSgH{p(f!Eph=qJXKMsU~`_CW$X@viCBf&3Eh^SZ?g3(V;FCwm6 zAy<@OR~RBjXpFl0L=zcG0Kz)V2|SZoweY`B%0H&s@9D?M^bc|~*WY>H|0R1n*Y8Zi zpegwuG}3?2NdG}2{RfToA2iZ`&`AG5BmD=B^dB_Rf6z$(KSU$_VGjQ`oBtJ!^ar=$ z_ly6EM*72;{ueY7*Wa9ue>JZEqHg?8Xrv^K5gVZR`;{wN8&@&|S`x92R?Fr0W}H%5 z;O2@>pW+Ha4?+{gn4{n7>?Yq1TCUc$8v^MnCN@Wx9mlt#i4I8lr{2F|dJBy>3sHW` zp(@}+4U)J2B=CXRd!&n7Wi9S-Iyjk)hpChQh^Cz z)KjD63?9ZTVXj|Hm_p+gwavf;}%!E0)b}< z5rc^BaiOp=$=l+CqyvZK4q}BUQCR25iVBGvlbK%WW*U(o-=GC9ngR z?X93-iHap|vsFo#e-`lV+RLE@>yC9*BsdoOWX>EOv8!5g=iS}!AXH&;h3GfE-tJl! zjtIPKB_+2GA_g-Q4-%h9wW#PeaH4L%OcX^maU}uE4kpwp;R#~G z5w_P1-%RgX`Y0`V*tn#3^1?x}jYtykOjO=J$efD5ruq+{J%a?+Q0vYh?fMv_ax=zQ zhwrg$$2VlviGj5(V7-SqyI%AuBL+<`p#$AZE#(8U%K3JDkOaVY!-1P zn$yh+PcM_ON8*mu40a=pZt^9Xm*Pu?2K2e)sdf2Z~!+I$ZQFFpZPeqcO zwUR^OFb;pq@o$n&9Zw9^RT;jz`|5l>P?N4$lPbTv;UD1_Wwo2o1P1%{d)I_JH+-#% zhU;1__1z_HH%x|TTuLzlBv1Y?Sf*Scf@h%*+@%5DX(Gc-Ae4VJf(GhSEXjO62(^uGcjkfk7Bh06`%wIh@ zH#)QD0JKj|OuFr6s5Pk;qgSDXMk?<&Esoc0akwSsv%LrMCy-~HiHKKKM)R6c-yf+S z)c<_{!pzPFo#OkQ&fgR`qJ5b0Sv~8~&HXT%fJ#N;ed74;?1vo1A7bdLfk`A0D8%t6 z?H@|10w)VEU7i5extT96(y=i92<$xRlpZFfgh5;sKSY6?L`997HQ3#Sy}3BkYOc{~ zM^OBwbHq!PDT$i-c;yO^U2kBivRCNlaNiuZW~ll~vJAZ2#9}iYg1t27MtJrpC<2i~ zN_Y3$`DE;OHQzhRjLl|7Da+T*zNRM>*SDzH^swtj!@@Gb9o|32tP64_D<|hTQ|y#X zGFS{+6&Iaul3?%WldpbMPi#v6I`<)&&VAcs45=}vGkGh^4{4X}C{5Xt2G3lxt3R8& z*3Hs!D&6|>hSRqkVCq!Z@)hFcrl!WJc|H~R&Qd!6vf_u8U-4DrPuV`?a`P|~*$J#( z*37ER*L{^zd1Qgl5c`w&B;Z`&vbZkt@&{GSs{CIH3CShbeC@0e`fRrC)O{3KnNHDK zIt8QP>N{J>Ar`+-=QwS)t&NtbtSOU>`_X^GoA{DAY(}d&pdMP2)~7R+*;nKd(0UAe zxN7;5YdBKsfbGJSk?e`c1ar;)!A>_eFhE_G-3LO0?>G}~=10RlJr6#)z@{zs?q)G# zL3D;@#w%FomoO>}bh$PBBpQhX!{yN6Hu&l@$La;kw{N}lcEDPanf%v4h2g+ko{u~n z#vU=*I`9+*ePpxg27<4sETSyp|0Z1WH~o&8m7DEv$`aSV((e9OC`(*_GKLucL0S4k z6hP6H|BBrxM#Pbs`0p=tWFcn$lN|&C95IU9 z+BhNn{)ozdAtrG!FcCBVb&U#$w8Tuz@jE8;J0$z{pERXE|6?X*{xdcN;wAkPnZ)&* zVf6Qn{)J59{)<}lKgnE{IxreU0Q5SmrlMvf{>JBPZAGbAXv9Hlon40~fk&MIi*&-w ztHTH5GS`(x^_HOgd76o%^W90GyYFcg&)!Vwp{cw4`1X3vnLC@ldqc`~980SYl@0=; zLn+)v@>=0;hUkj}l_D+1(v6ghF{dS&X^%m5fstW(W+gdlZGj1x|4Gc_K z(@^rFC)Wf2)$N5{&j~`8lQUoe(;yZ>kh^bX04~@0OhQfuGNyk(4dg>d<~IgF)a1?6E7B{U^M>qZWkq8- z9t+?l^2xop(=jwh6~Tu>aavX9xT8m-7ajPo! z(4LW-Q@C+}bACWjKu2^u$OEXl?iVuAEMT<07-Ub8#n^_6fir!;`*Rid|Zx&VmU znkh#LlQ1zM7z*9W%#a{@o?6Uri98Z~gQR{~OVQwp~-w!dx{4&#JG-e$EViX2^^v^?=>IYYKn2o5F75(LUH zf3}no!Wz)>M^$Z_!GUNA}akHv5q&w$Amn?9`&YgOT3C#YEAhywhY)}(d1)j z&}zUi9hJeqpW8ALcx$Phvk-B{s?xNIbnO^U^{snsJ#X+-t?sy~z$oL}cTUrz2PoJ} zCUAMMOxTl1#6xzE1zxyYTWp>E<#mi>3Z`D4xe zy^b=oaB}=ZaQ@y&`(y3?W@k*ysPM(~k4Fb%8z7?9S%bb?7{s*u{Vej=vlQ|FhY%rvH0i$y(H~m%TWtRKr3a)t z#Ecs9h8D(Oo&G3B%9@Lq`%lFJz4cF3`s1~~YxB1%{nc833iscoFe*D6I{neIe^iT@ zQQh3g$&8qdi|d~tKW@<9zZrcFcD7buoQx5i9GpRY@Gt7i{TDp(-+}!8E4q&uRM@`} z#@~|a=;UDh#Tvm4{J6tIJ_Dge~qm!B0{!*jm{`ab?QxIAO2M1?8l&zV~SM#IYQ+9TBzGEJEKDZyy5s~}s z#0=U7apoOvDl+anfR}BYoz2ZDQnRIn#qHVJ+rwVYSDr93He$AQH01TbUh|*?8IK~N zrvX*^y~D_)G2Qb7HeEuq4u`%4R+rKBtQ@8R)W%2={GAlw~~q-w{q1H}I`R%TZ^JMsnR?cr{L8IJnR^m;f7a|dML4BZMBBtMDF1Y%M|=UO4baV_%6$iA zBF@y|8c>-)UdDX2J_FB6(Gu{uwQ_K{oGg&YNKc=DCKNG1#Kk{XJS_5V1nBDOMtw78 zNfS5kHTTzdsRQf+7-pM@w{>&iXl7Z z|7&jz8)h1EO+wjtKu((!e_oh+x;^PbPDH3m(o7WIWvD!jF6+(gEfW~*nA+r^^BYNF z{91Rx#=@5`<5(R2?vf_xd!4Z0@5if8f?NZ3`S8mwq6ORu0cSka)TKp5VxT0MY(~W2 zI6F^!$GlPmd9Q=)Ijl-_E!3E-yY3nM;K1Vn~ z2l6SS%|lW;&5~aq$UOFhQP_F>B5vFgx;SQ}r9A@Lb_Iz5o&Ax>KAtUfzjq+lPQiX| zf+&w0c7?)5%JAE01&p188{$(5eXrBPN%Ezk-Bv|VG!F7s0X=%j3kpO6#S54zD0Um? z^*s6{rZ0C!E{ql}8duZlJ{9NY8tnbbN*$k;kzU@V-{0iuoZW|c$IeC3K z!l>Wj?(FILylVu{0vbOch8R+a&b+89#i%9q3DrlnCiLbJ*O2?l)ssy8VG3SyD{NLn$nFj|TnGk7jq= z^Zd*5>wZB@U48uqKGo&qdt6+EZt;7tcGp9mPcZTFf-eo0fMn^XGBwEhKIL@aAtEcQ z%+k+kNpc%y_j=alA1xwEL{D)|US4GSN;>$@C9_?~8jow>Z#Qc)LuCqDcg*Dc+q zsHR3W2(p9?qCYF`J8hnX_4ZA(M~R4job>niFE1}&?Tv5gO617maaeV?k({sCclohG zuw-RrjSIfDdjNDhApit5wKc1+W6?0pVb$96@(}yJc!8A31DGM}GegQu;phTSRu8r* z{PmvPuinkFOaAv)IsUFzYbfP-&fiEg_bn`|%0cVR(RSwQX=`Wt=w)?AZ0|qls>U3qGV&JlnG7ByI0TU+a+byK2TBFC*(?X~v>qJR7c zq0OloZ!3Lb{-unuy1P3=mWBlrUq@r=Pg2^Frr}Nh%`z8m-o>+`aqk$493FdfmQRWd zY)qDH#C9Gu3LI@l7it_R`qtL;qvp9er|aDk)JDYc-*j=~o)lEIQ%VcSpkgr{ z;2=)7I0PId4toR#p_X4A&vP!Y+Ig_=+ntZpkdW>W?d|Q~t^^sM&1Vm1eY8N+hN%y2HwuNl`f2l%0>s|zX;31Xli;mcb$+++LbjD6<%tv0YA0IseNg|QVbE}C)v<#kWK zlD1Q{ETvdf@Y5k4p|^=LH8s1l3cmLi&JR|;EAyTKe{3x|j-Pq=)9N{KT;rb7ma$rr zR(z3jLl(E{KOJ?^oZ(+49!8z>vk8@FV!Ex_Eyl9=JO^sz?oL-Cw8>yrq_1J3pai6U z_d#2uV=?-rPCR+nY}!q~yi(`apv@QSu(=!CK4kx9ome3%3_D&?IX4WGv2=DSuY;l# zA>xRBgbSp!Sws5FP;UgtMZ3Z*R>nOaxL?W{axSjh{4%gDhFhnBlG2@Z)mIk4xso1a zuBEw^ObMok#ni3JMx6eWtKpv0CO(8=Z(v=-$Ys5 zpK+wV#-gr)tWZ=@F})fP$S5GiLLw_^z@TX7T9_?*tkIqIXRxW4a=Qt?jv(UW8)(YU zXJNbkaCxV0j`*todZ|t=6aE^mq_HlWt;%-;-gDxL!g=Y!6D|O~SBfg9%f8#YdKWh9%60`eK#IY+UOF?^#wC7C)QTV8RzpV$T!7pTSg}Psc-%K{;6YUccfb54bJ7_X z8r*687_u%Fw#}Z-zF}$?*|BZuQ60LN>R)?0WCi3f@}FI1 z^x+cmkOZZx+WQ|>f6DL<+<)J+^7;0GL>L22+##RnJ)R48XBuI~hgroN74RdQztfwl=y5y}{K%%}$1o=+MNX3o87UNy{b9`Z4Q*t4>% zrTS^Nv2rw*td1*wO3Cpn+E<=A9O^%Jznr_V;shJ=Iq4V~NDI6AEZ!#>W|D3@&yrk| zmJUQcP}l*zQq#xc&vpC02d71e#9$HELL*1F37nXpWH8tixF)~56Q>wrtO&Zi+T#@M zym~x3BGL1K)Mmo*qbFZ=yQ;had{&r)@Y))FNHsuc7E&TU4*$-I1>4;<6OW7sJTr$_ zC4&}Ca=q2-To$$GC9XeUnYej={Vt(F-SqbGWqN1iq@*jB7Tf#!mAS$3pn^SOaJUaZKEJ!xVQe`$D@@UVBg3`XcZXg-kGBrC5 ze)Vd>nR3=KS56QXA8@Og93!DwRut5(MkyUV5u=2srBw==)DZq9mEgL|;#`bm{gKAn z@1${Gzb-@IbH_th1Pg5g&pfl@rxs=c)%DM#iB8c}F6l{@ebats*KZ4;ue-^bdW?_K{rXvb^cYo@tCAd-N1~h&C7JUs zv-FV5rI=$!@=I?D&a^nH;)R}hH;&C#h6G0x&PJ>?XRj5QDCv*)Mh1Rc5g*%U5Gd+e zFEhuNR7_MaJJh4boNvY|w}wGL!Okp9VP z4EJKkANl~Py8jE-4_FTiv$rgnx#8mI$hwQyl&N5XQ@IWD2&iO0LlBWN&^r-#-C`rK zZiaF%ru&3DB)Q(SyA`k!*!-BDj*B;h3XE^}S7R~v>rm0`HxGr?W<; z68tWz?-m@!=zG2+yfQ%OiQ%{Ipy7yVx_<&}rlg=aU2geWP-?oZ{Y(LOBG`^LfTW0R$6*dPqKI_=wS zZA-kjSZ|t;kPt)2A8raXBYGvb`V;^uAl)%}Fxq^eyS$ooll6Z3?iTm$ZuR!;l=a1a zZ}R!sv!dz8loa=d(tbz1NCO=k6E8cl9dOGI)=f%Es>eFw6b+WBDE7jwi*;>%EQ7Q0 zO2W0eq=(PG%sf0b3 z|12-lm-o3ra7Spee=b4Z*+GPeKH6y>vKS-`tdXU%8lG)wj!dWf&;jiYw= zmC@|j`B@}BeGF3?o-G}iCL^1Pv2hPd;9qW_59i95(Mo)!43f9D->l>gZ_U)aiNSq? zJ>EoA*Jt}2&PJT9vAbS>h7C6!{jh#>GZDk=1TfjFXkE9N)q>177iRES{ zr-!@t+>2`^h(6Ud1U`fqe<+-wK&sU=nx~_edi^9d%4aL3h0zdkO&&kdt!vR8VvmRR z>#Lz*jpsccYf>_!zV~K7eEBSb%+w!FtstvN0D3M0mC=$yb-(rMPu)!p5nEFm3_c%x zJOTndyr*Dq1mCfRRGiGo+Q~RH?9H!2&fjYb0Sg=Ni2)sS)bL<kNZDs78CUky%Q@^`1lgKz%ZeX!2fN*qrG?UjCtF;&FTI=lE34*mZbt z&|{c5?_N9HS_&&jTy@i{s-&Q?KS2sT?tn-K$}k0QBFrk1(n^Q)ttR9t;*0H|boRR; z7?*J1OivwRazjt-JgQ8(FY8@GKbG><5)Y3>oLxps=Lz8RGufxv`N}M4;!FWT=LP8B ziT(hHW~y$ZDFF^+ypY$xI?$QK5|&0;RH(xL%M$!%=pHnaIPTG2;lT%2_ej*tBvJq&V*Vq8lc(7RboC{XFj>dcYCt9}yh?HCLDVHr$JXz?sii3Rg zahH?DIayt@QUNP<=MB~6;5YCy@Xbjw83imEHzDeTd1A22#~*1_x58%KULdto`!cy= z3QlLIBT~zRRhtjBIt|nGXABr2t?g_-yLnx8*~JG1Q7X^xp%@euUlkI>4n#&qKA-4q zc->Br&o3wd`7a>P`9{2ib*;Gj+0<-LA*UK6?QhQGFixXYbp*fC#UZ zK(%*?;&TWanhqRcUqDwz!ZZL*Sl49S@ft;+K$ccU@N@g z?BVcHn^KZ+F0pgawZkNK+3)_Q5Y*7}pb8BfY;bH!e{Nkx&gG)LE6nh5S#Hu)@<)m= zLwaXviVL2{Zr;z=T|DCUs)*X?cF5P`7*UlL^i23 z>$sYl(SIL-aBtHVo2++?ui`|@GHr;AukNFGanfImB_T_Rr#EA?_`4C70HAD(tr}lw>lnF1Q|LGfi) z55>lT^k$RE;6$?2Ma`Ev3#d*CaR7e}hqmviy))i446&hS?SO^(5Cp@dL1mL%ZzMgo z7!zn7>#kE+MtxDF!=$K>mw{4iHLqO?^^!aO#)&atEuul!Ga-gow@=`QPl!1Q$84tK zfuJReOie|3n(mDb#@7Uxwm2CN7suBO1~QaS?6?^sD(tuu_7XGXQ}7t?ehK0jx$#yl zq_wbpvJI7&>gg@fG(zL_FcNzzA8>l;YSO~4iT61 zaxj17l|WOjTR>0Oy}O{A&_b*#ep{$!Ji_u^g-w7&9J*w_*rI%I6+~S@M!#!NUptXC zp5c?khRhu*B1r_b&L9uctCVzLEq47J9impB(nQ^U115Po({;pWnFxJIQC($U%3PON zvW~zwstuQIHZ-~fOx}7s!LSh;asRTZ{M&FEdL!#>u}@OpW*XF^!!}$r_zXPe8IWy8 z%5NtCn|S-{$0K*$t7`Ng3d=bM1g5x}tzzh+Me^mzYn~~Er$ge7ux_?#2dT}s1?a%^HPp; zKMXkOZqSUcfx^W^BOJI)jL82wPlrIePdTz^6^g=AG34NxXE-yX5GDUrv&@E>**1jD zb4Xq|*ytlIXqiwjz{NvNN{L&PY`>k#=T_riE=IiOQUkYP#ml&-v@0R*=^Qg0mIq{vxk~HE1FvuMpZp$9@3aHi0VP=yUa_sV)aeHHfWqjK&G)KwPbb z!!gf9|5#8^Tf6(Lf!!_zaAMej2QzRK!K31n+F12M_HLh%cy(TE(x_wo)$np%z6nNm zgTuq6g#ub8Q{zL<_*8AYzNp;Xtz-o<*o5pkcmv+OWpTcv?F-X;U%jm=w?C)nW$FG^J??J zw<~kT8AZvE76ZoSmJ_)OpoS7~tF&dIjfl)kT1W6L?SUrK(;0dJ=^qsZhw5~Zs>PNa zOs}NYZyOY4R5CeiGsc#nNT9?Hk8kkKU>f7ToXPPHehZ zc*`u|eBE8FD%kV5EQ6JsTcI+;82b`!$wcS+M=O0fsKcg=8ny`|r!OX5!(AfRq(S_!J3fthO656!YuSVg9KX}fP7L!%X z`}&8>uZw@^geVQHh-Y2Q=Li>X7n#cAzUR=n>%+SC<43yVt*w_zU+OgA&S_h)&+5F! zox$4LGTp+|E&@p^Xv-$k@%~#i3?Kipnw+31Tdte5&#$GlE>GGEm7ha`QJnxTpT-SG z4+gs@J-=+!>m&Z<)ytt0<;Sa*t0_p{z#_({&!HmbN*xz_e#K%KcUq7T&0b)FXR{0- zdA}GUR0Enjl7g&+yGJ(k7ewUI?;y!rqn)_&^X>=%vbv*${tATIO$WXB1m?Y3t~)Vc z-D+690EY~R?4}4R>g>b*gHTs1K=(K(F+=~_d#c6MkcP;u=ymW+?|!?Ro6(6R{XK3f zE66P5pP5%oO;DcQa6fR6FF58un3?9yivXIM@qET8;Fd^(u1r*%(h=ZpBfA{A5{xP9 z5Nv<&sAgZevzT_(GuNs)-3+j8e4{C5rf-&9B-T?Y z{Byv3#@oh8#M`~xlVFFX=YB`@#JFWlmV%l??zj3(JE}P&05&BX2?`R!5BLzn&%vP5 zNH@FJK|#>}Q*Zf!+SG^!i3yv-5zYnm{nO!)`uGv(C^dlEoc)`snoWNL9(}MW3bM2H z4ePx%9T|(4HMKUU>D&m@ap81T@0i)3t=P}U^ACk$0biVzk`mBvk_wL(vXmK9%Ia8v z8K7SE8fM*jRTdbPX2sM#LJY(!8LdbQZ0-m-*n=ZDG9#;FXP+l=22T?{+Jy*SW~8;S`TN z1xag~-g`Ltq#Z*&GAH{d0LPBGCIh$1YZ5^VYSqy5>F`U}s@rXp$VwL|JMG;m^fQ0$ z!2NS}c^nS^hQ90TH`6D5S2d#fCVhpcs4!XC+777k78eCF z!Y`z9&!~5OgRY4!_B~G+dyn=3w7<>UZ+m02d%~1-re~;8r+w?imb3hERtMq^t~3>X zouk4QMl}aQmco1hWnp^81ci#M(uurMug={S-j_d9>VCtNojU*a_K^&rZZ-hgdtG9y>1 zUnm@{zBkl$Td>Ho*-rMnF~vIRLYpbp+#i`8i%4kX%#ynGoA;QOU*Ei+c2Ly_J;_T? zDxH+gl;(2;EFZ=~oCSdj_4iq=Z=p8NIrj+GPsTsKJQ}7H)%vnmPj{BJ@twF0GpvH& zqq=6%3*BG@nbK-&A6@ONOvderIaNE#&n(w1x*uJx0M~k7d7FBE7)F-WuDP4m*k9ff zv|(J9L6!|arh0q6Zw`^Off}x&GA*{a`nbOKBa@?h^T!P@0%!{pF~K)QCbhP#`{a+{ zUIva0?Z@}n(U`(6IaZdmnlZsCRzb3kyY9LACW8vVymzSs+VcfNvvwBmZLV4A7C+$~ zH8X3V$pX-h~DAniES1Ky|?&@z&)^%1{CJm};KDMcoU<7szNd z2uh1(Q-VLhTjwd8js&e2zXs0 z_Y&Ds%jhtaSwyyC?3Z8l<-IqWdAz3cWZup%7rQ(zMg@bjZx9*Z4zyKeRx6*T=dRLQ zgS=d=nyd6-t)lgK2BpiZBGaGF4~SzIg6kghb*_tyS-vz?b_5#`_n8_eds(%Zel9S} zC{&yd!Vo2X3x814_uxHaTe^aAuOo z7*wD%8bgG0?#}FibB=WV0>_@X{wp=zeoG2i+rv=zsM#9#P_htyM?$ zyj)*BJ_2kJu%(ge!o!DueE}@0-9pq#r;&%{D31gms zk#~wIaLLLf7b(~hbVox=uYlZ>!{=9A@)sZbF;!8K(C|&$Rz}R;87sGSqd#t0$*^h- zpb_Uoa`!WgXX+&j&$(!T(t(}cDUp!dAs-8%tM03J=rDtBG}Rn> z7Y49xsuuvftgQ8g;r!S5xKjii&|ePng@oo-;b^#Un3BH8xrL8xzZwpy4fVQQexHH% zJ=)|D_fDmF7pZ2W*jt}Dk>v9*O-F9?c7>RBMgVvo*$<{%Eq!>xLU?@*dJcJ2YM`pP zMx7KZbJ4O{u-Yol&&+hBhZJh53de8IpY?e9B?Os3X9Y=kn>{>AHu~yLepSfV-WPIJ zW%yFNsfX#Bkc!d>%EsvR=w-%tovc2t z55>SHpt{49LlwAlxufKhM0roy$Y=QxaPT1=lC;lhg?v%XLM-OyNew~E*E&nR_HYS# zx9TM&L?_s!Sh%jQ4=DMrhNrt36R6?is(8*L!hHe zih8p#s9U!R`YqS{(e3deMoXXh0OgK{z+u**BbRgR*g-o4IAiaC!rroY5f!0eHRT7C zP)7Jg#o4*p*-4$$zHAZ{W~)ILa7>@QaDL4nN>M;BLJqpiJJg5x>Z{$?5I&rAN`j8$JCY z2k$cbAs5VtW*Np^@Nw?J=l&|}&Fus(@EhVl$_0s(eATkMH=?jylsW;whFm*gKvBy9 zEXp=|TpVWTK1+{jWl@d|>AKHKYEBx8oQaLSvdrgQziSSaw_TP4k~VxSUt0z&B0jf< zz39s7c$W-K_~j~o_j4h4W;@p!ft<)77Rx&LZ|g#jVnSV4m^29d9tUa=Dxq&ASt!x$FeWRiQxAiIb#1{ z!KOqNDk|)kn*MmXjvj{l7B1Hau;v^w=Y8x8_L3*k$rro*l}A&~X|UraISq=>Vn37l zbSj}vol`zdHa7d^OO`$fhnQ( zVsg^S*m*B(^Tw6^jI7UPZ2M+M-R)S>@%@>`&LdMG2?`T6bBvgs$_AKL6f$&QSiFB9 zqmCPDRD*AM%BiI=Q~rueTnJ66O%g%Do}-9aZf6DX~Bj(&MS&?X8Lhnx<*r zsYrzG^W;t}jmJEs3%@LAcNlcSdS2gWtclo7$=*#({k6Qh^YOTToP?A#K>umI*_LQ_ z2`DeF{(AQ)!q`RFVLXz|?{S-pwMu*xXNqG_C|*%|eN?SnUyoX%1b;rBaXbp?w9rnV zm!&fFY512c>C=ERu03Nya%!Ql9{QI|5y=KYhVC6yv}P7O#L`}94X z;GC7m$^S#sTSv9gec!{lySqz^yF)4N6!$*36aoQ?ySuwv zaVeVM?(UZ0Rwxbyij-eI-*>$$|72y&%AGlL=ghw6?7gp9MKbC0@+|y??nav<>E)Y` z45++(#9m`^ z(Es_?i5r+2$0WdGAOKg4;(Z%_9)U@^34t_mnW;N^1qFQ~2^q9p-SNMhd3t(+Q6k{C z4*%4Mdv&^~na6SLKEM9G`@i86X~a42&ig#FB3AxFRaZC-eEs}fzv1HIBD%Y# zB6Q}gV7K@3$?;Haq@>`>sUl+Y&U27=UHspbQv77hUR3bEXOEh?u5{ zT*DLw1`Vd46*Dq2&>W&4DF^T!Yz2a+cnP``fMjb3Pd|Q1TD5Pvwy?K7j(25A1%jy&v}12je>f-4CQ+Jnmz$SCd^AP$Rs~6?B+Dzwko6m$ zG5kI>5|OT{sX044gIOz^M-4?FTnSU&ZJg=jjh6~AG9n6~6=JB0R?AXJnjvO+J2-q4 zletFf_HMBn!vV_Of>3}Na)Z1!=)&S?9id^-j#U`_Ie#xGI_==V+&kUR&k+ezb8n*0 zGEh?L7Xoo@q5sx<_g_`_X0E_N?moW1>X8A4)LUCy{olIpiK(bwmx}(~qkeiC2xCCU zp4P{P2ED&w5-DfM$Fzj7W72rJ)K`ohAP&- z#tlx;n__M@wz~e*($&46dw-pqt?1+`qNd(rz~!@;myn(lAQL7y8d#Orao0y=E7rF` zcAjJM-iGuBz8=sr9`aFHHg;}>JOAAG^qh-f)sXnpwf~9L^PKzalYywAS5-9&U#;6w z*3A2p?M$DX-rLz-*rz#@%*Bk7u(ixgL6o7=UzRp0T=oYgm^95FI4_D`4_PUNo#lo# z+A;n|BOLnMvm0_1pqO&mwNtWOmU9(!BED1E{{~ksu?e!DmZdQ4{(iCf$8oK<{rjmU zZd=vb^!}epwmCUY`GtK+`4gP($8-WNBxm+E-W_|xE$>qJ%8*GVFF0YewhZP@t4{FVs#o)obxU~IFx^6Mz#y6;_g70Pi$E>c&T9c0U)8AJm zPNSi481JC4&MONPZlZz1NN~8U@S}%gk(MtpI4I?Pr*9G?;4thNb*C!usouTssmfBe z(7`Hj=eh3RPJr)C&_gSyZ~gN7wc{trf3%Z?QHyH_q~w|MiroBUgUw<_4yr2axqv9o zUTdCLk%pkU)0O|a+k-wCY1nV=P4-t7!4WY^zK+YFY(90O?rp(s!`NK#QZ1dNP+aI+ zFO4>L`}@lWhSQfvRXD%*$IBt8?fJ`xvu$pZvz<4Zx_jiEzAHbG10`aFf4-c*_8t(m z*>^GmK0Gej&ffAMR3D9T!YWx3);j~BD0%q@;!Z{&wwXq`KSV0wU{09(&udcKh^UWpd94!&y z^ZQh5wA`sbsB6+PphF6d?qOo72ZS?T`W5B8oiub`%zon)91Wl@g<($UOJglyjfWSb zG~3Q#Y`1PLl*SnbFl>Vpy-V$OYLl!A0h~QT z^WGIGn2~A%z2m4q=wM_@GoUB0Tek(mdFW&CXW_4R`ch@OpTPzf7gfjgeWJI=kNVVD ze>*Ss45t2l{PAHoZ1Tj5;{77wt}jv5IFqEW^S14i{@b5~XM3M#)js6w6b^_@vtc}P zQ}9VTi5td>%bjrDTv2v*g+75r-oHAeSl5to4l&0Fty^tqK5(yBH_#db1@T-_Y#wVUG(`aPSoSK?Q*HN3Z%I^lQriv3SsKTvD~?z3vZGPOGx z)y9wef1`KZ9gDbe0)8GHs1Bu~=6we9GLM@l`!nv&qoz;QDD>7tAEszsSlScDQiOkI z!Gkf?7~2CraKFaF@p^F6x(;nemW4eF9V*5VeR6fig6SwV_jw)OUlc8ka{glT@PW;lv0>0|#ZSr} z`XJ+DX#eMV?QAE;-v9m2=;P4Y4tD)^D$VTOevFJI`;Ht;V!no_fkYh3O|^MhD+d7Lucp!X^HQ(#U1$$nVfnH%Gq0jivru-xsFT0R_Igb9n20L8Q) z$PWw4UF!4W(9PRt;(>{fB*Jj8Ew83nM=l;u<%9?3;WwEgRqam`hBGEf+`(B_8>EHA z?H6~u=a#5s*x0lIo1mABd*Rsv@u*^kG|!=JxNuiwE6SPuShzVMPo(Xa)Kr2~ zQ=jY4-MoCKFHEM{ACv8nd4&b8Epu0Fr%W_y#F~e{qH!ep5;r&v3)#3kyiO`(lnnRP zTTBX0TJBM7ZRll_{PB~)J_2ZP(5@Xk`E;kc|u=Dg)ul$xwt0~hJ(M06z*X_sfD=9u;) zFNasGL5+KI_s4PKps$;MPRqAwDG66;lLB4lSVZ#SyU+F4JT$Su%&ZeLdBMKJ4a1ka z&Y?c_6FKrrhgU9BsrzeSfqqklIjMHW)5%nQZkwQju`c zb-O<;*C@{iNpBbE53{0sKWq@QQ%McMi=BE!cFD_!T)Vsw#M4Up5~Wm_yZzVepX1Z9 z(FMKS6$;fKI7DIVM9~&j4FU6pj71`tA`LBM;ddMk%kg@BW8uvO5F%!E=r@j+)kctKi(HX>u zs*u_F+Z_|{B6kHdz=0wI3d1_Pr!&5*3}ZOH=|%kzp(mn= ziOR0mT4jviu}RE=w4Vl<>>h;B9^c2~)U3(AGbP&gaa-(~LP@(v!aOBU8{p7tUTfG5({{9mBRj*G6NiY^O zFe*-z8%At4T?i&=C3mhZ9^Dv`hdp5Of7M7F1NL>i+Ep6A!Fjn3iLJnjo_j*FS4Pb? zadeHuc#S$}261BrXc9PcqRtqNNY}Ek)zSYN)YGom{Rz_~I>B*yeb~Pc+h;QW!Z}+p ze73@Fv0doZU|AN@sVpoMZ2obBVlU~3=E8=q9yi_un%~ZVcU2ypYk~ zo{Nim>V%*NrU2+a8;L=_qzjVKc0x%EkUoqG&?a_6o|xC(6Z9Uq4#5KdWryA&fs6bu zMLC_rs>M-5VY}YepVB`JN~#}3pOJI`_dt^a7UZR>F7azu7_po(_BNT%Ufc$|p!W)6 z(eT@Uu-DB$2(d+u7nf;U&jm_MKsa8pa_u=ax{AGYHH z#sj7k3p@^lRO=TpR!1(3CzzXS1}!OFv_t-8(qu1Y!V_HNKTViebhjv^Rux%qkc7v# zs6*S+!R*r~$7SpENe*!B7bjrYE_i=+m~Ouoz2S1--h7(0yGmO}P9OAbrL{;TVsZC6Ee|?P-XQ+Btx{l(LD7*wyA|&B_2^ zpO{zpX!vRnRa&`gU%3AoXH!1+=xfSRN*6nKiZ{1Gf$yx(duVng1>OS)m)0Am*xVNq z?l2>Rd@pnwocsu)Y)e@d!qH>^-I!}}#739-o%=_>*MzBCZ&hI;fwPJ_EM6WKKN~MB zX!7Y3D$_V|nG(zR)Aun6fdnagFC#Ezg#bHp4VXxGted?oGO$O{USQX+eMahRAn@fQOOdni*>Q zvXApTV@9rqaY64cqyrtkXngeAeFK<%QdS-4?HN03#KKnXecVdmUqSDk?{``aCPB)# z*gQ|t3=MD<@^-nd-jS&$t|qkeXSJf+#$D6u&?Rn*n%+Qi#{~!3KMk?$dj1_i3$rjw z=>CrIa#^t(5N7d)P7aDfau(NV+lA3}exS6{70aL(>M^9RQtwgt{Gtqd*pl%8^gZmK zYU>OF`l5nT0-14EMb9<1pJ4e zv6Yoie*Izw`KfL0E3mnIe;(iT)D-lx7W4)#l4L6{l6-ETqMmm=b``i;8f#t2zxlHX zcjby@tyEi#t++^!ko`srTtS7-N%aLDAw6nV)jdryq&tp z!S6?5L5EG0Jej_Ke}0;2(n~@Ev9jyCb={#{pW3(0y(!zxn%;k+47n_x#ha1Nb@#~) zUL4EPqsTtJ4gkW@O+ijM|KJIsf9v7Zu+(tZDrrSyvx4gC5qcmN)g+AxBZ<&ftJQ zp?iDaB))ghIV*2@UF2Jj^}k&ZSXx|wfsbK*MC-v@OHSANgM)woAK&0X!W;yJSCVA} z;G$k)RPxM@UV@^A=f~q*2WN-fnHB9g)dLIj{d995pkW; z_U2};Iw4veQgUtX^^yfMgE7`QDT;uQq{U+<+LOZyv)H)3E~ks%mhaa-fw}a?zu+ z(oh}jcF%0+3{mWqFb=rrc6>!rfU67QRK7H6dns|ycf3efT2b!-(jGVZw46EoLkZQoZK$Wwx@G13W=rPQn6vel zi&Zc;o9L?L?sGC>jmG)Iij-AdbsaVZ>$nj$SMebyK+XoCnjpb{QPkVf3TCg7#!H#r^ zMi5Pb%@w97d>nW?9VJxQeEA2+tm?S1cljju3Na(q=)OVn;c(!2eZ_4K^0OaLZ}I7s z$ol?F$0yLSW=RtXZ`G0@U}NQ}$jV5@p4#@2kwlS$uOpspCYoTy1Rps}nUVXz6X;eR zvr0Lgh>oM~B$J&c@;AEWzn+RnKhz1~hX9+Hkdm0K`!3%pb9p)YTRH`srW_NUFvc`- z&UO@Yq^)Xeq;F7tY>^Jo9A7+ro=ybeh}L`BF^_V-xsZipC0-*1cp{o09tpu{iwh_^ z+Qg3onQn`blXe9%raE$FT1dM(ev`Abp{=tQyD4ShkI&rZUzSSZGmhjxl+7`81YsAs zo->Pd#D}kcR@bp%t0`7*$x*MpX&#Oa=M&=u9JEc~$6g9meM7Es6|ZT{%ST<^8zmE{ zA#1U^DjYu@EJq|HN6!-7`}I|;k(WWzb0;6WAAd?16!s68|M zj<*D8(PIfm8B5=YCS{1VK|~Cj!`f7s+(%fstx|-Qll{x3(583>n0oPwsXoOMu^##jEGQLg3%*iNjegMV{bh`c6XW%SKt*eRPZvXPCtH~Al zSi=U~@ahmnaLx=~UWstCFLiRxQVvX)^u@8oV@z5G7EW!G0kz^$An?QAm>GT}*B6pp zH9ISF9+uSdNXjXZcETEQKCv4Dr8(CgArm80o*X~W-eGiqdo%qaQ6A57D9Ed_x_t2B zSGQDN2a&!ciYAmLmiPC?!PbrLuL%nG{x4hu=o5jN;w=7&lNiPWHiCy3i`@8a|KW?& zr&=0GM1`wT3QRkZw@h$1o0p;?&30P7t&Zib1Tae5X%F52REj*8FHuEm*d&zP)|v6rjv3_j_?O&-Ao788W0{ ziHyvG0~zJd?x7yTX0;qTR7}~gbIv38{Av6Z#l*HB?{jW+k2U|Xa$#z8)d#~BUv>QU z3V=40Wou=QkFT2u7A;0)5ZGN3?CU*8A^<5;8PCToCcQ3S$pvbj+?FHoFecjx0US{(hzb@M+nu7P)qMINHY_P&yo_VTT4Nu;t?gMUsFv2Qun z>TB)v1tR6>$NoeauX7ds{5_7fUf!;D%BPYhC+Xy-nU*V8+TkdWL7bNt9y?65{1HxX zoD*nLj+eReZqFdl)YFo_Eyso%;qF^=J8MF~+@gZWC6&9oq#T6dV<#*_IOz* z>{@am{s|mv9Zj=8@)E{sHB+O%G1V6SC-kYs6mOsL=u}hxzn?Mu8vZAjzfm`=UQmP3 z{I~A;AAf$Pi>rVEs}P7W6xJdC4!>5z0EHQDRtJn8HifZKW(be>2+XjOX};YtkegfHs`AVGeZZ+n3os7Hd~&aNrV>|8t{*b&2ayL?Xo*dE9!g zobQWNpHX0_HzJcep801UoqHvsh09!lm7uC3+c|*Lw%gIqZ>~_%*nib6JjgFo4 z$ZM4Y#vO9zK+CT-C&e85YtXOIM6nQI@5{1HVkfjLvGEql|Ela| zNz$Mfm9B-#4_7~Y?hcQ4`8JMv9-?h%4(NNNE3TCoHhTHJA=1E>4Xf~Iqcv|PZGAt9 zyif54>V9LxUSY(f7mEJcsNa$O8flxJks*j}G!9NX zAE6DYo)yKr7u-RVNfj^vtarduZkI^^3a_Vm8wQd07c8MHM_T35d~RnvODr z;TuyfWJO(MoPQ0+1X*t8;0p~X9B|s#-W#8P4!%jjIsQn{v4yEFXXgLtOkGEx;;{_# zrEs~x|7Iw~rM-^i?4nq%&#;d0JPHydHb^GN`o)&y;Q4R1=7~w_S}I2TAHa?u9tUsO zu{@+KIyxL;U6a9oe39c$t?JTI;?F!T^b40%fQf2fK@Xw?PjF=Ivar9PKf&j zgUEqCMw-22__yM{jfEd|#g`9K9(IIkeX)FKK(YN8o0b?VwNE~Z{Y|bte+2QA?9dR& z9cC(5JK`aW%gh7SlS9ir`v5wGdE$sFvNIg_D^y#eF3tLKLl0z{6FOEMrqNKDaR~T1B436xa&hC_zhL5Ka|H2Qxa0f0uh@;-{GR@SGzI zfpC5OyTsY~@(9-^+_6Yy(R4X6i5!NG(~j*Y-a5!J@@2-Jnsq@?Z@}2cUdpF8f}kuS zLMPK`-|N!8pFNPEnJ@H^H6?&$mhl*X2Eg7q$xr=d|h?k>nx zH0(7J>ZK)c%R{wncrq(wNWq5LI5c9c(8bYQO8|Bd+3(jqlW#Jb$(|YR<3#A3yrY_9 zw$r3q^Vw&0{X>xTo346O8<<{VbTq^kc+!c|eM3{MQ!r0ft)c3H$x=IL1xNUKF_Z{j ze}zm1A4Pv}TPGvUez>N%vDL0?p}v8~<+g=2@qa6;ZfYLkPr2E`mBT&TT03u-$6p;+ z!Oum^uBIor&T&cU0l$%M54Yi3<*5ub*_JCIp+kp-W3GSTp(L)R0nZ#a`?GtWnfx~! zwit6C+hGTB)1-*53FOHzB-UOoDX+~j!+!I3fcZoO|6kEz74C~G&l9XPvAn!2AS7f7 z|2_DtfkD;;(}*kJ<2v}!a4R`Kyhrkc>&CLba51g3Ilt%^kzBNiG<+0qae-XfPF7GjWm>}qT#5|^V?z)qTi9Qgkk2%N8 z@P7GV`6=U%t!!ES3^8XO!jDjnk=zj9?e3SBxkW(!Z-TMaboj3Zy5^W`K)xa5 z)7yqsl9r>1g-aH#ZTr^43T9-~j+F1krr>Z=#v4;b`buM8)-)k>^Z@bgU~fUB;TMBY zP;_L#{FOS;t_6ihndmqvcUglTHei`z8bej7e3S&ATS};=a))%z!h9W{g}4BtO@@Dm z>D}*yC#EFHhhLf@+erjn5N8+F_5h2MD=ba9lUkrSI?Q0vqi`2=Os9l3H|i??ohJOK znt3WZ`tXGU$W24HZw9d^Gk^{AC*9nzc5_niJotBXQ*6FjxcY8q=`SEpfU(I{9}XA zDoD6(Kz_Lgiat0yzA@NmuP?O*_UrM{myf&QuhPyD;LE2fB4(;B+MbiMro-GaUH5lv zV{##h4-c}#eOn%T!<3rIW2q=ZbMJI7;HXG7(Y%u>cjXK9hVMWL;xWN=r2aZ}B2A_O zwdaohhu9*yVONjGc|s?TWIaA_atpR$B2m;{gn8<}-KeM_*~mB%g6-?H4+XAIm$onl zaPF0JXMBCVSw(M1NXWpzz~2X&;+B)t!q@|f&l;MPaR=XQn=YwwJI7}NVK=|y2kas) zLr^{0;K?6R}XK zuvrP7m9$LB(Y`7`HyzVyaVCbrvI-EV~-6-jLNp?S0opEaOQWFhUVwz z)*`L+%Rzb_;%kiG{m~xwr85&G{s0ocO50szd4=d?C*G;)K7mg*;QMN~{uooO{k3uF zih-o{Y7*?ZrTjjnJ^kV$DDg%glS_d;-TA0|`KPr*vBfjBswMY8XbB5<)V1IwkiZKF zS$TmhrX&e$*7;~K#5LOI-&>7WE7wd216ufpvHbpN~LdEe7bOpsNwQ zBIf$g!^Co3+>xTOJ5CZOy0YPQR#JT+o6h+ro;-O(zh;H&PJMBBOHS(md#M!65GXj+1Oxo+Iq-FG*(Ob$cE7`=bzgtci*WD z1QpPs`i|B&maHy-h|CA$Uyr9f6ZrTEB)@^&rSa=^J>}B3yW`8w6oY`OkBlNbt)rHX zDp-l*JOuETpIEUVzVJKEdqi5i_Lmo)bWe z^*mm(CQj{%azH=I)z%KMSN^Pn?;2UYv4hO4<*2TpRiK-n2`4#~-sf3rc7!FPs?$Ql zRhza@{^%(LP5g;^AxB1GM;SuL`k~=j*6Gh11m8PLu4XE*(a4Ez@f5xx$>N_tU1 zr%oA=fd$tXbs~dD1Rv=+R*8e(BnGMH0$Zcv0BnTXV&x6?7x9vZmcd}>3k-G!5>%pc zFhHCH6;doMDH4`hP*GU1Hb*TS4j(oZ*a#624}1ao)`X5T$D7OXtMpbz^&^|9$)=7a z$7!w0p%uRRV89Qo6+}YzD2|Ipa9Jk+G>OEwH;YyJ;SyE`;Aad)No^zlY@Js{_AOdK zSYTH}qJMsvC9i`4{;r~}4)Sd_PL;aVa|{W^*I{#4=Mhabf(^*tF@Y7${3Kzjvd-gJ zuRw-A(Kr;v9(+(fl%0@r@9D+^Pf!vQh6UD1ICs`!CNEfvdK+}YQLkz>GGRbu1j_%K zuCPnphiwP*N$BpnaRi$18$qzoq^eD3kcj|R77T{2Z+=T-3_X|x+6CiJR$7>wY83&V z)Ohg8SW%MHejI32=zOhaVxuKZ95zS8_3{5pfIEhGh!UcP=4Y}R{${|NL8Z(W!uvZp zx`-(ZS|T4jo*3;!PqHZDG2?OYtigdawOd>+%*)U~xZGII&rPv-i(XYdi$yujeaspY zJR&&z%46N&S)pj_W!$OC-szV&89!7|PTXS~duIKCVFn$$Jq$9;5e_dJA4Zu20r2AD z+7EWlWYsaGa^ zKIdAdN3aR2arKV4NRAmoDIeQ}#{jhY7s;{M^#)l~t+F*z1B!s^=9uyT&}4;!JUar1 zjtB`z>FntnMyJQCFbSk4%b$jm5Me9J%C9*t9Y*uaX`FxanktaW@PWBkj<5%H$~W|N zxsGkGZXc>Baxe^83NFT|1e1EU#X}x2dzh5ZfzY}Y^XGyyWE*DE0G~nrbpu`8dY&O{ z8cg^)Q(K1}%?nQxsWwIP*aLycn-D)O0kQ$(%;~^t;T!%titETCByU6=lB!U@f9tPO zUq*E;Sw6V>p;TbMGU@Z7BUXFl&Rzg~$QHdr3BLh^+{E$7GO&Y?Z_+*h^T-Zw$0vHT z9ZPpb>Zn6{5_I5CkQZ|-+_;sMoA*$J4tSuEuIVc0LE5T2l?vcEEQ?w*JGJhorlcUbep+nEEsEUPHM<-gmJ z8~Bf#8Ci?T6N#jGSYje1XP5}*l#W|EeXZFv;F*3mZcM&HTsIndo$P0Ag$RO_=>{I~ zZ+#-?jozzLeip7 zgTl(-h!S)2O%Qh|WDw{V@BOzuSPe-r!*l48Ot>w#j%1&;8lJ#pH;ZOgM64_|Sr}#4gzv?zTUBF9APt^l-0Jk!l^Z_liU(S*W~#pNg$z>qf{$^#Me2XU>9b zx11VRwqZ$q^IgOShMAD%ev@oTI(PZUU}}7}LQCIhoV3JR?fzC>1$x6) z4*cn>x00cdeeuVxqSoF`1Zk6D*FP&^zi-|MTus~X>Ze>2APf!ZV|K?94tOxe@sj5S zO;cYQlTNZCXQgK6NzCQ2vo?0)N2dLD4VbmSSsBcV>VKaWeZ*Uvol|ZFsh$0HE+S=n z^F+tp6h#`Xi-Dwq9}yV6MMXsnisKQJmU`rzdJmyzn}Hb!OBD+o6p9`*c*hcm;(~fT z@M#76ZKgasK*}o@O+U|=SlIu{Ark$9L%YWvmwt!yYj`Jf?#k54XwGy{4D8o;*%eY4 zK@mFP-TaHw81UWw7G^yN+>^1gvV!^9+Su3_85wD5Ex@!9?=_s|00R`125T1>17n~Q z)$(8MAS2_@kb!!MSo6?nji;R6N#e8TmKTrqZu5JWi7xu{9`;aUuetfz2fQucpe#qjSl#p<- z-DC3TuzPON8CWD|<3dVG3fWVw=wCKCz5T&ke3Y`Tx7TIz+2~sV-1=<=y2(p}&2xfx zbQgW#S_R%?zy6YyHw8M8FRyTBI;{2XhuBfbIZJW3lNeBM*VQ61Vc8-waB*}p=5*j8 zF4%(}c_LVh3~z@gObdiur9{y_FAPmedQ@OD2ho3%tn++gN0v}^#La1O*kf^i-~Eew z!s-0!5$euo3<(-oHu(6N6McYSlf?-%ipKzc{X&hd5PIcUt38;qV>Hn$1WCYv^RqUV z{5wffGRF3}U~5o7PS$0pyNsLG4M+k#H$S-_Q??n&XE~HN`P(+VC}x^5m#`;Kd;D0< zaU9a?istRBKi`yIn&8h;dL@7u{`U0cH0u562ZuP^X5-{!S!yS2v$)-4q-W6-;CEV_ zj~sTswgSb*%(|kfibQyb2v z+h7PQ%wpof3bqpX^E>P5;=|Rgq#tFCP7YKf0T8Y2_hP(J(xb>`5sITv0C7XKRNU+| zuS2=0Y2IjXiCXFO$J|dfo7o~EX#Qql4UhK|j%H79cuczuS>dUMLKkE-#|%I>YBM#F zv^S9aJVB`r84`x)@9Vk$GZ^tt6xhA)yC@vN5v7^y{lfr1O)BO|*>e?txOX9)oIGcl zQB+eXgv@2i^yrFK^_4!6gl{VjQ&|NS=ksk0=x0+HG#^K$GZ>T5*SPmoq(R);OP|vK zEt$*r&Y~%*fBN4$M4a?zRfELNT4&JbpIwVSzwW=Ub`t)l>+3vLwQD`2^5=VJRmfO<}UKa z354HC=|RO8F8ZZfFxAN{k;9EdIu9@Jt%3#KZazn9)JXVm&HY)D{EN>Pu0$Lz<3t zH!M0xRF;_s>B>;qLB2d6bR~Xx7E+^cN_?&a6$@&|Ns;JpHTSttY^eig%(dS#uHu=k z7u8F))8?B(OJMar!|`(_K?g#0%*Uc0)3yQYT+_`(pM%ka%gfqYOSKkv4Pj~(!JKW% z3~1!NMm`8vN!96u}3CV zH|F;e|HvbWOkQ5x6QyS%a4C|jpFT;H8uw2QS!ppm24W^i{s22>*?&+$RBW@**@k+VN-D0B9R>?LC#;HiQH3}wyo|-u+bav3>dwrIQXqr zk)voV3Wo3(@r?w1-?xRNRI2foWk6~sx3ZeCKk_@fhh6|sQ=A8grm?6m8CVBqEmfOP z-0~pGT<5lDEhDyN_Ud{HBvzg)(jkTs6Vn>|?<}k%v0|a;Oez#i1}Y%y(4l{`XWi#p zSr#3cP^fhR5tNe+p!iF)L$6xTI{a@YhlCpO&xt}ukIZDwDBNyiKJ!?YqZr}RWve*jpA@8X*72C1{1P4c4NZp&Y467*POSVrg8uj_0Y)aVu!~vCr11hvit)Q z6jhXdW)Fk@wY%rO0VYjp#b@!p3?D^p z@~L@FdXxjp74M%lP$X+a-ZJ@7bDW6vE_1sG(BG zW3{m{j4IhT-2TI4VVn0Jz0iGZhB5BprX#{Tf1_8|7;~!Y3pi(-@vl|5w20}4^wOsk zCsy**?}zvk%F`jc!1n)MSFUZGkAE;$^BIDrS2HaOB#3T|^kUE8u&?XxyXrfUE zg}*if$z_4!ndcBFuZOtw&ao!}ma356@%T_Gi_Y2cfpAXkgev(66o+*PKGLL4NTk9) za&n+FhmD4fB-VFlBSS5{CP_Qp`YA5`)t(ERyOVc-F}!6{dwk;K3evb^9a0`6IpQfc zW0i8}_tzgQmJzI>1aL_9*k#>n+MFW59;Q0b*(XqXs=K(oyftmq7j>TnUHm$1FTfUd zV@2UmzoZ&`pc9`py|{uSpH0}X6B=J52Z_k%BX>Hm&8`m4VEgDh{s4e44N0U?a{3<= zbvD}8_QuxI(ojdje*+i&i9D7`96Ux<4P|Z@(SR!Z^?4?^FUU4b0b=QtBhNyVDOkxv zL>RgK{WA*mtgdE8AQ$&q3|j=ZN>>P#>_H-5G5MCoZ`&A!*k0;>Co!}+fb$Ls6sPl3 z>EXPky0S+_Wo2b#5PEbfKmH6BJ^TP*1%sN7+O~QW3lAfnK6(mA=q#9yFDbbbmS#9& zu@##S1*YUY;h`*d?bGhefyF^La)PiskR!XU3@fMgYVUQ%p(W9vlhNa;tW`8>)ww9n z9hJtJcU$jma<@~v{r7RGMHLART`mX7c6y$Buy}M1>);+Awy(

cNw;@aUB(ibk9kli7h{57SVIi{3;45IZvxZpGEWbL z$@4yqiyJR1k`h2^D8LpprzhItD*oEFOUYGLD_-@(WKK$~2&Mla1O(BwzjG0(AUp^j znQ^(%Bt05?G%)r(D98rNgto}vW{@q1Gn|h=jEQQfIz;u+~LtWh&g+*fp@ z_7obC=9Qm!K~0z;E8gm(Tm!)C-Fa`f#8-t0gP&i0^mg>ysplon9b>253eXc@^^?|q zr(Gu7Hi-C1b!r`99P!i>_)SnrZBMR*4MvL7RInZjL!CHYuho(&Yr{aEj~)fq-+ZJw z(H~xEevTbwc$1XN-GFJ)yWju4v`;D_=@ViQMad#DV1O=xW=cRmdnk^Va%Q?&nklQR z34FKIj=bGqERJ%`Y%^12zXOptK6cUjXlxRuviUMuxS)FxmkLnD3b6`R3gaZO?vK0lzg@U? zbQdQ2D~6WgQ6pyJ8SUU~NK%bhb17r8O?_Qw|3gwU>f&jbkL?Q#GN^+dpbw@%8;n$^bI4#TPnwfGCYqS)QY`K z&W+Unnl?J)lx9W$VEhWJ^TA#{oQ~(WPoPC!Yv-s-8fEr%@#1A;SPt&jI#2WeK@YS$ ziE^ly($q5oXpU{faT$0R!S<2HW9!cLtqgPgGtedyE4dx_O<5&o-{lhl9<-NFY3=Hf zSyt-cK4dh@G%%&P=1R$|{JN4DaU{04M?ok5{@IgcE^LQ*-rY1p<7Lv)US}Rm&6&C! zZ10Dj?g_=mSp+)-$JB}$yM99-a7>XM7+5 z!0BcaB?m^l1`O}e3&Ld}D0X~d_3XybpSH9h4nVAdlBc&>GAgH~j2eTxI8cCN-WFSf zyLbt=+!Ku7gNeXh(%)ixCJOyER{HNx>Ep{ z6k;@d$LOK`49XAyCTm||{=Tj9R;mwbA=LRa2ZRN}gRof7e)mWqi+mlTWYq{Gm0@MV zgL&9?YMYYMk&51us>jB(AG@;7G*MTgs?@2+ylu^DSt!7+EpXM7jMtq+j8THSDShvG z_#F41Ewu$0hbEBR6>~;ILYje8Oz%VF#)c*N&IoOpDVd)DLG>yk0A1)}h{$vI`nMT` zL303kG9%y(5Hk(m`h)o8JDrxULYVhPl_P6s{$;=7>80_^FDv^93*2xmsi^Z1V&Wk?OY8O)k2Asj&3n^>ln$q1E*HkHA*ZKj4nuifCEloq7`i3Qq|s?S%VGwnW@Br> zo*=PI&rR?P3mQHLyQ$jY<3{e2{w-u`Qf1ac#| zH%($5>@`Ff4?>Ty7lrz_kgGw__4Rp7->_`b;%9BP;U#tw%3F}>NN&ALLuBv{4GwPO zZ@#f_N*g~#uZ%KtO{;y($gi?Lzk{xjukgwv<1pG@?x-wEy$8Fbv zpt${qOw*h;ofI`E>4_Eh#=q{4o46!2T)y|ufF_!a1&>yHO9cwPO!dPg&o;h{pWfJX zt_X%B#jUHi@Jpl3ykif}MvWoF5nSKUm`jO6aAx zBeM4E+WT@z;pE7WU=aQ*lZk!pH8EiQrKt9gAX1*Vv^rX~X#As0dhH@Wg2wSM^R%To zi7X!2bf?G2l3Yy1A|4jIEhB92^~Ba*PT5TaweU5OYY{454DqthfUKF&5McLr^{^w# zrBA=|)XM#tJdv>+X7>Bj`BwI{e}G!H`UN#rWJK{m)De$0e4FoK1ltU(oWYgQ&2`{Ei)=> z1C+I%cn!BSd+5E^|8>tzm3nC8#r0;edhOzLouqD0pf=mR&EV9s33>JW`q8&hQOwCK zO5%h`oln~mc$ebDi+I{)R5;MH>y+d1w+{;)N=IETdepXq0Mi+9{?9LP%!$5+icW>k z5-bZPVF?|-wj1<(d)P;ZS*7&7XOWOe&7N;|4FDOHLNu7oA7w{%xcR^}9-;jfMUnN+ zLh5^s8}IC~u``8{M8JK?rWob5mfrb|nppU}-SfUl|KwXzQ2B$nRLWjeDi*H(2BR*$ zFU~i9>>B}voz1rd3ZGBG-p92Wn3|;Vr?LBAj=Os_k2Faj+pou_{l!hzH<^6gT!c!O zub3pmXEJgHr?vG1DQx1&|bW^i!uIQ05^78V4xRp;PdO5#CZ z#|?2&R=gEo+~^L8NwbEUD5jH{?vF$6OU3|>Mdfm9*|YtWZAAwu;viimydr!EuU;7T(7ADrcwn7ZO~Z#+DgxIWQ)+~V1Uq`0e`ebi3KG?poA(u z7nu9D$QnCM@~%?-J-r{9w%Oj6F4aNmbM*DrVLNy6d)?)&yQwf$Yo542U(niT^Tp`C zw`G*6v#Ej%Z&^3WNVK24JUea6}rbN=WWBnA{=U47}Cm^ubR?Z;&GzmECa9 zh!h>k1a-fC&dmDYZ`QSM1UAMJ;YtVeI4WRSP?LJc{io+LI}h_1L+8Hd6q32wqOrw7 zK760;KIgUgoNJjM9_hG&OJV&L)C9trT2C}^>$!#)Y2J{KA6q-hU{f=Ac82X8yz+fT ziC3haSoFQ|DwcGIc6M-=od2S<IdBVEE!3P5W096WaK0sF7@EnZ&}VV^yfl>lv|5nQAjSR6w_BR_ z)9?yIEVkr9s=;Q^S&yY%{_s!qgX?%>&NsQo=CCZ%rN0!%vlW>d*wN|7K2Y)ir88$& zS1c-7mbCZ6t%&;j`+GS#xnv^x1kApWO~3|k{WBuL6xoo5(7CzD@d zE+B~Pl`k?UfuGt0@SWncr5XpDDxx`oE*BI-G7K*m9Y(t`iXGKRcP)nA^Yah_oX4FiKv;DmK zs`7#@RLIOz0GC7`+sj&kR>BE}&ITswfwO|E;AeVU4(Q;KD zU%b5jW`7DL=TzrUAHcA+CC+%^n&!9tny8bNJ}OeSEcHdD7(*{j8BO)4LUZQi6}*W` zi`+?7ndH!b=z?0l0xub_S1D2&czvr2b=TaoY~%t*4EXBhX;Ml4`MrA zVLkt>M*J6EXUhvy&M|Xn`=6>bF;~;B@nhcr#M*Fxu4eD0mL~i_PzXH()GwHeAecca zAmll9+MJ9Inyk@T!YV$bvjYLN_jd37{xp`qwnkArrD!nwO_^^2DOMQjF60@fJ^sGX z->IJ~`e~0C+K2C}*0*Mp-qLWj(a-bz6LJeq+Txsiu!VScHAg8R0f9=dlrA2tGm4g= zl_Acnx^QyRfH<-M#Sz=pR=W0}^ohI)WU|%ZX{U_S1uFs}80x;@a@uXfWJgW)P{(rN z_|)o`mcU9vwpVfD7q0LH?wI54I|4%{1$94BFFA#C(1{r2vCG6465tAdw{;4dPa+%A zovl5-5r({^up~(<1q5RvpIALcMX=)6{ojQtXuZMomelg|g^M1V&B+LYpQT*ve+t|3 z=cNY{?)-+It9~aLuKxKM#+4kXxHnj-J(Z1Oy?If>mkNCRt_%XZd$ra<4v zOl32bp2p)R8ccK9W@Tkl_Vp7l;+KB3> zx6O`8<4G!Q0x`HOaU?ylH@F;cf>oL7DiVuIE}I{512MrEeJq?h=A=kATNWal2k%Ds zTQX7{YhoxtSs|CKVH(W{OrZy>GJ1I;4!h!5#G11GFroXTv!fg-+MX*xQ7TE)2nVH* zyP(uc7u_w8Pu|p#9MM>6=>z z!S(fGtbC66t@bUzP@Kx`{bF~;sj)=l1@kt&HcN7p#EJB|sOYk@t&UMe@N@*gP+%#I zf@6;SNk5vk5&_QvlVyiKv+k?Q3s*6RFR61T_E58@1^=~|udM-tX#TL=c2TS(P}rVt zuT#mBl~~AE2eS47H{gXMeKS3jGerHdvZ3&RqxZ0~(b6I4ZY6VNMTQ}0{MVlKX^oE! zjdIK_i%@{mN|>Q^qwjID=PB2fMg}`OwGYBn6pLxZmKQxFd8arEFwfG-xvwZ{ZqL{K z3GwUCw+*Csy?LtUb>{z6S4S;{qXpzK$8e%qcTJg2iQ1@PC3`QiUun86+}BierbB6h zTs~()Ev2<3!8dEqTDQd!yf!0yU!e4d!Y+Xu}?D-`3QOj-eAMIbcY^z{UiH+7rJYm#KM)D;jac=jfDGl4P6wWWH@-k8W9i@hzkK`>Z01lcsWnx?+ks7dwzS8T z!qw$gjH}Wpr&SQYaLoDgjRmuDBSD`jlt1PCsBBHL!M(AN1j)a!cW|!_X25Qk zhU|uDLQHDyJMqM9aWPGYVNv^2@VLLU>aEGgUppH?isKZ1t)pO1Z<#u%9GeUp(}UM_ z{gL!(vqDP!Q=N&?CDqS9Qpyps8kOCqwDHO8*8F=wX)!;F7Lc^Iafi$Kj6qM222eZ? zwJ1#Y{y}Hhf+%D9UoKJSv!X@;$s}hB59RKwFrSVn`dCqptFHZ zLQ76S1#O~3?Z5=BH1f+hG_gEnAn5NZ@YzLC^`bM;mcn$cGgboH&kNMUT&K&<7t}U9 zB1_nWP47Q=MnRZ_ztvbs=Zg8LNo}0P7(9+$mId>p@S>;~LK>RIkcpH}%3ue@WjXQQ zQ$C!N)mRAIHK{`q1zwpqwL_Ovw`P@jZ^9JimT)RNh7Fu-9vAkpsk<`bRB9q`YzNPq zxGw(n-d1U5K_d#3oal1;S<$86RoA7R=i1AT(x5*@x`iYrq-%&cl;{gVxkk;*TP_X3 zhB4rl>lYSvK{i|3|#&a!7`N~CJ;C&^>S+3d-<=0SmgbeEU_EI z;$pzFHL!IHUa(nT5&jHwu*QL8$yLoDP#uD3rgTfQ};NQ)wu|f zq^4Yc3QuK9WM*Adydsf4ZE3YB%X@%*8*`S9z1P+n(YOm@+@euq5A1X#?6H^zrcx>V z4ssY{6L!%!8bv)5igj?65`AW;qT}qANh{`^o|S6J*$YRn9~uSAOEXFyK4L>LX91^iD# zFrC+m7EU37cPu2W5 zXFp8ha$ak8$ZxB6T{$b>bGf)KHOlfb$ia{hg?f~L^4C@v5LqqtEaCR^_p;)7{8bli zA$3vMN$C6yT5w*3O+l4vm<~T^*vrpg7yT+OnRj&19(6|wp{O`S_QO7Gj@S?HE@<Ts=}w1&V-dKo3167~5il^DiT^#Pg#+t$HE+dk z+plq%xs&e(Wp&;Khg`KZZkZlk|pQbJY6l(}2-v<+$yZ z4!rEM5gcx>+m-PeTq_QDfaT#YeKEwI6_Hq1exLjwzgKi$(g2G@2tnptZ)K&;w=@TbRzG(0 z!O{;6o=zVBOBuL=Jo}eG3a1{$Crrv1VSb-^f1f4)(8yH%mu8QWm|lZ=wc`Xz`c9*9kk{1d_GX6o^*H zZ_us3Jeg7Y$y=v&FL~RjRm7yuQRK~mw zk{iL<9tU{*Y+uSvQR|ui$|rR(^JaB2mkNf>3l5%v-n{w|B4B|+rmpd^Ym@IN&3||D zoaBlhnTVBNxVR8AIjxf&7Y6i6A?2Wsz8n#qpx{iBx5iS{wVlrGCMLuOu+wN*2MI#u zS$&2bWdO$WlhiVmiW?gvzCh`@ZwEha`uX8I$)qsJ$;y5oITB^xJ;J(uyG=O~eZq#~ zE6DLZOdyHc=*%*!N#GzJGf~4_mQqUY;`BOOmbwsZIF~ODdI?$IcBY`s`u-M$3g*0i z^)-Ga%3~_HO9((5j5}yRW7sc|#(`MEa5e+$FrR?+jlbgK%cKUuCkSkK91?QW#xP+= zgRGVUC7Kdoe2QheK3vr$v_XydCbTWQ;>}TRplzL3urqGeV*cAh?V(zu>R~9&gyK$u zRu&>+^p2YTkZ*Q(XVKcel_oh2k*FRyQ;A*BNNiiIkDOHK5cTsG#ZT*C-D7HKK0ot_ zJ$l0vVFSI&eRv!;~_+EiTIv1LS349s8NZIfJMn#Vk| zD`XURA4J!@kdE!xSWxEqtlF?Gjg>{w&sYqD*EU^0CD;bmou)Y0>M{KNnJ2t9zo)Ux z+evamR+n>Ysg05i<76af_w10L+Vt zucn`Hr4W&Sfj}9oM;K3|ePwqS;)*FDsJmImnb{|0Nk1EZ)DiiD=p{lPa|1;w zgBSWfXyi(A3Q8IOiB1_dOx9c14y0?xevJE2rdhM!o5de>fsz!8jPp0RCOY z(T>i5j|iMqIwgse$&r~S_90irsKLA3xv!L%NYpc!_}q6i*aV2lt6PJsO(i4(ZRE`d zJiZ1tpU2(XGDmq)72>!l($Aa_c>=JT?8&+KiIf`Rqj&U7n=Wd^O8U-v@;SVkMJOk2 z!DQ)lGsU<`(tL!s-Z*W5tNmc!9adu>jIIK~EPgr~F2+(yhpV9qWmobO+F0WmfjR44 zk7vY`3&wYSG3Z3hmtT99J%+PiY2b7s@fD@f{ott~k@<}NA*F*3QpjpX z!%C4dZ~;C~U;`aY_4su|bvt;SQHszDo)G}rZ{+s*;j$^bFDs9Vv!k5!aVu$`8r!KO zQUXWebTV}}rNvZznpR`AU|0~>3O)Q)T;rk1QKAL;WTs&WM{x?WE0#tET%u}VSXR)` zBowstnNY8#=yaH2!ae*wozZeY3Tb2w7NULwA-h2JhSuDp*LK}~O_Okpi+AbVm>*at zl5+^BqL1nZ#tp8r+aXp_aTb4D@lnqOTVubZ5TyIy1G6;>_{A?9ATzlxcxoqoARIBJ zB%x|TOHS9edq}}zR-%C*aR6BQrtGU?7g77CJ_SnxV@v@@Wa{#Q<_^+NkZtRtG7E{Bq{y7gpk##N16x*ysia_a%&7j`8$!{>FMiwe$Q z>Gxr_7eIJvIo<6OJ6p@G8}U>&KGRaCywr`KvZiW>5IL((`gSnrg!0%*WEt*G_bJ3` zH6Wb#GO0}Nb3qeeh%Ay!d-Iuwi?tfBJW$Cw`~CJec3d*JX9bks0!Ojdh!B9hU2xy+ zth4bO)_}9g>2nAixzE{<;%)fsw@;!^gPp zF9R}WI0L!TySJiCG}}>;Ffc&)Nn80#ENc0?LND#xn#?BxXh*dK;-|n>L{%4cLPpL( z(Vg@_6#~1GgV1>ASLCOIHJ|832ID;A`{J|KRl3&o6gv8@VCjv9kyM|>R^@C^<12l2 zo$Q5URjqcW>UmxKS!uowPF7XAjncuAnu{wpL1{A-l=1E2psZ-wO1j=`6dcqj0J!NV z5DHtjdTcJHTfHX$y(gIE11WWbZawif=p_JufM$K*a(RE_qw3Doqf4hh;=~v?)q5C% zuncXjHc0FCC`HHP{P_pNyB=_9Nx36nwAPes-E1Nrpjg<8q6#JM`xOpnAEKTq&`BFt z82Pe~HPTw{yQ^`BR>Rc~NvJ?j&_0)O5{zePC)EGIrzC`2^pnd5hoM&ZDy4O)A$SM~$Dl78slvSbJIeF#28>DqLw>QZJAO_mBsO7gZL#*&LZF`(LX<%w4Z7Ek?sWq<2v>>@q-?loMSMB(!(TcHW8+!U{@YI;fNSje4DRDa~DYtcAZYD8Wvw*hA zXYB=RZJV~eTo^hEr?4TtnoY)#S)iEy@wv2iVLV18*lbG zRe7d8+Izpy`pT!;GOM6p>EyT|=dkrPtmvWCIZ4F7|hhUO(v z%IKv`J5-Y=jBe|)uqTY4-A#X=^^5sITOb0Zwz=*Ovu~!?)MiOqbgF|By)Rv-zf7hd zCNM6a#r|dClVTjucFffUUTR|x+nVtPh*#Qs{Ya9z85{Io=&T&PX3jeT)i_qn_9rl46DCL63Cb3g0a>ltI z>p$ehMYO|{^gcKNPJAQ5>#}~0%Qo1R5lN~m{%7fbMRvLB6P~(8q-xU{n@IS=;y`9H zR2!e(vKBm6+L-$Y7+ZoOM`SkvvOujAY+?2kEw^Gghm6w`q+b*DsmBK@58mT;74Szv zXB1^sRbm2O2G3Tmhv#M?FM4$&8OpQlbH@QD<@Z*rJh+ulgo*zq0LrQ(X@+J2bnusF z`K_1z^?{e`t3{JZw=1cOy2iv}7K#b9VKi1eNNP{Y)ADtaz82G1P%$E-NVBwOB`i6- zvvOH#*i63LBzh&hQ8bsIezii)&S>!c6rfSvflFsCx*|32;U9lGDn(61{hnbwV$q(SgNxUw9;&EKcsy*QpC~LITTHnC$0K; ztd^BIu=+I-6j^Xlsp@!~ zs4vJ-!1t$=^mg6pup6|fRJ8YM(9_IJ*?Q2}=PGTaEuFl(yL;u?M1A3H>`tR=IQ=aq zZqK(vM#u|`1c=cE#ANExXgT6iKmg{xihHCLXo+lTNisyKe5BD@)tpiq)8O)!Aw&TB zTk)Bq+urE^CF7jv{q7~FKrh5hWi=L87&8w6BMVo{%Npw#9=mt{Cn1FX{#z1EOHcrZ z{%-=weJ@TTaB}OixB0sD%3*i#IC_{*kC+g9$mqV2q^(xZ2Wq=31@nvYrd+pR)uU3= zA12a(Hd07(A(ZJP=sSbYYn}K@JHAPp8X7#Voo--J@vhdi67E3EFFtDrqx_RH&Gwj2 zGcmr2@$r8KCo{P1R_aXY)vLh1KWN|toQ$-zXRuhLIk@b~-29N`5v<+#&qPEbhRCID z9if@6ZXNvds;#A!o{^D}p8hL~BCrDeM-&0#)&Yu@tjZ~f2dtE9j(x%K{b|bgp}ww; z?XBz&kNXvg+}Q}YB0=21dKQqP{f7@N21p_(H~<~(&=bA&$ne_N#Q#!@bu)w%F0SU>zk^kW{bz| z!K-6_m~=1<8BM@UzpXEmxJDQ{6C}>6(ED}FxoaEU=Ooak@9R0(oJZ9Mbop5R;(F)U zmX}BR8wB=fK_hdA5BmcqK09E<@qntI5r4+Qs92N}Wp7=AEjNOiQ3}&RQsBOHy`0b= zfu6qL-JScr4f(Y{a;KLlN|J!@?d}?p&_!G*k@r!YLr{HajNjfiJaIHtP~@o9LcWsE z$$TmJ7aE-S+2MNrH4=>eNMHe(_1Y19Ue{WjwjPe>ifivTn`}X5Q`v+)e3ICd6!w>t zU;$(TG;$A))MDQBm`bn#md!o!r$aLn#sEPF8lmRlv7&GmkJpRw&B2xup0Bxw;M0>l zDs z9SV7MY;0`k$udB8v_yOZaC32qZo&asMF?*V!QMSrjJ#EH=9jTG zA_=S8Accao!OD8CNMf|pFxfkJqF%n+`g3tutyxIs~xV}cQzim8rnzN;SwyW;{b-1{wW{98B3VZAzK7;e&C1N~x(>oMGfJrSiqbb7BBNr_T(u2`qr{I# zG-B;mGN1L?!dH23l>Pt^i$k9Z6g{`f1)tl6|Exj{ZwGI8elW=0ryH*)0HomworJ%3 zAeO-5U<|1U05G|J!O?O{RFdKF8h7-1ySQ^>c#SDt($Pm9QREV263C+Xg^naA!U)50K{t~c2R$RihMdmb> zP%6WnkWrL2blDe;t4_fBHwKIW(V0RpvZz_Nx9+z2cbE91*lIHmwxGDaly5nK>()Y2gzyJHM?~8w5yFU2RIcnIl>Wh0t4Lt414wPlH zo=BeM*bm+uu6Kf+{17jh51Ei@hMsTosph8i^}3-C-)|J>g1QQ@CsT+ePKs@$jSj1+ z(q*yy8ttz|DLlZLbV+yEFOCLrzyCNA{VhzOcI=G&uJU7u+y30HU%=3LOZ1W(S`w!+n2gXaR7Xp^pj1u@lZ76dMZSV-^cr(KYw)FTn(KV zmw(>e-d?M^j^n^Av;>(kWyW?(CUnzRw+GtNuqXvxq^H&6bhr&g6Mk`GW@6fCb7S^& zk&+sLJZQS0Ktr9G0#9}*Lh(IQ>qWNd`iOJyz71g)pVqKT5J37{4*o+hqGYFfzR#u{ zmcpiHU4NkyEKlt8Jbm81B@NzBZ~er+8c0hH$t=UTif*s9l{LJN^* zw#GZYlLjs2C6od;lv=v z+x5K_Jy`sB17(|HAh>BtQc;E_s9W;9u3ve`x|yPy zYuE=h9N7|6KpRYr>#M6IqEuqn-lkM<)_LsSJZ_9_=&3ZEL$e3QZ$eYWncwTwABQ@5 zTs&s~%^SJvdnPu4PB?b@K;cbDu@ix#V5Ro!rq>W~(^7DeZdQ|@aV;ZzhTdaDQl^^f z_XAE1;iYCvO>MMa2w3r^M`yNuVpACQGqZ^!F6CQN4w5~<{kRHUsoi5w+u=$~RDUbo z`s*gdK=)d4a!VM7@Onb2_mRcd}fvcHiDA1bk`9UNma-*VSzic7Mz!iXOr1-q!$H zVEYw~EM@iCH+zH4rpEe_x1ROLMucw)nGe0lu5V9ey6{}>4-LnP(j#k4+|H#5@67?Q z7oPhLbGyvd`?NG2$H$EWZ<4PlG{x?Wbng4)dRD{Wv2}%0<#VpM(Jf)#@y0*OEs)+& zRA7OERBL{rLR<>}X=$oa%lGam|Kmpg(p%Uy{-Z6g;wECMNy|g;O+K~b{?@6iE-Ft7 zKoRB&D5tt0Ny_+%@T>7xK7JN~F5x;H7nWoaGyx$Fa%e<_9;q}I=I=z9&rCYMm&8i& zrnzt22!-Lrx!=JCl>VlX?Kvi>Sp*lt9yq=j5YA#hLWxIsmap3mV-M7!Ri}!*Mluly ziEy?%ph3TS*S-c`_I>JYgHG?)M+#BL+z%0cIOh|dVi_RJ^@ko+?A8xQk|snKN(_1* zWB7sD5{zymtgRW0KCmq&k*8WmuiEL&#bV1W;DW@S#!BE3;_>w>eqN&Er!XYjjv|zL zE;nzz$Kf1!1bTtYQCrph!7FPYAAtwDJSU-``r^sRq)UZ%5xXj{{0}iZ$i5b_n19b5 zMj8V8D5L3eV$&lxx7p_KJ^x3j;HI|gTlY)?d`uQoIge9w-NDbHu5T{`n)k%0koI3x zuSPv;-u8NK%Eb0n-_-B7SZKUo1DGF@)z0X6TWyyDG8y^62GApIGV0sDVHMgn29N-8 zUuyBDJsQT!x|=Ox{}bYmGaz%v-K`%93ZJDaA~NhWFKZzlLC`s_2K0WfrX;r6oPOuN z3Ru#5iY{QZQcFg~Sqyb;apD-|2dp|C8qcJ?0Rif_NN@r^xdN1>rKJK(ZmJ0PhSw8M zGrTIyBj-HkoxN;s?>fpY$=dbFr>6nZ-zfP=|M}eP>s$Cz%D%RJXrOEoLg8#vVygin z<;f`OP!pu=KU)Z03=Jm}6c&o0!hc%qx?MbVI-Hby4syE9M$*AV$4|jYL8DR5i^B6~ ziRrGWlqcV2mr?viB^9IQ;2t zphL-f*z$yf`9%@4`wuj~@-#(Bsf2vy07|qrz5oFs(I-}WePg39RCm2u9m~=B1W*SG zGuwv-L!@h^T7lj?>b~hsVci0O;kk}ty70!}X*4vRl^rkHFY^-vM6U>xLfOLDFKeXq zp2W%>Eg`$_rkv^n^DJ+P;YkELT-gcpTtAD2Y4fRw zFR3^P5I`*jvXh3m?r|E(XLpTgLy$>OeWN`r`Q-Fz+v!kh@?Y}KMBP%3c zb`lnne;Z&iDt6BQwQ~Nqm7kx4S=JO_?rcHA%LQ&zB4L&%VJBf0v2iwa1Q0UfcJbiHMTP`B@q-v`tKRtAuE&JRFp?>hc3O2qdp`2kUk=$ zoh@8~KvIImCq<-4L>CSGO{l38(3ndWh@*?4XwT?h0b6VEqvjD-Q)S+z)(%UHJktsCh*2ku0!tNg7;~&(hV=a`ElkR0mb^QFi6#hX*}8;c4k+n~Nm82fqnP|AX#z6S~Y>gb58ItT#mYsimDEGRD9K|0h`zCfSwk{?Z_^vbHp~YR z{SeMrksThQOvJ_&fpThUO@T{BHgPv-LY5x}Ox&iu)F~NUJ;q)=W=2A&*!$9KEuX}N z-gD&CiU=Z>EM|tZJOSdeJc}8ItYe1`K}Lg`G+Q*2HuFqz&k`~9l7nG{=6U=afXsb7 z2jAVyI6}cZ++x`n0^qG9bj@gWgPCJ@$mSG- z!_wvrn_wh=Yh?Q~T8P`eO|D&_@#Ech+@DMn_;cGhgpei6AXRwVX?Wur2yJ^9+$$J; zgg}FcbKTO(PF&b7Y2&O~V4WAn$~Q z+JA{WLG&R6#-hXZes92l?#HebC&1wD$43+;i?yJ@kP@FoXC;&POiCZCR6tNF>PqG^ z%skAx$Ki-^EPg@SF${6@`8jY$;agesNuJq}$vn!vSl^6>GirLsK`yKXM(fwg@7B|Q zEwDVlc0_K7dQGPsp`+S!5PUNKT|dyW4P_tKOrb+3AFdrp-=n%^WslOVrUQQgR|Wrw z^oaMfpZ(gVopA$;I6S8B_KNq3@`=qG$CtSi(eJY#^kxKczaKRVLMx1QAbfyWs+1)8 zI5jpF9fB8v1mYnA5aI7HwC`kbKRBpcF~!2d`ki+~jqn`kYvY#1&!`?SLM18Uxkl3W zeuPsvNUG5qo_;Ok*p%QB+sGHrxqedQ&yoV!bX#( z2>z)ltSPo4XIZF|f2SN$TBhPuhRd0pF0U(JS-_<*rAVx_Ib*>=p3Y|rC-+@jyu5(0 zKsWb(R&Z|NNbL^d#ilj0GhI){E`Kw>%b4Yh8M3}Orr4myM2T^xA-|cok`dhstwZ9I zv`kW2QhH()eTP~RO$Oa7?UX8$LY0DGg}2;u64H+WSxVvH^1APZTKlP^gh`~TMP)%& z1y;#cX(xgU5oJ>gl2&F`B39mwWR1F3=JPM9JVmVR{v*a!1{Y@8#t-FK3lj^xC&wp+ zC-C!p3-Fxt97PuW)_c|})|t~shT9ru45;)8jUg_-T{7-}DF2-Mshry)T`zLmdLU6L zrPZkgRf$|YOvWmBQ+K|yme7xmS;cRv^zO+*0B!9R-aW9pf;GQ5&MVRia zkGs$~8?~rg(kAm5ei579srNhkyIuVTUWfV%gOC1SaQVjz^*uatD%=JfSr7_bF|u9_ z=d$matSjX!gV(ge63e^-pn0xl&VG4#jb^fBx@6`kj&)&qf@i@!$f4~zH!NU;BjE?t zJ=LQeZ4sbIbWW~_u!wkKd;)V^EuAw%fP0DUFcmj-DMP5iK;ubcPh(zVt${+TRntrZ z(0EoSTA5k-OKm}IsY1~j*E;TA?G%6?7}XZFTr_wP&A7fe#WmHm(XoIM95BArw z9t1Z}b90OAeNH)tx1|Tlu*z;f&u`goc0AATPOior^RVU5qk7vhLCkU)r0lbNU;B9s4C0{-5i5D#yUnl zI)_jn_k)#`C67PP{9rFF!dy>&UJ9GCi6Sn3C*gqtWdbR^(LwFQ=5S@8-foIDCqd|N zM<=T#&FSa3a`sS`8xL5=JGPzqnVvgdyN^(MyTC>YZx8m0>ss%|=NbPA8j4w@WlOV6 z-OA(SmZQ4i-V$1r*f97iiAGq3(ldc5y;IApfQ$GA1#7DhG~hO`zkVC)CU<;3k|`Q$5yknj7p_ky>> zdlIbLCpAWQHFTY;ThTYsjoybJArZ;UC%R`q_d`q*snPg{!ad+iIzpt8Et*uT`W9hcmVb%lIcGb6lMUBOyX)-|o#8^I)yK&oW2?5B?Q?Td*Zm9ErY#ESz9|Lp zQ76{0dodZCCC6#TiPQGG?Z#DLov^EI*BqF0`fzkcyM9}#rUR;Tx}G+19*5M#1^Qal@R? z`RyukW}3&r!3v%^-&Al;o4w%ETN-Ltv@&ix6G7LJ!}T&HP-Y@Umx)`~q0{lM>~u$NJ&RF@6B|%{ZWevp6FJ%6RW z1cm+yA@Uo3VR@_FOL!>m$XOS3^OkzLv2lM_pIsWYOWxE1+gthZ#B;KdZA-W0w?Lp; z&&;d%0~;YCzcaWULFLj#?RV!RnK0N5X~cEWm;HIejoBZ`Cuf3a?1XR_gCJXlXfj;D zHvYCqKii_AFPxQ0MQ5g%xTZoqq$qr(#K8H?!FD5$=0A^gCHIYut=+|B4+LOP?}DFB zW>5B_pZ|{I@8~2)HtWhRbNshan}k_P zOia|!$<%~|_g^rrM56n@gLwaY(Ekx!v$C-K=b-=J5IRY1%rQd}d;J#2+*JWb00L1; zb5*J=KA4_}J)uom|VXK5dD$-O&MDEr)? z(LsU6TO@qN)RLURFdz9@C7YsaBkX>GpjHphI40{F|58#>B7D@>iT17g#gR8os7@kv ztC#!ihnHJG<0m^rp`LNH_2bOTSH9GX`M?jtOP}?34U{{pWv7fEk@;l$hQ751UM%@m z#DygfNZg;P+T#{rbH)urK0j6Wa#`8YY@{t$8LGWV4T7-D5pQP#+X9~9Cc+tjH9NW{ zu%km1(X(C+^ml@MRl8**ituBxQO6i zU$){&GN^f=mUP-j6>>}sEeeomUqZhx6Jo5W=~@{C@eh%P8(U~0D+jwMiVJ<6ReAfZ z1j}f=tw;Xe6DUUK)odN;x2-qH@i=(8hUU;`Sgn)^pCMRVFE|)QjT#HAG~d*2agg~= zS*KHI1wuIZk^B|^UK5NNe(Shhlh8*=Xm0LL`KH<)_{=VOlbRw6UFK1}s+M@hj7nSn z2f*K5^euzNgzu;mpY`$OvtP}-UqKX(O#7(VAt$M-m+f!he1ZDL14fRI+K-Z(GE|!I z-#t6CE0~NIvq_bNQyAxyf>ikJV_)#=g;WVtX3$*H1~f4!%jo{pXufD=*R0Lr*DtFs zrs{A~QHOu$h}e~lct9_7oAMNt?^1MPTsl2=+_wFC@wT5RKZEx)6oFx(^W^i+U49HT zc5jsnk$QP!H=Quey@F@kEu7H7yZAOd&{V}nyzgSO$Y=D z9y~#U6C}6=cX#)O;O-V6I0S+O4-njG+})uexVty*K8M`*^UX8gylc&xHGk$0P4($M zRj2yYK6_u+wRa(j3715+P;579pOcq@liv|8f>}CeQ~xldNOexHKs6Iuy``d8-xg|R z45UPh-WigXH{pwKca`j&%PReBdL5BaXuYmCR`VO#lX?$3^`-V_gjcM=QQ0mKr_|Ss z)5Hp(zH5&pZn-vC=k)#8`K;VKKE5`n&A(sbDl=J+B4?drH)qd{X5Rir$D8)mD$tTLt8*;+Z%X)r5&IFG4Fu%3@dir_U5qt;{XEXz zA%jsgLb}qN*vs<54V-?0e`nxS_kTAX|19>u(f5Cu4vzn_3M%e)KxD082>Sci!PLfy zjEnOh1EFNMWK0_JMqf;go&F9@(wYl6;Xj`Qj{Wx)Jiqy$EBF_p zVE*{eS(yHrzkg3e#-!|Q?*HpbnLj?;c3^U!KLuPC6ToB|o7y=!8(NVu30XKf0&QViYdc%OpLHVR z{2##(d;^gd`)xAw^>I0$ZD)?XVvBen75_aF>Lc%Ugk;uV7jyvZ@PuB?&P5_iK+DvO882Y z>c-N*Dz-IiT)6#9bSmG1ydtGXKZTS>#X)Vvh z&e!6Ww@zBi!|yCmSU347Nv;?V(HlNK%91f@@f;w?iwMbTn# zx1VgRl*MNX;3|}0()oJ-02IA1u#+Fo<--u3>(?Ix;}sbhQ4i2gqQCM~_*f z*g7#e>+-j}xfe$0FF;a-wkc|umJBh}n=dhQGs?af%=Ci?){Hvh(R;Zo0)KaPWKzH7 zdh7C@qiXAmCc|2^fDB=hPQTXvNRx^$yb@@2XM~{S;I>DVMdy_>&507_vuE_yq zypSGV|3tS%)QC?vy~!T$YrV1~TgFlr$vIklS3OSuu#HerV{Zk;hA%0Fn^b^p4vqR? zUrOg33i6WFv`5|8%#6`1`)e|&#r2(?e9~Npa|!RpZ8NGOelQLHK%|bDoWZKi8L05y+7I6F`r|6eAqjP%G@1UEhvrIjcS*ywLS0o@n-spsnoSOf1jvj3sryr zwf=rsoJ!-kTGzbGd3Z^b#``xGz0@iWK?UT5mD`$Ddwy(7S`?BSreK*(?$|}V zX*%@Ly^UFsK3JZz=E0I_3fw@rc}bveMm!K*Y3=>v-4P^103892m6bJG$oNzA%hnzI z{9XL}wXrtUO9wBG+uB0y-Mg}D>R(b5FKftFZ6$dIzVAZ6*s|xkPtpIlii{6Q@o1Oh zf7`7NN>>$fIi)Av%(c~S!b66#Ax5O@y7PM8?i~~q6nNiVwsSf=J1?Wk>3Lx^oc}sn z3uuwHTKyBSjYo=hzf2ctK_F_rC2@ehPR{<;G^jhD(253iaA$Nt<##?#MzZOiqe8eI zPyI4+=EsuWS(C1yK|vluv^;CACLClaFQOBql-ri*&OW!g`r_eg`DrBp{cxdv95s+2YeqN6XMn+8nk-VkySw}F z;lq&=`oqyddi2rl3AgLCZ^GkcocFl?^=u@4^`C}zNlmr$e)91lD_WV5xA|5kn5Hg) zaGH;3UtC-+f5`K{3hrbQ>!r1=O3im7=6O=R9dtRk7T5!;P#S=Nm=Vd#evIbHVx`>Pi&+Xw~N}M^!>C>pdRl!;~aYHG4C<@&5NF!K>^MY z{ebmx!cmi!an)(|Vyj;-m=Q3Lp>~K{aW|WK7Ckrlx%FEq>5Y7=TOU?E`8r3`oU>zl)&X(v|H!6}AD(j;ZGWQdY=2Y5GeK-UrOsDs!S=k5eL3vRHcqowtU*k@+O`6chY{@q*x43QN@?>?g9l1+TXzx-0x|-&-PxBLq#?Ii@^m>hAg-2VgRUf!L6fD`3-O(6 z^d&{zQ<}ax$5stnJhx6bJSd18`o67hCzw{+%G!+!wWXqXwmLSX4X4&SXSTxXB;Odp z>RS)s4~$DPiE)t6iUMj$L@0CUibsh(zl(i6R}JF^=uWF-(!1T*uVk6+7Ag@u53D^cbToe*zd29F7o5F4Yh%+GcV z>~FX13M`+#z8d;t4X)F^Oz(dH`#uEIJ#1*+>OxvN==^D_2l<>x-zmw`$HsyjFG*K4 z>$_zaLcL3sdAHp}-J_iRdcam_Ur2Kc9popt<;QkriidX@-k1W<18M*5%yt|(2REQL z)sBv%ye7C6TH0DQ`(%%`$eZHw1l1R4ZV{rSBBdE{(n-&`F}zfoaTToOeXD;O2}vD- zuTZn{G1Q_HWYwzw^nN7Syb(MiUlCxbx>ANS(i-P`k?1%QueYiHkP&8SS>n#O8GrnS zK~Vb7(yiVPN$`aVot#5v8=BI}&GF#2a5hB9@agQc{;wlXU)#K++4aM`r4O+50`61W zN5pM;{*QRJz4ReX>&7vet2qi2Ge0+QR;FW?7sBRWY0(3o{u;| z)`ADE|)Uh_wz-J{7uuKx`GbRgSlVdR3BGqp|JI{ju{(>?HH+J z*8r%NXITu*FWy2mMY8&!Pfd=5`TQ;l)j!dS;w_^|>Q*ecWJ5?TmXmPN2!0apb9SuM z)Zbm@&yZ0nxgZV3Md|GQOwl(uW=gjo`apLP6kNplpcblzQ>YWWK1mFwsJu~=5yeOn z@^>u-ejVNwy_=>lZs(?Eoo%JoXf3C_gz$APB~Y#JH4fo)mT8|Dz9O>@s7B*H$$I3}#$J00g(foz)XT7A3pUsm$&zhI@%7ws+1LRcWpBpFc2vPKWE zJHIw=3qW%+3M>+l+m_(!W>~j(XB7PdguTiG3`gM*dGy*$Rq=&4U%w_i~*OXV*H1znqN>8)p9muRw z5y;jcLF<#|Mfqy2$)QmjSji`+(Tw;a`Ge=ko6zVKydIg0$Ze`y!n99#BWqvUVD%hu zj=lC~G#imV&PmJ~$7k)sQ<(cM7SF2vxzq)m6f0sx7QRNE)N0+vtGlCC0YIRLfiyHU z#ETp`$xAYnu4_3RQZ<3M$h2wBstEQO%|gGf138CF7J}Xqr`vn6ao;12b|et)do znzbkt;XZ)woN?IKG2AS6fgk+Fitrb15SJ;@F4v;;D&tEW{Y0b#;Vk}H0++U`wYj;u zmj}W_aeI4vErh8}*JN>&jkpiXDA*j6ZG0kuSH}DungbW&l)DP>M}*RMmQ*6IF>OtHyViz7;gfZ^< zQNNN-R_rCYcSKx;p4f1PFLJ{WGuzaZ1+SomXFUQkPcw6Kw}9{I3uvlb4;L&@WK%Cp z21|nmpJ>LWGO3g`b=Om}2x6VKOfl2?d#`EdpH6%dY5cYc znG*lR&A|Ao*=yzSiuxJ^9*Ca(Y$s#DJW;=KqFt36oV%0TuRJ>+V z(NWB3Od#MHx3lAlwQ`BeHWpF!;@;vzm2}K<$yixA(-6wcwq%^^Gl;-}3r}m>hXY%{ zqt|jKT!GL=@oxR<7PY0}HL;EyO-c#z=r4|OFavoE1pweedE8CatK6SgoxBplu-x14w%MdwuLPv%CBncPcb^26{({xYdiQn zk)yJPJX-Vmg2H$S(<)jieVj1o#fR(~FFhSvJ2&_FEIqw|?ywGbv{g+^so#+_c4u3| zZ1ccgyd2;G)MJn;g!Uamaua3qhzL^5o6nI+>XDxt0*p#TkEJN;^8-_3<4AK6C&)CV z7RKs$3EL{WrB6QY_9xP_lfDj`JC%YmCXVl(cSWpz+N`FgWjGbV#WOvh0XD&$ny&4; z)KXk87OIwX&+*sbT?n%&*@&WeogSI6BCOpAm+i4TupUZy2%< zIJ+%dQiP|}o4p_qD}+7DS8!{E0*6ipC0U zW`?XnuQ+%uoe?_TEmRO91>uB&sS^k=#dJc-C>aU6r5iB64^q5z4yyhgtZx18%{$24 zJbdvVK~6Cs!wq*)+qv2VAti^4x(2yhN@@sf?p{cOS6t?uY_}z;1`2V7m(pF5=rcC# z1WgG!w|2QDNYgypgu$Vpp!`~Iuh~&HG8(8FaXtfCP~pBo0oR51y9CnFEEAG{SZR#L zeEm2>guPF={c^*kD(yB&jdmy?PL-j!@23)rOJ+e#ShNwPW`yp`K7~0JZ!3JCFM8TK zzxhihM_#5#%BWdErYhpi@-a0l!nl^#QaOP{;<1w> zA7`;hgpU%#_L2(Lyh6Rri@zlgO08p+_(02AQuX}Zn6LpA%+3|01)sR6Y0M$(k2CaM zeV1vzdi^P1{u68~fy2xJnmXB+5buKMinxduT8kz0r40R$J=B!Ru@7G>wM^37 z9i&3$`J!EHw)(1by;;`pjrmY9kilw&cz&Q`iyHj?EqaE=QV{Y^dUrI5y4i!(Pu=k2 zLcht8J{`e(B5KD^MD5x}`nlOw;)lL*j`>kBU$XHokGOW zQ^9@Z^TI36-_lWz*XXlXO|8vx=D@8q88Wk!S>fI9Dn+V4>4m+_6a7+p7K)!KUJ|_A z=fUaO|s(j^QIjs{5`o58FPDt({WERwCV)<#3 zMMX-^P`7QlYnt}V&d$)INN@0=*HNBrsjQO{tzd}Qr{r9iEwHlNKY8A2Gn7U`D?_rHrQy`+5jroL`g z-WitLzg32IjW%fpO*m-n*MUJ^eypKrwXeIli|jWIdp^V-#j0hZ4wa}3iPM7}bV$D) z2G~{QRdBFdiwVsJV<7E?OGMiy;)@|CzU;4HA<;0!wRb>McmKK}PWhTGJRx#M&umTz}`oIV?jE)DFu|4=)bBk0XH zE5XM_!pnyfybfBmB6d>C(4Q!F7b(|0u?7p9$vxX;0H`{!>861np>&mhySB`d}hbI?eZ|wRx zxys?`Qg4eCC>DKlz#Jj5X^)Q#T?%zHMVo||_e1fMZ47t2TiJw`KS_*7~+;P2~ z$B|Jj-+WFPfB4zh4^Apsv$HOTtH3G2*Pj_=O|r4@{IGP0`wx(*?R3(!d6`MK{Eh#K z-D%TshsD#hzf@HI==`BihgT~cgDT!wW0m^FA$hm#QtieMbw}lxwvS0^ zrtgO;T23D6$R{@Sex}FvgBL@<4WMlvU3F+F$p*OP1eX6eH5@Y30sa>I0@OXQ6Gld? zA|6#RMKA!Odp)1R{%YE`11fSx5D}LbC@L|$+Vd#T?8Q{{n|(vJ;LP zvArzwf@el?RbbMGV|7s=2}>wxmWMQ!mx+rPiR^a*HmA0Mx+%HeUJbBMmdG}$LFCtO zZ0XDQ;(@iPwxC_}4!QTXfl!Og?2u|A!L-P1eIU2m3yh6%(d7Ibz)$GYrTWr54Fsxt zjwB6WL+5IJuGyX1-;^wlA@h>@+<2LvYf?jf`FBvxU%8Zg4F5N}xB85@)Xvao^y3+^ zuu%mN3)lS^yt`&y93ap?@YoP(bWMPJx`Fss&Spk}Elax9iVkRt%<0|lb7Hh!|Z zEJC&9O1=yu#8Mc`ece=~b?}%CxWiHRpFBLVn-Gf`#5?`I2)k_&*`^Wxmq1xJBGnGl zS^XaD$Zb{fdJmSO>4$-kguCbnbx};&+EzJc5rfPm{g-svx;GDJ#DltmEY!8d?jbZOAg3wqFE0j&~xY2wk6Yd5I((vAkVL?0lRzyoK4dx%<$N)1t&4>Pxkm zz=1B&Vn>fah4%&-pJiykE5=SSnkVjSi2ZFz4h2S}Ax7){BVz%^r%Dvf7$#g>#6w&> z95((vQL4^2W;Fv=q(2k|ztdBeoN(N>T~RuOa@al-FaL}5(L#|^e@3d=f9Mtwnn(t{ z<|trgZZ9&Wm;Tz8;Py6E4Yr0H()&JK46OUxh*D1tJx>U1p6g)y!(b89IXMTxbPFC& zz6iVelov-TB@E2VvsY8m?&41;xFE^mu} zFh9<5eQ~{ckS+T@Rr!mbf}L$^0fJ!Lq*)|$rT95@YRA}$qdOxl>mNH!sd{L2nDL-J zS;A($0RuHwl-GR#oBYhmX2%h28F767rNGMtTRQ1|cL2LzW_%~?P2O&GOb!xVUGJCs>=56)%!nDifucy@x9;=Wo#ynPtd34KR+4eSiZ{9aDRb) z;VMV9A!upI7IQwT5gWu#83=d77$G^mqPghTAfCk*LT7+46NG!VxI@Tvr0JB0Wk^aO zx_-s!o{&Wm(twsiE-1VpGf?7whP!^?rEy@Ay{WQ1v%=qXV0ATJp3q|X!jwhZv?1Cm zUvJ=!V)vy;)AAIs#&n&RuAgd``?el6SzQ?38osKSQu?Y#2S-6z+72O`YH$Z(jQNYp z;|TW)DHPg5`^Mps*XYs5os5dsH?gU4KYi1PL@MY}b=#ybHeUM4{oP~jUX$Or$8zM? zg3>VyJNmk20{#d;WW=+*;1b`jUWGpVAqRL=4l zw=!AdX&bJbSlDQ+kBd`&UuGDl1;@xT+qP&v5~LA%zeP-Qv2&wf`XJU}sz|I%bPY*}Foq5a&Sz|lV z0*^>9uh7w+PPr>un$wAPsOk7!eqRra{^`vyQ%%9NF1Epkn+1sr2+Bj#6b!t96I@K| zKHW~YzK`jX{#}uHt?59GO+ZT8+i^D9Chu4#`z7~-mE~(5ERd*wcRx*wlD00MM)1X& z?sa86pM$=FQFo9u_4iU3Ue85mc*RddXwj`+Z_`5FukeE`jEvU8ljjn#h*GMZM0+ah zM@wS)|Hv|2ZAf@>Pros&e<*Ok(Ws}VRNDpNMHZ)Pq%ZOQ2p{^>j0NC8+8VHKQ_kyD zYxGuOZDCO-Gc))Jt2(c(%6t?9;Hb8n4rgVG_nLHa40+I4ev49#O)9)ov}CFyjAH#c z(z5o=o|A8L7Ms$gp>~&y4jw5Nxxz?beUNJ)siwn8$bT`*?@;qR()aOZ`#BXKbh8am zwEg{(uN}s$^}4}k8k4)LxLvbb{`i7bxgzS>paX{w?~xU_dl2aR!*NhQB7@_ zg!!|%(e+y5Ex78{?(e(|_KF~;&@5{qe_3^ygeH5iA*_8(EuOv0*X~&$zn@ob57_%j z1PSPXekIpXRdu`~rkG}IvK$W~pZnn_)DVmaAC~lPTJpz)@!-q0`pC{RqD4ktO9dsJGM8{TF^HVJd?(nB(JW(> zLo9Xp57~B?lI+?bwkNo`6e3J}R zQSEX4+ah*65LaVGCEu>krartp#-*vP3zax5;C9X}(dp(aQQ1+Tyc=qzvS-jr61>)Aj5LJIwmIz4qc?5VaCrPT z6W2m$Hl%|793HDe=hzjek+k%*c*sb=O*yX%d;U%o^Y8z*;{F1U*V(|vPX-e58T{RR zaJHa*Bf4iFN(-lLLfO|>z(;H7urqv>j>Kzh{lx9smCv$7HtzXMOI2_S;I{46EuK1@ zR{}cFot-wkYPW?Qv6_~5Yzz{fuYr2oFG8Gy;CPf^4>i47;gRrs?gHoCkB8}7^1DaY z#3L%{Qv_V%Nh%rq`Eo2f((kNMkApE%GA)DyhyN&(q)!k#U^olHbt}_JEO+2Qw|+rgU0(!SRbL zz5kg|gVm>YM(r?(+s`iktbVmg`?=GMODKpgk#OZ3D=TC!uKeWhut-aGX5&8HxZ!#mJF+o= zxVO0?e$f+476hi2gM2=xJJaZV5=6Sj3^W;OVlDkYhf+@Qgoya9%Hox%`VL{IT+YFm z$=A=T#~cVVbSVKW;?LIypPf)5=%=v=p81aMWabpJI%~49jl$|<73)6r?fcLgG}d|C zRrpzQLV$>ii(3a`{w*s#3PYOd7m6S1calO#17Q|TuRdk6kr}Jnqi0U-$22eJ{+cjJ zN>^QO>oQX-p;f@kK|W$uYWasEh7x;*_!%y_Dz|tAN54Ny-^DCCZdO4OMsX5^;iL49 zyK}amQtE&aSWn4^mtwq@TA2W3gM`SQ4`Y^2BH*(yH@D}~2$V!gr8k7NjR^%5P5~(x zMJT}P`3nFUkRw}N-T8{%1p&`N>)(F&`}ffTty@g=w%G~cxd7Ue_dm)nc$_gj8L-`I zk*Qms=u%!F=r`TYt3obDR?E0=b#o-g1U3lqx0#++IDJv0to+asN1oAw%ato^WXPvKPtnwi~uf{wUmEc%=m+>L#xonvD2v9xR}dN}$dyQ|vI z_p*AKPlBs=?_p4oA<&D-V|-tjEqTu69c9+?Qv7 zMl8MMepgfF(EUakGGjGu-ehdDHGix!F9>a48S+(Mlqw5+S1PxRE-#NTcpUh&K(}W2 zxQlsE{6h-5NT@1!MIWK9r}vmvi^7$w&3jPy02xJp@*=S|F0)M+KSI=BLTPHcbE?|4 z*r>5RPq6(xc2(JB&*Saj7g=kF>qw?4Z*Yc3n_>_ z6PLfE0pij?8E#e?&}`fm5b?%37PHDFt^7%-CxF@P=b8^lCgl=;9H(Xf4UH{ zxe+7u&gN(oxAA)FxY#f~+1|3htOIAC`JlG(i5CXsdv!Sq#mZgKpo~8fNOBXwJh&IX zqOyD;EuH>0dcC3jV`crO_sPxfD!bMgu|J=G58Zm-HTF(0C;zdJwJW|1h8kGqg7a(e zV#Mp-tu69i%H2Aidk>!%L>b;AKGj84f7v{g&pm^BFDxEjKX@E$N%NO`QvOb5RzLG;@2(vR*uIVFn4 z@o#oCSL6y(T){=WpOFh*n~AINOug3c*0b&sLL zgH4k1?Wz+o!G2?v`T*i&lwnPSCPedaAm);Vg$lie{>QXem85Ma6vq9sfePR&{ zf4w^a?n@8|P-=<;fTB7H1Xs7ozTSIhpf(fIimL05-!P`d|CZ&WSeCt{wsv}aEy4-+m2>$$iMIKxIjyhTCwN>X4}VoDO-5%u zb5%2AH6+BE%719o4sgzu&~~!t zK=OmB>qE})V|22l6=ed8neyfzP-^4RL*!FTsy8mFO2>iM2Uu6MlO6>RUGockN7 zmsPz%$<-r&X|8$DI43)>OyRbK0l9Cl#G} zCC?88kI_^Dn086XeQ1ymqRh&Fs)4u?IRXB?yn%WiJ#8MD&7UnE zwcm$CGcb84*7%e1-KRsJ=F7#l$RqI)uN!C3vII3tzdpS2k9(Z7M~nKoV})@I`cnLK z83J^-1wEm?kY~8xqyUEG$oJ;d^p}A;!_$d+I+OMT$T(?EH zGUU|)d8~rLAT591&*#smBzkli^0pCTb|iW!N20M`iJ6i`8|M!f(awVNC0>H;vU~HeMkv<-j$7Ru|5; zAp-8F2wb_Sw|985vkUNd0{Uz@B_l{YxMl4@Fgs)|Ur8lZqLdQBND1Exq~Y!7oMu#2 zRuFp7XjYxE%V(_YZ`XKxx8WKCD2rH0>`z1`D>;Rwx`x%_ywzy*=To6oT10|!AF`w1 zYSMH1dTTnqNZ*n3rci~rHRAkV1iLkl58*t+?ds_u<2qQEAWs9NQ;G)B~b<(RH8 zT-<8YV9`qM&KaFp8EaI^SQV`GreKW362{K&TDI7@fuP7QA)5?^04}n+0EC%tPEKqk z-M+0JjmG8;j&6mPCJn}Re+~$n4PDT!B&&I>MbScJ#;D)$J44=&%y~6=rFxl)vrX}) z94kZ&(|xAxFqm0W)sTa|(UN!iJW5?P7gp}_YAC7=+Wn-&R4lzQ+XPol^$MveFt3WN zRZ#ZkCdaU{;<&i9NMoh}*~G)8o>SYtdGooT`{TVk8OG0~BzJ6rB6r@O?vLYtg} z63p_VbIF5%a;);kENamn-taWn0Qc9rYnuPEr&i1uaIP$$xe!T82yUa7oO40;ihlhE zB_#J32CV%bCrxZ8zl6P`!-XZ6kSF>=!)qC*MsKV5zsY)c{83k+UL2h6F^jj!F6e); znTjICKpvXqH^#bu-27f-0`l6h3TjP)gg0EKcsF%8N#E>3kIgSCCk4v^2Ja%0;SfW} zoP{LY-XhS-YMt2DTU2F@K~$ZPaC6aMilc^mMU_I-%+avwXF?ws7m(oQhPgF%194E} zUXwkv_ibDGlJC<4I{)>`NE(lIW+<5Cho=Dw(-PaPC|4Js2)|IR>RoBD`&8iwji%en zcv+c(AN{Y&h!ZwKSwUC_>~1MJyf1I(`!#r;F#F$h=-_$G?a@22tckr#;dTrix7=h~YL^!re zjBjWesA*|_jY3!3XMTV0!$h{i`HO5rp-`ayA0}F`engb&k~x>+F1O2L(Rt#*+==f* znP=~4{pPy~96c(`(#E}bb(tPsw8q6%WRc}V7j>KXYZdBpW<+e!q@O?W2?@g?Bj1Dq znlt^|&RX)?mq5+l8i$1V1W2t&(IOq$Ow+At6fNzcJ&A-irLB4ux&MOXNQi3cD{0GZ zbOg_~w8|*( zUSL?W+NvqfNhN zQVLiR&5G%rLsjBwzLu!P2JY1Hi1n}Ana`6(+)&k0K97~Jd7EtS9DaL)v^dY*)z%xf z4qpZZXFA47%)X;n=5`3h;PPf9KK@tk_SV?)Z4Dses>>Ko=6 z>w_i-C-SMB&A-AnSQ*JAsj34*j3^Rc9ZAL>B=ykLkr;{GfeH^GrzX2R7w&$J+Mz5)J{-u zO|uc%JfXsFp|eh%pujx}1G3Qc(X7yxmt$;sr?}qk5`lLRRztP^c1H6I%3?J;RAPcm z2_z_Ji~N%$U_E^Z^a8CU(r8`cNU*$;=9-h4D1JiL*;-FmWwjUxIoYb4#;;dBgZ?W{ zD{uNQaT*}C7TmA8VO#_cR+ku0#K{B*vA8Eg@*vntA3^A&iCsc*JD zeta+no{Oa&{;JI%mGzqvsUp5R$lvrCp}=HsA4jYWtaBBDl>O8LQoI;n8`Er(1gZ9e z9XlC_@KYRjx;{_DIwBg+$J_N8a009{DxbY*`XbF|)-xA#1!3&1!FoMw?I0n_>RJbv1W-(f z&!=|=POtgTodUFZNI_$lY1zQ~po<0p?QJ6GiVyRefFAYhJCyfTKrh>l?zL6K={T=v zMccnGGHl!seai`S7(M+bV17Vudf;*C#(fT$0g>qn zq~%PQ46s5PKj6L!G*Z=z7-qILsu~2`&+dlKTz3r>8@V;?Cb;u1HsYvR=~9xE!)qnLtbNacYkj=z72v;%SRVOtSz9;|qt@SW117)n zFX0^%FXrYNB~Hc8RCD?m2uG-}qFK%~TylS~a%`RqnjX$LApbeCDh?$7J0{#~`nkyw z6_}R??EX;ZdX?I{&fVsr!7X#56*?2m0<{_m702qi6{QA%3X}ij0xZUvX*41FUj7q4 z9wO>_z%d=Y=t;gemgS4lZW((f`VV6Wms{=l+%0-CP!pMxM`Dn_Lb3|qpojdJJqF=< zC5F^G|C#*6PuWTpmgDrh!BR=Br#EXHIiMdGvvEq@TX0UFqtV||ee3a`U~okh+6!z| zvsY7+pMT9favUSgV7GVHqy4CEN9`LUpAk{l;%nc$FRHtJ{K@uO3v{ie-W4byebJZ3 zDA&Y2#TC!z>(c&GL(iTtF)DLD`eL_4siSvwb;0;UxIA&*i31nhNdk^0n+$b%Ju&d&yHKUwX8J*Rj!O{`OaG8;DNAu3##{{_0B-&sOjZ@5{=M> zH0sV*Zn}fvlkR6vmKc}uQ5KYS@gviHhz64d8oR(vwqAd50y*+NR6TR_O|5)T|Q4a1^FkZrH16ZF`n+vpd5k5 zejhNXoK>_8DgYj`lK!n~oKH%R@vj^&Q(5C_uECAFaT=@0O#E}m|9iCb>Jh5ONu7oI z7m)%ChbXqjQ(CQ&>~l(x`m^@E@w7ZVZK($t$>o5Z-z{smQQjY5zMY3-!-&GW*QA6X z?&~Q1KYMqhY`g*p^FIJp*K}JVIaVVrDcQ@baoWH!iP9FR%P@`qtv{{KP>^t^Jan5g zV?SkoBcaM5>3-Q})B%d2DElfNe^;(ZiaVs#mkz2p*;+O3HjIJ#n}(HYL~AY<@KPH5 zph!s_z>pU5|3r7Zo#8uo;PRk8&=UlRnXC5L+e%f5+=o7g16g@)eRBkvtQ>DHV!Ok5 z`>PmA?yTP%#Q**?B_R|O6Nf;n*5O|s@e~S^T%HPom*zvk^k*oKs8uTlZGQXEi6&Xe zij+N}^nTZ^MH;XU3J{gsL*Z51snkIp=SG*!n)lh+4< zjLwm-Ug9Cvtj{6NFCfG*FAX|~_7QKPgy513OGcGv-X$R=Zr}uc zH$2vQzs1lNFC0scD7S>|2%+i_bw{*8&tlBMRQIbf1!nau!N4=_G28JdNu43M(SD1u>(N&FM_3z{Hbgu%UItCnTRMD zZ>bu8Km4U(`KAd|l9BdZ9>r#`1?(q@1WZ>pM#zhDs}m(&8IM!S@Zp!jnKezAjf0y` z+z;6g>hza@b zcJne?d>**L39b6gi_C0`T)dN?SQeQ%cP}HCJ~m$c)ufgZ0HRug4l**HLXa?LzbfQQ z_F!PJk(J&nr8iQV|8HffywdEo=8L=dM1`hGq$!ixzEZ*~US>}wyij|t19lz!V(K17 zo;@E*k!8;HA&j^CYHj-$do|vd&?F1KeY5F3d)ye5Md1{tPbwmb_$}>Tj7eizJ-_^h zJIn$xZQQ2zkOGBae=BHYa)uifyff?yy4G5&RBZZ92U{=WprEcH?cp|wi}~iXxS6kw z7B$d#LOlpH)~u>7Emp3X9AH$WQ2e`#H#{M4&%XV3F7Fj6-NgBu8^^DS&B#DrTy`%r z29+!62vB|8+EFfbd3iZZC5cryKP6!N_7`9p6V{3m|9_%L<-J6<#_=}hrhRW61s5ZM zklsC=JE)5HKjvpL*I(5D8JQ6T5i%OH$^+hFdYzI(FMfYi|9LO{ma^tOinpvV&1$vs z(@#n|A$_e>(NLG<5JpwPVV$jCusI3T!LoS!DEVx2rRs&&5-vFHhhJ#zgDt$(QYL|j zFMbr`C#diYA~jP|ro2XVMwMN{+Z(Gd;;1;`_!Wf(U4rQ_K6SNFGRTO*mmI3$PA6=DF1`)#?O=V@EUEk^bnY3! zp>{(s_bv<>ajF0&Yq+bc3n*vr<-(3l07XSbNWbDkz2x6N=yX_a8x_13b)&!}@va|1 zEjIpy{H2GiHi}kFYjb$2+Z2g~}R>;*dck;%AGwvfLwHOvk}AENhza8YR^?4dQf z0=dUPi3H!g*JNZ%5L_CFa#v^j@*#|0fA!TooT!obbYJ+on^g4C^G6E9sr1}d~J6oEOEnM{}Zp*^LSKd4a zt#GXy*c`8AhlWPzT7q@S?G{wzn*Mib@um9A1?+YJL>jj>d}P? z?`J*9JSy>2nAOeq+xV47#}h9)p89mD+mq#$-~X!0v$yhb`GuytCTDgteI}(^T2;nv zUW_%#0!bGnbbwU-CZZKjDH0g)cMR7?NIpx;$jO2g`v<^kv^ivmwxstf%(QMGv{$>J z*G@?8#nqE{A{$BI%jIm01-UPCqPo((oc%x8d&{u6)^1A_cMt9w65O5O8r{LSHtD8Swi$oDE3F$M^EjuLjF3Mm6=Gqw{*QHj< zr`0}5JXw5l9uc^|{{Ho3S@w?Y{7_%bwnDyk^cMMEQ0pj(Tr z?h%8b$OZ7L0{WLVeHG@;xxUtm@ROzr6nrt=^{_=bq|4Wv2`USwRW22E#h2VFIlUJ+ zqX+I!U2WPAxTIfz1~pblh&$&}0@NwOzco99N*e?#HPmdM-}!PCNTA%}9Q%BDSd!-| zy)ZO1G$;s)r@*OElJr&+$k=0mly~mf=Y;s66Hgf;V?aikcs*W!?)21bImopW^wll~ zN@Res6W(vY3IEUM;ANrc5u(8P2LnJQgO#Hr`ooc;NTjP31tcT|(xm--IvYrw_EkeK zoS^SX0SFI#^85IBdY^^lYIlJiP@>70v7Iii5bpl3L6~l45k0EXrPX22o12{yPY$OSFL7Wj^ zD`nob5kG-_{c_DlOca2J2P%M4Eu8=t7Z(QyGz6K%6=R~t=SZKS975g{XDSw2GH4(K zt$e=1fJt57=MbR;jkG~2Z>T#toe_}~d1QvS726rrhq_}HC$x5M(I<5>krWovIR&ih z$MT8jI`)ioGE4tLJqU>Y8ukI-+XM0+5sxSjnHV0=$g?oM1cCGjPb)-pqj*JKuoBjj zWvAc=tS>XQ95mH(7N3uZKD1;oIs^h-78j|Ulh7I5o!#AWfz$-!Q$Rc8mStk*j@|TZ zE&j$Socs?&#XU}(VDCKFr1^PAfY{DC#sWlMHVwwflv0rn)n}G}#e5xzvmq-m<$+v8Q z@xELc{fYl`JeNEIK&yf~Gd(~-2sd8LH8jNrCQB_-4^o+rMcC-j-T4Hp5Ja6 zdT7siTG;Cray4=~Zt8#q3e-LAwwFd3V2{xcQg=i`<9-qz+)ZDAxn?_4g{Up8qfGQF3m zjFql|ug9r!J|39sXF%~UT!&Zp2@g=FqdRM`tN%EVLR4Uq=yqJ9Rj)hTW)zx{Fyhlp z?%YXLV9`Z3;2<;CdZ^KIFtoV=`7_dGQxy$243IFVTCV$k_Y#L}0$hyItb|4~erx}Z zw{FKh0i13_^u_c3hQ0igUc+`Tq#6{4Ri|f}k!GMNG1Y|_tRpn#g^wNh@PK7rci;O0 zfn|eZPizr_t}Ks#_=YmKun-Is_T1inc^nS|Gr67OweU+dHYN0faa19SyH$;hc1U0o zoFP3ac9+t&Ci)^cycj1`+1C8TN4iwjRaz2fW(V#k?&B5me0^Trwgz!GnS@=3*2uRl1@c^-=o`TMUqWVM5ydS`{{m3? zqk47ReIzwY(=sO3<+d&qZn6|Q?TU`-a5l81NC}TjoE21oK%hB4mi(nfxgHWKMTCN~ z3QkW4WD0Hq4!BL!0-o(X4}`}!fZS*+PnpLeD78<{MVADu)N!dt!ufyb(Mwy>^i-+V zmJk8}&>%sHbSq~UIi4=Edg0qG&LR_H=|Bg00)`L86lf6dyMAX-tJx-9ajF*I9C+PK z4=9s>Uu=F*RqYqR4*MgRDczSIS7&Os+Z)f{_7?Rr;KdTd#gCBo7;zsy-=jw}@65rVMi~zyQo#{Jf zDX`|K&cOc*c_3`N#!6{0-Id|acPZVvT{?7`1IFIrsU5mUDa7~*<~0b z<|fPO6~50gLK>5T={m5(iq*yU;t#zVE+*G-naNNsh}VR(dS zC8PA-z_yeFede$3=-@kfRgW6z$x3MH8tyxM|C|<3ck-sWz0rKL3D<shDbt)XW!@PSa520qObHV_AE|4Rb&$1vPAlTtIzG~La&j@v2;e+1B zOq4qouM>~k$dAm48sg8VzXZ{sV^;; z;<|CZme#Sx%GthvKt$P+Z1N{pUpSUUNr1nTHB>0usLAmx*`lLgv>EAfoQu>Lg{ps` zAqLF%G_uc<02$&DDjz_UAy1etu0`WSf5hFyx3`zO=gr?ZM;8Bhhe5b9XaA;dfY9%Z zX^TnQNvH#jdfMsh^1otkw$0eZT#CeY@lT! z#5_7f@$Bk&5}>>PE8OrUR!!%(>2A_5{PB=#m1wiz}hLWy1iXw zo+=__$gCM?AI3Iq-0zaK_F+Z5iPzI?aE=zw)oHmz@j+(0MXTpJ6^dl_u@Ff|b!wY3 zVmkc{*+suv+fSg%iVEc9(+WZEXbxviGxFaaUuvryR5Dq|yZ1Ba?CLr#i!-HBA}}$9 zsr;~Lu@jk6b>98Lopw8|xf@^ew5aXX@h7NjdTNk@n*p5e^p)8#^=Qtev%#wpS2SCs zHxWabm=Vr+{zCOq-K#b3*Rp0X=@Z9U;laFgg{z{o=IDk=1UDM-3`cl{_daPZ$->ft zpxU5n_O`YtHq6#p8Dby5Xe`#IgIj=WDSX{W>tR1N_0zwc#YV4E{}nFhXPT%YMvR|J zA0VV3xK+jrS){EMj#Ams3%Q#yC!z{wj|1Wv6y`^WSsy6e8$tUoo?(??hmumpbBZy6 zYUNKV3I>@XBZ@aow!Bkcq&coSSKu$K`HM&JVBKiKjm9*JPLmE?Ra_H~s9)PjAoV0( z;X~`v02i2=!26kH4rh@OcXvYkSwzf-^Hnj}{!mM#P$$$YaC@dDnHMSQv?>FE;Sx+0 zBdO2%cjOpELP`dyNq^aellW_sPwV^oKBel_Uv-(FeNg^{eM3xBQXboriu16)>`(WQ zE0y7Z>w@iDtMYyPW&i{Rd~CcfRzPMaB<6{eX$lzoa*g z{}oDe&5D>Gupskdm{3GCf494ZG$jh*5zZB6K7 zotaP_HLB%$6rKzfS-2p1A>58oj?`g%%7j;~1)J~E5d-g|67*FDs-b7L2cm#sWUJOL z+S&x|asu68Yos5Daym;AEKNZFkTNMwc@^xMPX?rfVWQh3+GA{Py24I>_<6mgPv=NB zs~BmRKy&~Kmw`>M<;bRA>n9Z;0L%PUKI;40<(I0^+cQ1j9tU_E*QWNyl*J{&35)C) z3l6ryEOQ3G8I`_P;%qfxPatEaoCuHV>n}9A{e4S&H`!tQlVN6;hR^;w`Q;0*pU%&< zqIYF<3)9u>V%bBj{gwKp+ibk%N>vIrck^Dh3iIns&(IFt#-&Q&+#}WPZu;Cs)AjQe zd^%#ho2V6tJNGK0ir@qJAxjd=cSJEa@z?ymp4nc=fwtQ4<9H~LSpgjV_RtTvMMuL zWJ2BQ9bru3(+NvYC>fRbdLCIOC5k zT8#mk=+n#nU$51^QcVcjrJ&r$Pyo%7@{R25t6vo0edN;Z+zV8wb!9hSo?#0t*~LTNq&f7< zk<+xcGcKImXQSZ0cca|GIU zcfE}>885TPznpl1Zcm}CQ_pad^6o_kWlAG}Z+I9giK4odigL^tcX8U&j z-j1q@5*qG4RthIWni9$`ml_*o;?QUbYLdfl$R)h!ZpjJxb~+D#*F(0-Y6`{pojKlD z*m2fg#tBKRaE=<8Z*lrogd4o^=Rxx2kqzw~O}j)P(UG}ChqtrxYngiiPQonj(SSsS zy9%Cms*h=5@h`C@6b`uPYXQJ-r=Q?r#cqCn#8-lUsKMA~fV6&nP%ZA3DGz-OCpY7M zmFT8ii?ziX;ATH-nhF}H)ZIF_V@lm&^BC3@lM;hDrbV~*>r+28^`ZI1R_|I*fx+lq zAad!GR*^Ip7_kjwpx}MjLDlu4SVTH>OHzgQF;6;0ITG}5ip)8AV-$5NOMMCqTEz-5 zcQL~m#uGJ!-l@$a&(J_ZgZF8StA$Ln*I@myQT`kr(?u zZskmny`4{cHRAUT;s%mg?Iaq{SITP6h<*!`oM z8udXP`5a7Fh2u%q><7l(ybJR(mE`(%qFB!`%8hu`!yqemyTo)36i}V?k65Uz2N(*H z=LP{rb+ccZb-;lCQg^j-pO{M$HhUE{IW}HAyH&>3R_5Vs-{k$h9vTZ`4VuAnNmxk8 zBl)gXaZR?oh$v9X_&VwrEW_HWqwif)_%FL}*2j?@Tv!v=uj(J@GO6GREVd@5ms3Q) zocY!UPwTJ|i+n$(d?Ve-q@rHQ(>|FIsOvAK4eFwQ|F@LXX z89XJkFzTq81vN)6AOHPX9_4Q~6appzy~GY6#NC~=fH6L*Acg_PhM5$5Ql|A zCg{OjGUxzx4wHI=^bwN=#m!hcmjm1aE8zF4I@jF*J3OT#JO|N|Jx3p^J2{KCb-VIZ zedY-u&12D>Weh-lqRKh5>p^v9+Bv2_>+zg=e!h-}wRILjIYAiD^|B-$lA$W$X-$GH z!;B-}{!lI9)ifr9aQ$r$#-dfLUTGqBo%z!+%Uk((Tof}APt{mR>;)rT6JrWx&bgnC znoW|ufTA%)bJ^H4ZpBdsHzet6mGTnghGf>BB(`4Qjj-6+#M-Yu-DGu47Y8>LOViq^ z-G!P}FLIpD%CUBSxY5lGxRqmfOm=m4dOd!YbNSj9+*e;8)??yy9g@8hb+BYnP#g9w z>Y|@&!gM-qH7R_I)-Y>q-uA1d3)Cu4;(d|6*y(l+cm2+Nts|(n|9b31LHmuGN}M$J z!}@u~j&L+%LfteNcsmWAtJ3M4VC0Ie5WXxX${#pQV3-|O<3Bw5v zaxEP!y*k19tqiDY;_MO`6ZA!-`cu3EA21<1Zn>`=@>$-ApnEEsw``yuJ~nx$v4plq zp8$~F&T}8g0#l{8fA1zWh$VVF=7Ke;7W*dF9ICJ>_^34@=+(tY_O@tB0x7wj(=3eV z#RO!P(1jiju=F^*hNEp(ugLXx5^IOK{YFw7K)g!QI#EHrnD#ll}pYb7C_cXrie3V5Wo*srqM90UAtQXB-s2lDFnODS~-n$YU0mq^D(peQG6XRKZthV=1gVLMLA5v8B z3p@;Qilx?St%TnN6QTNdJBKdvoOB*dmY8_5Uf8YdYPCT;(qFpi*b)J}lD0qOv6bS; z0Ty%ukGK;<`BJjmlm>3Cz?BP|x40Xh_I`O)@5%~fQojI5^IA9!%WqlI8E*q;7AVm4 z1E|7PYd}f9<0B%Z%B3_rno#uUMD^%HvxEfR4R9DKDfm2g#2G}wC%1}=2s zfcpHN7QHuHn~jvMrY-o`ucj7255#tTqd9|4_&3-TD{z|VSe5XuBMOURcKnNY+i-fu zCZ`D#Qm+U=;dz;SL`F5jgneTE#srvJ8*sK&mcMz_$2eF{OnVRwYSiMH@QBj1n45rd zq%VqnAbzmyDs}O7!ChUnT>!qrjH@>ckFDIwQ=>~cWsdgmcV z<|@t?*3-c8KIS&>`GBy(3MtCWjS1X`S|deT^)P&Ws~R@{h*FSwGsTc!^1IdzxByvd zR54U(E-X&1&hr`rpd;$c;xkol1c+Kzc)i0GJ=qoTynP!B3^-K24`Sj`zTqObssW`y z`k zqfr-CWPP1|jzyzIn0hl75_nPpB)w+{7%zYy@KmaLiIlRLk#4%17+z1K*7lYu>RpWH zZoFa>FFY)ZHUUTo?_0#s*36Q)Q2Z#-yy^%c%Q!g0OcUfL(SyvF&gEY?wa)EBJlN_Zda3BLWjLxjIq*>!PXY5u|ZosGNs48qdc z7nbz+7_6fGl9#%hYU6%-8<3V2aCU>ht@)C*`fysi90eS^{`gzvDX`zh3emOxt*zj5 z8x^><@-U~$8DQdhJt*qz>pFckP*3cV1MG`M=KnqEQ)UFYbhS%j=it|b?7%no$IC*1 zeDmIpEU#g$cHTu~Oo~m9q7`^Gv_JEkwi9(5ntL6$zEmNlpE1|lmiDowdyg<4(4{K} zELj=;V+3gCav?$E8_wfq)(V7a3T@dq4fk&E>GZl68+J==YejnX2;h&ivcf)(iJ$dxZ82>r` z_zPfbh@QQHiQC6O*KhSe=NVP>fjUQHSs4vW zC-G{~cZdIt{_)5CRlj4$)rBRJzp~k=VzdJ2FD}>uDv@bkE0`pEK5>UXE$(PRD)63z zjj!hk*j4s869r90;Tj(CuC_mM3OW~k;`l3|CuZ+ICfZxo)la(!{05>zI8aHeO*fAD zKMqg!nqrijVZ86l^DRBzxwpRVpkx1$b^gk+p#viigG=YGk3L#iMEe_Aul}I$jw4zX!CZH@Px<<&D;^n9}xD z!RDYbFV_4SYxFP-vrXf{t4G_uDfQvtA^ z6;qbnKi^~DMEIJnt4?*1o;{Nb9PI*K^f>ga-{~3&hiB4g!+|_;>|fJ0nyM}zn{6H^ z8hNN~V7Hu3kMtgR8z#}}>LDh!>FqV1-X4)vABQG(BkIla8Su#o`qY>*Xh%}c?okfF zD3b^L3t77@tnI*?5qKOIKI`oMnZLXd(@!?f8%DflpIEdNkA21p&Oxmjv#!pi#3`ID z^xi(l`>TB(2>5yyIL>+(&-yfS`uH{Ng^2y(ZC!)SM{YStv7GqQ=xTl>rS0qY2{3Gz z5rgJXbXQJ-r5%?I3t3neQ^r$0kq%o-p|0oID(6`33!7yHFm!LsR`uE*Co+W_C=Z2(;+ zmp9}mkK4WyBK`ki z66s(2;rA%Ke~lvjE3fYT(SOY%Wn}mt!blkz-g5>2ryRY%g9Js*EP;`Dz%0A>Ogv#@ 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%0D~>JwJWIWJBpaufgkL!k$ruJ|%a})8lUY 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

L)=fc~P|0yIMH(iC$L|i%vzfVuLQWC|4zZf6sTf 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 From dd30ffa7ceceb4abbfad3405daf7e72bba1092b7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 8 May 2014 10:26:22 -0700 Subject: [PATCH 144/278] Fixed: udpate file help.pages --- .../XcodeCapp/Resources/XcodeCapp help.pages | Bin 673806 -> 0 bytes .../XcodeCapp/Resources/XcodeCapp help.zip | Bin 0 -> 865041 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp help.pages create mode 100644 Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp help.zip diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp help.pages b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp help.pages deleted file mode 100644 index 73b168d3ffd8918b40b47d57e36d7d8e15f006e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673806 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

W6z)T#I@YB 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�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�l-Kl1$?tFJC;(bOaj?^&Fe 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 GSCrDCw~rR-aMjVD!zaDL1cTdDzpvtFm7S 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

`*faR*XMKGL427nv=UrMb`0<%3k_ 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ð!L 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

B5sJ0Y!#w2Wy&`=Z^ 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%0Agp+hhw@fKHRBv?+cx5J5P|>PehY^xf8Y}w2^Ei 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

@P9NA}6#%W-(UOn!#s-#>^_MLZ$xh3Uf#38t< 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 Date: Thu, 8 May 2014 17:08:27 -0400 Subject: [PATCH 145/278] Tweak: use continuation lines so the tmLanguage symbol parser works correctly. --- AppKit/CPTableView.j | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 55cb0e70f..81a602050 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -116,7 +116,9 @@ CPTableViewLastColumnOnlyAutoresizingStyle = 4; CPTableViewFirstColumnOnlyAutoresizingStyle = 5; #define NUMBER_OF_COLUMNS() (_tableColumns.length) -#define UPDATE_COLUMN_RANGES_IF_NECESSARY() if (_dirtyTableColumnRangeIndex !== CPNotFound) [self _recalculateTableColumnRanges]; +#define UPDATE_COLUMN_RANGES_IF_NECESSARY() \\ + if (_dirtyTableColumnRangeIndex !== CPNotFound) \\ + [self _recalculateTableColumnRanges]; #define FULL_ROW_HEIGHT() (_rowHeight + _intercellSpacing.height) #define ROW_BOTTOM(__heightInfo) (__heightInfo.y + __heightInfo.height + _intercellSpacing.height) #define HAS_VARIABLE_ROW_HEIGHTS() (_implementedDelegateMethods & CPTableViewDelegate_tableView_heightOfRow_) From 5923f7d8596683c550c25490e8179298afe85619 Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Thu, 8 May 2014 17:40:51 -0400 Subject: [PATCH 146/278] Fixed: oops, it should have been single backslashes. --- AppKit/CPTableView.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 81a602050..0cbd6dfd2 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -116,8 +116,8 @@ CPTableViewLastColumnOnlyAutoresizingStyle = 4; CPTableViewFirstColumnOnlyAutoresizingStyle = 5; #define NUMBER_OF_COLUMNS() (_tableColumns.length) -#define UPDATE_COLUMN_RANGES_IF_NECESSARY() \\ - if (_dirtyTableColumnRangeIndex !== CPNotFound) \\ +#define UPDATE_COLUMN_RANGES_IF_NECESSARY() \ + if (_dirtyTableColumnRangeIndex !== CPNotFound) \ [self _recalculateTableColumnRanges]; #define FULL_ROW_HEIGHT() (_rowHeight + _intercellSpacing.height) #define ROW_BOTTOM(__heightInfo) (__heightInfo.y + __heightInfo.height + _intercellSpacing.height) From 26d6450f0a5a855010fd454d0e06ab118cdc7dc6 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Fri, 9 May 2014 13:15:47 -0400 Subject: [PATCH 147/278] Fixed: Variable scope in CPSegmentedControl.j Previously, an errant semicolon resulted in improperly scoped variables in CPSegmentedControl. This fix removes the semicolon in favour of a comma. Fixes #2117 --- AppKit/CPSegmentedControl.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index adfb84b29..53bb09394 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -679,7 +679,7 @@ CPSegmentSwitchTrackingMomentary = 2; var segment = _segments[aSegment], segmentWidth = [segment width], - themeState = _themeState.hasThemeState(CPThemeStateDisabled) ? _themeStates[aSegment].and(CPThemeStateDisabled) : _themeStates[aSegment]; + themeState = _themeState.hasThemeState(CPThemeStateDisabled) ? _themeStates[aSegment].and(CPThemeStateDisabled) : _themeStates[aSegment], contentInset = [self valueForThemeAttribute:@"content-inset" inState:themeState], font = [self font]; From 5111a527b9b38b343c11c53a9ca544e045aac702 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 9 May 2014 19:36:10 +0100 Subject: [PATCH 148/278] This will be Cappuccino 0.9.7-1. --- Tools/Documentation/Cappuccino.doxygen | 2 +- bootstrap.sh | 2 +- version.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Tools/Documentation/Cappuccino.doxygen b/Tools/Documentation/Cappuccino.doxygen index 9ffc4f361..5cd23fc26 100644 --- a/Tools/Documentation/Cappuccino.doxygen +++ b/Tools/Documentation/Cappuccino.doxygen @@ -31,7 +31,7 @@ PROJECT_NAME = " API" # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 0.9.7 +PROJECT_NUMBER = 0.9.7-1 PROJECT_LOGO = ./Tools/Documentation/logo.png diff --git a/bootstrap.sh b/bootstrap.sh index 2df86a695..d86e68b9f 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -167,7 +167,7 @@ install_directory="" tmp_zip="/tmp/cappuccino.zip" github_user="cappuccino" -github_ref="v0.9.7" +github_ref="v0.9.7-1" noprompt="" install_capp="" diff --git a/version.json b/version.json index fdc6b2a1e..f0c6f3ceb 100644 --- a/version.json +++ b/version.json @@ -1,3 +1,3 @@ { - "version": "0.9.7" + "version": "0.9.7-1" } \ No newline at end of file From 79c257642c5d8eb3508032c74f9902c39ffe093a Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 9 May 2014 23:04:02 +0100 Subject: [PATCH 149/278] New: visual test for warning/critical state in CPLevelIndicator. This change makes sure there is both a level indicator which goes into warning and critical display mode for low levels and one which goes into the same for high levels in the manual test for level indicator. Refs #2071. --- .../CPLevelIndicator/Resources/MainMenu.cib | 2 +- .../CPLevelIndicator/Resources/MainMenu.xib | 4025 +++-------------- 2 files changed, 600 insertions(+), 3427 deletions(-) diff --git a/Tests/Manual/CPLevelIndicator/Resources/MainMenu.cib b/Tests/Manual/CPLevelIndicator/Resources/MainMenu.cib index df52dcdf8..64a5fc159 100644 --- a/Tests/Manual/CPLevelIndicator/Resources/MainMenu.cib +++ b/Tests/Manual/CPLevelIndicator/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;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;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;2;38E;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;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;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;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;2;85E;D;K;6;CP$UIDd;2;87E;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;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;3;118E;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;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;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;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;210E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;221E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;2;11E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;222E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;223E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;221E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;221E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;210E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;225E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;85E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;258E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;206E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;207E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;208E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;191E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;178E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;180E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;181E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;214E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;218E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;215E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;219E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;216E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;220E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;218E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;214E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;219E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;215E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;220E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;216E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;222E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;288E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;289E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;290E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;291E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;90E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;291E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;294E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;299E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;300E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;302E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;303E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;96E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;303E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;304E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;306E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;309E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;310E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;311E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;312E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;313E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;314E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;314E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;315E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;317E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;319E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;319E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;321E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;323E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;113E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;323E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;324E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;326E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;327E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;328E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;329E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;330E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;331E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;332E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;334E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;336E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;337E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;339E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;124E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;339E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;343E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;344E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;345E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;346E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;347E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;350E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;351E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;352E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;353E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;354E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;355E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;355E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;358E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;359E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;361E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;362E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;363E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;364E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;141E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;367E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;368E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;353E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;354E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;350E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;351E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;371E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;343E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;146E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;372E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;373E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;379E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;382E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;383E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;384E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;385E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;386E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;393E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;161E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;393E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;394E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;395E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;161E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;396E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;397E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;161E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;165E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;398E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;399E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;400E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;167E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;400E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;401E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;402E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;403E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;396E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;404E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;350E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;405E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;353E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;407E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;409E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;410E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;411E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;414E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;177E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;415E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;416E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;417E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;419E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;421E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;183E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;421E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;422E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;417E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;423E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;424E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;424E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;417E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;426E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;427E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;428E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;429E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;431E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;432E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;292E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;200E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;434E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;435E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;437E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;439E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;440E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;441E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;442E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;296E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;298E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;443E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;445E;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;445E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;447E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;448E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;449E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;450E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;451E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;347E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;452E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;212E;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;211E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;453E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;454E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;455E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;456E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;457E;E;D;K;10;$classnameS;16;CPLevelIndicatorK;8;$classesA;S;16;CPLevelIndicatorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;213E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;212E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;453E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;458E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;459E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;212E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;460E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;457E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;453E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;350E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;413E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;350E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;453E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;350E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;350E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;350E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;453E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;453E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;3;213E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;212E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;453E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;462E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;459E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;212E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;460E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;457E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;453E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;463E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;413E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;350E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;453E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;464E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;465E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;466E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;453E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;453E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;3;213E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;212E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;453E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;459E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;212E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;460E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;457E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;453E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;350E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;413E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;350E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;468E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;350E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;350E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;350E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;453E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;453E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;296E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;217E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;212E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;453E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;469E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;470E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;212E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;471E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;475E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;350E;K;11;$aalignmentD;K;6;CP$UIDd;3;413E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;296E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;297E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;476E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;296E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;296E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;296E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;478E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;350E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;413E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;217E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;212E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;453E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;470E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;212E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;471E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;475E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;350E;K;11;$aalignmentD;K;6;CP$UIDd;3;413E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;296E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;297E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;476E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;296E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;296E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;296E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;478E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;350E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;413E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;217E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;212E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;453E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;480E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;470E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;212E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;471E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;475E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;350E;K;11;$aalignmentD;K;6;CP$UIDd;3;413E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;296E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;297E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;476E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;296E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;296E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;296E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;478E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;350E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;413E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;481E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;210E;E;E;S;8;delegateS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;17;takeIntValueFrom:S;9;AMainMenuS;11;_CPMainMenuD;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;145E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;3;109E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;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;93E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;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;104E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;100E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;111E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;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;3;122E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;136E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;126E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;135E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;138E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;157E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;149E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;6;Print…S;1;pS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;154E;E;E;S;10;Clear MenuS;13;Page Setup...S;1;PS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;199E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;182E;D;K;6;CP$UIDd;3;187E;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;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;24;{{213, 163}, {448, 125}}S;22;{{0, 0}, {1920, 1178}}S;16;Level Indicatorsd;1;0S;21;{{7, 11}, {448, 125}}S;20;{{0, 0}, {448, 125}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;E;E;S;6;normalS;21;{{20, 22}, {304, 18}}S;19;{{0, 0}, {304, 18}}d;2;34S;15;level-indicatorS;21;{{20, 85}, {304, 18}}d;2;13d;2;50d;2;20d;2;10S;21;{{20, 54}, {304, 18}}d;2;-2S;22;{{328, 16}, {104, 29}}S;19;{{0, 0}, {104, 29}}d;2;33S;9;textfieldS;28;bezeled+editable+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;474E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;482E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;483E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;298E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;298E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;296E;E;d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;477E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;484E;E;S;22;{{328, 79}, {104, 29}}S;22;{{328, 47}, {104, 29}}S;13;AppControllerS;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;353E;E;E;E;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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;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;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;2;38E;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;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;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;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;2;86E;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;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;3;118E;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;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;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;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;211E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;224E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;91E;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;2;96E;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;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;105E;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;105E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;88E;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;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;2;11E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;225E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;226E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;224E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;224E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;211E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;206E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;209E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;86E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;258E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;191E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;196E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;183E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;178E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;180E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;181E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;172E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;173E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;174E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;215E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;219E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;216E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;220E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;217E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;221E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;219E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;215E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;220E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;216E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;221E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;217E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;223E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;221E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;225E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;291E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;292E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;293E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;294E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;91E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;91E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;294E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;297E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;299E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;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;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;303E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;304E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;97E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;305E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;306E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;308E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;309E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;310E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;309E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;312E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;313E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;315E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;105E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;105E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;315E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;317E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;318E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;319E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;320E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;321E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;109E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;109E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;321E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;322E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;323E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;324E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;326E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;327E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;328E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;331E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;332E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;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;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;333E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;334E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;331E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;335E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;336E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;120E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;120E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;337E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;339E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;340E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;342E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;331E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;344E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;346E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;347E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;350E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;351E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;352E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;352E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;354E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;359E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;361E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;331E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;365E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;367E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;368E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;138E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;138E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;368E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;138E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;371E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;138E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;373E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;138E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;375E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;138E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;144E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;144E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;376E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;377E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;144E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;379E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;144E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;359E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;361E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;144E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;331E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;381E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;149E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;149E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;381E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;382E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;149E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;149E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;385E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;385E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;386E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;155E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;155E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;387E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;388E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;389E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;397E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;361E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;399E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;400E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;401E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;402E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;403E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;165E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;165E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;403E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;407E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;171E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;171E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;409E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;410E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;411E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;176E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;176E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;412E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;413E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;414E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;416E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;417E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;419E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;346E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;421E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;155E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;422E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;188E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;422E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;423E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;424E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;425E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;426E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;427E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;428E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;429E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;430E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;431E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;432E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;346E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;433E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;188E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;433E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;435E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;198E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;435E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;436E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;437E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;439E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;202E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;202E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;439E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;440E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;441E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;443E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;300E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;445E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;208E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;295E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;208E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;446E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;447E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;208E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;449E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;296E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;210E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;450E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;451E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;452E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;453E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;454E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;364E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;455E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;213E;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;212E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;457E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;457E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;458E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;459E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;E;D;K;10;$classnameS;16;CPLevelIndicatorK;8;$classesA;S;16;CPLevelIndicatorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;461E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;462E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;464E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;459E;K;11;$aalignmentD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;456E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;358E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;401E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;358E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;456E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;358E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;358E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;358E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;456E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;456E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;465E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;462E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;464E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;459E;K;11;$aalignmentD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;456E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;466E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;401E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;358E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;456E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;467E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;468E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;469E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;456E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;456E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;470E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;462E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;464E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;459E;K;11;$aalignmentD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;456E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;358E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;401E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;358E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;471E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;472E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;473E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;364E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;456E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;456E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;300E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;474E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;477E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;401E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;358E;K;6;$afontD;K;6;CP$UIDd;3;480E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;300E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;301E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;401E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;300E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;300E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;300E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;482E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;358E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;401E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;483E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;477E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;401E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;358E;K;6;$afontD;K;6;CP$UIDd;3;480E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;300E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;301E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;401E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;300E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;300E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;300E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;482E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;358E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;401E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;484E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;477E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;401E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;358E;K;6;$afontD;K;6;CP$UIDd;3;480E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;300E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;301E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;401E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;300E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;300E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;300E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;482E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;358E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;401E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;485E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;486E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;477E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;459E;K;11;$aalignmentD;K;6;CP$UIDd;3;401E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;358E;K;6;$afontD;K;6;CP$UIDd;3;480E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;300E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;488E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;401E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;302E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;302E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;302E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;358E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;401E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;490E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;491E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;464E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;459E;K;11;$aalignmentD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;456E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;460E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;460E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;302E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;358E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;401E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;358E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;456E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;469E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;401E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;358E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;456E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;456E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;492E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;211E;E;E;S;8;delegateS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;17;takeIntValueFrom:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;207E;E;E;S;14;NewApplicationS;14;submenuAction:d;7;1048576S;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;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;E;E;S;20;About NewApplicationT;S;0;F;S;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;19;Hide NewApplicationS;1;hS;11;Hide Othersd;7;1572864S;8;Show AllS;19;Quit NewApplicationS;1;qS;4;FileD;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;107E;D;K;6;CP$UIDd;3;108E;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;E;E;S;3;NewS;1;nS;5;Open…S;1;oS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;4;SaveS;1;sS;8;Save As…S;1;Sd;7;1179648S;15;Revert to SavedS;13;Page Setup...S;1;PS;6;Print…S;1;pS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;137E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;148E;E;E;S;4;UndoS;1;zS;4;RedoS;1;ZS;3;CutS;1;xS;4;CopyS;1;cS;5;PasteS;1;vS;6;DeleteS;10;Select AllS;1;aS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;5;Find…d;1;1S;1;fS;9;Find Nextd;1;2S;1;gS;13;Find Previousd;1;3S;1;GS;22;Use Selection for Findd;1;7S;1;eS;17;Jump to SelectionS;1;jS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;14;Show Spelling…S;1;:S;14;Check SpellingS;1;;S;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;E;E;S;14;Start SpeakingS;13;Stop SpeakingS;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;187E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;170E;D;K;6;CP$UIDd;3;175E;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;E;E;S;10;Show FontsS;1;tS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;E;E;S;12;Show ToolbarS;18;Customize Toolbar…S;6;WindowS;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;8;MinimizeS;1;mS;4;ZoomS;18;Bring All to FrontS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;209E;E;E;S;19;NewApplication HelpS;1;?S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1881669632S;24;{{213, 114}, {448, 174}}S;22;{{0, 0}, {1920, 1178}}S;16;Level Indicatorsd;1;0S;20;{{0, 0}, {448, 174}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;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;E;E;S;6;normalS;6;{1, 1}S;21;{{20, 22}, {304, 18}}S;19;{{0, 0}, {304, 18}}d;2;34S;15;level-indicatorS;21;{{20, 85}, {304, 18}}d;2;13d;2;50d;2;20d;2;10S;21;{{20, 54}, {304, 18}}d;2;-2d;1;8d;1;5S;22;{{328, 16}, {104, 29}}S;19;{{0, 0}, {104, 29}}d;2;33S;9;textfieldS;28;bezeled+editable+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;479E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;493E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;466E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;302E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;302E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;302E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;481E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;494E;E;S;22;{{328, 79}, {104, 29}}S;22;{{328, 47}, {104, 29}}S;22;{{21, 113}, {372, 17}}S;19;{{0, 0}, {372, 17}}d;2;36S;62;This level indicator shows warning and critical at low levels.D;K;6;$classD;K;6;CP$UIDd;3;481E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;495E;E;S;22;{{20, 138}, {408, 18}}S;19;{{0, 0}, {408, 18}}S;13;AppControllerS;17;.Lucida Grande UID;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;496E;D;K;6;CP$UIDd;3;355E;E;E;f;18;0.6862745098039216E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPLevelIndicator/Resources/MainMenu.xib b/Tests/Manual/CPLevelIndicator/Resources/MainMenu.xib index e3a18a0a5..ef537378b 100644 --- a/Tests/Manual/CPLevelIndicator/Resources/MainMenu.xib +++ b/Tests/Manual/CPLevelIndicator/Resources/MainMenu.xib @@ -1,3426 +1,599 @@ - - - - 1050 - 10J3210 - 1306 - 1038.35 - 461.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1306 - - - YES - NSView - NSMenu - NSWindowTemplate - NSMenuItem - NSTextField - NSTextFieldCell - NSLevelIndicatorCell - NSLevelIndicator - NSCustomObject - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - - - 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 - - - - - - Preferences… - , - 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 - - - - - - Open… - 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 - - - - - - Save As… - S - 1179648 - 2147483647 - - - - - - Revert to Saved - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Page Setup... - P - 1179648 - 2147483647 - - - - - - - Print… - 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 - - - Find… - 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 - - - Show Spelling… - : - 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 - - - - - - Customize Toolbar… - - 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 - {{213, 890}, {448, 125}} - 1948778496 - Level Indicators - NSWindow - - - - 256 - - YES - - - 266 - {{20, 85}, {304, 18}} - - - - YES - - 130560 - 0 - - 2 - 2 - 2 - 2 - 2 - - - - - 266 - {{20, 22}, {304, 18}} - - - - YES - - 270663168 - 0 - - 13 - 50 - 20 - 10 - 2 - - - - - 266 - {{20, 53}, {304, 18}} - - - - YES - - 270663168 - 0 - - 2 - -2 - 2 - 2 - 2 - 2 - - - - - 265 - {{332, 83}, {96, 22}} - - - - YES - - -1804468671 - 272630784 - - - LucidaGrande - 13 - 1044 - - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - 3 - MAA - - - - - - - 265 - {{332, 20}, {96, 22}} - - - - YES - - -1804468671 - 272630784 - - - - YES - - - - - - - 265 - {{332, 52}, {96, 22}} - - - - YES - - -1804468671 - 272630784 - - - - YES - - - - - - {{7, 11}, {448, 125}} - - - - - {{0, 0}, {1920, 1178}} - {1e+13, 1e+13} - - - 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 - - - - takeIntValueFrom: - - - - 478 - - - - takeIntValueFrom: - - - - 479 - - - - takeIntValueFrom: - - - - 480 - - - - takeIntValueFrom: - - - - 481 - - - - takeIntValueFrom: - - - - 482 - - - - takeIntValueFrom: - - - - 483 - - - - - YES - - 0 - - - - - - -2 - - - File's Owner - - - -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 - - - - - 466 - - - YES - - - - - - 467 - - - YES - - - - - - 468 - - - YES - - - - - - 469 - - - YES - - - - - - 470 - - - YES - - - - - - 471 - - - YES - - - - - - 472 - - - - - 473 - - - - - 474 - - - - - 475 - - - - - 476 - - - - - 477 - - - - - - - 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.IBNSWindowAutoPositionCentersHorizontal - 371.IBNSWindowAutoPositionCentersVertical - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 371.editorWindowContentRectSynchronizationRect - 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 - 466.IBPluginDependency - 467.IBPluginDependency - 468.IBPluginDependency - 469.IBPluginDependency - 470.IBPluginDependency - 471.IBPluginDependency - 472.IBPluginDependency - 473.IBPluginDependency - 474.IBPluginDependency - 475.IBPluginDependency - 476.IBPluginDependency - 477.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.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - 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 - - {{303, 221}, {480, 360}} - - - com.apple.InterfaceBuilder.CocoaPlugin - {{303, 221}, {480, 360}} - - {{33, 99}, {480, 360}} - 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 - 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 - - - - - 483 - - - - YES - - AppController - NSObject - - IBProjectSource - ./Classes/AppController.h - - - - NSDocument - - YES - - YES - printDocument: - revertDocumentToSaved: - runPageLayout: - saveDocument: - saveDocumentAs: - saveDocumentTo: - - - YES - id - id - id - id - id - id - - - - YES - - YES - printDocument: - revertDocumentToSaved: - runPageLayout: - saveDocument: - saveDocumentAs: - saveDocumentTo: - - - YES - - printDocument: - id - - - revertDocumentToSaved: - id - - - runPageLayout: - id - - - saveDocument: - id - - - saveDocumentAs: - id - - - saveDocumentTo: - id - - - - - IBProjectSource - ./Classes/NSDocument.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - 3 - - YES - - YES - NSMenuCheckmark - NSMenuMixedState - - - YES - {9, 8} - {7, 2} - - - - + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c9642fcf35f67825d66aaa0db4d264e67e62bc25 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 9 May 2014 23:24:50 +0100 Subject: [PATCH 150/278] Test: CPLevelIndicatorTest. Refs #2071. --- Tests/AppKit/CPLevelIndicatorTest.j | 90 +++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Tests/AppKit/CPLevelIndicatorTest.j diff --git a/Tests/AppKit/CPLevelIndicatorTest.j b/Tests/AppKit/CPLevelIndicatorTest.j new file mode 100644 index 000000000..7047c8dea --- /dev/null +++ b/Tests/AppKit/CPLevelIndicatorTest.j @@ -0,0 +1,90 @@ +@import + +// You should never do this. This is only for testing purposes. +#define GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, i) [(levelIndicator) layoutEphemeralSubviewNamed:@"segment-bezel-" + (i) positioned:CPWindowAbove relativeToEphemeralSubviewNamed:"bezel"] + +@implementation CPLevelIndicatorTest : OJTestCase +{ +} + ++ (CPLevelIndicator)indicatorWithLowWarning +{ + var levelIndicator = [[CPLevelIndicator alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; + [levelIndicator setMinValue:0]; + [levelIndicator setMaxValue:10]; + [levelIndicator setWarningValue:4]; + [levelIndicator setCriticalValue:2]; + [levelIndicator setValue:[CPColor greenColor] forThemeAttribute:@"color-normal"]; + [levelIndicator setValue:[CPColor yellowColor] forThemeAttribute:@"color-warning"]; + [levelIndicator setValue:[CPColor redColor] forThemeAttribute:@"color-critical"]; + return levelIndicator; +} + ++ (CPLevelIndicator)indicatorWithHighWarning +{ + var levelIndicator = [self indicatorWithLowWarning]; + [levelIndicator setWarningValue:6]; + [levelIndicator setCriticalValue:8]; + return levelIndicator; +} + +- (void)testLevelIndicatorWithLowWarningAndCriticalShouldShowNormalColor +{ + var levelIndicator = [CPLevelIndicatorTest indicatorWithLowWarning]; + + [levelIndicator setObjectValue:5]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + [self assert:[CPColor greenColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; +} + +- (void)testLevelIndicatorWithLowWarningAndCriticalShouldShowWarningColor +{ + var levelIndicator = [CPLevelIndicatorTest indicatorWithLowWarning]; + + [levelIndicator setObjectValue:4]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + [self assert:[CPColor yellowColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; +} + +- (void)testLevelIndicatorWithLowWarningAndCriticalShouldShowCriticalColor +{ + var levelIndicator = [CPLevelIndicatorTest indicatorWithLowWarning]; + + [levelIndicator setObjectValue:2]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + [self assert:[CPColor redColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; +} + +- (void)testLevelIndicatorWithHighWarningAndCriticalShouldShowNormalColor +{ + var levelIndicator = [CPLevelIndicatorTest indicatorWithHighWarning]; + + [levelIndicator setObjectValue:5]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + [self assert:[CPColor greenColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; +} + +- (void)testLevelIndicatorWithHighWarningAndCriticalShouldShowWarningColor +{ + var levelIndicator = [CPLevelIndicatorTest indicatorWithHighWarning]; + + [levelIndicator setObjectValue:6]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + [self assert:[CPColor yellowColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; +} + +- (void)testLevelIndicatorWithHighWarningAndCriticalShouldShowCriticalColor +{ + var levelIndicator = [CPLevelIndicatorTest indicatorWithHighWarning]; + + [levelIndicator setObjectValue:8]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + [self assert:[CPColor redColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; +} +@end From 050fcf2ab8bc6e8927e626f17fabd5c937398111 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 15:48:37 +0100 Subject: [PATCH 151/278] New: `CPThemeStateFirstResponder` for CPView. When a CPView becomes the first responder it now takes on the 'first responder' theme state, as does all its subviews. This allows it to naturally change appearance when it has the keyboard focus, such as with focus rings and brighter colour schemes. --- AppKit/CPTheme.j | 1 + AppKit/CPView.j | 33 ++++++++ Tests/AppKit/CPViewTest.j | 157 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 191 insertions(+) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 090c0e067..345a3a56b 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -515,6 +515,7 @@ CPThemeStateVertical = CPThemeState("vertical"); CPThemeStateDefault = CPThemeState("default"); CPThemeStateCircular = CPThemeState("circular"); CPThemeStateAutocompleting = CPThemeState("autocompleting"); +CPThemeStateFirstResponder = CPThemeState("firstResponder"); CPThemeStateMainWindow = CPThemeState("mainWindow"); CPThemeStateKeyWindow = CPThemeState("keyWindow"); diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 323de0fa0..f03282cdc 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2928,6 +2928,39 @@ setBoundsOrigin: return YES; } +- (BOOL)becomeFirstResponder +{ + var r = [super becomeFirstResponder]; + if (r) + [self _notifyViewDidBecomeFirstResponder]; + return r; +} + +- (void)_notifyViewDidBecomeFirstResponder +{ + [self setThemeState:CPThemeStateFirstResponder]; + + var count = [_subviews count]; + while (count--) + [_subviews[count] _notifyViewDidBecomeFirstResponder]; +} + +- (BOOL)resignFirstResponder +{ + var r = [super resignFirstResponder]; + if (r) + [self _notifyViewDidResignFirstResponder]; + return r; +} + +- (void)_notifyViewDidResignFirstResponder +{ + [self unsetThemeState:CPThemeStateFirstResponder]; + + var count = [_subviews count]; + while (count--) + [_subviews[count] _notifyViewDidResignFirstResponder]; +} #pragma mark Theme Attributes + (CPString)defaultThemeClass diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 5c539859e..aefd611a0 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -244,5 +244,162 @@ [self assertTrue:CGPointEqualToPoint(CGPointMake(4, 6), [subView0 convertPoint:CGPointMake(7, 11) fromView:tView0])] } ++ (CPArray)createResponderView:(/*@ref */CPView)viewOut siblingView:(/*@ref */CPView)siblingViewOut inWindow:(/*@ref */CPWindow)windowOut +{ + var aView = [CPResponderView new], + siblingView = [CPResponderView new], + aWindow = [CPWindow new]; + + [[aWindow contentView] addSubview:aView]; + [[aWindow contentView] addSubview:siblingView]; + + if (viewOut) + @deref(viewOut) = aView; + if (siblingViewOut) + @deref(siblingViewOut) = siblingView; + if (windowOut) + @deref(windowOut) = aWindow; + + return aView; +} + +- (void)testWhenFirstResponderShouldHaveThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + [self assertFalse:[aView hasThemeState:CPThemeStateFirstResponder]]; + [self assertFalse:[siblingView hasThemeState:CPThemeStateFirstResponder]]; + + [aWindow makeFirstResponder:aView]; + [self assertTrue:[aView hasThemeState:CPThemeStateFirstResponder]]; + + [aWindow makeFirstResponder:siblingView]; + [self assertTrue:[siblingView hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testWhenChildOfFirstResponderShouldHaveThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + var subview = [CPView new]; + [aView addSubview:subview]; + + [aWindow makeFirstResponder:aView]; + [self assertTrue:[aView hasThemeState:CPThemeStateFirstResponder]]; + [self assertTrue:[subview hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testWhenNotFirstResponderShouldLoseThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + [aWindow makeFirstResponder:aView]; + [self assertFalse:[siblingView hasThemeState:CPThemeStateFirstResponder]]; + + [aWindow makeFirstResponder:siblingView]; + [self assertFalse:[aView hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testWhenNotChildOfFirstResponderShouldLoseThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + var subview = [CPView new]; + [aView addSubview:subview]; + + [aWindow makeFirstResponder:aView]; + [self assertTrue:[aView hasThemeState:CPThemeStateFirstResponder]]; + [self assertTrue:[subview hasThemeState:CPThemeStateFirstResponder]]; + + [aWindow makeFirstResponder:siblingView]; + [self assertFalse:[aView hasThemeState:CPThemeStateFirstResponder]]; + [self assertFalse:[subview hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testWhenFirstResponderButNotKeyWindowShouldStillHaveThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + var aView2, siblingView2, aWindow2; + [CPViewTest createResponderView:@ref(aView2) siblingView:@ref(siblingView2) inWindow:@ref(aWindow2)]; + + [aWindow makeKeyWindow]; + [aWindow makeFirstResponder:aView]; + [self assertTrue:[aView hasThemeState:CPThemeStateFirstResponder]]; + + [aWindow2 makeFirstResponder:siblingView]; + [aWindow2 makeKeyWindow]; + + [self assertTrue:[aView hasThemeState:CPThemeStateFirstResponder]]; + [self assertTrue:[siblingView hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testWhenChildOfFirstResponderButNotKeyWindowShouldStillHaveThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + var subview = [CPView new]; + [aView addSubview:subview]; + + var aView2, siblingView2, aWindow2; + [CPViewTest createResponderView:@ref(aView2) siblingView:@ref(siblingView2) inWindow:@ref(aWindow2)]; + + [aWindow makeKeyWindow]; + [aWindow makeFirstResponder:aView]; + [aWindow2 makeFirstResponder:siblingView]; + [aWindow2 makeKeyWindow]; + [self assertTrue:[subview hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testWhenNotFirstResponderButNotKeyWindowShouldStillLoseThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + var aView2, siblingView2, aWindow2; + [CPViewTest createResponderView:@ref(aView2) siblingView:@ref(siblingView2) inWindow:@ref(aWindow2)]; + + [aWindow makeKeyWindow]; + [aWindow makeFirstResponder:aView]; + [aWindow2 makeFirstResponder:siblingView]; + [aWindow2 makeKeyWindow]; + [aWindow makeFirstResponder:siblingView]; + + [self assertFalse:[aView hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testWhenNotChildOfFirstResponderButNotKeyWindowShouldShouldStillLoseThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + var subview = [CPView new]; + [aView addSubview:subview]; + + var aView2, siblingView2, aWindow2; + [CPViewTest createResponderView:@ref(aView2) siblingView:@ref(siblingView2) inWindow:@ref(aWindow2)]; + + [aWindow makeKeyWindow]; + [aWindow makeFirstResponder:aView]; + [aWindow2 makeFirstResponder:siblingView]; + [aWindow2 makeKeyWindow]; + [aWindow makeFirstResponder:siblingView]; + + [self assertFalse:[subview hasThemeState:CPThemeStateFirstResponder]]; +} + @end + +@implementation CPResponderView : CPView + +- (BOOL)acceptsFirstResponder +{ + return YES; +} + +@end \ No newline at end of file From 025a43ea4ec6e7f821abc3067f17c301df00a1cb Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 15:50:59 +0100 Subject: [PATCH 152/278] New: `CPThemeStateKeyWindow` for CPView. Every view in the key window now takes on the 'key window' theme state. This makes it easy to theme everything in inactive windows in more muted colours. Also, combined with the first responder theme state of the previous commit we can have visuals like "first responder but in an inactive window" for text views and such things. --- AppKit/CPView.j | 19 +++++++++++++++++++ AppKit/CPWindow/CPWindow.j | 2 ++ Tests/AppKit/CPViewTest.j | 26 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index f03282cdc..fd1576753 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2961,6 +2961,25 @@ setBoundsOrigin: while (count--) [_subviews[count] _notifyViewDidResignFirstResponder]; } + +- (void)_notifyWindowDidBecomeKey +{ + [self setThemeState:CPThemeStateKeyWindow]; + + var count = [_subviews count]; + while (count--) + [_subviews[count] _notifyWindowDidBecomeKey]; +} + +- (void)_notifyWindowDidResignKey +{ + [self unsetThemeState:CPThemeStateKeyWindow]; + + var count = [_subviews count]; + while (count--) + [_subviews[count] _notifyWindowDidResignKey]; +} + #pragma mark Theme Attributes + (CPString)defaultThemeClass diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 4066e28f5..86cfa393d 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -1965,6 +1965,7 @@ CPTexturedBackgroundWindowMask _hasBecomeKeyWindow = YES; [_windowView noteKeyWindowStateChanged]; + [_contentView _notifyWindowDidBecomeKey]; [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidBecomeKeyNotification @@ -2033,6 +2034,7 @@ CPTexturedBackgroundWindowMask CPApp._keyWindow = nil; [_windowView noteKeyWindowStateChanged]; + [_contentView _notifyWindowDidResignKey]; [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidResignKeyNotification diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index aefd611a0..8d23e379c 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -244,6 +244,7 @@ [self assertTrue:CGPointEqualToPoint(CGPointMake(4, 6), [subView0 convertPoint:CGPointMake(7, 11) fromView:tView0])] } + + (CPArray)createResponderView:(/*@ref */CPView)viewOut siblingView:(/*@ref */CPView)siblingViewOut inWindow:(/*@ref */CPWindow)windowOut { var aView = [CPResponderView new], @@ -392,6 +393,31 @@ [self assertFalse:[subview hasThemeState:CPThemeStateFirstResponder]]; } +- (void)testWhenAndOnlyWhenWindowIsKeyEveryViewShouldHaveThemeStateKeyWindow +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + var subview = [CPView new]; + [aView addSubview:subview]; + + var aView2, siblingView2, aWindow2; + [CPViewTest createResponderView:@ref(aView2) siblingView:@ref(siblingView2) inWindow:@ref(aWindow2)]; + + [aWindow makeKeyWindow]; + [self assertTrue:[aView hasThemeState:CPThemeStateKeyWindow]]; + [self assertTrue:[siblingView hasThemeState:CPThemeStateKeyWindow]]; + [self assertTrue:[subview hasThemeState:CPThemeStateKeyWindow]]; + [self assertFalse:[aView2 hasThemeState:CPThemeStateKeyWindow]]; + [self assertFalse:[siblingView2 hasThemeState:CPThemeStateKeyWindow]]; + + [aWindow2 makeKeyWindow]; + [self assertFalse:[aView hasThemeState:CPThemeStateKeyWindow]]; + [self assertFalse:[siblingView hasThemeState:CPThemeStateKeyWindow]]; + [self assertFalse:[subview hasThemeState:CPThemeStateKeyWindow]]; + [self assertTrue:[aView2 hasThemeState:CPThemeStateKeyWindow]]; + [self assertTrue:[siblingView2 hasThemeState:CPThemeStateKeyWindow]]; +} @end From e7a0e9ac708945a5f8451f9302e1b42732c16b4f Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 16:39:08 +0100 Subject: [PATCH 153/278] Fixed: nib2cib "The built in image NSRadioButton is not supported" error. The nib2cib change which introduced support for the plus and minus template images in nib2cib also broke support for converting radio groups. This fix restores that support. --- Tools/nib2cib/NSCustomResource.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/nib2cib/NSCustomResource.j b/Tools/nib2cib/NSCustomResource.j index d97d2a1b9..27155fb32 100644 --- a/Tools/nib2cib/NSCustomResource.j +++ b/Tools/nib2cib/NSCustomResource.j @@ -51,7 +51,7 @@ var FILE = require("file"), framework = @"", bundleIdentifier = @""; - if (_resourceName == "NSSwitch") + if (_resourceName == "NSSwitch" || _resourceName == "NSRadioButton") return nil; else if (/^NS[A-Z][A-Za-z]+$/.test(_resourceName)) { From 0cc1679f64a7ded13f57c132dda9df991e91ccab Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 16:39:53 +0100 Subject: [PATCH 154/278] New: nib2cib support for the standard color panel toolbar item. --- Tools/nib2cib/NSCustomResource.j | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Tools/nib2cib/NSCustomResource.j b/Tools/nib2cib/NSCustomResource.j index 27155fb32..7f4f6d1fc 100644 --- a/Tools/nib2cib/NSCustomResource.j +++ b/Tools/nib2cib/NSCustomResource.j @@ -31,10 +31,11 @@ var FILE = require("file"), imageSize = require("cappuccino/imagesize").imagesize, - supportedTemplateImages = [ - "NSAddTemplate", - "NSRemoveTemplate" - ]; + supportedTemplateImages = { + "NSAddTemplate": "CPAddTemplate", + "NSRemoveTemplate": "CPRemoveTemplate", + "NSToolbarShowColors": "CPImageNameColorPanel" + }; @implementation _CPCibCustomResource (NSCoding) @@ -55,10 +56,10 @@ var FILE = require("file"), return nil; else if (/^NS[A-Z][A-Za-z]+$/.test(_resourceName)) { - if (supportedTemplateImages.indexOf(_resourceName) >= 0) + if (supportedTemplateImages[_resourceName]) { // Defer resolving this path until runtime. - _resourceName = _resourceName.replace("NS", "CP"); + _resourceName = supportedTemplateImages[_resourceName]; } else [CPException raise:Nib2CibException format:@"The built in image “%@” is not supported.", _resourceName]; From b28e0d15d8ef8232de4790fcb0d60dd8808c3cf2 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 21:34:26 +0100 Subject: [PATCH 155/278] Fixed: nib2cib of date picker would not convert enabled state. Without this fix, if a disabled date picker was converted with nib2cib it would come out enabled. --- Tools/nib2cib/NSDatePicker.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/nib2cib/NSDatePicker.j b/Tools/nib2cib/NSDatePicker.j index 3e80b0fef..5a89f8f26 100644 --- a/Tools/nib2cib/NSDatePicker.j +++ b/Tools/nib2cib/NSDatePicker.j @@ -58,6 +58,7 @@ var NSDatePickerDefaultSize = 22, [self setBezeled:[cell isBezeled]]; [self setBordered:[cell isBordered]]; + [self setEnabled:[cell isEnabled]]; var theme = [Nib2Cib defaultTheme]; From 7fc014f5d94691ce03957143e1eff451b04a6133 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 22:09:23 +0100 Subject: [PATCH 156/278] Fixed: contentInset theme value read 2x in tool bar. --- AppKit/CPToolbar.j | 1 - 1 file changed, 1 deletion(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 1506df9e8..3cc711518 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -843,7 +843,6 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) var index = 0, count = _visibleItems.length, x = contentInset.left, - contentInset = [self valueForThemeAttribute:@"content-inset"], y = contentInset.top; for (; index < count; ++index) From d46b9b5aad1069ee7b8278fc7dd5e0df935579a9 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 22:11:08 +0100 Subject: [PATCH 157/278] Fixed: text date picker stepper incorrectly enabled after decode. Without this fix the textual date picker would properly disable the text field bit but not its stepper when unarchived. --- AppKit/CPDatePicker/CPDatePicker.j | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/AppKit/CPDatePicker/CPDatePicker.j b/AppKit/CPDatePicker/CPDatePicker.j index c4442a7b1..d9b5b3094 100644 --- a/AppKit/CPDatePicker/CPDatePicker.j +++ b/AppKit/CPDatePicker/CPDatePicker.j @@ -216,6 +216,9 @@ CPEraDatePickerElementFlag = 0x0100; [_datePickerCalendar setHidden:YES]; [self addSubview:_datePickerCalendar]; + // We might have been unarchived in a disabled state. + [_datePickerTextfield setEnabled:[self isEnabled]]; + [self setNeedsDisplay:YES]; [self setNeedsLayout]; } @@ -651,7 +654,9 @@ var CPDatePickerModeKey = @"CPDatePickerModeKey", - (void)encodeWithCoder:(CPCoder)aCoder { + // FIXME Do we need to encode _datePickerTextfield and _datePickerCalendar? As subviews they'll be encoded, but when we decode we recreate them anyhow. [super encodeWithCoder:aCoder]; + [aCoder encodeDouble:_timeInterval forKey:CPIntervalKey]; [aCoder encodeInt:_datePickerMode forKey:CPDatePickerModeKey]; [aCoder encodeInt:_datePickerStyle forKey:CPDatePickerStyleKey]; @@ -664,6 +669,7 @@ var CPDatePickerModeKey = @"CPDatePickerModeKey", [aCoder encodeObject:_backgroundColor forKey:CPBackgroundColorKey]; [aCoder encodeObject:_drawsBackground forKey:CPDrawsBackgroundKey]; [aCoder encodeObject:_isBordered forKey:CPBorderedKey]; + } @end From 61f6ef4c1999c6699af28533eaaa0b5bc446a7d2 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 22:11:43 +0100 Subject: [PATCH 158/278] Fixed: crash in CALayer when running non-DOM platform. --- AppKit/CoreAnimation/CALayer.j | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AppKit/CoreAnimation/CALayer.j b/AppKit/CoreAnimation/CALayer.j index dbe2c3dee..433a36253 100644 --- a/AppKit/CoreAnimation/CALayer.j +++ b/AppKit/CoreAnimation/CALayer.j @@ -498,6 +498,7 @@ var CALayerRegisteredRunLoopUpdates = nil; { _context = CGBitmapGraphicsContextCreate(); +#if PLATFORM(DOM) _DOMContentsElement = _context.DOMElement; _DOMContentsElement.style.zIndex = -100; @@ -515,6 +516,7 @@ var CALayerRegisteredRunLoopUpdates = nil; _DOMContentsElement.style.height = ROUND(CGRectGetHeight(_backingStoreFrame)) + "px"; _DOMElement.appendChild(_DOMContentsElement); +#endif } if (USE_BUFFER) @@ -1036,6 +1038,7 @@ function _CALayerUpdateSublayerTransformForSublayers(aLayer) function _CALayerUpdateDOM(aLayer, aMask) { +#if PLATFORM(DOM) var DOMElementStyle = aLayer._DOMElement.style; if (aMask & CALayerZPositionUpdateMask) @@ -1066,6 +1069,7 @@ function _CALayerUpdateDOM(aLayer, aMask) DOMContentsElement.style.height = height + "px"; } } +#endif } function _CALayerRecalculateGeometry(aLayer, aGeometryChange) From c28da782942b5f5b771d422a8ab0f2bea0f9baca Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 11 May 2014 22:17:32 +0100 Subject: [PATCH 159/278] Fixed: nib2cib of segmented control would not convert enabled state. --- Tools/nib2cib/NSSegmentedControl.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/nib2cib/NSSegmentedControl.j b/Tools/nib2cib/NSSegmentedControl.j index 27abc164b..95ca6902c 100644 --- a/Tools/nib2cib/NSSegmentedControl.j +++ b/Tools/nib2cib/NSSegmentedControl.j @@ -72,6 +72,7 @@ frame.size.height += 1; frame.size.width = originalWidth; + [self setEnabled:[cell isEnabled]]; [self setFrame:frame]; } From ba27a4cc4ab80b19ee3d92a4f3389e3ded8b8831 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 12 May 2014 15:17:49 +0100 Subject: [PATCH 160/278] Fixed: new first responder and key window theme states not always applied. --- AppKit/CPView.j | 29 ++++++++++++++++++++++++++--- Tests/AppKit/CPViewTest.j | 27 +++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index fd1576753..5e1357ccf 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -343,6 +343,9 @@ var CPViewFlags = { }, _scaleSize = CGSizeMake(1.0, 1.0); _isScaled = NO; + _theme = [CPTheme defaultTheme]; + _themeState = CPThemeStateNormal; + #if PLATFORM(DOM) _DOMElement = DOMElementPrototype.cloneNode(false); AppKitTagDOMElement(self, _DOMElement); @@ -354,9 +357,6 @@ var CPViewFlags = { }, _DOMImageSizes = []; #endif - _theme = [CPTheme defaultTheme]; - _themeState = CPThemeStateNormal; - [self _setupToolTipHandlers]; [self _setupViewFlags]; @@ -577,6 +577,21 @@ var CPViewFlags = { }, if (![aSubview isHidden] && [self isHiddenOrHasHiddenAncestor]) [aSubview _notifyViewDidHide]; + // This method might be called before we are fully unarchived, in which case the theme state isn't set up yet + // and none of the below matters anyhow. + if (_themeState) + { + if ([self hasThemeState:CPThemeStateFirstResponder]) + [aSubview _notifyViewDidBecomeFirstResponder]; + else + [aSubview _notifyViewDidResignFirstResponder]; + + if ([self hasThemeState:CPThemeStateKeyWindow]) + [aSubview _notifyWindowDidBecomeKey]; + else + [aSubview _notifyWindowDidResignKey]; + } + [aSubview viewDidMoveToSuperview]; [self didAddSubview:aSubview]; @@ -615,6 +630,9 @@ var CPViewFlags = { }, if (!_isHidden && [_superview isHiddenOrHasHiddenAncestor]) [self _notifyViewDidUnhide]; + [self _notifyWindowDidResignKey]; + [self _notifyViewDidResignFirstResponder]; + _superview = nil; [self _setWindow:nil]; @@ -736,6 +754,11 @@ var CPViewFlags = { }, while (count--) [_subviews[count] _setWindow:aWindow]; + if ([_window isKeyWindow]) + [self setThemeState:CPThemeStateKeyWindow]; + else + [self unsetThemeState:CPThemeStateKeyWindow]; + [self viewDidMoveToWindow]; [[self window] _dirtyKeyViewLoop]; diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 8d23e379c..509664c4b 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -419,6 +419,33 @@ [self assertTrue:[siblingView2 hasThemeState:CPThemeStateKeyWindow]]; } +- (void)testWhenFirstResponderBeforeBeingAddedSubviewShouldHaveThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + [self assertFalse:[aView hasThemeState:CPThemeStateFirstResponder]]; + [self assertFalse:[siblingView hasThemeState:CPThemeStateFirstResponder]]; + + [aWindow makeFirstResponder:aView]; + + var subview = [CPView new]; + [aView addSubview:subview]; + [self assertTrue:[subview hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testWhenRemovedSubviewShouldLoseThemeStateFirstResponder +{ + var aView, siblingView, aWindow; + [CPViewTest createResponderView:@ref(aView) siblingView:@ref(siblingView) inWindow:@ref(aWindow)]; + + [aWindow makeFirstResponder:aView]; + var subview = [CPView new]; + [aView addSubview:subview]; + [subview removeFromSuperview]; + [self assertFalse:[subview hasThemeState:CPThemeStateFirstResponder]]; +} + @end @implementation CPResponderView : CPView From a4702d48b478cf28b6c76adb383307c1b35dc31f Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 12 May 2014 15:21:08 +0100 Subject: [PATCH 161/278] Fixed: illegible white on grey text in table view. If a table view row is selected its text will turn white to offset against the blue selection colour. However, when the table is not the first responder, or the window is in is not the key window, the light grey highlight colour is used instead, but the text remains white. This fix ensures the text becomes black in this case by utilising the new first responder and key window theme states. Fixes #2009, fixes #2001. --- AppKit/CPTableView.j | 22 ++-------------------- AppKit/CPTextField.j | 2 +- AppKit/Themes/Aristo2/ThemeDescriptors.j | 17 +++++++++++------ 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 0cbd6dfd2..90afa2ee4 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -5096,24 +5096,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self setNeedsDisplay:YES]; } -/*! - @ignore -*/ -- (BOOL)becomeFirstResponder -{ - [self setNeedsDisplay:YES]; - return YES; -} - -/*! - @ignore -*/ -- (BOOL)resignFirstResponder -{ - [self setNeedsDisplay:YES]; - return YES; -} - /*! @ignore */ @@ -6244,7 +6226,7 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", - (BOOL)setThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) + if (aState.isa && [aState isKindOfClass:CPArray]) aState = CPThemeState.apply(null, aState); [super setThemeState:aState]; @@ -6253,7 +6235,7 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", - (BOOL)unsetThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) + if (aState.isa && [aState isKindOfClass:CPArray]) aState = CPThemeState.apply(null, aState); [super unsetThemeState:aState]; diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 092c185cd..13526da50 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -546,7 +546,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); /*! @ignore */ - (BOOL)becomeFirstResponder { - if (![self isEnabled]) + if (![self isEnabled] || ![super becomeFirstResponder]) return NO; // As long as we are the first responder we need to monitor the key status of our window. diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index 093a6da39..a970a203e 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -559,19 +559,19 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], - [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditing]], - [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditing, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), [CPThemeStateTableDataView, CPThemeStateEditable]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), [CPThemeStateTableDataView, CPThemeStateEditing]], [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow]], - [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], - [@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], + [@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]], [@"text-shadow-offset", CGSizeMake(0, 1), [CPThemeStateTableDataView, CPThemeStateGroupRow]], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateGroupRow]] ]; @@ -2121,6 +2121,11 @@ var themedButtonValues = nil, orientation: PatternIsHorizontal }), + /*solidColor = CustomDrawView(function(drawView) { + var gradient = [[CPGradient alloc] initWithStartingColor:[CPColor colorWithCalibratedRed:0.902 green:0.902 blue:0.902 alpha:1] endingColor:[CPColor colorWithCalibratedRed:0.878 green:0.878 blue:0.878 alpha:1]]; + [gradient drawInRect:[drawView bounds] angle:90]; + }),*/ + solidColor = PatternColor( "window-standard-head-solid{position}.png", { From c04041f11027898bd96b6b05466b7189f94fa0b2 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 12 May 2014 15:21:35 +0100 Subject: [PATCH 162/278] New: ensure new first responder and key window states work well with all widgets. --- AppKit/CPDatePicker/CPDatePicker.j | 12 ++++++++---- AppKit/CPDatePicker/_CPDatePickerCalendar.j | 5 ----- AppKit/CPTokenField.j | 3 +++ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/AppKit/CPDatePicker/CPDatePicker.j b/AppKit/CPDatePicker/CPDatePicker.j index d9b5b3094..922e8cbd9 100644 --- a/AppKit/CPDatePicker/CPDatePicker.j +++ b/AppKit/CPDatePicker/CPDatePicker.j @@ -532,11 +532,15 @@ CPEraDatePickerElementFlag = 0x0100; - (BOOL)becomeFirstResponder { if (_datePickerStyle == CPTextFieldAndStepperDatePickerStyle || _datePickerStyle == CPTextFieldDatePickerStyle) - [_datePickerTextfield _selecteTextFieldWithFlags:[[CPApp currentEvent] modifierFlags]]; - else - return NO; + { + if ([super becomeFirstResponder]) + return NO; - return YES; + [_datePickerTextfield _selecteTextFieldWithFlags:[[CPApp currentEvent] modifierFlags]]; + return YES; + } + + return NO; } /*! Return YES diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index 890945b84..a7e444ca8 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -118,11 +118,6 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" #pragma mark - #pragma mark Responder methods -- (BOOL)becomeFirstResponder -{ - return YES; -} - - (BOOL)acceptsFirstResponder { return YES; diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 1f6f054ca..9e9ba617e 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -381,6 +381,9 @@ CPTokenFieldDeleteButtonType = 1; - (BOOL)becomeFirstResponder { + if (![super becomeFirstResponder]) + return NO; + #if PLATFORM(DOM) if (CPTokenFieldInputOwner && [CPTokenFieldInputOwner window] !== [self window]) [[CPTokenFieldInputOwner window] makeFirstResponder:nil]; From 02f36a1abed2fa22ab04afa82b48cf0ef1e3740c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 12 May 2014 15:22:39 +0100 Subject: [PATCH 163/278] New: theme kitchen sink manual test to exercise many themable controls in many states at once. This test makes it easier to verify themes and theme tweaks. --- Tests/Manual/ThemeKitchenSink/AppController.j | 40 + Tests/Manual/ThemeKitchenSink/Info.plist | 14 + Tests/Manual/ThemeKitchenSink/Jakefile | 184 +++ .../ThemeKitchenSink/Resources/MainMenu.cib | 1 + .../ThemeKitchenSink/Resources/MainMenu.xib | 1032 +++++++++++++++++ .../Manual/ThemeKitchenSink/index-debug.html | 191 +++ Tests/Manual/ThemeKitchenSink/index.html | 161 +++ Tests/Manual/ThemeKitchenSink/main.j | 18 + 8 files changed, 1641 insertions(+) create mode 100644 Tests/Manual/ThemeKitchenSink/AppController.j create mode 100644 Tests/Manual/ThemeKitchenSink/Info.plist create mode 100644 Tests/Manual/ThemeKitchenSink/Jakefile create mode 100644 Tests/Manual/ThemeKitchenSink/Resources/MainMenu.cib create mode 100644 Tests/Manual/ThemeKitchenSink/Resources/MainMenu.xib create mode 100644 Tests/Manual/ThemeKitchenSink/index-debug.html create mode 100644 Tests/Manual/ThemeKitchenSink/index.html create mode 100644 Tests/Manual/ThemeKitchenSink/main.j diff --git a/Tests/Manual/ThemeKitchenSink/AppController.j b/Tests/Manual/ThemeKitchenSink/AppController.j new file mode 100644 index 000000000..6252c96bb --- /dev/null +++ b/Tests/Manual/ThemeKitchenSink/AppController.j @@ -0,0 +1,40 @@ +/* + * AppController.j + * ThemeKitchenSink + * + * Created by Alexander Ljungberg on May 11, 2014. + * Copyright 2014, SlevenBits, Ltd. All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow window1; + @outlet CPWindow window2; + @outlet CPTableView tableView; + @outlet CPOutlineView outlineView; + @outlet CPTokenField tokenField; + @outlet CPArrayController arrayController1; +} + +- (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. + [arrayController1 setContent:@[ + @{'animal': 'cat', 'legs': 4}, + @{'animal': 'duck', 'legs': 2}, + @{'animal': 'centipede', 'legs': 100}, + ]]; +} + +@end diff --git a/Tests/Manual/ThemeKitchenSink/Info.plist b/Tests/Manual/ThemeKitchenSink/Info.plist new file mode 100644 index 000000000..bbca098f7 --- /dev/null +++ b/Tests/Manual/ThemeKitchenSink/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + ThemeKitchenSink + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, SlevenBits, Ltd. All rights reserved. + + diff --git a/Tests/Manual/ThemeKitchenSink/Jakefile b/Tests/Manual/ThemeKitchenSink/Jakefile new file mode 100644 index 000000000..3fde4dff5 --- /dev/null +++ b/Tests/Manual/ThemeKitchenSink/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * ThemeKitchenSink + * + * Created by Alexander Ljungberg on May 11, 2014. + * Copyright 2014, SlevenBits, Ltd. All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "ThemeKitchenSink"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "ThemeKitchenSink.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("ThemeKitchenSink"); + task.setIdentifier("com.yourcompany.ThemeKitchenSink"); + task.setVersion("1.0"); + task.setAuthor("SlevenBits, Ltd."); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("ThemeKitchenSink"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "ThemeKitchenSink.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "ThemeKitchenSink.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (ENV["CONFIGURATION"] === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.cib b/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.cib new file mode 100644 index 000000000..f5f08f607 --- /dev/null +++ b/Tests/Manual/ThemeKitchenSink/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;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;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;2;38E;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;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;60E;D;K;6;CP$UIDd;2;61E;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;2;62E;D;K;6;CP$UIDd;2;64E;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;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;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;3;118E;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;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;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;1;0E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;1;0E;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;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;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;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;175E;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;1;0E;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;1;0E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;3;197E;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;3;198E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;1;0E;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;1;0E;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;215E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;229E;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;235E;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;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;1;0E;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;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;109E;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;2;86E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;2;11E;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;181E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;215E;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;235E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;192E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;270E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;211E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;259E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;221E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;145E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;212E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;180E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;185E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;62E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;87E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;312E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;223E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;314E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;315E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;224E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;314E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;319E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;321E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;322E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;323E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;324E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;67E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;324E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;327E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;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;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;333E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;334E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;335E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;336E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;74E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;74E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;337E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;339E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;340E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;342E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;78E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;78E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;343E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;344E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;345E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;346E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;347E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;350E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;352E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;354E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;355E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;86E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;86E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;355E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;364E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;366E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;368E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;369E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;97E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;370E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;371E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;375E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;376E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;379E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;380E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;381E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;382E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;383E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;385E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;386E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;104E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;104E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;386E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;387E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;393E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;110E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;395E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;397E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;376E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;379E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;380E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;399E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;399E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;400E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;401E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;402E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;403E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;403E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;407E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;123E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;409E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;410E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;413E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;414E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;416E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;129E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;416E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;417E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;419E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;3;171E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;421E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;422E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;382E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;424E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;134E;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;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;430E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;431E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;7;$aimageD;K;6;CP$UIDd;3;438E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;440E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;442E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;443E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;444E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;7;$aimageD;K;6;CP$UIDd;3;445E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;446E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;447E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;448E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;444E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;449E;K;7;$aimageD;K;6;CP$UIDd;3;450E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;451E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;455E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;458E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;459E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;461E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;461E;E;D;K;10;$classnameS;13;CPSearchFieldK;8;$classesA;S;13;CPSearchFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;462E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;465E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;332E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;466E;E;D;K;10;$classnameS;12;CPTokenFieldK;8;$classesA;S;12;CPTokenFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;468E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;469E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;425E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;470E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;1;0E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;1;0E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPComboBoxK;8;$classesA;S;10;CPComboBoxS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;472E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;473E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;475E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;476E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;332E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;332E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;477E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;330E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;148E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;482E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;425E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;425E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;425E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;485E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;486E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;487E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;484E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;488E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;489E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;491E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;492E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;152E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;267E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;493E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;494E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;496E;K;7;$aimageD;K;6;CP$UIDd;3;497E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;498E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;499E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;502E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;503E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;504E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;505E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;506E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;507E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;508E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;16;CPLevelIndicatorK;8;$classesA;S;16;CPLevelIndicatorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;510E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;511E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;512E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;376E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;376E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;425E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;439E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;376E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;376E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;425E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;425E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;513E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;514E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;519E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;522E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;10;$classnameS;19;CPProgressIndicatorK;8;$classesA;S;19;CPProgressIndicatorS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;526E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;9;_minValueD;K;6;CP$UIDd;3;425E;K;9;_maxValueD;K;6;CP$UIDd;3;517E;K;12;_doubleValueD;K;6;CP$UIDd;3;425E;K;12;_controlSizeD;K;6;CP$UIDd;3;425E;K;14;_indeterminateD;K;6;CP$UIDd;3;330E;K;6;_styleD;K;6;CP$UIDd;3;425E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;527E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;529E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;530E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;491E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;532E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;330E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;9;CPToolbarK;8;$classesA;S;9;CPToolbarS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;22;CPToolbarIdentifierKeyD;K;6;CP$UIDd;3;533E;K;23;CPToolbarDisplayModeKeyD;K;6;CP$UIDd;3;373E;K;34;CPToolbarShowsBaselineSeparatorKeyD;K;6;CP$UIDd;3;330E;K;35;CPToolbarAllowsUserCustomizationKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarIsVisibleKeyD;K;6;CP$UIDd;3;330E;K;20;CPToolbarSizeModeKeyD;K;6;CP$UIDd;3;373E;K;27;CPToolbarIdentifiedItemsKeyD;K;6;CP$UIDd;3;535E;K;24;CPToolbarDefaultItemsKeyD;K;6;CP$UIDd;3;536E;K;24;CPToolbarAllowedItemsKeyD;K;6;CP$UIDd;3;537E;K;27;CPToolbarSelectableItemsKeyD;K;6;CP$UIDd;3;538E;K;20;CPToolbarDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPToolbarItemK;8;$classesA;S;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;539E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;540E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;540E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;541E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;542E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;543E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;545E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;546E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;546E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;19;_CPToolbarSpaceItemK;8;$classesA;S;19;_CPToolbarSpaceItemS;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;174E;E;D;K;10;$classnameS;27;_CPToolbarFlexibleSpaceItemK;8;$classesA;S;27;_CPToolbarFlexibleSpaceItemS;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;547E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;548E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;548E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;1;0E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;425E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;1;0E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;3;179E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;549E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;549E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;498E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;332E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;3;205E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;421E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;422E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;382E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;552E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;430E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;431E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;7;$aimageD;K;6;CP$UIDd;3;555E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;440E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;442E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;443E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;556E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;7;$aimageD;K;6;CP$UIDd;3;557E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;446E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;447E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;448E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;556E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;449E;K;7;$aimageD;K;6;CP$UIDd;3;558E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;451E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;559E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;458E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;459E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;560E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;461E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;461E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;462E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;561E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;465E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;332E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;468E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;560E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;562E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;425E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;470E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;1;0E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;1;0E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;472E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;473E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;563E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;475E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;564E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;332E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;332E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;477E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;330E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;148E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;565E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;566E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;425E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;425E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;425E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;485E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;567E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;568E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;566E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;488E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;489E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;569E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;492E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;152E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;268E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;493E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;494E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;496E;K;7;$aimageD;K;6;CP$UIDd;3;570E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;498E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;499E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;502E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;503E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;504E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;505E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;572E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;507E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;508E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;573E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;510E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;511E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;512E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;376E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;376E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;425E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;439E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;376E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;376E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;425E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;425E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;513E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;514E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;519E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;522E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;526E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;9;_minValueD;K;6;CP$UIDd;3;425E;K;9;_maxValueD;K;6;CP$UIDd;3;517E;K;12;_doubleValueD;K;6;CP$UIDd;3;425E;K;12;_controlSizeD;K;6;CP$UIDd;3;425E;K;14;_indeterminateD;K;6;CP$UIDd;3;330E;K;6;_styleD;K;6;CP$UIDd;3;425E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;527E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;529E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;530E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;569E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;532E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;330E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;22;CPToolbarIdentifierKeyD;K;6;CP$UIDd;3;533E;K;23;CPToolbarDisplayModeKeyD;K;6;CP$UIDd;3;373E;K;34;CPToolbarShowsBaselineSeparatorKeyD;K;6;CP$UIDd;3;330E;K;35;CPToolbarAllowsUserCustomizationKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarIsVisibleKeyD;K;6;CP$UIDd;3;330E;K;20;CPToolbarSizeModeKeyD;K;6;CP$UIDd;3;373E;K;27;CPToolbarIdentifiedItemsKeyD;K;6;CP$UIDd;3;574E;K;24;CPToolbarDefaultItemsKeyD;K;6;CP$UIDd;3;575E;K;24;CPToolbarAllowedItemsKeyD;K;6;CP$UIDd;3;576E;K;27;CPToolbarSelectableItemsKeyD;K;6;CP$UIDd;3;577E;K;20;CPToolbarDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;539E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;540E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;540E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;541E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;542E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;543E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;545E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;546E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;546E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;547E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;548E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;548E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;1;0E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;425E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;1;0E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;3;210E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;549E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;549E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;498E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;332E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;578E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;579E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;580E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;581E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;582E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;409E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;584E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;11;CPSplitViewK;8;$classesA;S;11;CPSplitViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;585E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;28;CPSplitViewIsPaneSplitterKeyD;K;6;CP$UIDd;3;330E;K;26;CPSplitViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;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;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;588E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;589E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;590E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;592E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;219E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;593E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;227E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;226E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;594E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;330E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;595E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;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;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;596E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;597E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;598E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;221E;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;220E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;219E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;597E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;597E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;219E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;457E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;599E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;12;$agrid-colorD;K;6;CP$UIDd;3;600E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;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;601E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;602E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;425E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;439E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;332E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;330E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;330E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;330E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;330E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;603E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;600E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;425E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;332E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;605E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;229E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;606E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;607E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;608E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;610E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;611E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;612E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;607E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;608E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;614E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;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;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;615E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;616E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;217E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;619E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;620E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;621E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;217E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;622E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;593E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;593E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;624E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;221E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;230E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;626E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;627E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;628E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;626E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;626E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;629E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;231E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;592E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;233E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;255E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;254E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;594E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;332E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;630E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;631E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;632E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;633E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;634E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;235E;E;D;K;10;$classnameS;17;CPPredicateEditorK;8;$classesA;S;17;CPPredicateEditorS;12;CPRuleEditorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;632E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;632E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;635E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;636E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;637E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;3;330E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;3;332E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;3;332E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;3;638E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;3;601E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;3;376E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;1;0E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;3;639E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;3;640E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;3;641E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;3;642E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;3;643E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;1;0E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;3;644E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;3;646E;K;20;CPPredicateTemplatesD;K;6;CP$UIDd;3;647E;E;D;K;10;$classnameS;28;CPPredicateEditorRowTemplateK;8;$classesA;S;28;CPPredicateEditorRowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;376E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;425E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;425E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;425E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;425E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;332E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;332E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;648E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;649E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;376E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;373E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;373E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;425E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;425E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;425E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;654E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;332E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;330E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;655E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;656E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;659E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;661E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;663E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;664E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;666E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;591E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;669E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;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;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;477E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;672E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;673E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;232E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;619E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;674E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;675E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;232E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;622E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;676E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;676E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;677E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;592E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;257E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;678E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;263E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;262E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;594E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;330E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;679E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;680E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;681E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;682E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;259E;E;D;K;10;$classnameS;13;CPOutlineViewK;8;$classesA;S;13;CPOutlineViewS;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;258E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;257E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;681E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;681E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;257E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;457E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;599E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;12;$agrid-colorD;K;6;CP$UIDd;3;600E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;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;601E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;602E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;425E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;439E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;332E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;330E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;330E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;330E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;683E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;600E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;425E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;332E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;684E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;264E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;K;34;CPOutlineViewOutlineTableColumnKeyD;K;6;CP$UIDd;3;260E;K;35;CPOutlineViewIndentationPerLevelKeyD;K;6;CP$UIDd;3;685E;K;26;CPOutlineViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;24;CPOutlineViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;686E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;685E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;608E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;687E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;688E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;689E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;607E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;608E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;690E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;691E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;692E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;616E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;256E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;619E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;693E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;621E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;256E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;622E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;678E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;678E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;624E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;259E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;265E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;694E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;330E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;332E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;330E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;330E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;330E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;330E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;330E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;332E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;695E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;696E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;695E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;697E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;180E;E;E;S;8;delegateS;21;initialFirstResponderS;16;arrayController1S;11;outlineViewS;9;tableViewS;9;theWindowS;10;tokenFieldS;7;window1S;7;window2S;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;29;value: arrangedObjects.animalS;5;valueS;22;arrangedObjects.animalD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;E;E;S;27;value: arrangedObjects.legsS;20;arrangedObjects.legsD;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;128E;E;E;S;14;NewApplicationS;14;submenuAction:d;7;1048576S;18;_CPApplicationMenuD;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;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;E;E;S;20;About NewApplicationT;S;0;F;S;12;Preferences…S;1;,S;19;Quit NewApplicationS;1;qS;4;FileD;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;2;76E;D;K;6;CP$UIDd;2;77E;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;E;E;S;3;NewS;1;nS;5;Open…S;1;oS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;4;SaveS;1;sS;8;Save As…S;1;Sd;7;1179648S;15;Revert to SavedS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;114E;E;E;S;4;UndoS;1;zS;4;RedoS;1;ZS;3;CutS;1;xS;4;CopyS;1;cS;5;PasteS;1;vS;6;DeleteS;10;Select AllS;1;aS;4;FindD;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;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;E;E;S;5;Find…d;1;1S;1;fS;9;Find Nextd;1;2S;1;gS;13;Find Previousd;1;3S;1;GS;22;Use Selection for Findd;1;7S;1;eS;17;Jump to SelectionS;1;jS;20;Spelling and GrammarD;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;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;E;E;S;14;Show Spelling…S;1;:S;14;Check SpellingS;1;;S;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;SpeechD;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;3;117E;E;E;S;14;Start SpeakingS;13;Stop SpeakingS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;6;WindowS;14;_CPWindowsMenuD;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;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;E;E;S;8;MinimizeS;1;mS;4;ZoomS;18;Bring All to FrontS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;130E;E;E;S;19;NewApplication HelpS;1;?S;8;CPWindowd;10;1879048192S;24;{{335, 649}, {393, 379}}S;22;{{0, 0}, {2560, 1418}}S;18;Theme Kitchen Sinkd;1;0S;20;{{0, 0}, {393, 379}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;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;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;E;E;S;6;normalS;6;{1, 1}S;21;{{53, 17}, {103, 25}}S;19;{{0, 0}, {103, 25}}d;2;36S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;699E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;d;1;4S;11;Push Buttond;2;14S;21;{{49, 58}, {106, 25}}S;19;{{0, 0}, {106, 25}}S;17;bordered+selectedD;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;S;15;Gradient ButtonS;21;{{18, 97}, {168, 25}}S;19;{{0, 0}, {168, 25}}D;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;498E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;449E;E;S;17;Round Rect ButtonS;22;{{16, 134}, {176, 29}}S;19;{{0, 0}, {176, 29}}S;9;textfieldS;28;bezeled+editable+placeholderD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;703E;E;S;11;PlaceholderS;22;{{16, 175}, {176, 29}}S;16;bezeled+editableS;10;Text FieldS;22;{{16, 215}, {176, 29}}S;11;searchfieldS;36;bezeled+editable+placeholder+roundedS;9;Search...d;3;254S;22;{{16, 253}, {176, 29}}S;10;tokenfieldD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Token FieldS;22;{{16, 292}, {176, 31}}S;19;{{0, 0}, {176, 31}}S;8;comboboxS;44;bezeled+button-bordered+editable+placeholderS;17;Combo PlaceholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;704E;D;K;6;CP$UIDd;3;705E;E;E;d;1;5S;22;{{212, 16}, {161, 29}}S;19;{{0, 0}, {161, 29}}D;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;706E;E;S;10;datePickerS;16;bezeled+borderedD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;425E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;707E;E;D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;708E;E;S;21;{{210, 60}, {50, 21}}S;18;{{0, 0}, {50, 21}}S;9;check-boxS;8;selectedS;2;OnS;22;{{212, 97}, {161, 25}}S;19;{{0, 0}, {161, 25}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;699E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;d;2;12S;6;Item 1S;17;_popUpItemAction:S;6;Item 2S;6;Item 3S;23;{{212, 136}, {165, 25}}S;19;{{0, 0}, {165, 25}}S;17;segmented-controlD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;710E;D;K;6;CP$UIDd;3;711E;D;K;6;CP$UIDd;3;712E;E;E;S;23;{{212, 179}, {161, 38}}S;19;{{0, 0}, {161, 38}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;714E;D;K;6;CP$UIDd;3;715E;E;E;S;23;{{212, 257}, {161, 18}}S;19;{{0, 0}, {161, 18}}S;15;level-indicatorS;23;{{212, 295}, {136, 21}}S;19;{{0, 0}, {136, 21}}S;6;sliderd;2;50d;3;100S;22;{{356, 295}, {17, 60}}S;18;{{0, 0}, {17, 60}}S;8;verticalS;22;{{210, 317}, {30, 32}}S;18;{{0, 0}, {30, 32}}S;17;circular+verticalS;22;{{20, 333}, {168, 20}}S;19;{{0, 0}, {168, 20}}S;18;progress-indicatorS;21;{{264, 60}, {64, 21}}S;18;{{0, 0}, {64, 21}}S;3;OffS;21;{{318, 60}, {57, 21}}S;18;{{0, 0}, {57, 21}}S;4;BothS;36;31335BF5-06C2-4494-957E-17ECA44216CDD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;534E;K;10;CP.objectsD;K;23;CPToolbarShowColorsItemD;K;6;CP$UIDd;3;173E;K;18;CPToolbarSpaceItemD;K;6;CP$UIDd;3;175E;K;36;244A013B-F872-4F2A-8B72-516062AA8096D;K;6;CP$UIDd;3;178E;K;26;CPToolbarFlexibleSpaceItemD;K;6;CP$UIDd;3;177E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;CPToolbarShowColorsItemS;6;ColorsS;16;Show Color Paneld;2;-1S;21;orderFrontColorPanel:D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;544E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;716E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;717E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;718E;E;S;6;{0, 0}S;36;244A013B-F872-4F2A-8B72-516062AA8096S;6;SearchS;8;{96, 29}S;21;{{-4, 11}, {104, 29}}S;19;{{0, 0}, {104, 29}}S;8;DisabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;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;E;E;S;17;bordered+disabledD;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;S;26;bordered+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;449E;E;S;37;bezeled+disabled+editable+placeholderS;25;bezeled+disabled+editableS;45;bezeled+disabled+editable+placeholder+roundedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;53;bezeled+button-bordered+disabled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;704E;D;K;6;CP$UIDd;3;705E;E;E;S;25;bezeled+bordered+disabledD;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;707E;E;D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;708E;E;S;17;disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;S;8;disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;719E;D;K;6;CP$UIDd;3;720E;D;K;6;CP$UIDd;3;721E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;534E;K;10;CP.objectsD;K;23;CPToolbarShowColorsItemD;K;6;CP$UIDd;3;206E;K;18;CPToolbarSpaceItemD;K;6;CP$UIDd;3;207E;K;36;244A013B-F872-4F2A-8B72-516062AA8096D;K;6;CP$UIDd;3;209E;K;26;CPToolbarFlexibleSpaceItemD;K;6;CP$UIDd;3;208E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;AppControllerS;32;{10000000000000, 10000000000000}d;10;1618478080S;24;{{283, 843}, {480, 270}}d;2;15S;20;{{0, 0}, {480, 270}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;215E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;256E;E;E;d;2;18S;9;splitviewS;21;{{0, 183}, {480, 87}}S;19;{{0, 0}, {480, 87}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;595E;E;E;d;1;8S;10;scrollviewD;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;724E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;726E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;229E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;S;19;{{1, 1}, {478, 69}}S;19;{{0, 0}, {478, 69}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;221E;E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;728E;E;d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;604E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;729E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;729E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;730E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;d;3;116d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;609E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;731E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;732E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;734E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;733E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;425E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;735E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;736E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;737E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;738E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;739E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;439E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;3;356D;K;6;$classD;K;6;CP$UIDd;3;609E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;740E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;732E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;741E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;733E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;425E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;735E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;736E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;737E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;738E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;739E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;439E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;21;{{1, -47}, {223, 15}}S;19;{{0, 0}, {223, 15}}d;11;-2147483648S;8;scrollerS;29;_horizontalScrollerDidScroll:S;23;{{224, -32}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;27;_verticalScrollerDidScroll:S;19;{{0, 0}, {478, 25}}S;14;tableHeaderRowS;20;{{0, 99}, {480, 75}}S;19;{{0, 0}, {480, 75}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;232E;E;E;S;6;CPViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;630E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;S;19;{{1, 1}, {478, 73}}S;19;{{0, 0}, {478, 73}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;235E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;742E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;744E;E;E;d;2;34S;11;rule-editord;2;75S;7;rowTypeS;8;criteriaS;13;displayValuesS;10;boundArrayS;7;subrowsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;33;_CPRuleEditorViewUnboundRowHolderK;8;$classesA;S;33;_CPRuleEditorViewUnboundRowHolderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;645E;K;12;CPBoundArrayD;K;6;CP$UIDd;3;745E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;243E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;746E;D;K;6;CP$UIDd;3;747E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;E;E;S;3;AnyS;3;AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;242E;E;E;S;25;of the following are trued;3;700D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;748E;D;K;6;CP$UIDd;3;749E;D;K;6;CP$UIDd;3;750E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;E;E;S;4;nameD;K;10;$classnameS;20;_CPKeyPathExpressionK;8;$classesA;S;20;_CPKeyPathExpressionS;21;_CPFunctionExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;658E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;751E;K;11;CPArgumentsD;K;6;CP$UIDd;3;752E;K;9;CPOperandD;K;6;CP$UIDd;3;754E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;S;7;addressD;K;6;$classD;K;6;CP$UIDd;3;658E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;751E;K;11;CPArgumentsD;K;6;CP$UIDd;3;755E;K;9;CPOperandD;K;6;CP$UIDd;3;754E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;S;4;signD;K;6;$classD;K;6;CP$UIDd;3;658E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;751E;K;11;CPArgumentsD;K;6;CP$UIDd;3;756E;K;9;CPOperandD;K;6;CP$UIDd;3;754E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;8;containsd;2;99S;11;begins withS;9;ends withd;1;9S;2;isS;6;is notS;24;{{-100, 160}, {360, 15}}S;19;{{0, 0}, {360, 15}}S;20;{{463, 1}, {15, 73}}S;18;{{0, 0}, {15, 73}}S;19;{{0, 0}, {480, 90}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;678E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;679E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;757E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;758E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;S;19;{{1, 1}, {478, 72}}S;19;{{0, 0}, {478, 72}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;259E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;604E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;729E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;729E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;730E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;d;2;16d;3;101D;K;6;$classD;K;6;CP$UIDd;3;609E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;759E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;732E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;331E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;733E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;425E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;735E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;736E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;737E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;738E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;739E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;439E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;3;371D;K;6;$classD;K;6;CP$UIDd;3;609E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;760E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;732E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;331E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;733E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;425E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;735E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;736E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;737E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;738E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;739E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;439E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;21;{{1, -44}, {223, 15}}S;23;{{224, -29}, {15, 102}}S;19;CPMutableDictionaryS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;E;E;S;17;.Lucida Grande UId;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;699E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;E;E;S;7;Combo 1S;7;Combo 2D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;E;E;d;15;-62135510400000d;14;64092297600000D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;761E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;762E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;330E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;373E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;763E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;713E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;159E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;373E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;764E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;764E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;159E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;765E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;766E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;767E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;768E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;769E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;770E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;713E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;159E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;773E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;764E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;159E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;765E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;766E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;774E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;775E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;769E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;770E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;772E;E;S;7;CPImageS;21;CPImageNameColorPanelD;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;777E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;331E;K;9;frameworkD;K;6;CP$UIDd;3;331E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;761E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;762E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;330E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;373E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;763E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;713E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;373E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;764E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;764E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;765E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;766E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;778E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;768E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;769E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;770E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;713E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;773E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;764E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;765E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;766E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;780E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;775E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;769E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;770E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;779E;E;S;20;{{1, 70}, {478, 17}}S;19;{{0, 0}, {478, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;229E;E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;781E;D;K;6;CP$UIDd;3;781E;D;K;6;CP$UIDd;3;781E;D;K;6;CP$UIDd;3;373E;E;E;S;18;{{0, 0}, {14, 25}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;783E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;784E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;S;6;AnimalS;17;{{3, 0}, {-6, 0}}S;17;{{0, 0}, {-6, 0}}S;22;editable+tableDataViewS;9;Text Celld;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;785E;E;E;S;4;LegsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;786E;D;K;6;CP$UIDd;3;786E;D;K;6;CP$UIDd;3;786E;D;K;6;CP$UIDd;3;373E;E;E;D;K;10;$classnameS;28;_CPRuleEditorViewSliceHolderK;8;$classesA;S;28;_CPRuleEditorViewSliceHolderS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;743E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;235E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;632E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;632E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;235E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;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;3;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;238E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;787E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;788E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;7;$aimageD;K;6;CP$UIDd;3;789E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;241E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;790E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;791E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;7;$aimageD;K;6;CP$UIDd;3;792E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;244E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;793E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;794E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;7;$aimageD;K;6;CP$UIDd;3;795E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;248E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;796E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;797E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;7;$aimageD;K;6;CP$UIDd;3;798E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;799E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;448E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;455E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;12;valueForKey:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;801E;E;E;D;K;10;$classnameS;17;_CPSelfExpressionK;8;$classesA;S;17;_CPSelfExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;802E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;803E;E;E;S;20;{{1, 73}, {478, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;264E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;804E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;805E;E;E;S;9;Segment 1S;2;s2S;2;s3S;18;{{0, 0}, {78, 18}}D;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;806E;E;S;5;radioS;27;bordered+roundRect+selectedS;8;Choice 1f;3;0.5f;4;0.05D;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;771E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;807E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;714E;E;S;19;{{0, 20}, {78, 18}}S;18;bordered+roundRectS;7;Radio 2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;776E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;808E;E;S;36;bordered+disabled+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;771E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;809E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;722E;E;S;27;bordered+disabled+roundRectf;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;782E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;610E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;610E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;d;2;11D;K;6;$classD;K;6;CP$UIDd;3;782E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;613E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;613E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;f;12;0.9100000262S;19;{{1, -4}, {66, 25}}S;18;{{0, 0}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;810E;E;S;21;{{66, -4}, {175, 25}}S;19;{{0, 0}, {175, 25}}D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;810E;E;S;20;{{31, -4}, {86, 25}}S;18;{{0, 0}, {86, 25}}D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;810E;E;S;22;{{116, -4}, {107, 25}}S;19;{{0, 0}, {107, 25}}D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;810E;E;S;21;{{224, 1}, {168, 25}}D;K;10;$classnameS;26;_CPConstantValueExpressionK;8;$classesA;S;26;_CPConstantValueExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;800E;K;15;CPConstantValueD;K;6;CP$UIDd;3;657E;E;D;K;6;$classD;K;6;CP$UIDd;3;800E;K;15;CPConstantValueD;K;6;CP$UIDd;3;660E;E;D;K;6;$classD;K;6;CP$UIDd;3;800E;K;15;CPConstantValueD;K;6;CP$UIDd;3;662E;E;D;K;6;$classD;K;6;CP$UIDd;3;782E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;687E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;687E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;782E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;690E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;690E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;714E;D;K;6;CP$UIDd;3;715E;E;E;S;22;{"width":0,"height":0}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;784E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.xib b/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.xib new file mode 100644 index 000000000..1ca3a9d40 --- /dev/null +++ b/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.xib @@ -0,0 +1,1032 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Combo 1 + Combo 2 + + + + + + + + + + + + +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ +y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ +5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g +8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ +AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg +DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ +HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g +KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ +OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg +Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ +VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg +Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ +cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg +f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Combo 1 + Combo 2 + + + + + + + + + + + + +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ +y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ +5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g +8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ +AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg +DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ +HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g +KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ +OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg +Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ +VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg +Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ +cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg +f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name + + + address + + + sign + + + + + + + + + name + + + + + address + + + + + sign + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/ThemeKitchenSink/index-debug.html b/Tests/Manual/ThemeKitchenSink/index-debug.html new file mode 100644 index 000000000..393668d41 --- /dev/null +++ b/Tests/Manual/ThemeKitchenSink/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + ThemeKitchenSink + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/ThemeKitchenSink/index.html b/Tests/Manual/ThemeKitchenSink/index.html new file mode 100644 index 000000000..6b4358625 --- /dev/null +++ b/Tests/Manual/ThemeKitchenSink/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + ThemeKitchenSink + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/ThemeKitchenSink/main.j b/Tests/Manual/ThemeKitchenSink/main.j new file mode 100644 index 000000000..690218ac0 --- /dev/null +++ b/Tests/Manual/ThemeKitchenSink/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * ThemeKitchenSink + * + * Created by Alexander Ljungberg on May 11, 2014. + * Copyright 2014, SlevenBits, Ltd. All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From f1519204040b514eae7177255ef1d4307b04e0ba Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 12 May 2014 16:03:35 +0100 Subject: [PATCH 164/278] Fixed: table view selection text colour in Aristo 1. This is the same fix as in a4702d48b478cf28b6c76adb383307c1b35dc31f but applied to Aristo 1. Refs #2009, refs #2001. --- AppKit/Themes/Aristo/ThemeDescriptors.j | 2 +- Tests/Manual/ThemeKitchenSink/Info.plist | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index df5341f4d..9d7eff56c 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -987,7 +987,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(3.0, 3.0, 3.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditable]], [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing]], diff --git a/Tests/Manual/ThemeKitchenSink/Info.plist b/Tests/Manual/ThemeKitchenSink/Info.plist index bbca098f7..50a05631c 100644 --- a/Tests/Manual/ThemeKitchenSink/Info.plist +++ b/Tests/Manual/ThemeKitchenSink/Info.plist @@ -6,6 +6,8 @@ MainMenu.cib CPBundleName ThemeKitchenSink + CPDefaultTheme + Aristo2 CPBundleVersion 1.0 CPHumanReadableCopyright From 804927f8935241e2631e6aa7d5f597d3cf42c5b2 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 12 May 2014 16:09:43 -0700 Subject: [PATCH 165/278] Fixed: Removed value bindings for Capp Lint in XCodeCapp .xib file. Reference to PR #2119 --- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 42 +------------------ 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index c605f0570..3efdd46af 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,7 +2,7 @@ 1060 - 13C64 + 13C1021 5056 1265.19 697.40 @@ -1186,7 +1186,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - + 256 @@ -1194,7 +1194,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{18, 22}, {251, 17}} - _NS:397 {251, 750} @@ -1217,8 +1216,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{269, 13}, {74, 32}} - - _NS:9 YES @@ -1242,7 +1239,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{20, 45}, {317, 20}} - _NS:9 {250, 250} @@ -1251,8 +1247,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {357, 84} - - _NS:21 @@ -1963,22 +1957,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ du5-hg-MfC

kP{1*ou|PH<3BWg`HdrYLjeY8{nX9h-ZP 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�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

G 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%0D2hQVLfOydU+H^ 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

- - - enabled: values.usesCappLintForEveryNotifications - - - - - - enabled: values.usesCappLintForEveryNotifications - enabled - values.usesCappLintForEveryNotifications - 2 - - - J8w-G4-Pzy - orderOut: @@ -2043,22 +2021,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ uwx-aq-p86 - - - enabled: values.usesCappLintForEveryNotifications - - - - - - enabled: values.usesCappLintForEveryNotifications - enabled - values.usesCappLintForEveryNotifications - 2 - - - 5nL-79-ZXW - value: values.XCCAutoOpenShowNotificationErrors From 57c2613d3707bfad297716b326230e37c86f0c02 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 12 May 2014 16:11:07 -0700 Subject: [PATCH 166/278] Fixed: kDefaultXCCAutoShowNotificationOnCappLint is set to NO --- Tools/XcodeCapp/XcodeCapp/AppController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index f6af37f88..86aa8c3d7 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -147,7 +147,7 @@ AppController *SharedAppControllerInstance = nil; kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, kDefaultXCCAutoShowNotificationOnErrors: @YES, - kDefaultXCCAutoShowNotificationOnCappLint: @NO, + kDefaultXCCAutoShowNotificationOnCappLint: @YES, kDefaultXCCProjectHistory: [NSArray new], kDefaultMaxRecentProjects: @20, kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], From 48dd722db94c9b7559471f7bca0a0524502eae7f Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 13 May 2014 20:51:53 +0200 Subject: [PATCH 167/278] unit test for coalesce on insert --- Tests/Foundation/CPAttributedStringTest.j | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index 28ca7576e..db66c17c1 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -33,6 +33,17 @@ var sharedObject = [CPObject new]; message:"testWriteOverRangeBoundaries: expected:" + @"1" + " actual:" + [attribs objectForKey:@"testkey"]]; } +- (void)testCoalesceOnInsert +{ + var string = [[CPMutableAttributedString alloc] initWithString:@"Fusce\n" attributes:@{"testkey": 1}]; + var prevRangeEntriesLength= string._rangeEntries.length; + [string insertAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" + attributes:@{"testkey": 1}] atIndex:2]; + + [self assertTrue:(string._rangeEntries.length === prevRangeEntriesLength) + message:"testCoalesceOnInsert: expected:" + prevRangeEntriesLength + " actual:" + string._rangeEntries.length]; +} + - (CPAttributedString)stringForTesting { var string = [[CPAttributedString alloc] initWithString:"The quick brown fox jumped over the lazy dog."]; From 4819f3ca158ea5a36d2e002bb90b3c69441f8706 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 13 May 2014 21:07:41 +0200 Subject: [PATCH 168/278] whitespace formatting --- Tests/Foundation/CPAttributedStringTest.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index db66c17c1..7b834d129 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -36,7 +36,7 @@ var sharedObject = [CPObject new]; - (void)testCoalesceOnInsert { var string = [[CPMutableAttributedString alloc] initWithString:@"Fusce\n" attributes:@{"testkey": 1}]; - var prevRangeEntriesLength= string._rangeEntries.length; + var prevRangeEntriesLength= string._rangeEntries.length; [string insertAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" attributes:@{"testkey": 1}] atIndex:2]; From f953b4dc0f27fbea5ab7e9ae4ed050c6d549567f Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 20 May 2014 13:37:53 -0700 Subject: [PATCH 169/278] FIXED: Warning when closing a popover for the first time Previously, the _CPPopoverWindow was trying to remove itself as observer while it wasn't defined as an observer. This would cause a warning. This patch encapsulates addObserver and removeObserver into methods that actually check if it's already observing/not observing when trying to observe/not observe --- AppKit/_CPPopoverWindow.j | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 8861a9f56..899fab08b 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -55,8 +55,9 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, int _appearance @accessors(getter=appearance); BOOL _isClosing @accessors(property=isClosing); - BOOL _closeOnBlur; BOOL _browserAnimates; + BOOL _closeOnBlur; + BOOL _isObservingFrame; BOOL _shouldPerformAnimation; CPInteger _implementedDelegateMethods; JSObject _orderOutTransitionFunction; @@ -160,6 +161,32 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, #pragma mark - #pragma mark Observer +/*! + @ignore + Adds self as frame observer if not already observing it +*/ +- (void)_addFrameObserver +{ + if (_isObservingFrame) + return; + + _isObservingFrame = YES; + [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; +} + +/*! + @ignore + Removes self as frame observer if already observing it +*/ +- (void)_removeFrameObserver +{ + if (!_isObservingFrame) + return; + + _isObservingFrame = NO; + [_targetView removeObserver:self forKeyPath:@"frame"]; +} + /*! Update the _CPPopoverWindow frame if a resize event is observed. */ @@ -331,7 +358,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (positioningView !== _targetView) { [[_targetView window] removeChildWindow:self]; - [_targetView removeObserver:self forKeyPath:@"frame"]; + [self _removeFrameObserver]; _targetView = positioningView; } @@ -521,14 +548,14 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, - (void)_orderFront { if (![self isVisible]) - [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; + [self _addFrameObserver]; [super _orderFront]; } - (void)_parentDidOrderInChild { - [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; + [self _addFrameObserver]; } /*! @@ -564,7 +591,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _DOMElement.removeEventListener(CPBrowserStyleProperty("transitionend"), _orderOutTransitionFunction, YES); #endif - [_targetView removeObserver:self forKeyPath:@"frame"]; + [self _removeFrameObserver]; [_parentWindow removeChildWindow:self]; [super _orderOutRecursively:recursive]; From 741ac31ba62e44c0bee892675c83e96b45493481 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 22 May 2014 15:17:40 -0700 Subject: [PATCH 170/278] Fixed: Issue when making a paste with a right click Previously when making a paste with a right click caused a crash because the location of the fake event was set to null. This crash occurs only if the user didn't hit the keyboard yet. Now, the location of the fake event takes the location of the last event of the app, who is the right click. --- AppKit/Platform/DOM/CPPlatformPasteboard.j | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/AppKit/Platform/DOM/CPPlatformPasteboard.j b/AppKit/Platform/DOM/CPPlatformPasteboard.j index 014d00d06..e749a1fae 100644 --- a/AppKit/Platform/DOM/CPPlatformPasteboard.j +++ b/AppKit/Platform/DOM/CPPlatformPasteboard.j @@ -71,7 +71,6 @@ var hasEditableTarget = function(aDOMEvent) BOOL hasBugWhichPreventsNonEditablePaste; BOOL hasBugWhichPreventsNonEditablePasteRedirect; - CPEvent _lastKeyDownEvent; BOOL currentEventIsNativePasteEvent; BOOL currentEventIsNativeCopyOrCutEvent; BOOL currentEventShouldBeSuppressed; @@ -208,8 +207,6 @@ var hasEditableTarget = function(aDOMEvent) if (!(modifierFlags & (CPControlKeyMask | CPCommandKeyMask))) return; - _lastKeyDownEvent = anEvent; - var aDOMEvent = anEvent._DOMEvent, characters = [anEvent characters], mayRequireDOMPasteboardElement = [self _mayRequireDOMPasteboardElementHack:aDOMEvent flags:modifierFlags]; @@ -302,7 +299,7 @@ var hasEditableTarget = function(aDOMEvent) timestamp = [CPEvent currentTimestamp], // fake event, might as well use current timestamp windowNumber = [[CPApp keyWindow] windowNumber], modifierFlags = CPPlatformActionKeyMask, - location = [_lastKeyDownEvent locationInWindow], + location = [[CPApp currentEvent] locationInWindow], anEvent = [CPEvent keyEventWithType:CPKeyDown location:location modifierFlags:modifierFlags timestamp:timestamp windowNumber:windowNumber context:nil characters:characters charactersIgnoringModifiers:characters isARepeat:NO keyCode:keyCode]; From 7958775c6a9b2773ea442d783359553dddb35731 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 23 May 2014 10:38:56 -0700 Subject: [PATCH 171/278] Fixed: bootstrap doesn't handle specific OpenJDK Runtime Environment version Previously, bootstrap didn't handle some OpenJDK Runtime Environment version as: rhel-2.4.7.1.el6_5-x86_64 u55-b13. Now it did, the regular expression to catch the version of the jdk was wrong. Fixes #2113 --- bootstrap.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index 7ae61916e..92cc46028 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -134,8 +134,8 @@ function check_install_environment () { java_version=$(java -version 2>&1) echo $java_version | grep OpenJDK > /dev/null if [ "$?" = "0" ]; then # OpenJDK: make sure >= 6b18 - openjdk_version=$(echo $java_version | egrep -o '[0-9]b[0-9]+') - if [ $(echo $openjdk_version | tr -d 'b') -lt 618 ]; then + openjdk_version=$(echo $java_version | egrep -o '[0-9]\-?b[0-9]+') + if [ $(echo $openjdk_version | tr -d 'b' | tr -d '-') -lt 618 ]; then echo "Error: Narwhal is not compatible with your version of OpenJDK: $openjdk_version." echo "Please upgrade to OpenJDK >= 6b18 or switch to the Sun JVM. Then re-run bootstrap.sh." exit 1 From 089d564934047da0435d5d456172af32b4206d83 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 27 May 2014 10:12:02 -0700 Subject: [PATCH 172/278] Fixed: CPDatePicker firstResponder issue Previously, the textual datePicker didn't work because it couldn't become the firstResponder. This PR fixed another issue as well. Previously it wasn't possible to modify a date when moving only with tab and when the datePicker came firstResponder with tabulation. --- AppKit/CPDatePicker/CPDatePicker.j | 2 +- AppKit/CPDatePicker/_CPDatePickerTextField.j | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/AppKit/CPDatePicker/CPDatePicker.j b/AppKit/CPDatePicker/CPDatePicker.j index 922e8cbd9..5a4f81727 100644 --- a/AppKit/CPDatePicker/CPDatePicker.j +++ b/AppKit/CPDatePicker/CPDatePicker.j @@ -533,7 +533,7 @@ CPEraDatePickerElementFlag = 0x0100; { if (_datePickerStyle == CPTextFieldAndStepperDatePickerStyle || _datePickerStyle == CPTextFieldDatePickerStyle) { - if ([super becomeFirstResponder]) + if (![super becomeFirstResponder]) return NO; [_datePickerTextfield _selecteTextFieldWithFlags:[[CPApp currentEvent] modifierFlags]]; diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 02c7a7148..ddd6e3172 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -1226,14 +1226,14 @@ var CPMonthDateType = 0, CPTimer _timerEdition; } - -#pragma mark - -#pragma mark Getter Setter methods - -- (BOOL)acceptFirstResponder +- (id)init { - _firstEvent = YES; - return NO; + if (self = [super init]) + { + _firstEvent = YES; + } + + return self; } /*! Set the dateType of the textField From a83b9109bff9437b4cf6d3f88a61ec2cb4207ea8 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 29 May 2014 15:13:17 -0700 Subject: [PATCH 173/278] Fixed: typo in CPDatePicker --- AppKit/CPDatePicker/CPDatePicker.j | 2 +- AppKit/CPDatePicker/_CPDatePickerTextField.j | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPDatePicker/CPDatePicker.j b/AppKit/CPDatePicker/CPDatePicker.j index 5a4f81727..d7065ddc8 100644 --- a/AppKit/CPDatePicker/CPDatePicker.j +++ b/AppKit/CPDatePicker/CPDatePicker.j @@ -536,7 +536,7 @@ CPEraDatePickerElementFlag = 0x0100; if (![super becomeFirstResponder]) return NO; - [_datePickerTextfield _selecteTextFieldWithFlags:[[CPApp currentEvent] modifierFlags]]; + [_datePickerTextfield _selectTextFieldWithFlags:[[CPApp currentEvent] modifierFlags]]; return YES; } diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index ddd6e3172..e002707ad 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -180,7 +180,7 @@ var CPZeroKeyCode = 48, #pragma mark - #pragma mark SelectTextField action -- (void)_selecteTextFieldWithFlags:(unsigned)flags +- (void)_selectTextFieldWithFlags:(unsigned)flags { [_datePickerElementView _updateResponderTextField]; From a5448549b1a9682b1b4ad834bff84390a41ef84d Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Sat, 31 May 2014 21:33:59 -0700 Subject: [PATCH 174/278] New: Added feature to select a set of dates with a shift click in CPDatePicker Previously it wasn't possible to select a set of dates with a shift click, now we can. This works only when the mode CPRangeDateMode is set. It has the same behavior as in Cocoa. --- AppKit/CPDatePicker/_CPDatePickerCalendar.j | 44 ++++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index a7e444ca8..165e91ec1 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -894,14 +894,46 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" // Check if we have to change or not the month of the component if ([dayTile date].getMonth() == _date.getMonth()) { - var minDate = [[_datePicker minDate] copy], - maxDate = [[_datePicker maxDate] copy]; + if ([_datePicker datePickerMode] == CPRangeDateMode && [anEvent modifierFlags] & CPShiftKeyMask) + { + var dateValueAtMidnight = [[_datePicker dateValue] copy]; - [minDate _resetToMidnight]; - [maxDate _resetToLastSeconds]; + [dateValueAtMidnight _resetToMidnight]; - if (dateTile >= minDate && dateTile <= maxDate) - [_datePicker _setDateValue:[self _hoursMinutesSecondsFromDatePickerForDate:dateTile] timeInterval:0]; + if (dateTile < dateValueAtMidnight) + { + var interval; + + if (dateTile == dateValueAtMidnight) + interval = [_datePicker timeInterval]; + else + interval = ([dateValueAtMidnight timeIntervalSinceDate:dateTile] + [_datePicker timeInterval]); + + [_datePicker _setDateValue:[self _hoursMinutesSecondsFromDatePickerForDate:dateTile] timeInterval:interval]; + } + else if ([[dayTile date] isEqualToDate:dateValueAtMidnight]) + { + [_datePicker _setDateValue:[self _hoursMinutesSecondsFromDatePickerForDate:dateTile] timeInterval:0]; + } + else + { + [_datePicker _setDateValue:[self _hoursMinutesSecondsFromDatePickerForDate:[dateValueAtMidnight copy]] timeInterval:([dateTile timeIntervalSinceDate:dateValueAtMidnight])]; + } + + // Be sure to display the good month + [_delegate setDateValue:dateTile]; + } + else + { + var minDate = [[_datePicker minDate] copy], + maxDate = [[_datePicker maxDate] copy]; + + [minDate _resetToMidnight]; + [maxDate _resetToLastSeconds]; + + if (dateTile >= minDate && dateTile <= maxDate) + [_datePicker _setDateValue:[self _hoursMinutesSecondsFromDatePickerForDate:dateTile] timeInterval:0]; + } } else { From ac53b30f25e87e966b9e43fe6d011105f811492e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Sun, 1 Jun 2014 21:18:14 -0700 Subject: [PATCH 175/278] Fixed: CPComboBox doesn't work in modal. Previously a CPComboBox didn't work when its parent window was in modal. Now it works. Fixed #2122 --- AppKit/_CPPopUpList.j | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index b6e400ff0..f69f68f0a 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -863,6 +863,15 @@ var _CPPopUpListDataSourceKey = @"_CPPopUpListDataSourceKey", return self; } +/*! + Returns \c YES if the receiver is able to receive input events + even when a modal session is active. +*/ +- (BOOL)worksWhenModal +{ + return YES; +} + - (void)sendEvent:(CPEvent)anEvent { var type = [anEvent type]; From 1e1297378c3d56462da0c300d5554613aa30f729 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 2 Jun 2014 17:31:32 -0700 Subject: [PATCH 176/278] Fixed: font cell of a CPTableView comes black when editing another cell The font of a default dataView came black when editing another cell of the tableView. Now it stays black. Fixed #2130 --- AppKit/Themes/Aristo/ThemeDescriptors.j | 28 ++++++++++++------------ AppKit/Themes/Aristo2/ThemeDescriptors.j | 26 +++++++++++----------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 9d7eff56c..f621c2a26 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -986,22 +986,22 @@ var themedButtonValues = nil, [@"vertical-alignment", CPCenterVerticalTextAlignment, CPThemeStateTableDataView], [@"content-inset", CGInsetMake(3.0, 3.0, 3.0, 5.0), CPThemeStateTableDataView], - [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], - [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditable]], - [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing]], - [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateBezeled]], - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), [CPThemeStateTableDataView, CPThemeStateEditing]], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], - [@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateKeyWindow]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditable]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), [CPThemeStateTableDataView, CPThemeStateEditing]], [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow]], - [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], - [@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]], - [@"text-shadow-offset", CGSizeMake(0,1), [CPThemeStateTableDataView, CPThemeStateGroupRow]], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], - [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateGroupRow]] + [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], + [@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-shadow-offset", CGSizeMake(0,1), [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]], + [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateGroupRow]] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index a970a203e..e994e72ea 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -558,21 +558,21 @@ var themedButtonValues = nil, [@"vertical-alignment", CPCenterVerticalTextAlignment, CPThemeStateTableDataView], [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 5.0), CPThemeStateTableDataView], - [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], - [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditing, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], - [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], - [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), [CPThemeStateTableDataView, CPThemeStateEditable]], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], - [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateKeyWindow]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditing, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], + [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), [CPThemeStateTableDataView, CPThemeStateEditable]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), [CPThemeStateTableDataView, CPThemeStateEditing]], [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow]], - [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], - [@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]], - [@"text-shadow-offset", CGSizeMake(0, 1), [CPThemeStateTableDataView, CPThemeStateGroupRow]], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], - [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateGroupRow]] + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], + [@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-shadow-offset", CGSizeMake(0, 1), [CPThemeStateTableDataView, CPThemeStateGroupRow]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], + [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateGroupRow]] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; From 7c6ef51cb20b631c0a43f1e70dbf7e0080470401 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 3 Jun 2014 17:41:30 +0100 Subject: [PATCH 177/278] New: CPDate dateByAddingTimeInterval:. Refs #2126. --- Foundation/CPDate.j | 9 +++++++++ Tests/Foundation/CPDateTest.j | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j index 86bf25deb..736ca9ff2 100644 --- a/Foundation/CPDate.j +++ b/Foundation/CPDate.j @@ -146,6 +146,15 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); return [[CPDate date] timeIntervalSinceReferenceDate]; } +/** + Return a new date representing the receiver's time plus the given interval into the future, + or into the past for a negative interval. +*/ +- (id)dateByAddingTimeInterval:(CPTimeInterval)seconds +{ + return [[CPDate alloc] initWithTimeInterval:seconds sinceDate:self]; +} + - (BOOL)isEqual:(CPDate)aDate { if (self === aDate) diff --git a/Tests/Foundation/CPDateTest.j b/Tests/Foundation/CPDateTest.j index 996d05787..4223e2168 100644 --- a/Tests/Foundation/CPDateTest.j +++ b/Tests/Foundation/CPDateTest.j @@ -35,6 +35,30 @@ [self assert:middle equals:[middle laterDate:past] message:"laterDate incorrect"]; } +- (void)testDateByAddingTimeIntervalZeroShouldReturnSameDate +{ + var a = [CPDate dateWithTimeIntervalSince1970:1231889490.0], + b = [a dateByAddingTimeInterval:0]; + + [self assert:[b timeIntervalSince1970] equals:1231889490]; +} + +- (void)testDateByAddingTimeIntervalPositiveShouldReturnNewerDate +{ + var a = [CPDate dateWithTimeIntervalSince1970:1231889490.0], + b = [a dateByAddingTimeInterval:789]; + + [self assert:[b timeIntervalSince1970] equals:1231889490 + 789]; +} + +- (void)testDateByAddingTimeIntervalNegativeShouldReturnOlderDate +{ + var a = [CPDate dateWithTimeIntervalSince1970:1231889490.0], + b = [a dateByAddingTimeInterval:-789]; + + [self assert:[b timeIntervalSince1970] equals:1231889490 - 789]; +} + - (void)testEquals { var now = [CPDate date]; From c64e5a5799703b9cf951ccf5f529c4bc52946531 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 4 Jun 2014 11:19:32 -0700 Subject: [PATCH 178/278] Fixed: font cell of a CPTableView comes black when editing another cell Previously, when editing a cell, the other cells of the tableView lost the themeState of the firstResponder. Now the other cells, as the tableView, keep this state when a cell is editing. Fixed #2133 --- AppKit/CPTableView.j | 6 ++++++ AppKit/Themes/Aristo/ThemeDescriptors.j | 2 +- AppKit/Themes/Aristo2/ThemeDescriptors.j | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 90afa2ee4..713cd40e8 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -5143,12 +5143,18 @@ Your delegate can implement this method to avoid subclassing the tableview to ad { _editingRow = CPNotFound; _editingColumn = CPNotFound; + + // This is needed to unset the themeState firstResponder of the tableView + [self _notifyViewDidResignFirstResponder]; return; } _editingRow = [self rowForView:responder]; _editingColumn = [self columnForView:responder]; + // This is needed to set the themeState firstResponder of the tableView + [self _notifyViewDidBecomeFirstResponder]; + if (_editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && ![responder isBezeled]) { [responder setBezeled:YES]; diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index f621c2a26..f4ba002a3 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -987,7 +987,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(3.0, 3.0, 3.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateKeyWindow]], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder,CPThemeStateKeyWindow]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditable]], [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing]], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index e994e72ea..960d5d994 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -559,7 +559,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateKeyWindow]], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditing, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], From 38d63c3dc9f48d71807b17a0361a15c64ef5cee7 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 4 Jun 2014 20:33:30 +0200 Subject: [PATCH 179/278] formatting --- Tests/Foundation/CPAttributedStringTest.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index 7b834d129..2d01dd25f 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -36,7 +36,7 @@ var sharedObject = [CPObject new]; - (void)testCoalesceOnInsert { var string = [[CPMutableAttributedString alloc] initWithString:@"Fusce\n" attributes:@{"testkey": 1}]; - var prevRangeEntriesLength= string._rangeEntries.length; + var prevRangeEntriesLength = string._rangeEntries.length; [string insertAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" attributes:@{"testkey": 1}] atIndex:2]; From 4632ba3ae57f955b352925181cdd1ae001960869 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 4 Jun 2014 20:38:51 +0200 Subject: [PATCH 180/278] double var fix --- Tests/Foundation/CPAttributedStringTest.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index 2d01dd25f..3baf676b2 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -35,8 +35,8 @@ var sharedObject = [CPObject new]; - (void)testCoalesceOnInsert { - var string = [[CPMutableAttributedString alloc] initWithString:@"Fusce\n" attributes:@{"testkey": 1}]; - var prevRangeEntriesLength = string._rangeEntries.length; + var string = [[CPMutableAttributedString alloc] initWithString:@"Fusce\n" attributes:@{"testkey": 1}], + prevRangeEntriesLength = string._rangeEntries.length; [string insertAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" attributes:@{"testkey": 1}] atIndex:2]; From a129f2c5c53884605ca046a16e4784957e36c759 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 9 Jun 2014 12:16:15 -0700 Subject: [PATCH 181/278] Fixed: CPTextField doesn't update its style when editing Previously, the update of the style of an editing textField didn't work. Now when editing, we can update the font, color, alignment and vertical-alignment of the textField Test app in Tests/Manual/CPTextFieldEditingStyleTest/ Fixed #2057 --- AppKit/CPTextField.j | 118 ++++--- .../AppController.j | 40 +++ .../CPTextFieldEditingStyleTest/Info.plist | 14 + .../CPTextFieldEditingStyleTest/Jakefile | 183 ++++++++++ .../Resources/MainMenu.cib | 1 + .../Resources/MainMenu.xib | 319 ++++++++++++++++++ .../index-debug.html | 190 +++++++++++ .../CPTextFieldEditingStyleTest/index.html | 160 +++++++++ .../Manual/CPTextFieldEditingStyleTest/main.j | 17 + 9 files changed, 993 insertions(+), 49 deletions(-) create mode 100644 Tests/Manual/CPTextFieldEditingStyleTest/AppController.j create mode 100644 Tests/Manual/CPTextFieldEditingStyleTest/Info.plist create mode 100644 Tests/Manual/CPTextFieldEditingStyleTest/Jakefile create mode 100644 Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPTextFieldEditingStyleTest/index-debug.html create mode 100644 Tests/Manual/CPTextFieldEditingStyleTest/index.html create mode 100644 Tests/Manual/CPTextFieldEditingStyleTest/main.j diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 13526da50..85f7e3d8a 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -590,57 +590,14 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); #if PLATFORM(DOM) + [self _setCSSStyleForInputElement]; + var element = [self _inputElement], font = [self currentValueForThemeAttribute:@"font"], - lineHeight = [font defaultLineHeightForFont]; + contentRect = [self contentRectForBounds:[self bounds]], + left = CGRectGetMinX(contentRect); element.value = _stringValue; - element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; - - if (CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) - element.style.font = [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]], - verticalAlign = [self currentValueForThemeAttribute:"vertical-alignment"]; - - switch (verticalAlign) - { - case CPTopVerticalTextAlignment: - var topPoint = CGRectGetMinY(contentRect) + "px"; - break; - - case CPCenterVerticalTextAlignment: - var topPoint = (CGRectGetMidY(contentRect) - (lineHeight / 2)) + "px"; - break; - - case CPBottomVerticalTextAlignment: - var topPoint = (CGRectGetMaxY(contentRect) - lineHeight) + "px"; - break; - - default: - var topPoint = CGRectGetMinY(contentRect) + "px"; - break; - } - - element.style.top = topPoint; - - var left = CGRectGetMinX(contentRect); // If the browser has a built in left padding, compensate for it. We need the input text to be exactly on top of the original text. if (CPFeatureIsCompatible(CPInput1PxLeftPadding)) @@ -648,8 +605,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); element.style.left = left + "px"; element.style.width = CGRectGetWidth(contentRect) + "px"; - element.style.height = ROUND(lineHeight) + "px"; - element.style.lineHeight = ROUND(lineHeight) + "px"; element.style.verticalAlign = "top"; element.style.cursor = "auto"; @@ -696,6 +651,68 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); return YES; } +/*! + Set the css style for the input element of the textField + @ignore +*/ +- (void)_setCSSStyleForInputElement +{ + +#if PLATFORM(DOM) + var element = [self _inputElement], + font = [self currentValueForThemeAttribute:@"font"], + lineHeight = [font defaultLineHeightForFont], + contentRect = [self contentRectForBounds:[self bounds]], + verticalAlign = [self currentValueForThemeAttribute:"vertical-alignment"]; + + element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; + + if (CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) + element.style.font = [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"; + } + + switch (verticalAlign) + { + case CPTopVerticalTextAlignment: + var topPoint = CGRectGetMinY(contentRect) + "px"; + break; + + case CPCenterVerticalTextAlignment: + var topPoint = (CGRectGetMidY(contentRect) - (lineHeight / 2)) + "px"; + break; + + case CPBottomVerticalTextAlignment: + var topPoint = (CGRectGetMaxY(contentRect) - lineHeight) + "px"; + break; + + default: + var topPoint = CGRectGetMinY(contentRect) + "px"; + break; + } + + element.style.top = topPoint; + element.style.height = ROUND(lineHeight) + "px"; + element.style.lineHeight = ROUND(lineHeight) + "px"; + +#endif + +} + /*! @ignore */ - (BOOL)resignFirstResponder { @@ -1742,6 +1759,9 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [contentView setTextShadowColor:[self currentValueForThemeAttribute:@"text-shadow-color"]]; [contentView setTextShadowOffset:[self currentValueForThemeAttribute:@"text-shadow-offset"]]; } + + if (_isEditing) + [self _setCSSStyleForInputElement]; } - (void)takeValueFromKeyPath:(CPString)aKeyPath ofObjects:(CPArray)objects diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j b/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j new file mode 100644 index 000000000..4e883acc2 --- /dev/null +++ b/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j @@ -0,0 +1,40 @@ +/* + * AppController.j + * CPTextFieldEditingStyleTest + * + * Created by Alexandre Wilhelm on June 9, 2014. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + @outlet CPTextField textField; +} + +- (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 setFullPlatformWindow:YES]; +} + +- (IBAction)changeStyle:(id)sender +{ + [textField setTextColor:[CPColor redColor]]; + [textField setFont:[CPFont boldSystemFontOfSize:10]]; + [textField setAlignment:CPRightTextAlignment]; +} + +@end diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/Info.plist b/Tests/Manual/CPTextFieldEditingStyleTest/Info.plist new file mode 100644 index 000000000..50be19c28 --- /dev/null +++ b/Tests/Manual/CPTextFieldEditingStyleTest/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPTextFieldEditingStyleTest + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/Jakefile b/Tests/Manual/CPTextFieldEditingStyleTest/Jakefile new file mode 100644 index 000000000..8d30e7c27 --- /dev/null +++ b/Tests/Manual/CPTextFieldEditingStyleTest/Jakefile @@ -0,0 +1,183 @@ +/* + * Jakefile + * CPTextFieldEditingStyleTest + * + * Created by Alexandre Wilhelm on June 9, 2014. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CPTextFieldEditingStyleTest"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPTextFieldEditingStyleTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPTextFieldEditingStyleTest"); + task.setIdentifier("com.yourcompany.CPTextFieldEditingStyleTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPTextFieldEditingStyleTest"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPTextFieldEditingStyleTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPTextFieldEditingStyleTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (ENV["CONFIGURATION"] === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.cib b/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.cib new file mode 100644 index 000000000..16496ff10 --- /dev/null +++ b/Tests/Manual/CPTextFieldEditingStyleTest/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;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;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;2;38E;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;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;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;2;53E;D;K;6;CP$UIDd;2;55E;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;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;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;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;3;118E;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;123E;D;K;6;CP$UIDd;3;125E;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;130E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;11E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;131E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;132E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;129E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;123E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;135E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;53E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;131E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;170E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;171E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;172E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;173E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;58E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;58E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;173E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;176E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;178E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;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;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;182E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;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;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;184E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;185E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;65E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;65E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;186E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;188E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;189E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;190E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;191E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;69E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;69E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;192E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;193E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;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;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;196E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;197E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;199E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;200E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;204E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;77E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;77E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;204E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;207E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;208E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;209E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;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;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;210E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;211E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;212E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;213E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;214E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;215E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;216E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;217E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;218E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;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;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;219E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;88E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;88E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;219E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;221E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;222E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;223E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;224E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;227E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;228E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;233E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;234E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;235E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;95E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;95E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;235E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;237E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;240E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;241E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;243E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;101E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;243E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;245E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;222E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;223E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;228E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;106E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;248E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;251E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;252E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;110E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;252E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;255E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;114E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;258E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;259E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;262E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;263E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;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;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;265E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;120E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;120E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;265E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;267E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;122E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;269E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;270E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;271E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;272E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;273E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;231E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;258E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;125E;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;124E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;274E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;275E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;275E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;278E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;278E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;181E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;274E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;279E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;280E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;125E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;281E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;282E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;283E;K;11;$aalignmentD;K;6;CP$UIDd;3;225E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;274E;K;6;$afontD;K;6;CP$UIDd;3;285E;K;7;$aimageD;K;6;CP$UIDd;3;287E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;278E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;278E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;181E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;274E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;288E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;289E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;180E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;181E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;290E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;274E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;179E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;225E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;274E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;128E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;274E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;291E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;292E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;125E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;281E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;294E;K;11;$aalignmentD;K;6;CP$UIDd;3;288E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;225E;K;6;$afontD;K;6;CP$UIDd;3;285E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;278E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;278E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;181E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;179E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;180E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;288E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;179E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;179E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;179E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;296E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;225E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;288E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;297E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;E;E;S;8;delegateS;9;textFieldS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;12;changeStyle:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;119E;E;E;S;14;NewApplicationS;14;submenuAction:d;7;1048576S;18;_CPApplicationMenuD;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;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;E;E;S;20;About NewApplicationT;S;0;F;S;12;Preferences…S;1;,S;19;Quit NewApplicationS;1;qS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;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;E;E;S;3;NewS;1;nS;5;Open…S;1;oS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;70E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;4;SaveS;1;sS;8;Save As…S;1;Sd;7;1179648S;15;Revert to SavedS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;87E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;105E;E;E;S;4;UndoS;1;zS;4;RedoS;1;ZS;3;CutS;1;xS;4;CopyS;1;cS;5;PasteS;1;vS;6;DeleteS;10;Select AllS;1;aS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;5;Find…d;1;1S;1;fS;9;Find Nextd;1;2S;1;gS;13;Find Previousd;1;3S;1;GS;22;Use Selection for Findd;1;7S;1;eS;17;Jump to SelectionS;1;jS;20;Spelling and GrammarD;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;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;E;E;S;14;Show Spelling…S;1;:S;14;Check SpellingS;1;;S;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;E;E;S;14;Start SpeakingS;13;Stop SpeakingS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;6;WindowS;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;8;MinimizeS;1;mS;4;ZoomS;18;Bring All to FrontS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;121E;E;E;S;19;NewApplication HelpS;1;?S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {480, 360}}D;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;3;129E;E;E;S;6;normalS;6;{1, 1}S;22;{{136, 24}, {208, 25}}S;19;{{0, 0}, {208, 25}}d;2;36S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;284E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;298E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;181E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;181E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;181E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;286E;K;4;nameD;K;6;CP$UIDd;3;300E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;301E;K;5;valueD;K;6;CP$UIDd;3;302E;E;d;1;4S;29;Change style of the textFieldd;2;14S;22;{{132, 57}, {216, 29}}S;19;{{0, 0}, {216, 29}}S;9;textfieldS;28;bezeled+editable+placeholderD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;295E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;303E;E;S;13;AppControllerS;17;.Lucida Grande UId;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;284E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;298E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;181E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;181E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;222E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.xib b/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.xib new file mode 100644 index 000000000..c0c4fce32 --- /dev/null +++ b/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.xib @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/index-debug.html b/Tests/Manual/CPTextFieldEditingStyleTest/index-debug.html new file mode 100644 index 000000000..d98a6aa5b --- /dev/null +++ b/Tests/Manual/CPTextFieldEditingStyleTest/index-debug.html @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + CPTextFieldEditingStyleTest + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/index.html b/Tests/Manual/CPTextFieldEditingStyleTest/index.html new file mode 100644 index 000000000..61cb32972 --- /dev/null +++ b/Tests/Manual/CPTextFieldEditingStyleTest/index.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + CPTextFieldEditingStyleTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/main.j b/Tests/Manual/CPTextFieldEditingStyleTest/main.j new file mode 100644 index 000000000..061b81ad6 --- /dev/null +++ b/Tests/Manual/CPTextFieldEditingStyleTest/main.j @@ -0,0 +1,17 @@ +/* + * AppController.j + * CPTextFieldEditingStyleTest + * + * Created by Alexandre Wilhelm on June 9, 2014. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 2a78da6d078bc25e1b37b6dabb2ad0c967cc0161 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 10 Jun 2014 11:03:08 +0200 Subject: [PATCH 182/278] Formatting and comment on table view first responder change. Refs #2133. --- AppKit/CPTableView.j | 3 ++- AppKit/Themes/Aristo/ThemeDescriptors.j | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 713cd40e8..e597f2646 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -5152,7 +5152,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad _editingRow = [self rowForView:responder]; _editingColumn = [self columnForView:responder]; - // This is needed to set the themeState firstResponder of the tableView + // We want to keep the 'First Responder' theme state for the table view as a whole, even when a subview is being edited. + // This makes sure the theming effects of a focused table remain in effect even as cells are being edited in it. [self _notifyViewDidBecomeFirstResponder]; if (_editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && ![responder isBezeled]) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index f4ba002a3..a88a1de84 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -987,7 +987,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(3.0, 3.0, 3.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder,CPThemeStateKeyWindow]], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditable]], [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing]], From 0f2ec900645c4fc5ef216f425598ff34664451a7 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 14 Jun 2014 08:14:38 +0200 Subject: [PATCH 183/278] documentVisibleRect support --- AppKit/CPClipView.j | 5 +++++ AppKit/CPScrollView.j | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index a59f83f12..7cc52d2bc 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -230,6 +230,11 @@ return [self scrollToPoint:CGPointMake(bounds.origin.x - deltaX, bounds.origin.y - deltaY)]; } +- (CGRect)documentVisibleRect +{ + return [self convertRect:[self bounds] fromView:_documentView]; +} + @end diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 439489982..3ea8593b9 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -1262,6 +1262,10 @@ Notifies the delegate when the scroll view has finished scrolling. [self reflectScrolledClipView:_contentView]; } +- (CGRect)documentVisibleRect +{ + return [_contentView documentVisibleRect]; +} #pragma mark - #pragma mark Overrides From cd6ffba9ac0897b5913ef728c643b834c143ecca Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 18 Jun 2014 16:29:13 -0700 Subject: [PATCH 184/278] Fixed: CPPanel and popover doesn't close when hitting escape Previously, a panel or a popover didn't close when the user hit the key escape. Now it does. The panel or the popover will close on the keyDown event as in cocoa. Test app in Tests/Manual/CPPanelTest/ and Tests/Manual/CPPopoverTests Fixed #1767 --- AppKit/CPWindow/CPWindow.j | 18 +- AppKit/_CPPopoverWindow.j | 2 +- Tests/Manual/CPPanelTest/AppController.j | 44 +++ Tests/Manual/CPPanelTest/Info.plist | 14 + Tests/Manual/CPPanelTest/Jakefile | 184 ++++++++++ .../Manual/CPPanelTest/Resources/MainMenu.cib | 1 + .../Manual/CPPanelTest/Resources/MainMenu.xib | 333 ++++++++++++++++++ Tests/Manual/CPPanelTest/index-debug.html | 191 ++++++++++ Tests/Manual/CPPanelTest/index.html | 161 +++++++++ Tests/Manual/CPPanelTest/main.j | 18 + 10 files changed, 963 insertions(+), 3 deletions(-) create mode 100644 Tests/Manual/CPPanelTest/AppController.j create mode 100644 Tests/Manual/CPPanelTest/Info.plist create mode 100644 Tests/Manual/CPPanelTest/Jakefile create mode 100644 Tests/Manual/CPPanelTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPPanelTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPPanelTest/index-debug.html create mode 100644 Tests/Manual/CPPanelTest/index.html create mode 100644 Tests/Manual/CPPanelTest/main.j diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 86cfa393d..ce95e16db 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -50,10 +50,10 @@ @class CPMenu @class CPProgressIndicator +@class CPPanel @global CPApp - @protocol CPWindowDelegate @optional @@ -1792,10 +1792,24 @@ CPTexturedBackgroundWindowMask // even that we just moved it to a new first responder. [[[anEvent window] platformWindow] _propagateCurrentDOMEvent:NO] #endif - } + return didTabBack; } + else if ([anEvent charactersIgnoringModifiers] === CPEscapeFunctionKey && [self isKindOfClass:[CPPanel class]]) + { + if ([self respondsToSelector:@selector(closeOnBlur)]) + { + if ([self closeOnBlur]) + [self close]; + } + else + { + [self close]; + } + + return; + } [[self firstResponder] keyDown:anEvent]; diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 899fab08b..7bc30b9ac 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -50,13 +50,13 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, */ @implementation _CPPopoverWindow : CPPanel { + BOOL _closeOnBlur @accessors(getter=closeOnBlur); BOOL _animates @accessors(property=animates); id _targetView @accessors(property=targetView); int _appearance @accessors(getter=appearance); BOOL _isClosing @accessors(property=isClosing); BOOL _browserAnimates; - BOOL _closeOnBlur; BOOL _isObservingFrame; BOOL _shouldPerformAnimation; CPInteger _implementedDelegateMethods; diff --git a/Tests/Manual/CPPanelTest/AppController.j b/Tests/Manual/CPPanelTest/AppController.j new file mode 100644 index 000000000..6fab4d9df --- /dev/null +++ b/Tests/Manual/CPPanelTest/AppController.j @@ -0,0 +1,44 @@ +/* + * AppController.j + * CPPanelTest + * + * Created by You on June 18, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + @outlet CPPanel panel; +} + +- (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 setFullPlatformWindow:YES]; +} + +- (IBAction)showPanel:(id)sender +{ + [panel makeKeyAndOrderFront:sender]; +} + +- (IBAction)closePanel:(id)sender +{ + [panel close]; +} + +@end diff --git a/Tests/Manual/CPPanelTest/Info.plist b/Tests/Manual/CPPanelTest/Info.plist new file mode 100644 index 000000000..27a81fccd --- /dev/null +++ b/Tests/Manual/CPPanelTest/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPPanelTest + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPPanelTest/Jakefile b/Tests/Manual/CPPanelTest/Jakefile new file mode 100644 index 000000000..4ce399d39 --- /dev/null +++ b/Tests/Manual/CPPanelTest/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPPanelTest + * + * Created by You on June 18, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CPPanelTest"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPPanelTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPPanelTest"); + task.setIdentifier("com.yourcompany.CPPanelTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPPanelTest"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPPanelTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPPanelTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (ENV["CONFIGURATION"] === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPPanelTest/Resources/MainMenu.cib b/Tests/Manual/CPPanelTest/Resources/MainMenu.cib new file mode 100644 index 000000000..9a3e42c35 --- /dev/null +++ b/Tests/Manual/CPPanelTest/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;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;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;2;38E;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;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;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;2;54E;D;K;6;CP$UIDd;2;56E;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;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;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;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;3;118E;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;124E;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;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;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;133E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;134E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;129E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;124E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;137E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;54E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;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;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;129E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;129E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;133E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;173E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;174E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;175E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;176E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;59E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;59E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;176E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;179E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;181E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;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;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;185E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;186E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;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;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;188E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;66E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;66E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;189E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;192E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;194E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;70E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;195E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;196E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;197E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;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;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;200E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;201E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;207E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;78E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;78E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;207E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;209E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;210E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;211E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;212E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;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;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;213E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;214E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;215E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;216E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;217E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;218E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;219E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;220E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;221E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;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;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;222E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;89E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;89E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;222E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;224E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;227E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;228E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;233E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;234E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;236E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;237E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;238E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;96E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;96E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;238E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;240E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;243E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;245E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;102E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;102E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;246E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;249E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;228E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;251E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;107E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;107E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;251E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;255E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;111E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;255E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;258E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;260E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;261E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;262E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;265E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;266E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;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;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;267E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;268E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;271E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;123E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;272E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;273E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;274E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;275E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;276E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;234E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;261E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;126E;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;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;278E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;278E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;279E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;280E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;281E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;184E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;282E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;283E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;126E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;284E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;285E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;286E;K;11;$aalignmentD;K;6;CP$UIDd;3;228E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;288E;K;7;$aimageD;K;6;CP$UIDd;3;290E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;281E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;184E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;277E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;291E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;292E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;183E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;184E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;293E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;277E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;182E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;228E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;277E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;3;123E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;272E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;295E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;296E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;297E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;276E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;298E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;261E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;299E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;299E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;280E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;281E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;131E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;301E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;131E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;284E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;285E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;286E;K;11;$aalignmentD;K;6;CP$UIDd;3;228E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;288E;K;7;$aimageD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;281E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;184E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;277E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;291E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;304E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;183E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;184E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;293E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;277E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;182E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;228E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;277E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;E;E;S;8;delegateS;5;panelS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;11;closePanel:S;10;showPanel:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;120E;E;E;S;14;NewApplicationS;14;submenuAction:d;7;1048576S;18;_CPApplicationMenuD;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;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;E;E;S;20;About NewApplicationT;S;0;F;S;12;Preferences…S;1;,S;19;Quit NewApplicationS;1;qS;4;FileD;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;2;68E;D;K;6;CP$UIDd;2;69E;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;E;E;S;3;NewS;1;nS;5;Open…S;1;oS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;4;SaveS;1;sS;8;Save As…S;1;Sd;7;1179648S;15;Revert to SavedS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;106E;E;E;S;4;UndoS;1;zS;4;RedoS;1;ZS;3;CutS;1;xS;4;CopyS;1;cS;5;PasteS;1;vS;6;DeleteS;10;Select AllS;1;aS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;5;Find…d;1;1S;1;fS;9;Find Nextd;1;2S;1;gS;13;Find Previousd;1;3S;1;GS;22;Use Selection for Findd;1;7S;1;eS;17;Jump to SelectionS;1;jS;20;Spelling and GrammarD;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;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;E;E;S;14;Show Spelling…S;1;:S;14;Check SpellingS;1;;S;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;13;SubstitutionsD;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;104E;D;K;6;CP$UIDd;3;105E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;SpeechD;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;3;109E;E;E;S;14;Start SpeakingS;13;Stop SpeakingS;4;ViewD;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;113E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;6;WindowS;14;_CPWindowsMenuD;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;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;E;E;S;8;MinimizeS;1;mS;4;ZoomS;18;Bring All to FrontS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;E;E;S;19;NewApplication HelpS;1;?S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;E;E;S;6;normalS;6;{1, 1}S;23;{{190, 104}, {100, 25}}S;19;{{0, 0}, {100, 25}}d;2;36S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;287E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;305E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;306E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;184E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;184E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;184E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;289E;K;4;nameD;K;6;CP$UIDd;3;307E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;308E;K;5;valueD;K;6;CP$UIDd;3;309E;E;d;1;4S;10;Show paneld;2;14S;13;AppControllerS;7;CPPaneld;10;-529005568S;24;{{139, 419}, {276, 378}}d;2;15S;20;{{0, 0}, {276, 378}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;E;E;S;22;{{88, 180}, {101, 25}}S;19;{{0, 0}, {101, 25}}D;K;6;$classD;K;6;CP$UIDd;3;289E;K;4;nameD;K;6;CP$UIDd;3;307E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;308E;K;5;valueD;K;6;CP$UIDd;3;309E;E;S;11;Close panelS;17;.Lucida Grande UId;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;287E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;305E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;306E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;184E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;184E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;184E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPPanelTest/Resources/MainMenu.xib b/Tests/Manual/CPPanelTest/Resources/MainMenu.xib new file mode 100644 index 000000000..968150421 --- /dev/null +++ b/Tests/Manual/CPPanelTest/Resources/MainMenu.xib @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPPanelTest/index-debug.html b/Tests/Manual/CPPanelTest/index-debug.html new file mode 100644 index 000000000..d2336e707 --- /dev/null +++ b/Tests/Manual/CPPanelTest/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPPanelTest + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPPanelTest/index.html b/Tests/Manual/CPPanelTest/index.html new file mode 100644 index 000000000..6f82ac7f8 --- /dev/null +++ b/Tests/Manual/CPPanelTest/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPPanelTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPPanelTest/main.j b/Tests/Manual/CPPanelTest/main.j new file mode 100644 index 000000000..4d948a81d --- /dev/null +++ b/Tests/Manual/CPPanelTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPPanelTest + * + * Created by You on June 18, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From ce86c757cd3c56cbf91f990320aed467222796c5 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 18 Jun 2014 16:39:26 -0700 Subject: [PATCH 185/278] Fixed: missing bracket... --- 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 ce95e16db..2d24ef9f1 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -1793,7 +1793,7 @@ CPTexturedBackgroundWindowMask [[[anEvent window] platformWindow] _propagateCurrentDOMEvent:NO] #endif - + } return didTabBack; } else if ([anEvent charactersIgnoringModifiers] === CPEscapeFunctionKey && [self isKindOfClass:[CPPanel class]]) From 972c14225bbf63abbf1a1637b0a326ee6ba54193 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 18 Jun 2014 18:30:29 -0700 Subject: [PATCH 186/278] Fixed: CPDatePicker value is wrong when making a click on the stepper Previously, when making a click on the stepper of a textual CPDatePicker, the intern value of the stepper wasn't updated with the correct value of the CPDatePicker. This occurred when the user changed the dateValue in the delegate methods of the textField. --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index e002707ad..bf383bcb8 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -133,10 +133,10 @@ var CPZeroKeyCode = 48, return NO; } + #pragma mark - #pragma mark Setter Getter methods - /*! Set the value of the control @param aDateValue */ @@ -145,6 +145,12 @@ var CPZeroKeyCode = 48, var dateValue = [aDateValue copy]; [dateValue _dateWithTimeZone:[_datePicker timeZone]]; [_datePickerElementView setDateValue:dateValue]; + + // This is used to update the value of the stepper + // It's usefull when the user change the dateValue in the delegate for example otherwise the stepper will keep the old value + // We don't call the method objectValue: because we don't want to use the binding system of cappuccino when updating this value + if (_currentTextField) + _stepper._value = parseInt([_currentTextField stringValue]); } /*! Set the widget enabled or not @@ -247,9 +253,9 @@ var CPZeroKeyCode = 48, // This gonna update the dateValue with the binding if (isUp) - [_stepper setDoubleValue:parseInt([_currentTextField objectValue]) + 1]; + [_stepper setDoubleValue:parseInt([_currentTextField stringValue]) + 1]; else - [_stepper setDoubleValue:parseInt([_currentTextField objectValue]) - 1]; + [_stepper setDoubleValue:parseInt([_currentTextField stringValue]) - 1]; return; } @@ -257,7 +263,7 @@ var CPZeroKeyCode = 48, if ([_currentTextField dateType] != CPAMPMDateType) { // Make sure to get the good value, especially when we reach the maxDate or minDate - [sender setDoubleValue:parseInt([_currentTextField objectValue])]; + [sender setDoubleValue:parseInt([_currentTextField stringValue])]; } else { @@ -284,7 +290,7 @@ var CPZeroKeyCode = 48, if (key == CPUpArrowFunctionKey) { [_currentTextField _invalidTimer]; - [_stepper setDoubleValue:parseInt([_currentTextField objectValue])]; + [_stepper setDoubleValue:parseInt([_currentTextField stringValue])]; [_stepper performClickUp:self]; return YES; } @@ -292,7 +298,7 @@ var CPZeroKeyCode = 48, if (key == CPDownArrowFunctionKey) { [_currentTextField _invalidTimer]; - [_stepper setDoubleValue:parseInt([_currentTextField objectValue])]; + [_stepper setDoubleValue:parseInt([_currentTextField stringValue])]; [_stepper performClickDown:self]; return YES; } @@ -1563,6 +1569,7 @@ var CPMonthDateType = 0, [self setStringValue:dateValue.getSeconds().toString()]; return; } + [super setObjectValue:objectValue]; break; From 148f3172e6b472a120e90402cbbf899772b882c0 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 18 Jun 2014 18:58:08 -0700 Subject: [PATCH 187/278] Fixed: When closing a panel with escape, the delegates are not called Previously, when closing a panel or popover with escape, the different delegates weren't called. Now it does. --- AppKit/CPWindow/CPWindow.j | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 2d24ef9f1..5cf7a477a 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -51,6 +51,7 @@ @class CPMenu @class CPProgressIndicator @class CPPanel +@class _CPPopoverWindow @global CPApp @@ -1798,14 +1799,14 @@ CPTexturedBackgroundWindowMask } else if ([anEvent charactersIgnoringModifiers] === CPEscapeFunctionKey && [self isKindOfClass:[CPPanel class]]) { - if ([self respondsToSelector:@selector(closeOnBlur)]) + if ([self isKindOfClass:[_CPPopoverWindow class]]) { if ([self closeOnBlur]) - [self close]; + [[self delegate] performClose:self]; } else { - [self close]; + [self performClose:self]; } return; From 5d5d03fd4cdab717625d6ff47ef04a0707bdbf9b Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 19 Jun 2014 21:05:06 -0700 Subject: [PATCH 188/278] Fixed: textField in CPTextFieldTest doens't have a placeholder --- Tests/Manual/CPTextFieldEditingStyleTest/AppController.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j b/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j index 4e883acc2..1743b4913 100644 --- a/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j +++ b/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j @@ -27,6 +27,7 @@ // 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 + [textField setPlaceholderString:@"I'm a nice placeholder"]; [theWindow setFullPlatformWindow:YES]; } From 3b9a0124fa73574f755daca988fc945bc49fc455 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 19 Jun 2014 21:05:17 -0700 Subject: [PATCH 189/278] Fixed: setTextColor of CPTextField changed the color of the placeholder Previously, the method setTextColor changed the color of the placeholder as well. Now it doesn't as in cocoa Test app in Test/Manual/CPTextFieldEditingStyleTest --- AppKit/CPTextField.j | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 85f7e3d8a..899c460b9 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -665,7 +665,10 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); contentRect = [self contentRectForBounds:[self bounds]], verticalAlign = [self currentValueForThemeAttribute:"vertical-alignment"]; - element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; + if ([self hasThemeState:CPTextFieldStatePlaceholder]) + element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder] cssString]; + else + element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; if (CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) element.style.font = [font cssString]; @@ -1782,6 +1785,20 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); #pragma mark Overrides +/*! + Sets the text color of the receiver. + + @param aColor - A CPColor object. +*/ +- (void)setTextColor:(CPColor)aColor +{ + // We don't want to change the text-color of the placeHolder of the textField + var placeholderColor = [self valueForThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder]; + + [super setTextColor:aColor]; + [self setValue:placeholderColor forThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder]; +} + - (void)viewDidHide { [super viewDidHide]; From 33317782ea390259d6d8bf95ba8127d118bfac56 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 21 Jun 2014 20:32:28 -0400 Subject: [PATCH 190/278] Fixed: CFHTTPRequest now accepts the withCredentials property From the original PR: Currently, CPURLConnection has no way to access the withCredential property of an XMLHTTPRequest, meaning we can't utilize cross-domain calls using CORS in our applications. This commit adds the withCredentials property to CFHTTPRequest. Refs #1296 --- Objective-J/CFHTTPRequest.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Objective-J/CFHTTPRequest.js b/Objective-J/CFHTTPRequest.js index 2084ca0a6..6186dc80f 100644 --- a/Objective-J/CFHTTPRequest.js +++ b/Objective-J/CFHTTPRequest.js @@ -274,6 +274,16 @@ CFHTTPRequest.prototype.removeEventListener = function(/*String*/ anEventName, / this._eventDispatcher.removeEventListener(anEventName, anEventListener); }; +CFHTTPRequest.prototype.setWithCredentials = function(/*Boolean*/ willSendWithCredentials) +{ + this._nativeRequest.withCredentials = willSendWithCredentials; +}; + +CFHTTPRequest.prototype.getWithCredentials = function() +{ + return this._nativeRequest.withCredentials; +}; + function determineAndDispatchHTTPRequestEvents(/*CFHTTPRequest*/ aRequest) { var eventDispatcher = aRequest._eventDispatcher; From ffcef907b309ccbde2f89702b5d6b72a6f1b2790 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 21 Jun 2014 20:36:12 -0400 Subject: [PATCH 191/278] Fixed: CPURLConnection now accepts withCredentials From the original PR: CPURLConnection was modified to reduce the withCredentials flag to a file-scope member. This has been done to facilitate use of withCredentials when a developer cannot modify the CPURLConnection manually (e.g. https://github.com/wireload/Ratatosk/blob/master/WLRemoteLink.j, line 466). Refs #1296, #2138 --- Foundation/CPURLConnection.j | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index b520cf9fd..0349947c1 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -27,6 +27,7 @@ @import "CPURLResponse.j" var CPURLConnectionDelegate = nil; +var withCredentials = NO; /*! @class CPURLConnection @@ -87,6 +88,21 @@ var CPURLConnectionDelegate = nil; CPURLConnectionDelegate = delegate; } +/* + Sets a flag to designate whether async XMLHTTPRequests should allow credentials to be sent or not. + This only works with async calls. + @param willSendWithCredentials flag to let XMLHTTPRequests to use withCredentials +*/ ++ (void)setWithCredentials:(BOOL)willSendWithCredentials +{ + withCredentials = willSendWithCredentials; +} + ++ (BOOL)withCredentials +{ + return withCredentials; +} + /* Sends a request for the data from a URL. This is the easiest way to obtain data from a URL. @param aRequest contains the URL to request the data from @@ -189,6 +205,8 @@ var CPURLConnectionDelegate = nil; { _isCanceled = NO; + _HTTPRequest.setWithCredentials(withCredentials); + try { _HTTPRequest.open([_request HTTPMethod], [[_request URL] absoluteString], YES); From 175a455d75c56f9454f8fa8ec2c0bdae78bda305 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 22 Jun 2014 12:53:21 +0100 Subject: [PATCH 192/278] Test: add CPAutosizePerformance test to validate objj_msgSend speed improvements. This test was written by cacaodev. Refs #2103. --- Tests/AppKit/CPAutosizePerformance.j | 63 ++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Tests/AppKit/CPAutosizePerformance.j diff --git a/Tests/AppKit/CPAutosizePerformance.j b/Tests/AppKit/CPAutosizePerformance.j new file mode 100644 index 000000000..ee8c5e44e --- /dev/null +++ b/Tests/AppKit/CPAutosizePerformance.j @@ -0,0 +1,63 @@ +@import +@import + +[CPApplication sharedApplication]; + + +@implementation CPAutosizeTest : OJTestCase +{ + CPInteger NUMBER_OF_VIEWS; + CPInteger RESIZES_COUNT; +} + +- (void)setUp +{ + NUMBER_OF_VIEWS = 100; + RESIZES_COUNT = 500; +} + +- (void)testAutosizePerf +{ + var dur = 0, + masks = [0,1,2,3,4,5,6,7,8]; + + for (var i = 0; i < 64; i++) + dur += [self _testAutosizePerfWithMask:i]; + + CPLog.warn(dur + " ms when autosizing " + RESIZES_COUNT + " times a window with " + NUMBER_OF_VIEWS + " views, using masks " + masks); +} + +- (CPInteger)_testAutosizePerfWithMask:(CPInteger)aMask +{ + var windowRect = CGRectMake(0, 0, 500, 500); + var _autoSizeWindow = [[CPWindow alloc] initWithContentRect:windowRect styleMask:CPResizableWindowMask]; + + for (var i = 0; i < NUMBER_OF_VIEWS; i++) + { + var x = (i % 10) * 50, + y = FLOOR(i / 10) * 50, + rect = CGRectMake(x, y, 50, 50); + + var autosizeView = [[CPView alloc] initWithFrame:rect]; + [autosizeView setAutoresizingMask:aMask]; + [[_autoSizeWindow contentView] addSubview:autosizeView]; + } + + [_autoSizeWindow setFrame:CGRectMake(0, 0, 600, 600)]; + + var start = new Date(); + + for (var k = 1; k <= RESIZES_COUNT; k++) + { + var size = 600 + k; + [_autoSizeWindow setFrame:CGRectMake(0, 0, size, size)]; + } + + var total = new Date() - start; + + CPLog.warn("AutosizingMask " + aMask + " -setFrame: avg=" + (total/ RESIZES_COUNT) + " ms. Total = " + total + " ms."); + + return total; +} + +@end \ No newline at end of file From fba900707a7fee092354ef8901efdfef304e9671 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 22 Jun 2014 12:58:24 +0100 Subject: [PATCH 193/278] Test: formatting, fix name of previous test. Refs #2103. --- Tests/AppKit/CPAutosizePerformance.j | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Tests/AppKit/CPAutosizePerformance.j b/Tests/AppKit/CPAutosizePerformance.j index ee8c5e44e..443d8135d 100644 --- a/Tests/AppKit/CPAutosizePerformance.j +++ b/Tests/AppKit/CPAutosizePerformance.j @@ -1,10 +1,10 @@ -@import @import +@import [CPApplication sharedApplication]; -@implementation CPAutosizeTest : OJTestCase +@implementation CPAutosizePerformance : OJTestCase { CPInteger NUMBER_OF_VIEWS; CPInteger RESIZES_COUNT; @@ -12,14 +12,14 @@ - (void)setUp { - NUMBER_OF_VIEWS = 100; - RESIZES_COUNT = 500; + NUMBER_OF_VIEWS = 50; + RESIZES_COUNT = 250; } - (void)testAutosizePerf { var dur = 0, - masks = [0,1,2,3,4,5,6,7,8]; + masks = [0, 1, 2, 3, 4, 5, 6, 7, 8]; for (var i = 0; i < 64; i++) dur += [self _testAutosizePerfWithMask:i]; @@ -29,8 +29,8 @@ - (CPInteger)_testAutosizePerfWithMask:(CPInteger)aMask { - var windowRect = CGRectMake(0, 0, 500, 500); - var _autoSizeWindow = [[CPWindow alloc] initWithContentRect:windowRect styleMask:CPResizableWindowMask]; + var windowRect = CGRectMake(0, 0, 500, 500), + _autoSizeWindow = [[CPWindow alloc] initWithContentRect:windowRect styleMask:CPResizableWindowMask]; for (var i = 0; i < NUMBER_OF_VIEWS; i++) { @@ -55,9 +55,9 @@ var total = new Date() - start; - CPLog.warn("AutosizingMask " + aMask + " -setFrame: avg=" + (total/ RESIZES_COUNT) + " ms. Total = " + total + " ms."); + //CPLog.warn("AutosizingMask " + aMask + " -setFrame: avg=" + (total/ RESIZES_COUNT) + " ms. Total = " + total + " ms."); return total; } -@end \ No newline at end of file +@end From ea3adc44fd87e42a04c8c2cedc708da3cc817131 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 22 Jun 2014 14:29:40 +0100 Subject: [PATCH 194/278] Fixed: objj_msgSend_reset not resetting with fast objj_msgSend. Refs #2103. --- Objective-J/Debug.js | 11 ++++++ Tests/Objective-J/DebugTest.j | 72 +++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 Tests/Objective-J/DebugTest.j diff --git a/Objective-J/Debug.js b/Objective-J/Debug.js index b22493dc0..c0102193d 100644 --- a/Objective-J/Debug.js +++ b/Objective-J/Debug.js @@ -58,6 +58,17 @@ GLOBAL(objj_msgSend_reset) = function() objj_msgSendFast1 = objj_msgSendFast1_original; objj_msgSendFast2 = objj_msgSendFast2_original; objj_msgSendFast3 = objj_msgSendFast3_original; + + objj_enumerateClassesUsingBlock(function(aClass) { + if (aClass.hasOwnProperty("objj_msgSend")) + { + aClass.objj_msgSend = objj_msgSendFast; + aClass.objj_msgSend0 = objj_msgSendFast0; + aClass.objj_msgSend1 = objj_msgSendFast1; + aClass.objj_msgSend2 = objj_msgSendFast2; + aClass.objj_msgSend3 = objj_msgSendFast3; + } + }); } // decorate both objj_msgSend and objj_msgSendSuper diff --git a/Tests/Objective-J/DebugTest.j b/Tests/Objective-J/DebugTest.j new file mode 100644 index 000000000..d48daa5fb --- /dev/null +++ b/Tests/Objective-J/DebugTest.j @@ -0,0 +1,72 @@ +var SEEN_MESSAGES = []; + +objj_test_decorator = function(msgSend) +{ + return function(aReceiverOrSuper, aSelector) + { + if (aSelector === @selector(intify:)) + SEEN_MESSAGES.push([aReceiverOrSuper, aSelector]); + return msgSend.apply(this, arguments); + }; +} + +@implementation TestClass0 : CPObject + +- (CPInteger)intify:(CPInteger)anInput +{ + return anInput * 2; // now twice as int +} + +@end + +@implementation TestClass1 : CPObject + +- (CPInteger)intify:(CPInteger)anInput +{ + return anInput * 2; // now twice as int +} + +@end + + +@implementation DebugTest : OJTestCase + +- (void)setUp +{ + SEEN_MESSAGES = []; +} + +- (void)tearDown +{ + objj_msgSend_reset(); +} + +- (void)test_objj_msgSend_decorate_should_replace_fast_msgSend_for_unitialised_class +{ + objj_msgSend_decorate(objj_test_decorator); + var a = [TestClass0 new]; + [self assert:[a intify:3] equals:6]; + [self assert:SEEN_MESSAGES equals:[[a, @selector(intify:)]]]; +} + +- (void)test_objj_msgSend_decorate_should_replace_fast_msgSend_for_initialised_class +{ + var a = [TestClass1 new]; + [a intify:5]; + + objj_msgSend_decorate(objj_test_decorator); + [self assert:[a intify:3] equals:6]; + [self assert:SEEN_MESSAGES equals:[[a, @selector(intify:)]]]; +} + +- (void)test_objj_msgSend_reset_should_reset +{ + objj_msgSend_decorate(objj_test_decorator); + var a = [TestClass1 new]; + [self assert:[a intify:3] equals:6]; + objj_msgSend_reset(); + [self assert:[a intify:3] equals:6]; + [self assert:SEEN_MESSAGES equals:[[a, @selector(intify:)]]]; +} + +@end From ed36869f1d2b046a0a66572140dd9d07e195478b Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 22 Jun 2014 16:02:37 +0100 Subject: [PATCH 195/278] Test: complex message receiver. Refs #2103. --- .../Preprocessor/OutputTests/Messages/complex-receiver.j | 2 ++ .../Preprocessor/OutputTests/Messages/complex-receiver.js | 2 ++ Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j | 1 + 3 files changed, 5 insertions(+) create mode 100644 Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver.j create mode 100644 Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver.js diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver.j b/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver.j new file mode 100644 index 000000000..78343f17a --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver.j @@ -0,0 +1,2 @@ +var a = 0; +[(a++ < 2 ? small_target : big_target) doStuff]; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver.js new file mode 100644 index 000000000..1ed012c6d --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver.js @@ -0,0 +1,2 @@ +var a=0; +((___r1=a++<2?small_target:big_target),___r1==null?null:___r1.isa.objj_msgSend0(___r1,"doStuff")); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j index 776b75d09..46375b36d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j @@ -14,6 +14,7 @@ var FILENAMES = [ "Messages/keyword-in-selector", "Messages/colon-selector", "Messages/self-as-receiver", + "Messages/complex-receiver", "Misc/parenthesis-return", "Misc/preprocess-if-directives", From 8d7594c96ab4f0bc082b763fb6183713094c87a8 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 22 Jun 2014 16:07:17 +0100 Subject: [PATCH 196/278] Formatting and clean up. Refs #2103. --- Objective-J/Debug.js | 39 ++++++++----------- .../OutputTests/Messages/self-as-receiver.j | 18 +++++---- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/Objective-J/Debug.js b/Objective-J/Debug.js index c0102193d..532afc6f2 100644 --- a/Objective-J/Debug.js +++ b/Objective-J/Debug.js @@ -46,6 +46,19 @@ var objj_msgSend_original = objj_msgSend, objj_msgSendFast2_original = objj_msgSendFast2, objj_msgSendFast3_original = objj_msgSendFast3; +function objj_msgSend_reset_all_classes() { + objj_enumerateClassesUsingBlock(function(aClass) { + if (aClass.hasOwnProperty("objj_msgSend")) + { + aClass.objj_msgSend = objj_msgSendFast; + aClass.objj_msgSend0 = objj_msgSendFast0; + aClass.objj_msgSend1 = objj_msgSendFast1; + aClass.objj_msgSend2 = objj_msgSendFast2; + aClass.objj_msgSend3 = objj_msgSendFast3; + } + }); +} + // decorator management functions // reset to default objj_msgSend* implementations @@ -59,16 +72,7 @@ GLOBAL(objj_msgSend_reset) = function() objj_msgSendFast2 = objj_msgSendFast2_original; objj_msgSendFast3 = objj_msgSendFast3_original; - objj_enumerateClassesUsingBlock(function(aClass) { - if (aClass.hasOwnProperty("objj_msgSend")) - { - aClass.objj_msgSend = objj_msgSendFast; - aClass.objj_msgSend0 = objj_msgSendFast0; - aClass.objj_msgSend1 = objj_msgSendFast1; - aClass.objj_msgSend2 = objj_msgSendFast2; - aClass.objj_msgSend3 = objj_msgSendFast3; - } - }); + objj_msgSend_reset_all_classes(); } // decorate both objj_msgSend and objj_msgSendSuper @@ -88,19 +92,8 @@ GLOBAL(objj_msgSend_decorate) = function() objj_msgSendFast3 = arguments[index](objj_msgSendFast3); } - if (count) { - objj_enumerateClassesUsingBlock(function(aClass) { - // Has the class been initiated? This should be checked in another way - if (aClass.hasOwnProperty("objj_msgSend")) - { - aClass.objj_msgSend = objj_msgSendFast; - aClass.objj_msgSend0 = objj_msgSendFast0; - aClass.objj_msgSend1 = objj_msgSendFast1; - aClass.objj_msgSend2 = objj_msgSendFast2; - aClass.objj_msgSend3 = objj_msgSendFast3; - } - }); - } + if (count) + objj_msgSend_reset_all_classes(); } // reset then decorate both objj_msgSend and objj_msgSendSuper diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.j b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.j index 1d339fcc3..fa715ed5d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver.j @@ -1,15 +1,17 @@ @implementation MyClass -- (id)mySelector { - [self init]; - self = nil; - [self init]; +- (id)mySelector +{ + [self init]; + self = nil; + [self init]; } -- (id)mySelector2 { - [self init]; - eval("self = null;"); - [self init]; +- (id)mySelector2 +{ + [self init]; + eval("self = null;"); + [self init]; } @end From 717841877f4a057736f1f7bc11b7b78e725fcb70 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Sun, 22 Jun 2014 13:18:03 -0700 Subject: [PATCH 197/278] Fixed: typo in _CPDatePickerTextField.j --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index bf383bcb8..b94d964ac 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -263,7 +263,7 @@ var CPZeroKeyCode = 48, if ([_currentTextField dateType] != CPAMPMDateType) { // Make sure to get the good value, especially when we reach the maxDate or minDate - [sender setDoubleValue:parseInt([_currentTextField stringValue])]; + [sender setDoubleValue:parseInt([_currentTextField stringValue])]; } else { From ba9eac3ea40d7c08cb954e0f085e59cd2f7166aa Mon Sep 17 00:00:00 2001 From: Ryan Bannon Date: Mon, 23 Jun 2014 13:08:36 -0400 Subject: [PATCH 198/278] Working #2144: Reintegrated changes from #2138 and fixed test fail. Now using instance variables for withCredentials. Also fixed test failure. --- Foundation/CPURLConnection.j | 67 +++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index 0349947c1..a16c8af45 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -27,7 +27,6 @@ @import "CPURLResponse.j" var CPURLConnectionDelegate = nil; -var withCredentials = NO; /*! @class CPURLConnection @@ -80,6 +79,8 @@ var withCredentials = NO; BOOL _isCanceled; BOOL _isLocalFileConnection; + BOOL _withCredentials @accessors(property=withCredentials); + HTTPRequest _HTTPRequest; } @@ -88,21 +89,6 @@ var withCredentials = NO; CPURLConnectionDelegate = delegate; } -/* - Sets a flag to designate whether async XMLHTTPRequests should allow credentials to be sent or not. - This only works with async calls. - @param willSendWithCredentials flag to let XMLHTTPRequests to use withCredentials -*/ -+ (void)setWithCredentials:(BOOL)willSendWithCredentials -{ - withCredentials = willSendWithCredentials; -} - -+ (BOOL)withCredentials -{ - return withCredentials; -} - /* Sends a request for the data from a URL. This is the easiest way to obtain data from a URL. @param aRequest contains the URL to request the data from @@ -111,26 +97,40 @@ var withCredentials = NO; @return the data at the URL or \c nil if there was an error */ + (CPData)sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse +{ + var cfHTTPRequest = new CFHTTPRequest(); + + return [CPURLConnection _sendSynchronousRequest:aRequest returningResponse:aURLResponse withCFHTTPRequest:cfHTTPRequest]; +} + ++ (CPData)sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse withCredentials:(BOOL)withCredentials +{ + var cfHTTPRequest = new CFHTTPRequest(); + + cfHTTPRequest.setWithCredentials(withCredentials); + + return [CPURLConnection _sendSynchronousRequest:aRequest returningResponse:aURLResponse withCFHTTPRequest:cfHTTPRequest]; +} + ++ (CPData)_sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse withCFHTTPRequest:(CFHTTPRequest)aCFHTTPRequest { try { - var request = new CFHTTPRequest(); - - request.open([aRequest HTTPMethod], [[aRequest URL] absoluteString], NO); + aCFHTTPRequest.open([aRequest HTTPMethod], [[aRequest URL] absoluteString], NO); var fields = [aRequest allHTTPHeaderFields], key = nil, keys = [fields keyEnumerator]; while ((key = [keys nextObject]) !== nil) - request.setRequestHeader(key, [fields objectForKey:key]); + aCFHTTPRequest.setRequestHeader(key, [fields objectForKey:key]); - request.send([aRequest HTTPBody]); + aCFHTTPRequest.send([aRequest HTTPBody]); - if (!request.success()) + if (!aCFHTTPRequest.success()) return nil; - return [CPData dataWithRawString:request.responseText()]; + return [CPData dataWithRawString:aCFHTTPRequest.responseText()]; } catch (anException) { @@ -150,6 +150,16 @@ var withCredentials = NO; return [[self alloc] initWithRequest:aRequest delegate:aDelegate]; } +//overloaded method that allows user to set _withCredentials ++ (CPURLConnection)connectionWithRequest:(CPURLRequest)aRequest delegate:(id)aDelegate withCredentials:(BOOL)withCredentials +{ + var returnValue = [[self alloc] initWithRequest:aRequest delegate:aDelegate startImmediately:NO]; + + [returnValue setWithCredentials:withCredentials]; + [returnValue start]; + return returnValue; +} + /* Default class initializer. Use one of the class methods instead. @param aRequest contains the URL to contact @@ -166,6 +176,7 @@ var withCredentials = NO; _request = aRequest; _delegate = aDelegate; _isCanceled = NO; + _withCredentials = NO; var URL = [_request URL], scheme = [URL scheme]; @@ -204,13 +215,13 @@ var withCredentials = NO; - (void)start { _isCanceled = NO; - - _HTTPRequest.setWithCredentials(withCredentials); + + _HTTPRequest.setWithCredentials(_withCredentials); try { _HTTPRequest.open([_request HTTPMethod], [[_request URL] absoluteString], YES); - + _HTTPRequest.onreadystatechange = function() { [self _readyStateDidChange]; }; var fields = [_request allHTTPHeaderFields], @@ -313,4 +324,6 @@ var withCredentials = NO; return [self _HTTPRequest]; } -@end + + +@end \ No newline at end of file From 96b791b5f951c71efb37c1c6aa5784c7832d85ba Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 23 Jun 2014 10:28:10 -0700 Subject: [PATCH 199/278] Fixed: fixed gangster's comment --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index b94d964ac..1b38ca8ef 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -146,9 +146,7 @@ var CPZeroKeyCode = 48, [dateValue _dateWithTimeZone:[_datePicker timeZone]]; [_datePickerElementView setDateValue:dateValue]; - // This is used to update the value of the stepper - // It's usefull when the user change the dateValue in the delegate for example otherwise the stepper will keep the old value - // We don't call the method objectValue: because we don't want to use the binding system of cappuccino when updating this value + // Before sure to update the stepper value. We don't use -setObjectValue to avoid a binding update. if (_currentTextField) _stepper._value = parseInt([_currentTextField stringValue]); } @@ -251,7 +249,7 @@ var CPZeroKeyCode = 48, [self _selectTextField:_firstTextField]; [[self window] makeFirstResponder:_datePicker]; - // This gonna update the dateValue with the binding + // Update the dateValue with the binding. if (isUp) [_stepper setDoubleValue:parseInt([_currentTextField stringValue]) + 1]; else From 8be05b404ce9cf25c56bd050e338d5015a85cec1 Mon Sep 17 00:00:00 2001 From: Ryan Bannon Date: Mon, 23 Jun 2014 15:47:40 -0400 Subject: [PATCH 200/278] Fixed: change variable name Changed "returnValue" to "connection" - more descriptive. Ref: https://github.com/cappuccino/cappuccino/pull/2144#commitcomment-6769088 --- Foundation/CPURLConnection.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index a16c8af45..b79f08fb6 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -153,11 +153,11 @@ var CPURLConnectionDelegate = nil; //overloaded method that allows user to set _withCredentials + (CPURLConnection)connectionWithRequest:(CPURLRequest)aRequest delegate:(id)aDelegate withCredentials:(BOOL)withCredentials { - var returnValue = [[self alloc] initWithRequest:aRequest delegate:aDelegate startImmediately:NO]; + var connection = [[self alloc] initWithRequest:aRequest delegate:aDelegate startImmediately:NO]; - [returnValue setWithCredentials:withCredentials]; - [returnValue start]; - return returnValue; + [connection setWithCredentials:withCredentials]; + [connection start]; + return connection; } /* From 28520cc49384d28b4ab056bafc07d9bc9b02c225 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Mon, 23 Jun 2014 15:51:13 -0400 Subject: [PATCH 201/278] Formatting: Cleaning up CPURLConnection Removed some extra whitespace and added a newline at the end of the file. --- Foundation/CPURLConnection.j | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index a16c8af45..e596782fb 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -215,13 +215,13 @@ var CPURLConnectionDelegate = nil; - (void)start { _isCanceled = NO; - + _HTTPRequest.setWithCredentials(_withCredentials); try { _HTTPRequest.open([_request HTTPMethod], [[_request URL] absoluteString], YES); - + _HTTPRequest.onreadystatechange = function() { [self _readyStateDidChange]; }; var fields = [_request allHTTPHeaderFields], @@ -324,6 +324,4 @@ var CPURLConnectionDelegate = nil; return [self _HTTPRequest]; } - - -@end \ No newline at end of file +@end From 32657793c8ccf6bcb9b832b8f5358e570dd8a8bd Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Mon, 23 Jun 2014 16:13:36 -0400 Subject: [PATCH 202/278] Formatting: CPURLConnection --- Foundation/CPURLConnection.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index 266633f79..420ce8402 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -157,6 +157,7 @@ var CPURLConnectionDelegate = nil; [connection setWithCredentials:withCredentials]; [connection start]; + return connection; } From 6c52e4936ff67dc63123f47a5cc67ef7d41ed5f4 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Mon, 23 Jun 2014 16:14:21 -0400 Subject: [PATCH 203/278] Tests: Updating test for CPURLConnection This test checks to make sure the CPURLConnection withCredentials functionality works. --- Tests/Foundation/CPURLConnectionTest.j | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Tests/Foundation/CPURLConnectionTest.j b/Tests/Foundation/CPURLConnectionTest.j index 8c046a9c2..91df094d3 100644 --- a/Tests/Foundation/CPURLConnectionTest.j +++ b/Tests/Foundation/CPURLConnectionTest.j @@ -20,7 +20,7 @@ - (void)testSynchronousRequestSuccess { - var req = [CPURLRequest requestWithURL:@"Tests/Foundation/CPURLConnectionTest.j"], + var req = [CPURLRequest requestWithURL:@"Tests/Foundation/CPURLConnectionTest.j"], data = [CPURLConnection sendSynchronousRequest:req returningResponse:nil]; [self assert:CPData equals:[data class]]; @@ -30,10 +30,16 @@ - (void)testSynchronousRequestNotFound { - var req = [CPURLRequest requestWithURL:@"NotFound"], + var req = [CPURLRequest requestWithURL:@"NotFound"], data = [CPURLConnection sendSynchronousRequest:req returningResponse:nil]; [self assertNull:data]; } -@end \ No newline at end of file +- (void)testRequestWithCredentials +{ + var connection = [CPURLConnection connectionWithRequest:[CPURLRequest requestWithURL:@"Tests/Foundation/CPURLConnectionTest.j"] delegate:self withCredentials:YES]; + [self assertTrue:[connection withCredentials]]; +} + +@end From a896fe74254ef2306c15eb316503f794827b4914 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Mon, 23 Jun 2014 16:15:24 -0400 Subject: [PATCH 204/278] Test: New CFHTTPRequest test This commit adds a new test for CFHTTPRequest, which at present only contains the test for withCredentials --- Tests/Objective-J/CFHTTPRequestTest.j | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Tests/Objective-J/CFHTTPRequestTest.j diff --git a/Tests/Objective-J/CFHTTPRequestTest.j b/Tests/Objective-J/CFHTTPRequestTest.j new file mode 100644 index 000000000..f6afe5a58 --- /dev/null +++ b/Tests/Objective-J/CFHTTPRequestTest.j @@ -0,0 +1,16 @@ +@import + +@implementation CFHTTPRequestTest : OJTestCase +{ +} + +- (void)testSetWithCredentials +{ + var cfHTTPRequest = new CFHTTPRequest(); + [self assertFalse:cfHTTPRequest.getWithCredentials()]; + + cfHTTPRequest.setWithCredentials(YES); + [self assertTrue:cfHTTPRequest.getWithCredentials()]; +} + +@end From 43ed8be11461ed7e3ac81a64a9a42c1465923612 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 23 Jun 2014 17:29:18 -0700 Subject: [PATCH 205/278] Fixed: popoverWillShow called when the popover is opened Previously, the delegate popoverWillShow was called even if the popover was already shown. This PR fix this issue. Also, it was possible to launch several times the method orderFront of the _CPPopoverWindow from the CPPopover. For example with a double click on a button. Now the _CPPopoverWindow has a var isOpening and nothing else is possible during the opening of the popover (not possible to close or to click somewhere else etc etc). This work as in Cocoa. Test app in Tests/Manual/CPPopover/ --- AppKit/CPPopover.j | 8 ++++---- AppKit/_CPPopoverWindow.j | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index 56837548f..b532bb511 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -236,8 +236,8 @@ Set the behavior of the CPPopover. It can be: if (!_contentViewController) [CPException raise:CPInternalInconsistencyException reason:@"contentViewController must not be nil"]; - // If the popover is currently closing, do nothing. That is what Cocoa does. - if ([_popoverWindow isClosing]) + // If the popover is currently closing or opening, do nothing. That is what Cocoa does. + if ([_popoverWindow isClosing] || [_popoverWindow isOpening] || [self isShown]) return; if (!_popoverWindow) @@ -278,7 +278,7 @@ Set the behavior of the CPPopover. It can be: */ - (void)_close { - if ([_popoverWindow isClosing] || ![self isShown]) + if ([_popoverWindow isOpening] || [_popoverWindow isClosing] || ![self isShown]) return; if (_implementedDelegateMethods & CPPopoverDelegate_popover_willClose_) @@ -301,7 +301,7 @@ Set the behavior of the CPPopover. It can be: */ - (IBAction)performClose:(id)sender { - if ([_popoverWindow isClosing]) + if ([_popoverWindow isClosing] || [_popoverWindow isOpening]) return; if (_implementedDelegateMethods & CPPopoverDelegate_popover_shouldClose_) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 3ee5c3588..bd0ec6346 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -54,6 +54,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, id _targetView @accessors(property=targetView); int _appearance @accessors(getter=appearance); BOOL _isClosing @accessors(property=isClosing); + BOOL _isOpening @accessors(property=isOpening); BOOL _browserAnimates; BOOL _closeOnBlur; @@ -106,6 +107,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, { _animates = YES; _isClosing = NO; + _isOpening = NO; _browserAnimates = [self browserSupportsAnimation]; _shouldPerformAnimation = YES; _orderOutTransitionFunction = function() { [self _orderOutRecursively:YES]; }; @@ -450,6 +452,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, { if (![self isKeyWindow]) { + _isOpening = YES; [super orderFront:aSender]; if (_animates && _browserAnimates && _shouldPerformAnimation) @@ -516,6 +519,8 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self setCSS3Property:@"TransformOrigin" value:nil]; [self setCSS3Property:@"Transition" value:nil]; #endif + _isOpening = NO; + if (_implementedDelegateMethods & _CPPopoverWindow_didShow_) [_delegate popoverWindowDidShow:self]; } @@ -538,6 +543,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, #if PLATFORM(DOM) _DOMElement.style.opacity = 1; #endif + _isOpening = NO; } } @@ -626,6 +632,14 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self _trapNextMouseDown]; else { + // If we are opening the popover, we need to trap the next mouse down. + // It's possible that the user is clicking several times when opening the CPPopover (doubleClick) + if (_isOpening) + { + [self _trapNextMouseDown]; + return; + } + // Send _close to the delegate so popoverWillClose is sent to the popover's delegate if (_closeOnBlur) [_delegate _close]; From 7bd27ebd520492a22e2bfbc9f693eae9100a9dc4 Mon Sep 17 00:00:00 2001 From: Mathieu Monney Date: Tue, 24 Jun 2014 15:37:59 +0200 Subject: [PATCH 206/278] Fixed: Crash of press tool due to theme attribute not set When using the press tool, it can happen that one of the theme attribute is not set as not everything is instantiated. This fix makes sure that the attribute is set before accessing it to avoid any crash of the press tool. --- AppKit/CPTheme.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 345a3a56b..36a1b7c91 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -774,7 +774,7 @@ function CPThemeAttributeDecode(aCoder, anAttributeName, aDefaultValue, aTheme, { var attribute = [aCoder decodeObjectForKey:key]; - if (!attribute.isa || ![attribute isKindOfClass:[_CPThemeAttribute class]]) + if (!attribute || !attribute.isa || ![attribute isKindOfClass:[_CPThemeAttribute class]]) { var themeAttribute = [[_CPThemeAttribute alloc] initWithName:anAttributeName defaultValue:aDefaultValue]; From bc9c78acfe563d5d97b5f199e6310eec411d93a8 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 24 Jun 2014 10:03:26 -0700 Subject: [PATCH 207/278] Fixed: wrong comment --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 1b38ca8ef..17668f8a3 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -146,7 +146,7 @@ var CPZeroKeyCode = 48, [dateValue _dateWithTimeZone:[_datePicker timeZone]]; [_datePickerElementView setDateValue:dateValue]; - // Before sure to update the stepper value. We don't use -setObjectValue to avoid a binding update. + // Be sure to update the stepper value. We don't use -setObjectValue to avoid a binding update. if (_currentTextField) _stepper._value = parseInt([_currentTextField stringValue]); } From 34072f3947660545ca987704e992891c38ba6b00 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 24 Jun 2014 16:53:31 -0700 Subject: [PATCH 208/278] Fixed: stringValue is used instead of intValue --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 26 ++++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 17668f8a3..0429c5752 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -148,7 +148,7 @@ var CPZeroKeyCode = 48, // Be sure to update the stepper value. We don't use -setObjectValue to avoid a binding update. if (_currentTextField) - _stepper._value = parseInt([_currentTextField stringValue]); + _stepper._value = [_currentTextField intValue]; } /*! Set the widget enabled or not @@ -221,7 +221,7 @@ var CPZeroKeyCode = 48, if ([_currentTextField dateType] != CPAMPMDateType) { // We update the value of the stepper dependind on the textField - [_stepper setObjectValue:parseInt([_currentTextField stringValue])]; + [_stepper setObjectValue:[_currentTextField intValue]]; [_stepper setMaxValue:[_currentTextField maxNumber]]; [_stepper setMinValue:[_currentTextField minNumber]]; @@ -251,9 +251,9 @@ var CPZeroKeyCode = 48, // Update the dateValue with the binding. if (isUp) - [_stepper setDoubleValue:parseInt([_currentTextField stringValue]) + 1]; + [_stepper setDoubleValue:[_currentTextField intValue] + 1]; else - [_stepper setDoubleValue:parseInt([_currentTextField stringValue]) - 1]; + [_stepper setDoubleValue:[_currentTextField intValue] - 1]; return; } @@ -261,7 +261,7 @@ var CPZeroKeyCode = 48, if ([_currentTextField dateType] != CPAMPMDateType) { // Make sure to get the good value, especially when we reach the maxDate or minDate - [sender setDoubleValue:parseInt([_currentTextField stringValue])]; + [sender setDoubleValue:[_currentTextField intValue]]; } else { @@ -288,7 +288,7 @@ var CPZeroKeyCode = 48, if (key == CPUpArrowFunctionKey) { [_currentTextField _invalidTimer]; - [_stepper setDoubleValue:parseInt([_currentTextField stringValue])]; + [_stepper setDoubleValue:[_currentTextField intValue]]; [_stepper performClickUp:self]; return YES; } @@ -296,7 +296,7 @@ var CPZeroKeyCode = 48, if (key == CPDownArrowFunctionKey) { [_currentTextField _invalidTimer]; - [_stepper setDoubleValue:parseInt([_currentTextField stringValue])]; + [_stepper setDoubleValue:[_currentTextField intValue]]; [_stepper performClickDown:self]; return YES; } @@ -597,23 +597,23 @@ var CPZeroKeyCode = 48, [date _dateWithTimeZone:[_datePicker timeZone]]; if (![_textFieldDay isHidden]) - date.setDate([_textFieldDay stringValue]); + date.setDate([_textFieldDay intValue]); if (![_textFieldMonth isHidden]) - date.setMonth(parseInt([_textFieldMonth stringValue]) - 1); + date.setMonth([_textFieldMonth intValue] - 1); if (![_textFieldYear isHidden]) - date.setFullYear([_textFieldYear stringValue]); + date.setFullYear([_textFieldYear intValue]); if (![_textFieldSecond isHidden]) - date.setSeconds([_textFieldSecond stringValue]); + date.setSeconds([_textFieldSecond intValue]); if (![_textFieldMinute isHidden]) - date.setMinutes([_textFieldMinute stringValue]); + date.setMinutes([_textFieldMinute intValue]); if (![_textFieldHour isHidden]) { - var hour = parseInt([_textFieldHour stringValue]), + var hour = [_textFieldHour intValue], currentHour = parseInt(date.getHours()); if (hour != currentHour) From b015a6ea6c20c3122c66b9c3971dadc6317dea19 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 24 Jun 2014 17:18:13 -0700 Subject: [PATCH 209/278] Fixed: refactoring of the escape feature of the panel and popover --- AppKit/CPPanel.j | 13 +++++++++++++ AppKit/CPWindow/CPWindow.j | 20 +++++++++----------- AppKit/_CPPopoverWindow.j | 11 +++++++++++ 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/AppKit/CPPanel.j b/AppKit/CPPanel.j index ee335531f..b9d5de37f 100644 --- a/AppKit/CPPanel.j +++ b/AppKit/CPPanel.j @@ -119,4 +119,17 @@ CPDocModalWindowMask = 1 << 6; return YES; } + +#pragma mark - +#pragma mark Overrides + +/*! + @ignore +*/ +- (BOOL)_shouldCloseOnEscape +{ + [self performClose:self]; + return YES; +} + @end diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 5cf7a477a..5cfe6f69a 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -1797,18 +1797,8 @@ CPTexturedBackgroundWindowMask } return didTabBack; } - else if ([anEvent charactersIgnoringModifiers] === CPEscapeFunctionKey && [self isKindOfClass:[CPPanel class]]) + else if ([anEvent charactersIgnoringModifiers] === CPEscapeFunctionKey && [self _shouldCloseOnEscape]) { - if ([self isKindOfClass:[_CPPopoverWindow class]]) - { - if ([self closeOnBlur]) - [[self delegate] performClose:self]; - } - else - { - [self performClose:self]; - } - return; } @@ -3049,6 +3039,14 @@ CPTexturedBackgroundWindowMask return NO; } +/*! + @ignore +*/ +- (BOOL)_shouldCloseOnEscape +{ + return NO; +} + - (void)_dirtyKeyViewLoop { if (_autorecalculatesKeyViewLoop) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 7bc30b9ac..2abe061d1 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -429,6 +429,17 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, #pragma mark - #pragma mark Overrides +/*! + @ignore +*/ +- (BOOL)_shouldCloseOnEscape +{ + if ([self closeOnBlur]) + [[self delegate] performClose:self]; + + return YES; +} + /*! @ignore Show animation if necessary. From 71c1369365984a2dc6e320311fb986c08646974b Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 24 Jun 2014 17:20:31 -0700 Subject: [PATCH 210/278] Fixed: removed uelsee import in CPWindow --- AppKit/CPWindow/CPWindow.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 5cfe6f69a..aef8ca59d 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -50,8 +50,6 @@ @class CPMenu @class CPProgressIndicator -@class CPPanel -@class _CPPopoverWindow @global CPApp From f8457bd918b79b5e308793759ec1776c877b310a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 24 Jun 2014 17:22:09 -0700 Subject: [PATCH 211/278] Fixed: _closeOnBlur in CPPopover doesn't need accessors --- AppKit/_CPPopoverWindow.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 2abe061d1..44059f4f7 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -50,12 +50,12 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, */ @implementation _CPPopoverWindow : CPPanel { - BOOL _closeOnBlur @accessors(getter=closeOnBlur); BOOL _animates @accessors(property=animates); id _targetView @accessors(property=targetView); int _appearance @accessors(getter=appearance); BOOL _isClosing @accessors(property=isClosing); + BOOL _closeOnBlur; BOOL _browserAnimates; BOOL _isObservingFrame; BOOL _shouldPerformAnimation; @@ -434,7 +434,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, */ - (BOOL)_shouldCloseOnEscape { - if ([self closeOnBlur]) + if (_closeOnBlur) [[self delegate] performClose:self]; return YES; From c274f27810d031ec76f8ffb2201b399fb92c8e27 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 25 Jun 2014 18:08:26 -0700 Subject: [PATCH 212/278] Fixed: escape on a panel or popover breaks the key chain event Previously when hitting escape on a CPPanel, the key chain event was broken. Now when the user hit escape, cappuccino do the following process - Check if the firstResponder or the chain of the nextResponder implement cancelOperation: - If not, performKeyEquivalent on the firstResponder and so on - If not, call the method cancel: on the firstResponder and the chain (not in the case of the CPPopover) Previously, a complete: method was called if the user hit escape on a void window. This is not a feature of Cocoa, @apajarita or @aljunberg can you confirm that ? This commit is related to the commit #2139 --- AppKit/CPPanel.j | 13 ++++++++++--- AppKit/CPWindow/CPWindow.j | 25 +++---------------------- AppKit/_CPPopoverWindow.j | 14 ++++++++++---- 3 files changed, 23 insertions(+), 29 deletions(-) diff --git a/AppKit/CPPanel.j b/AppKit/CPPanel.j index b9d5de37f..89a8f0355 100644 --- a/AppKit/CPPanel.j +++ b/AppKit/CPPanel.j @@ -126,10 +126,17 @@ CPDocModalWindowMask = 1 << 6; /*! @ignore */ -- (BOOL)_shouldCloseOnEscape +- (void)cancelOperation:(id)sender { - [self performClose:self]; - return YES; + if ([[CPApp currentEvent] _couldBeKeyEquivalent] && [self performKeyEquivalent:[CPApp currentEvent]]) + return; + + [[self firstResponder] tryToPerform:@selector(cancel:) with:self]; +} + +- (void)cancel:(id)sender +{ + [self performClose:sender]; } @end diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 82b5d3a9a..0e074ccb1 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -1795,7 +1795,7 @@ CPTexturedBackgroundWindowMask } return didTabBack; } - else if ([anEvent charactersIgnoringModifiers] === CPEscapeFunctionKey && [self _shouldCloseOnEscape]) + else if ([anEvent charactersIgnoringModifiers] == CPEscapeFunctionKey && [self _processKeyboardUIKey:anEvent]) { return; } @@ -3021,28 +3021,9 @@ CPTexturedBackgroundWindowMask if ([selectors count] <= 0) return NO; - if (character !== CPEscapeFunctionKey) - { - var selector = [selectors objectAtIndex:0]; - return [[self firstResponder] tryToPerform:selector with:self]; - } - else - { - /* - Cocoa sends complete: for the escape key (instead of the default cancelOperation:). This is also the only action that is not sent directly to the first responder, but through doCommandBySelector. The difference is that doCommandBySelector: will also send the action to the window and application delegates. - */ - [[self firstResponder] doCommandBySelector:@selector(complete:)]; - } + var selector = [selectors objectAtIndex:0]; - return NO; -} - -/*! - @ignore -*/ -- (BOOL)_shouldCloseOnEscape -{ - return NO; + return [[self firstResponder] tryToPerform:selector with:self]; } - (void)_dirtyKeyViewLoop diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 1bb50cd1d..96870eeac 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -432,12 +432,18 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, /*! @ignore */ -- (BOOL)_shouldCloseOnEscape +- (void)cancelOperation:(id)sender +{ + if ([[CPApp currentEvent] _couldBeKeyEquivalent] && [self performKeyEquivalent:[CPApp currentEvent]]) + return; + + [self cancel:self]; +} + +- (void)cancel:(id)sender { if (_closeOnBlur) - [[self delegate] performClose:self]; - - return YES; + [[self delegate] performClose:sender]; } /*! From 7de3022a4a5d73d3f9c3d7ac7fdf8d52fa725cce Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 27 Jun 2014 13:50:16 -0700 Subject: [PATCH 213/278] Fixed: animation doesn't work as in cocoa --- AppKit/CPPopover.j | 6 +++--- AppKit/_CPPopoverWindow.j | 42 +++++++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index b532bb511..7c0faa7ca 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -237,7 +237,7 @@ Set the behavior of the CPPopover. It can be: [CPException raise:CPInternalInconsistencyException reason:@"contentViewController must not be nil"]; // If the popover is currently closing or opening, do nothing. That is what Cocoa does. - if ([_popoverWindow isClosing] || [_popoverWindow isOpening] || [self isShown]) + if ([_popoverWindow isClosing] || [self isShown]) return; if (!_popoverWindow) @@ -278,7 +278,7 @@ Set the behavior of the CPPopover. It can be: */ - (void)_close { - if ([_popoverWindow isOpening] || [_popoverWindow isClosing] || ![self isShown]) + if ([_popoverWindow isClosing] || ![self isShown]) return; if (_implementedDelegateMethods & CPPopoverDelegate_popover_willClose_) @@ -301,7 +301,7 @@ Set the behavior of the CPPopover. It can be: */ - (IBAction)performClose:(id)sender { - if ([_popoverWindow isClosing] || [_popoverWindow isOpening]) + if ([_popoverWindow isClosing]) return; if (_implementedDelegateMethods & CPPopoverDelegate_popover_shouldClose_) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index bd0ec6346..bc8794ac0 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -62,6 +62,10 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, BOOL _shouldPerformAnimation; CPInteger _implementedDelegateMethods; JSObject _orderOutTransitionFunction; + JSObject _transitionCompleteFunction; + JSObject _orderFrontTransitionFunction; + + } @@ -107,11 +111,10 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, { _animates = YES; _isClosing = NO; - _isOpening = NO; _browserAnimates = [self browserSupportsAnimation]; _shouldPerformAnimation = YES; _orderOutTransitionFunction = function() { [self _orderOutRecursively:YES]; }; - + _isOpening = YES; [self setStyleMask:aStyleMask]; [self setBecomesKeyOnlyIfNeeded:YES]; @@ -496,10 +499,10 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self setCSS3Property:@"Transform" value:@"scale(1.1)"]; [self setCSS3Property:@"Transition" value:CPBrowserCSSProperty('transform') + @" 200ms ease-in"]; - var orderFrontTransitionFunction = function() + _orderFrontTransitionFunction = function() { #if PLATFORM(DOM) - _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), orderFrontTransitionFunction, YES); + _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), _orderFrontTransitionFunction, YES); #endif // Now set up the pop-in to normal size transition. @@ -507,10 +510,10 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self setCSS3Property:@"Transform" value:@"scale(1)"]; [self setCSS3Property:@"Transition" value:CPBrowserCSSProperty('transform') + @" 50ms linear"]; - var transitionCompleteFunction = function() + _transitionCompleteFunction = function() { #if PLATFORM(DOM) - _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), transitionCompleteFunction, YES); + _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), _transitionCompleteFunction, YES); // Make sure to clear these properties when the animation is done. Without this, // the window becomes blurry in Chrome, presumably because the browser composits @@ -526,12 +529,12 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, } #if PLATFORM(DOM) - _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), transitionCompleteFunction, YES); + _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), _transitionCompleteFunction, YES); #endif }; #if PLATFORM(DOM) - _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), orderFrontTransitionFunction, YES); + _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), _orderFrontTransitionFunction, YES); #endif }, 10); // There are some weird race conditions happening in Chrome 34. If this is set to 0 // the transitionend is randomly not called correctly. Setting the timeout to 10ms is not noticealble for the @@ -539,11 +542,11 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, } else { + _isOpening = NO; [self setCSS3Property:@"Transition" value:@""]; #if PLATFORM(DOM) _DOMElement.style.opacity = 1; #endif - _isOpening = NO; } } @@ -577,6 +580,19 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (_animates && _browserAnimates) { + if (_isOpening) + { +#if PLATFORM(DOM) + _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), _orderFrontTransitionFunction, YES); + _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), _transitionCompleteFunction, YES); + + var matrix = window.getComputedStyle(_DOMElement, null)[CPBrowserStyleProperty(@"transform")], + currentScale = (matrix.split('(')[1]).split(',')[0]; + + [self setCSS3Property:@"Transform" value:@"scale("+currentScale+")"]; +#endif + } + // Tell the element to fade out when the opacity changes [self setCSS3Property:@"Transition" value:@"opacity 250ms linear"]; #if PLATFORM(DOM) @@ -632,14 +648,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self _trapNextMouseDown]; else { - // If we are opening the popover, we need to trap the next mouse down. - // It's possible that the user is clicking several times when opening the CPPopover (doubleClick) - if (_isOpening) - { - [self _trapNextMouseDown]; - return; - } - // Send _close to the delegate so popoverWillClose is sent to the popover's delegate if (_closeOnBlur) [_delegate _close]; From 6d78ed3462399fc97a7e0b50ec0a122a5d681a77 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Sun, 29 Jun 2014 19:17:17 -0700 Subject: [PATCH 214/278] Fixed: CPPopover test doesn't handle semi-transient state --- Tests/Manual/CPPopover/AppController.j | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Tests/Manual/CPPopover/AppController.j b/Tests/Manual/CPPopover/AppController.j index 7df7a12d4..b96998380 100644 --- a/Tests/Manual/CPPopover/AppController.j +++ b/Tests/Manual/CPPopover/AppController.j @@ -122,6 +122,7 @@ buttonBehaviour = [[CPPopUpButton alloc] initWithFrame:CGRectMake(570, 10, 130, buttonHeight)]; [buttonBehaviour addItemWithTitle:"Transient"]; + [buttonBehaviour addItemWithTitle:"Semi-transient"]; [buttonBehaviour addItemWithTitle:"Not managed"]; [contentView addSubview:buttonBehaviour]; @@ -193,8 +194,8 @@ - (@action)setTransient:(id)sender { - [windowPopover setBehavior:[sender state] === CPOnState ? CPPopoverBehaviorTransient : CPPopoverBehaviorApplicationDefined]; - [nestedPopover setBehavior:[sender state] === CPOnState ? CPPopoverBehaviorTransient : CPPopoverBehaviorApplicationDefined]; + [windowPopover setBehavior:[sender state] === CPOnState ? CPPopoverBehaviorTransient : CPPopoverBehaviorSemitransient]; + [nestedPopover setBehavior:[sender state] === CPOnState ? CPPopoverBehaviorTransient : CPPopoverBehaviorSemitransient]; } - (@action)movePopover:(id)sender @@ -214,7 +215,14 @@ { [aPopover setDelegate:self]; [aPopover setAnimates:([buttonAnimation title] === @"With animation")]; - [aPopover setBehavior:([buttonBehaviour title] === @"Transient") ? CPPopoverBehaviorTransient : CPPopoverBehaviorApplicationDefined]; + + if ([buttonBehaviour title] === @"Transient") + [aPopover setBehavior:CPPopoverBehaviorTransient]; + else if ([buttonBehaviour title] === @"Semi-transient") + [aPopover setBehavior:CPPopoverBehaviorSemitransient]; + else + [aPopover setBehavior:CPPopoverBehaviorApplicationDefined]; + [aPopover setAppearance:appearance]; } From c642d76e91fbfa2e57e59bad57c29236bb086b44 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Sun, 29 Jun 2014 19:17:56 -0700 Subject: [PATCH 215/278] Fixed: CPPopover doesn't handle semi-transient behavior --- AppKit/CPPopover.j | 45 ++++++++++++++++++++++----- AppKit/_CPPopoverWindow.j | 65 +++++++++++++++++++++++++++++++++------ 2 files changed, 94 insertions(+), 16 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index 7c0faa7ca..3f5ee8b20 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -78,6 +78,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, int _behavior @accessors(getter=behavior); _CPPopoverWindow _popoverWindow; + CPView _positioningView; int _implementedDelegateMethods; } @@ -237,13 +238,17 @@ Set the behavior of the CPPopover. It can be: [CPException raise:CPInternalInconsistencyException reason:@"contentViewController must not be nil"]; // If the popover is currently closing or opening, do nothing. That is what Cocoa does. - if ([_popoverWindow isClosing] || [self isShown]) + if ([_popoverWindow isClosing] || [_popoverWindow isOpening]) return; + _positioningView = positioningView; + if (!_popoverWindow) _popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[self styleMaskForBehavior]]; - [_popoverWindow setPlatformWindow:[[positioningView window] platformWindow]]; + if (_positioningView != positioningView) + [_popoverWindow setPlatformWindow:[[positioningView window] platformWindow]]; + [_popoverWindow setAppearance:_appearance]; [_popoverWindow setAnimates:_animates]; [_popoverWindow setDelegate:self]; @@ -251,18 +256,29 @@ Set the behavior of the CPPopover. It can be: [_popoverWindow setFrame:[_popoverWindow frameRectForContentRect:[[_contentViewController view] frame]]]; [_popoverWindow setContentView:[_contentViewController view]]; - if (_implementedDelegateMethods & CPPopoverDelegate_popover_willShow_) - [_delegate popoverWillShow:self]; + if (![self isShown]) + [self popoverWillShow:self]; [_popoverWindow positionRelativeToRect:positioningRect ofView:positioningView preferredEdge:preferredEdge]; - if (!_animates && _implementedDelegateMethods & CPPopoverDelegate_popover_didShow_) - [_delegate popoverDidShow:self]; + if (![self isShown]) + [self popoverDidShow:self]; } - (unsigned)styleMaskForBehavior { - return (_behavior == CPPopoverBehaviorTransient) ? CPClosableOnBlurWindowMask : 0; + switch (_behavior) + { + case CPPopoverBehaviorSemitransient: + case CPPopoverBehaviorTransient: + return CPClosableOnBlurWindowMask; + + case CPPopoverBehaviorApplicationDefined: + return 0; + + default: + return 0; + } } /*! @@ -284,6 +300,7 @@ Set the behavior of the CPPopover. It can be: if (_implementedDelegateMethods & CPPopoverDelegate_popover_willClose_) [_delegate popoverWillClose:self]; + _positioningView = nil; [_popoverWindow close]; // popoverDidClose will be sent from popoverWindowDidClose, since @@ -340,6 +357,20 @@ Set the behavior of the CPPopover. It can be: [_delegate popoverDidShow:self]; } +/*! @ignore */ +- (void)popoverWillClose:(_CPPopoverWindow)aPopoverWindow +{ + if (_implementedDelegateMethods & CPPopoverDelegate_popover_willClose_) + [_delegate popoverWillClose:self]; +} + +/*! @ignore */ +- (void)popoverWillShow:(_CPPopoverWindow)aPopoverWindow +{ + if (_implementedDelegateMethods & CPPopoverDelegate_popover_willShow_) + [_delegate popoverWillShow:self]; +} + @end @implementation CPPopover (Deprecated) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index bc8794ac0..945f3b960 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -30,6 +30,9 @@ @class CPPopover @global CPApp +@global CPPopoverBehaviorSemitransient +@global CPPopoverBehaviorTransient +@global CPPopoverBehaviorApplicationDefined CPClosableOnBlurWindowMask = 1 << 4; CPPopoverAppearanceMinimal = 0; @@ -61,6 +64,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, BOOL _isObservingFrame; BOOL _shouldPerformAnimation; CPInteger _implementedDelegateMethods; + CPWindow _targetWindow; JSObject _orderOutTransitionFunction; JSObject _transitionCompleteFunction; JSObject _orderFrontTransitionFunction; @@ -377,6 +381,8 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (![targetWindow isFullPlatformWindow]) [[_targetView window] addChildWindow:self ordered:CPWindowAbove]; + _targetWindow = targetWindow; + if (!wasVisible) [self _trapNextMouseDown]; } @@ -620,6 +626,8 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _shouldPerformAnimation = YES; _isClosing = NO; + _isOpening = NO; + _targetWindow = nil; if (_implementedDelegateMethods & _CPPopoverWindow_didClose_) [_delegate popoverWindowDidClose:self]; @@ -629,6 +637,27 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, #pragma mark - #pragma mark Private +- (BOOL)_hasOnlyTransientChild:(_CPPopoverWindow)aWindow +{ + var childWindows = [aWindow childWindows]; + + for (var i = [childWindows count] - 1; i >= 0; i--) + { + var childWindow = childWindows[i]; + + if (![childWindow isKindOfClass:[self class]]) + continue; + + if ([[childWindow delegate] behavior] != CPPopoverBehaviorTransient) + return NO; + + if (![self _hasOnlyTransientChild:childWindow]) + return NO; + } + + return YES; +} + - (void)_mouseWasClicked:(CPEvent)anEvent { /* @@ -637,26 +666,44 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, message to any parent popovers so they have a chance to close if necessary. */ - if (![self isVisible]) + if (![self isVisible] || !_targetWindow) return; var mouseWindow = [anEvent window]; // Consider clicks in child windows to be "inside". This keeps a transient popover from // closing if e.g. the window containing the menu of a token field is clicked. - if (mouseWindow === self || [mouseWindow _hasAncestorWindow:self]) + if (mouseWindow === self || [mouseWindow _hasAncestorWindow:self] || ![self _hasOnlyTransientChild:self]) + { [self _trapNextMouseDown]; + } else { - // Send _close to the delegate so popoverWillClose is sent to the popover's delegate - if (_closeOnBlur) - [_delegate _close]; + switch ([_delegate behavior]) + { + case CPPopoverBehaviorSemitransient: - // Give a transient parent popover a chance to close - var parent = [self parentWindow]; + // Click on the same button + // Or click on a different window (we just care about the parentWindow) + // We use targetWindow bacause parentWindow is set to nil when opening a semi-transient window in a bridgeless window + if (CGRectContainsPoint([_delegate._positioningView frame], [[_delegate._positioningView superview] convertPointFromBase:[anEvent locationInWindow]]) + || mouseWindow != _targetWindow) + { + [self _trapNextMouseDown]; + return; + } - if ([parent isKindOfClass:[self class]]) - [parent _mouseWasClicked:anEvent]; + [_delegate close]; + break; + + case CPPopoverBehaviorTransient: + [_delegate close]; + break; + + case CPPopoverBehaviorApplicationDefined: + [self _trapNextMouseDown]; + return; + } } } From 5c66104d253ab23d3b0b9108ef92d5dc46c8ffbf Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Sun, 29 Jun 2014 19:35:47 -0700 Subject: [PATCH 216/278] Fixed: methodsare public instead of private in CPPopover --- AppKit/CPPopover.j | 17 ++++++++--------- AppKit/_CPPopoverWindow.j | 12 +++++------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index 3f5ee8b20..ec30b256e 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -257,12 +257,12 @@ Set the behavior of the CPPopover. It can be: [_popoverWindow setContentView:[_contentViewController view]]; if (![self isShown]) - [self popoverWillShow:self]; + [self _popoverWillShow]; [_popoverWindow positionRelativeToRect:positioningRect ofView:positioningView preferredEdge:preferredEdge]; if (![self isShown]) - [self popoverDidShow:self]; + [self _popoverDidShow]; } - (unsigned)styleMaskForBehavior @@ -297,8 +297,7 @@ Set the behavior of the CPPopover. It can be: if ([_popoverWindow isClosing] || ![self isShown]) return; - if (_implementedDelegateMethods & CPPopoverDelegate_popover_willClose_) - [_delegate popoverWillClose:self]; + [self _popoverWillClose]; _positioningView = nil; [_popoverWindow close]; @@ -333,7 +332,7 @@ Set the behavior of the CPPopover. It can be: #pragma mark Delegates /*! @ignore */ -- (BOOL)popoverWindowShouldClose:(_CPPopoverWindow)aPopoverWindow +- (BOOL)_popoverWindowShouldClose { [self performClose:self]; @@ -344,28 +343,28 @@ Set the behavior of the CPPopover. It can be: } /*! @ignore */ -- (void)popoverWindowDidClose:(_CPPopoverWindow)aPopoverWindow +- (void)_popoverWindowDidClose { if (_implementedDelegateMethods & CPPopoverDelegate_popover_didClose_) [_delegate popoverDidClose:self]; } /*! @ignore */ -- (void)popoverWindowDidShow:(_CPPopoverWindow)aPopoverWindow +- (void)_popoverWindowDidShow { if (_implementedDelegateMethods & CPPopoverDelegate_popover_didShow_) [_delegate popoverDidShow:self]; } /*! @ignore */ -- (void)popoverWillClose:(_CPPopoverWindow)aPopoverWindow +- (void)_popoverWillClose { if (_implementedDelegateMethods & CPPopoverDelegate_popover_willClose_) [_delegate popoverWillClose:self]; } /*! @ignore */ -- (void)popoverWillShow:(_CPPopoverWindow)aPopoverWindow +- (void)_popoverWillShow { if (_implementedDelegateMethods & CPPopoverDelegate_popover_willShow_) [_delegate popoverWillShow:self]; diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 945f3b960..94fea5b1a 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -157,13 +157,13 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _delegate = aDelegate; _implementedDelegateMethods = 0; - if ([_delegate respondsToSelector:@selector(popoverWindowShouldClose:)]) + if ([_delegate respondsToSelector:@selector(_popoverWindowShouldClose:)]) _implementedDelegateMethods |= _CPPopoverWindow_shouldClose_; - if ([_delegate respondsToSelector:@selector(popoverWindowDidClose:)]) + if ([_delegate respondsToSelector:@selector(_popoverWindowDidClose:)]) _implementedDelegateMethods |= _CPPopoverWindow_didClose_; - if ([_delegate respondsToSelector:@selector(popoverWindowDidShow:)]) + if ([_delegate respondsToSelector:@selector(_popoverWindowDidShow:)]) _implementedDelegateMethods |= _CPPopoverWindow_didShow_; } @@ -530,8 +530,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, #endif _isOpening = NO; - if (_implementedDelegateMethods & _CPPopoverWindow_didShow_) - [_delegate popoverWindowDidShow:self]; + [_delegate _popoverWindowDidShow]; } #if PLATFORM(DOM) @@ -629,8 +628,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _isOpening = NO; _targetWindow = nil; - if (_implementedDelegateMethods & _CPPopoverWindow_didClose_) - [_delegate popoverWindowDidClose:self]; + [_delegate _popoverWindowDidClose]; } From d7f0ff84d6c2d168e3b5489d767acce1202c60e9 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 7 Jul 2014 19:21:00 -0700 Subject: [PATCH 217/278] Fixed: code style in CPPopover --- AppKit/CPPopover.j | 20 ++++++-------------- AppKit/_CPPopoverWindow.j | 8 +++++--- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index ec30b256e..68862c5bd 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -192,7 +192,7 @@ Set the behavior of the CPPopover. It can be: return; _behavior = aBehavior; - [_popoverWindow setStyleMask:[self styleMaskForBehavior]]; + [_popoverWindow setStyleMask:[self _styleMaskForBehavior]]; } - (void)setDelegate:(id )aDelegate @@ -244,7 +244,7 @@ Set the behavior of the CPPopover. It can be: _positioningView = positioningView; if (!_popoverWindow) - _popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[self styleMaskForBehavior]]; + _popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[self _styleMaskForBehavior]]; if (_positioningView != positioningView) [_popoverWindow setPlatformWindow:[[positioningView window] platformWindow]]; @@ -265,20 +265,12 @@ Set the behavior of the CPPopover. It can be: [self _popoverDidShow]; } -- (unsigned)styleMaskForBehavior +- (unsigned)_styleMaskForBehavior { - switch (_behavior) - { - case CPPopoverBehaviorSemitransient: - case CPPopoverBehaviorTransient: - return CPClosableOnBlurWindowMask; + if (_behavior == CPPopoverBehaviorApplicationDefined) + return 0; - case CPPopoverBehaviorApplicationDefined: - return 0; - - default: - return 0; - } + return CPClosableOnBlurWindowMask } /*! diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 94fea5b1a..71128249f 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -680,15 +680,17 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, switch ([_delegate behavior]) { case CPPopoverBehaviorSemitransient: + var superview = [_delegate._positioningView superview], + positioningViewFrame = [_delegate._positioningView frame]; // Click on the same button // Or click on a different window (we just care about the parentWindow) // We use targetWindow bacause parentWindow is set to nil when opening a semi-transient window in a bridgeless window - if (CGRectContainsPoint([_delegate._positioningView frame], [[_delegate._positioningView superview] convertPointFromBase:[anEvent locationInWindow]]) + if (CGRectContainsPoint(positioningViewFrame, [superview convertPointFromBase:[anEvent locationInWindow]]) || mouseWindow != _targetWindow) { [self _trapNextMouseDown]; - return; + break; } [_delegate close]; @@ -700,7 +702,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, case CPPopoverBehaviorApplicationDefined: [self _trapNextMouseDown]; - return; + break; } } } From 6574d4450f360f414a63d11889fec2d739857481 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 7 Jul 2014 20:55:48 -0700 Subject: [PATCH 218/278] Fixed: style in _CPPopoverWindow --- AppKit/_CPPopoverWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 71128249f..12458d352 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -594,7 +594,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, var matrix = window.getComputedStyle(_DOMElement, null)[CPBrowserStyleProperty(@"transform")], currentScale = (matrix.split('(')[1]).split(',')[0]; - [self setCSS3Property:@"Transform" value:@"scale("+currentScale+")"]; + [self setCSS3Property:@"Transform" value:@"scale(" + currentScale + ")"]; #endif } From 1848f96efae81711fec453ab2b1b39a51662d5f1 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 10 Jul 2014 11:39:43 -0700 Subject: [PATCH 219/278] FIXED: style --- Tests/Foundation/CPAttributedStringTest.j | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Tests/Foundation/CPAttributedStringTest.j b/Tests/Foundation/CPAttributedStringTest.j index 3baf676b2..43321a28c 100644 --- a/Tests/Foundation/CPAttributedStringTest.j +++ b/Tests/Foundation/CPAttributedStringTest.j @@ -22,8 +22,11 @@ var sharedObject = [CPObject new]; - (void)testWriteOverRangeBoundaries { var string = [[CPMutableAttributedString alloc] initWithString:@"Fusce\n" attributes:@{"testkey": 1}]; - [string replaceCharactersInRange:CPMakeRange(6, 0) withAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" - attributes:@{"testkey": 2}]]; + + [string replaceCharactersInRange:CPMakeRange(6, 0) + withAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" + attributes:@{"testkey": 2}]]; + [string replaceCharactersInRange:CPMakeRange(5, 3) withString:@" "]; var aRange = CPMakeRange(0, 0), @@ -37,8 +40,10 @@ var sharedObject = [CPObject new]; { var string = [[CPMutableAttributedString alloc] initWithString:@"Fusce\n" attributes:@{"testkey": 1}], prevRangeEntriesLength = string._rangeEntries.length; - [string insertAttributedString:[[CPAttributedString alloc] initWithString:@"this is boldface" - attributes:@{"testkey": 1}] atIndex:2]; + + [string insertAttributedString:[[CPAttributedString alloc] + initWithString:@"this is boldface" + attributes:@{"testkey": 1}] atIndex:2]; [self assertTrue:(string._rangeEntries.length === prevRangeEntriesLength) message:"testCoalesceOnInsert: expected:" + prevRangeEntriesLength + " actual:" + string._rangeEntries.length]; From 9aa815c1ed76a416a0d93d4b9ababff3da5972d8 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 8 Feb 2014 20:43:15 +0100 Subject: [PATCH 220/278] CPTextView commit --- AppKit/CPFont.j | 40 + AppKit/CPFontManager.j | 186 ++- AppKit/CPText.j | 219 +++- AppKit/CPTextView/CPFontDescriptor.j | 328 +++++ AppKit/CPTextView/CPFontPanel.j | 487 ++++++++ AppKit/CPTextView/CPLayoutManager.j | 1419 +++++++++++++++++++++ AppKit/CPTextView/CPParagraphStyle.j | 186 +++ AppKit/CPTextView/CPTextContainer.j | 209 ++++ AppKit/CPTextView/CPTextStorage.j | 295 +++++ AppKit/CPTextView/CPTextView.j | 1709 ++++++++++++++++++++++++++ AppKit/CPTextView/CPTypesetter.j | 393 ++++++ AppKit/CPTextView/RTFParser.j | 700 +++++++++++ AppKit/CPTextView/RTFProducer.j | 600 +++++++++ 13 files changed, 6769 insertions(+), 2 deletions(-) create mode 100755 AppKit/CPTextView/CPFontDescriptor.j create mode 100755 AppKit/CPTextView/CPFontPanel.j create mode 100755 AppKit/CPTextView/CPLayoutManager.j create mode 100755 AppKit/CPTextView/CPParagraphStyle.j create mode 100755 AppKit/CPTextView/CPTextContainer.j create mode 100755 AppKit/CPTextView/CPTextStorage.j create mode 100755 AppKit/CPTextView/CPTextView.j create mode 100755 AppKit/CPTextView/CPTypesetter.j create mode 100755 AppKit/CPTextView/RTFParser.j create mode 100755 AppKit/CPTextView/RTFProducer.j diff --git a/AppKit/CPFont.j b/AppKit/CPFont.j index c9d53ebe2..0364ee72c 100644 --- a/AppKit/CPFont.j +++ b/AppKit/CPFont.j @@ -24,6 +24,7 @@ @import @import "CPView.j" +@import "CPFontDescriptor.j" CPFontDefaultSystemFontFace = @"Arial, sans-serif"; CPFontDefaultSystemFontSize = 12; @@ -433,6 +434,45 @@ following: @end +@implementation CPFont(DescriptorAdditions) + +- (id)_initWithFontDescriptor:(CPFontDescriptor)fontDescriptor +{ + var aName = [fontDescriptor objectForKey: CPFontNameAttribute] , + aSize = [fontDescriptor pointSize], + isBold = [fontDescriptor symbolicTraits] & CPFontBoldTrait, + isItalic = [fontDescriptor symbolicTraits] & CPFontItalicTrait; + + return [self _initWithName:aName size:aSize bold:isBold italic:isItalic system:NO]; +} + ++ (CPFont)fontWithDescriptor:(CPFontDescriptor)fontDescriptor size:(float)aSize +{ + var aName = [fontDescriptor objectForKey: CPFontNameAttribute], + isBold = [fontDescriptor symbolicTraits] & CPFontBoldTrait, + isItalic = [fontDescriptor symbolicTraits] & CPFontItalicTrait; + + return [self _fontWithName:aName size:aSize || [fontDescriptor pointSize] bold:isBold italic:isItalic]; +} + +- (CPFontDescriptor)fontDescriptor +{ + var traits = 0; + + if ([self isBold]) + traits |= CPFontBoldTrait; + + if ([self isItalic]) + traits |= CPFontItalicTrait; + + var descriptor = [[CPFontDescriptor fontDescriptorWithName:_name size:_size] fontDescriptorWithSymbolicTraits:traits]; + + return descriptor; +} + +@end + + var CPFontNameKey = @"CPFontNameKey", CPFontSizeKey = @"CPFontSizeKey", CPFontIsBoldKey = @"CPFontIsBoldKey", diff --git a/AppKit/CPFontManager.j b/AppKit/CPFontManager.j index b470025ba..4cb17da0e 100644 --- a/AppKit/CPFontManager.j +++ b/AppKit/CPFontManager.j @@ -23,6 +23,8 @@ @import @import "CPFont.j" +@import "CPFontPanel.j" +@import "CPFontDescriptor.j" @global CPApp @@ -41,7 +43,20 @@ CPUnitalicFontMask = 1 << 24; var CPSharedFontManager = nil, - CPFontManagerFactory = Nil; + CPFontManagerFactory = Nil, + CPFontPanelFactory = Nil; + +/* + modifyFont: sender's tag +*/ +CPNoFontChangeAction = 0; +CPViaPanelFontAction = 1; +CPAddTraitFontAction = 2; +CPSizeUpFontAction = 3; +CPSizeDownFontAction = 4; +CPHeavierFontAction = 5; +CPLighterFontAction = 6; +CPRemoveTraitFontAction = 7; /*! @ingroup appkit @@ -219,6 +234,174 @@ var CPSharedFontManager = nil, return [CPApp sendAction:_action to:_target from:self]; } + +/*! + This method open the font panel, create it if necessary. + @param sender The object that sent the message. +*/ +- (CPFontPanel)fontPanel:(BOOL)createIt +{ + var panel = nil, + panelExists = [CPFontPanelFactory sharedFontPanelExists]; + + if ((panelExists) || (!panelExists && createIt)) + panel = [CPFontPanelFactory sharedFontPanel]; + + return panel; +} + +/*! + Convert a font to have the specified Font traits. The font is unchanged expect for the specified Font traits. + Using CPUnboldFontMask or CPUnitalicFontMask will respectively remove Bold and Italic traits. + @param aFont The font to convert. + @param fontTrait The new font traits mask. + @result The converted font or \c aFont if the conversion failed. +*/ +- (CPFont)convertFont:(CPFont)aFont toHaveTrait:(CPFontTraitMask)fontTrait +{ + var attributes = [[[aFont fontDescriptor] fontAttributes] copy], + symbolicTrait = [[aFont fontDescriptor] symbolicTraits]; + + if (fontTrait & CPBoldFontMask) + symbolicTrait |= CPFontBoldTrait; + + if (fontTrait & CPItalicFontMask) + symbolicTrait |= CPFontItalicTrait; + + if (fontTrait & CPUnboldFontMask) /* FIXME: this only change CPFontSymbolicTrait what about CPFontWeightTrait */ + symbolicTrait &= ~CPFontBoldTrait; + + if (fontTrait & CPUnitalicFontMask) + symbolicTrait &= ~CPFontItalicTrait; + + if (fontTrait & CPExpandedFontMask) + symbolicTrait |= CPFontExpandedTrait; + + if (fontTrait & CPSmallCapsFontMask) + symbolicTrait |= CPFontSmallCapsTrait; + + if (![attributes containsKey:CPFontTraitsAttribute]) + [attributes setObject:[CPDictionary dictionaryWithObject:[CPNumber numberWithUnsignedInt:symbolicTrait] + forKey:CPFontSymbolicTrait] forKey:CPFontTraitsAttribute]; + else + [[attributes objectForKey:CPFontTraitsAttribute] setObject:[CPNumber numberWithUnsignedInt:symbolicTrait] + forKey:CPFontSymbolicTrait]; + + return [[aFont class] fontWithDescriptor:[CPFontDescriptor fontDescriptorWithFontAttributes:attributes] size:0.0]; +} + +/*! + Convert a font to not have the specified Font traits. The font is unchanged expect for the specified Font traits. + @param aFont The font to convert. + @param fontTrait The font traits mask to remove. + @result The converted font or \c aFont if the conversion failed. +*/ +- (CPFont)convertFont:(CPFont)aFont toNotHaveTrait:(CPFontTraitMask)fontTrait +{ + var attributes = [[[aFont fontDescriptor] fontAttributes] copy], + symbolicTrait = [[aFont fontDescriptor] symbolicTraits]; + + if ((fontTrait & CPBoldFontMask) || (fontTrait & CPUnboldFontMask)) /* FIXME: see convertFont:toHaveTrait: about CPFontWeightTrait */ + symbolicTrait &= ~CPFontBoldTrait; + + if ((fontTrait & CPItalicFontMask) || (fontTrait & CPUnitalicFontMask)) + symbolicTrait &= ~CPFontItalicTrait; + + if (fontTrait & CPExpandedFontMask) + symbolicTrait &= ~CPFontExpandedTrait; + + if (fontTrait & CPSmallCapsFontMask) + symbolicTrait &= ~CPFontSmallCapsTrait; + + if (![attributes containsKey:CPFontTraitsAttribute]) + [attributes setObject:[CPDictionary dictionaryWithObject:[CPNumber numberWithUnsignedInt:symbolicTrait] forKey:CPFontSymbolicTrait] forKey:CPFontTraitsAttribute]; + else + [[attributes objectForKey:CPFontTraitsAttribute] setObject:[CPNumber numberWithUnsignedInt:symbolicTrait] forKey:CPFontSymbolicTrait]; + + return [[aFont class] fontWithDescriptor:[CPFontDescriptor fontDescriptorWithFontAttributes:attributes] size:0.0]; +} + +/*! + Convert a font to have specified size. The font is unchanged expect for the specified size. + @param aFont The font to convert. + @param aSize The new font size. + @result The converted font or \c aFont if the conversion failed. +*/ +- (CPFont)convertFont:(CPFont)aFont toSize:(float)aSize +{ + var descriptor = [aFont fontDescriptor]; + + return [[aFont class] fontWithDescriptor: descriptor size:aSize] +} + +- (void)orderFrontFontPanel:(id)sender +{ + [[self fontPanel:YES] orderFront:sender]; +} + +- (void)modifyFont:(id)sender +{ + _fontAction = [sender tag]; + [self sendAction]; + + if (_selectedFont) + [self setSelectedFont:[self convertFont:_selectedFont] isMultiple:NO]; +} + +/*! + This method causes the receiver to send its action message. + @param sender The object that sent the message. (a Font panel) +*/ +- (void)modifyFontViaPanel:(id)sender +{ + _fontAction = CPViaPanelFontAction; + if (_selectedFont) + [self setSelectedFont:[self convertFont:_selectedFont] isMultiple:NO]; + + [self sendAction]; +} + +/*! + Convert a font according to current font changes, provided by the object that initiated the font change. + @param aFont The font to convert. + @result The converted font or \c aFont if the conversion failed. +*/ +- (CPFont)convertFont:(CPFont)aFont +{ + var newFont = nil; + switch (_fontAction) + { + case CPNoFontChangeAction: + newFont = aFont; + break; + + case CPViaPanelFontAction: + newFont = [[self fontPanel:NO] panelConvertFont:aFont]; + break; + + case CPAddTraitFontAction: + newFont = [self convertFont:aFont toHaveTrait:_currentFontTrait]; + break; + + case CPSizeUpFontAction: + newFont = [self convertFont:aFont toSize:[aFont size] + 1.0]; /* any limit ? */ + break; + + case CPSizeDownFontAction: + if ([aFont size] > 1) + newFont = [self convertFont:aFont toSize:[aFont size] - 1.0]; + /* else CPBeep() :-p */ + break; + + default: + CPLog.trace(@"-[" + [self className] + " " + _cmd + "] unsupported font action: " + _fontAction + " aFont unchanged"); + newFont = aFont; + break; + } + + return newFont; +} + @end var _CPFontDetectSpan, @@ -300,3 +483,4 @@ var _CPFontDetectPickTwoDifferentFonts = function(candidates) }; [CPFontManager setFontManagerFactory:[CPFontManager class]]; +[CPFontManager setFontPanelFactory:CPFontPanel]; diff --git a/AppKit/CPText.j b/AppKit/CPText.j index dda60f133..bbe6af959 100644 --- a/AppKit/CPText.j +++ b/AppKit/CPText.j @@ -5,6 +5,15 @@ * Created by Alexander Ljungberg. * Copyright 2010, WireLoad, LLC. * + * additions from + * + * Daniel Boehringer on 8/02/2014. + * Copyright Daniel Boehringer on 8/02/2014. + * + * Emmanuel Maillard on 28/02/2010. + * Copyright Emmanuel Maillard 2010. + * + * * 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 @@ -20,6 +29,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@import "CPView.j" +@import "RTFProducer.j" +@import "RTFParser.j" + + +CPParagraphSeparatorCharacter = 0x2029; +CPLineSeparatorCharacter = 0x2028; CPEnterCharacter = "\u0003"; CPBackspaceCharacter = "\u0008"; CPTabCharacter = "\u0009"; @@ -38,4 +54,205 @@ CPLeftTextMovement = 19; CPRightTextMovement = 20; CPUpTextMovement = 21; CPDownTextMovement = 22; -CPCancelTextMovement = 23; \ No newline at end of file +CPCancelTextMovement = 23; + +/* + CPText notifications +*/ +CPTextDidBeginEditingNotification = @"CPTextDidBeginEditingNotification"; +CPTextDidChangeNotification = @"CPTextDidChangeNotification"; +CPTextDidEndEditingNotification = @"CPTextDidEndEditingNotification"; + +@implementation CPText : CPControl +{ +} + +- (void)changeFont:(id)sender +{ + CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); +} + +- (void)copy:(id)sender +{ + var selectedRange = [self selectedRange]; + + if (selectedRange.length < 1) + return; + + var pasteboard = [CPPasteboard generalPasteboard], + stringForPasting = [[self stringValue] substringWithRange:selectedRange]; + + [pasteboard declareTypes:[CPStringPboardType] owner:nil]; + + if ([self isRichText]) + { + // crude hack to make rich pasting possible in chrome and firefox. this requires a RTF roundtrip, unfortunately + var richData = [RTFProducer produceRTF:[[self textStorage] attributedSubstringFromRange:selectedRange] documentAttributes: @{}]; + [pasteboard setString:richData forType:CPStringPboardType]; + } + else + [pasteboard setString:stringForPasting forType:CPStringPboardType]; + +} +- (void)paste:(id)sender +{ + var pasteboard = [CPPasteboard generalPasteboard], + // dataForPasting = [pasteboard dataForType:CPRichStringPboardType], + stringForPasting = [pasteboard stringForType:CPStringPboardType]; + + if ([stringForPasting hasPrefix:"{\\rtf1\\ansi"]) + stringForPasting = [[_RTFParser new] parseRTF:stringForPasting]; + + if (![self isRichText] && [stringForPasting isKindOfClass:[CPAttributedString class]]) + stringForPasting = stringForPasting._string; + + if (stringForPasting) + [self insertText:stringForPasting]; +} + +- (void)copyFont:(id)sender +{ + CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); +} + +- (void)cut:(id)sender +{ + [self copy:sender]; + + var loc = [self selectedRange].location; + + [self replaceCharactersInRange:[self selectedRange] withString:""]; + [self setSelectedRange:CPMakeRange(loc,0) ]; +} + +- (void)delete:(id)sender +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (CPFont)font:(CPFont)aFont +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return nil; +} + +- (BOOL)isHorizontallyResizable +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +- (BOOL)isRichText +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +- (BOOL)isRulerVisible +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +- (BOOL)isVerticallyResizable +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +- (CPSize)maxSize +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return CPMakeSize(0,0); +} + +- (CPSize)minSize +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return CPMakeSize(0,0); +} + +- (void)pasteFont:(id)sender +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)scrollRangeToVisible:(CPRange)aRange +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)selectedAll:(id)sender +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (CPRange)selectedRange +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return CPMakeRange(CPNotFound, 0); +} + +- (void)setFont:(CPFont)aFont +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setFont:(CPFont)aFont rang:(CPRange)aRange +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setHorizontallyResizable:(BOOL)flag +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setMaxSize:(CPSize)aSize +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setMinSize:(CPSize)aSize +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setString:(CPString)aString +{ + [self replaceCharactersInRange: CPMakeRange(0, [[self string] length]) withString:aString]; +} + +- (void)setUsesFontPanel:(BOOL)flag +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setVerticallyResizable:(BOOL)flag +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (CPString)string +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return nil; +} + +- (void)underline:(id)sender +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (BOOL)usesFontPanel +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +@end diff --git a/AppKit/CPTextView/CPFontDescriptor.j b/AppKit/CPTextView/CPFontDescriptor.j new file mode 100755 index 000000000..1fce66c63 --- /dev/null +++ b/AppKit/CPTextView/CPFontDescriptor.j @@ -0,0 +1,328 @@ +/* + * CPFontDescriptor.j + * AppKit + * + * Created by Emmanuel Maillard on 07/03/10. + * Copyright Emmanuel Maillard 2010. + * + * 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 +/* + Font descriptor dictionary keys +*/ + +/* + CPFontNameAttribute contains a CPString that specified the font name + (may be an name list like: 'Marker Felt, Lucida Grande, Helvetica') +*/ +CPFontNameAttribute = @"CPFontNameAttribute"; +/* + CPFontSizeAttribute contains a CPString that specified the font size + (as a float value) +*/ +CPFontSizeAttribute = @"CPFontSizeAttribute"; +/* + CPFontTraitsAttribute a CPDictionary that contains font traits keys + (CPFontSymbolicTrait or CPFontWeightTrait) +*/ +CPFontTraitsAttribute = @"CPFontTraitsAttribute"; + +// Font traits dictionary keys +/* + CPFontSymbolicTrait a CPNumber that contains CPFontFamilyClass and + typeface information flags. +*/ +CPFontSymbolicTrait = @"CPFontSymbolicTrait"; + +/* + CPFontWeightTrait + We use CPString with CSS string values for font weight + (normal | bold | bolder | lighter | 100 | 200 | 300 | 400 + | 500 | 600 | 700 | 800 | 900) + NOTE: Cocoa compatibility issue: NSFontWeightTrait are NSNumber for + font weight (from -1.0 to 1.0, 0.0 for normal weight). +*/ +CPFontWeightTrait = @"CPFontWeightTrait"; + +/* + CPFontFamilyClass +*/ +CPFontUnknownClass = (0 << 28); +CPFontOldStyleSerifsClass = (1 << 28); +CPFontTransitionalSerifsClass = (2 << 28); +CPFontModernSerifsClass = (3 << 28); +CPFontClarendonSerifsClass = (4 << 28); +CPFontSlabSerifsClass = (5 << 28); +CPFontFreeformSerifsClass = (7 << 28); +CPFontSansSerifClass = (8 << 28); + +CPFontSerifClass = (CPFontOldStyleSerifsClass | CPFontTransitionalSerifsClass | + CPFontModernSerifsClass | CPFontClarendonSerifsClass | + CPFontSlabSerifsClass | CPFontFreeformSerifsClass); + +CPFontFamilyClassMask = 0xF0000000; + +/* + Typeface information +*/ +CPFontItalicTrait = (1 << 0); +CPFontBoldTrait = (1 << 1); +CPFontExpandedTrait = (1 << 5); /* TODO: CCS 3 font-stretch */ +CPFontCondensedTrait = (1 << 6); + +CPFontSmallCapsTrait = (1 << 7); + +/*! + @ingroup appkit + @class CPFontDescriptor +*/ +@implementation CPFontDescriptor : CPObject +{ + CPDictionary _attributes; +} + +/*! + Returns a font descriptor with the specified attributes. + + @param attributes a dictionary that describe the desired font descriptor + @return the requested font descriptor +*/ ++ (CPFontDescriptor)fontDescriptorWithFontAttributes:(CPDictionary)attributes +{ + return [[CPFontDescriptor alloc] initWithFontAttributes:attributes]; +} + +/*! + Returns a font descriptor with the specified name and size. + + @param fontName the name of the font + @param aSize the size of the font (in points) + @return the requested font descriptor +*/ ++ (CPFontDescriptor)fontDescriptorWithName:(CPString)fontName size:(float)size +{ + return [[CPFontDescriptor alloc] initWithFontAttributes:[CPDictionary dictionaryWithObjects:[fontName, [CPString stringWithString:size + '']] forKeys:[CPFontNameAttribute,CPFontSizeAttribute]]]; +} + +/*! + Initialize a font descriptor with the specified attributes. + + @param attributes a dictionary that describe the desired font descriptor + @return the requested font descriptor +*/ +- (id)initWithFontAttributes:(CPDictionary)attributes +{ + self = [super init]; + + if (self) + { + _attributes = [[CPMutableDictionary alloc] init]; + + if (attributes) + [_attributes addEntriesFromDictionary:attributes]; + } + + return self; +} + +/*! + Returns a new font descriptor that is the same as the receiver but with the + specified attributes taking precedence over the existing ones. + + @param attributes a dictionary that describe the desired font descriptor + @return the new font descriptor +*/ +- (CPFontDescriptor)fontDescriptorByAddingAttributes:(CPDictionary)attributes +{ + var attrib = [_attributes copy]; + [attrib addEntriesFromDictionary:attributes]; + + return [[CPFontDescriptor alloc] initWithFontAttributes:attrib]; +} + +/*! + Returns a new font descriptor that is the same as the receiver but with the specified size taking precedence over the existing ones. + + @param aSize the new size + @return the new font descriptor +*/ +- (CPFontDescriptor)fontDescriptorWithSize:(float)aSize +{ + var attrib = [_attributes copy]; + [attrib setObject:[CPString stringWithString:aSize + ''] forKey:CPFontSizeAttribute]; + + return [[CPFontDescriptor alloc] initWithFontAttributes:attrib]; +} + +/*! + Returns a new font descriptor that is the same as the receiver but with + the specified symbolic traits taking precedence over the existing ones. + + @param symbolicTraits the desired new symbolic traits + @return the new font descriptor +*/ +- (CPFontDescriptor)fontDescriptorWithSymbolicTraits:(CPFontSymbolicTraits)symbolicTraits +{ + var attrib = [_attributes copy]; + + if ([attrib objectForKey:CPFontTraitsAttribute]) + [[attrib objectForKey:CPFontTraitsAttribute] setObject:[CPNumber numberWithUnsignedInt:symbolicTraits] + forKey:CPFontSymbolicTrait]; + else + [attrib setObject:[CPDictionary dictionaryWithObject:[CPNumber numberWithUnsignedInt:symbolicTraits] + forKey:CPFontSymbolicTrait] forKey:CPFontTraitsAttribute]; + + return [[CPFontDescriptor alloc] initWithFontAttributes:attrib]; +} + +- (id)objectForKey:(id)aKey +{ + return [_attributes objectForKey:aKey]; +} + +- (CPDictionary)fontAttributes +{ + return _attributes; +} + +- (float)pointSize +{ + var value = [_attributes objectForKey:CPFontSizeAttribute]; + + if (value) + return [value floatValue]; + + return 0.0; +} + +- (CPFontSymbolicTraits)symbolicTraits +{ + var traits = [_attributes objectForKey:CPFontTraitsAttribute]; + + if (traits && [traits objectForKey:CPFontSymbolicTrait]) + return [[traits objectForKey:CPFontSymbolicTrait] unsignedIntValue]; + + return 0; +} + +@end + +var CPFontDescriptorAttributesKey = @"CPFontDescriptorAttributesKey"; + +@implementation CPFontDescriptor (CPCoding) + +/*! + Initializes the font descriptor from a coder. + + @param aCoder the coder from which to read the font descriptor data + @return the initialized font +*/ +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self initWithFontAttributes:[aCoder decodeObjectForKey:CPFontDescriptorAttributesKey]]; +} + +/*! + Writes the font descriptor to a coder. + + @param aCoder the coder to which the data will be written +*/ +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_attributes forKey:CPFontDescriptorAttributesKey]; +} + +@end + +var _wrapNameRegEx = new RegExp(/(\w+\s+\w+)(,*)/g); + +/* + Helper methods to CPFont for generating CSS font style +*/ +@implementation CPFontDescriptor (CPFontCSSHelper) + +- (CPString)fontStyleCSSString +{ + if ([self symbolicTraits] & CPFontItalicTrait) + return @"italic"; + + return @"normal"; +} + +- (CPString)fontWeightCSSString +{ + var traitsAttributes = [_attributes objectForKey:CPFontTraitsAttribute]; + + if (traitsAttributes) + { + /* give preference to CPFontWeightTrait */ + if ([traitsAttributes objectForKey:CPFontWeightTrait]) + return [traitsAttributes objectForKey:CPFontWeightTrait]; + /* else fallback to facetype symbolic traits */ + if ([self symbolicTraits] & CPFontBoldTrait) + return @"bold"; + } + + return @"normal"; +} + +- (CPString)fontSizeCSSString +{ + if ([_attributes objectForKey:CPFontSizeAttribute]) + return [[_attributes objectForKey:CPFontSizeAttribute] intValue] + "px"; + + return @""; +} + +- (CPString)fontFamilyCSSString +{ + var aName = @""; + + if ([_attributes objectForKey:CPFontNameAttribute]) + aName += [_attributes objectForKey:CPFontNameAttribute].replace(_wrapNameRegEx, '"$1"$2'); + + var symbolicTraits = [self symbolicTraits]; + + if (symbolicTraits) + { + if ((symbolicTraits & CPFontFamilyClassMask) & CPFontSansSerifClass) + aName += @", sans-serif"; + else if ((symbolicTraits & CPFontFamilyClassMask) & CPFontSerifClass) + aName += @", serif"; + } + + return aName; +} + +- (CPString)fontVariantCSSString +{ + if ([self symbolicTraits] & CPFontSmallCapsTrait) + return @"small-caps"; + + return @"normal"; +} + +- (CPString)cssString +{ + return [CPString stringWithString:[self fontStyleCSSString] + " " + + [self fontVariantCSSString] + " " + + [self fontWeightCSSString] + " " + + [self fontSizeCSSString] + " " + + [self fontFamilyCSSString]]; +} + +@end diff --git a/AppKit/CPTextView/CPFontPanel.j b/AppKit/CPTextView/CPFontPanel.j new file mode 100755 index 000000000..fac94ed4b --- /dev/null +++ b/AppKit/CPTextView/CPFontPanel.j @@ -0,0 +1,487 @@ +/* + * CPFontPanel.j + * AppKit + * + * TODOs: + * 1. make browser-width for size smaller and fix columns + * 2. sampleview is currently not shown + * 3. add all the missing features from the MacOS X counterpart + * + * + * Created by Daniel Boehringer on 2/JAN/2014. + * All modifications copyright Daniel Boehringer 2013. + * Based on original work by + * Created by Emmanuel Maillard on 06/03/2010. + * Copyright Emmanuel Maillard 2010. + * + * 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 "CPFontManager.j" +@import "CPPanel.j" +@import "CPLayoutManager.j" + +/* + Collection indexes +*/ +var kTypefaceIndex_Normal = 0, + kTypefaceIndex_Italic = 1, + kTypefaceIndex_Bold = 2, + kTypefaceIndex_BoldItalic = 3; + +var kToolbarHeight = 32, + kBorderSpacing = 6, + kInnerSpacing = 2; + +var kNothingChanged = 0, + kFontNameChanged = 1, + kTypefaceChanged = 2, + kSizeChanged = 3, + kTextColorChanged = 4, + kBackgroundColorChanged = 5, + kUnderlineChanged = 6, + kWeightChanged = 7; + +var _sharedFontPanel = nil; + + +// FIXME Locale support +var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], + _availableSizes = [@"9", @"10", @"11", @"12", @"13", @"14", @"18", @"24", @"36", @"48", @"72", @"96"]; + +@implementation _CPFontPanelSampleView : CPView +{ + CPLayoutManager _layoutManager; + CPTextStorage _textStorage; + CPTextContainer _textContainer; +} + +- (id)initWithFrame:(CPRect)rect +{ + self = [super initWithFrame:rect]; + + if (self) + { + _textStorage = [[CPTextStorage alloc] init]; + _layoutManager = [[CPLayoutManager alloc] init]; + + _textContainer = [[CPTextContainer alloc] init]; + [_layoutManager addTextContainer:_textContainer]; + + [_textStorage addLayoutManager:_layoutManager]; + } + + return self; +} + +- (void)setAttributedString:(CPAttributedString)aSting +{ + [_textStorage replaceCharactersInRange:CPMakeRange(0, [_textStorage length]) + withAttributedString:aSting]; + + [self setNeedsDisplay:YES]; +} + +- (void)drawRect:(CPRect)rect +{ + var ctx = [[CPGraphicsContext currentContext] graphicsPort], + glyphRange = [_layoutManager glyphRangeForTextContainer:_textContainer], + usedRect = [_layoutManager usedRectForTextContainer:_textContainer], + bounds = [self bounds], + pos = CPMakePoint((bounds.size.width - usedRect.size.width) / 2.0, (bounds.size.height - usedRect.size.height) / 2.0); + + CGContextSaveGState(ctx); + CGContextSetFillColor(ctx, [CPColor whiteColor]); + CGContextFillRect(ctx, bounds); + CGContextRestoreGState(ctx); + + [_layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:pos]; +} + +@end + +/*! + @ingroup appkit + @class CPFontPanel +*/ +@implementation CPFontPanel : CPPanel +{ + CPView _toolbarView; + id _fontBrowser; + id _traitBrowser; + id _sizeBrowser; + CPArray _availableFonts; + id _textColorWell; + CPColor _textColor; + int _currentColorButtonTag; + BOOL _setupDone; + int _fontChanges; + + _CPFontPanelSampleView _sampleView; +} + +/*! + Check if the shared Font panel exists. +*/ ++ (BOOL)sharedFontPanelExists +{ + return _sharedFontPanel !== nil; +} + +/*! + Return the shared Font panel. +*/ ++ (CPFontPanel)sharedFontPanel +{ + if (!_sharedFontPanel) + _sharedFontPanel = [[CPFontPanel alloc] init]; + + return _sharedFontPanel; +} + +/*! @ignore */ +- (id)init +{ + self = [super initWithContentRect:CGRectMake(100, 90, 450, 394) styleMask:(CPTitledWindowMask | CPClosableWindowMask /*| CPResizableWindowMask*/ )]; + + if (self) + { + [[self contentView] setBackgroundColor:[CPColor colorWithWhite:0.95 alpha:1.0]]; + + [self setTitle:@"Font Panel"]; + [self setLevel:CPFloatingWindowLevel]; + + [self setFloatingPanel:YES]; + [self setBecomesKeyOnlyIfNeeded:YES]; + + [self setMinSize:CGSizeMake(378, 394)]; + + _availableFonts = [[CPFontManager sharedFontManager] availableFonts]; + + _textColor = [CPColor blackColor]; + + _setupDone = NO; + _fontChanges = kNothingChanged; + } + + return self; +} + +/*! @ignore */ +- (void)_setupToolbarView +{ + _toolbarView = [[CPView alloc] initWithFrame:CGRectMake(0, kBorderSpacing, CGRectGetWidth([self frame]), kToolbarHeight)]; + [_toolbarView setAutoresizingMask: CPViewWidthSizable]; + + /* text color */ + _textColorWell = [[CPColorWell alloc] initWithFrame:CGRectMake(10, 0, 25, 25)]; + [_textColorWell setColor:_textColor]; // FIXME: use bindings + [_toolbarView addSubview:_textColorWell]; + var colorPanel = [CPColorPanel sharedColorPanel]; + [colorPanel setTarget:self]; + [colorPanel setAction:@selector(changeColor:)]; +} + +- (void)_setupBrowser: aBrowser +{ + [aBrowser setTarget:self]; + [aBrowser setAction:@selector(browserClicked:)]; + [aBrowser setDoubleAction:@selector(dblClicked:)]; + [aBrowser setAllowsEmptySelection:NO]; + [aBrowser setAllowsMultipleSelection: NO]; + [aBrowser setDelegate:self]; + [[self contentView] addSubview:aBrowser]; +} + +- (void)_setupContents +{ + if (_setupDone) + return; + + _setupDone = YES; + + [self _setupToolbarView]; + + var contentView = [self contentView], + label = [CPTextField labelWithTitle:@"Font name"], + contentBounds = [contentView bounds], + upperView = [[CPView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(contentBounds), CGRectGetHeight(contentBounds) - (kBorderSpacing + kToolbarHeight + kInnerSpacing))]; + + [contentView addSubview:_toolbarView]; + _fontBrowser = [[CPBrowser alloc] initWithFrame:CGRectMake(10, 35, 150, 350)]; + _traitBrowser = [[CPBrowser alloc] initWithFrame:CGRectMake(155, 35, 150, 350)]; + _sizeBrowser = [[CPBrowser alloc] initWithFrame:CGRectMake(300, 35, 140, 350)]; + [self _setupBrowser:_fontBrowser]; + [self _setupBrowser:_traitBrowser]; + [self _setupBrowser:_sizeBrowser]; + [[CPNotificationCenter defaultCenter] addObserver:self + selector:@selector(textViewDidChangeSelection:) + name:CPTextViewDidChangeSelectionNotification + object:nil]; +} + +- (void)textViewDidChangeSelection:(CPNotification)notification +{ + [self _refreshWithTextView:[notification object]]; + +} + +- (void)_refreshWithTextView: textView +{ + if ([self isVisible]) + { + var attribs = [textView typingAttributes], + font = [attribs objectForKey:CPFontAttributeName] || [[textView textStorage] font] || [CPFont systemFontOfSize:12.0]; + + if (font) + { + var trait = kTypefaceIndex_Normal; + + if ([font isItalic] && [font isBold]) + trait = kTypefaceIndex_BoldItalic; + else if ([font isItalic]) + trait = kTypefaceIndex_Italic; + else if ([font isBold]) + trait = kTypefaceIndex_Bold; + + [self setCurrentFont: font]; + [self setCurrentTrait: trait]; + [self setCurrentSize: [font size] + ""]; //cast to string + } + } +} + +- (void)orderFront:(id)sender +{ + [self _setupContents]; + [super orderFront:sender]; + [self _refreshWithTextView: [[CPApp keyWindow] firstResponder]]; +} + +- (void)reloadDefaultFontFamilies +{ + _availableFonts = [[CPFontManager sharedFontManager] availableFonts]; +} + +- (BOOL)worksWhenModal +{ + return YES; +} + +/*! + @param aFont the font to convert. + @return The converted font or \c aFont if failed to convert. +*/ +- (CPFont)panelConvertFont:(CPFont)aFont +{ + var newFont = aFont, + index = 0; + + switch (_fontChanges) + { + case kFontNameChanged: + newFont = [CPFont fontWithDescriptor:[[aFont fontDescriptor] fontDescriptorByAddingAttributes: + [CPDictionary dictionaryWithObject: [self currentFont] forKey:CPFontNameAttribute]] size:0.0]; + break; + + case kTypefaceChanged: + index = [self currentTrait]; + if (index == kTypefaceIndex_BoldItalic) + newFont = [[CPFontManager sharedFontManager] convertFont:aFont toHaveTrait:CPBoldFontMask | CPItalicFontMask]; + else if (index == kTypefaceIndex_Bold) + newFont = [[CPFontManager sharedFontManager] convertFont:aFont toHaveTrait:CPBoldFontMask]; + else if (index == kTypefaceIndex_Italic) + newFont = [[CPFontManager sharedFontManager] convertFont:aFont toHaveTrait:CPItalicFontMask]; + else + newFont = [[CPFontManager sharedFontManager] convertFont:aFont toNotHaveTrait:CPBoldFontMask | CPItalicFontMask]; + break; + + case kSizeChanged: + newFont = [[CPFontManager sharedFontManager] convertFont:aFont toSize:[self currentSize]]; + break; + + case kNothingChanged: + break; + + default: + CPLog.trace(@"FIXME: -[" + [self className] + " " + _cmd + "] unhandled _fontChanges: " + _fontChanges); + break; + } + + return newFont; +} + +- (void)setCurrentSize: aSize +{ + [_sizeBrowser selectRow: [_availableSizes indexOfObject: aSize] inColumn:0]; +} + +- (CPString)currentSize +{ + return [_sizeBrowser selectedItem]; +} + +- (void)setCurrentFont: aFont +{ + [_fontBrowser selectRow: [_availableFonts indexOfObject: [aFont familyName]] inColumn:0]; +} + +- (CPString)currentFont +{ + return [_fontBrowser selectedItem]; +} + +- (void)setCurrentTrait: aTrait +{ + var row = 0; + + switch (aTrait) + { + case kTypefaceIndex_Italic: + row = 1; + break; + + case kTypefaceIndex_Bold: + row = 2; + break; + + case kTypefaceIndex_BoldItalic: + row = 3; + break; + } + + [_traitBrowser selectRow: row inColumn:0]; +} + +// FIXME Locale support +- (void)currentTrait +{ + var sel = [_traitBrowser selectedItem]; + + if (sel === "Italic") + return kTypefaceIndex_Italic; + + if (sel === "Bold") + return kTypefaceIndex_Bold; + + if (sel === "Bold Italic") + return kTypefaceIndex_BoldItalic; + + return kTypefaceIndex_Normal; +} + +/*! + Set the selected font in Font panel. + @param font the selected font + @param flag if \c the current selection have multiple fonts. +*/ +- (void)setPanelFont:(CPFont)font isMultiple:(BOOL)flag +{ + [self _setupContents]; + + if ([self currentFont] !== [font familyName]) + [self setCurrentFont:[font familyName]]; + + if ([self currentSize] != [font size]) + [self setCurrentSize:[font size]]; + + var typefaceIndex = kTypefaceIndex_Normal, + symbolicTraits = [[font fontDescriptor] symbolicTraits]; + + if ((symbolicTraits & CPFontItalicTrait) && (symbolicTraits & CPFontBoldTrait)) + typefaceIndex = kTypefaceIndex_BoldItalic; + else if (symbolicTraits & CPFontItalicTrait) + typefaceIndex = kTypefaceIndex_Italic; + else if (symbolicTraits & CPFontBoldTrait) + typefaceIndex = kTypefaceIndex_Bold; + + if ([self currentTrait] != typefaceIndex) + [self setCurrentTrait: typefaceIndex ]; + + [_sampleView setAttributedString: + [[CPAttributedString alloc] initWithString:[font familyName] + attributes:[CPDictionary dictionaryWithObjects:[font, [CPColor blackColor]] forKeys:[CPFontAttributeName, CPForegroundColorAttributeName]]] + ]; + + _fontChanges = kNothingChanged; +} + +- (void)changeColor:(id)sender +{ + _textColor = [sender color]; + _fontChanges = kTextColorChanged; + [[CPFontManager sharedFontManager] modifyFontViaPanel:self]; +} + +//////////////////////////////////////////////////////////////////// +// TODO: ask CPFontManager for traits // +- (void)browserClicked:(id)aBrowser +{ + if (aBrowser === _fontBrowser) + { + _fontChanges = kFontNameChanged; + [[CPFontManager sharedFontManager] modifyFontViaPanel:self]; + } + else if (aBrowser === _traitBrowser) + { + _fontChanges = kTypefaceChanged; + [[CPFontManager sharedFontManager] modifyFontViaPanel:self]; + } + else if (aBrowser === _sizeBrowser) + { + _fontChanges = kSizeChanged; + [[CPFontManager sharedFontManager] modifyFontViaPanel:self]; + } +} + +- (void)dblClicked:(id)sender +{ + // alert("DOUBLE"); +} + +- (id)browser:(id)aBrowser numberOfChildrenOfItem:(id)anItem +{ + if (aBrowser === _fontBrowser) + return [_availableFonts count]; + + if (aBrowser === _traitBrowser) + return [_availableTraits count] + else + return [_availableSizes count] +} + +- (id)browser:(id)aBrowser child:(int)index ofItem:(id)anItem +{ + if (aBrowser === _fontBrowser) + return [_availableFonts objectAtIndex:index]; + + if (aBrowser === _traitBrowser) + return [_availableTraits objectAtIndex:index]; + + return [_availableSizes objectAtIndex:index]; +} + +- (id)browser:(id)aBrowser objectValueForItem:(id)anItem +{ + return anItem; +} + +- (BOOL)browser:(id)aBrowser isLeafItem:(id)anItem +{ + return YES; +} + +@end diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j new file mode 100755 index 000000000..1e18b58d5 --- /dev/null +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -0,0 +1,1419 @@ +/* + * CPLayoutManager.j + * AppKit + * + * FIXME remove from DOM when scrolled out of visible area? (as done in CPTableView) + * + * + * Created by Daniel Boehringer on 27/12/2013. + * All modifications copyright Daniel Boehringer 2013. + * Based on original work by + * Emmanuel Maillard on 27/02/2010. + * Copyright Emmanuel Maillard 2010. + * + * 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 "CPTextStorage.j" +@import "CPTextContainer.j" +@import "CPTypesetter.j" + +function _RectEqualToRectHorizontally(lhsRect, rhsRect) +{ + return (lhsRect.origin.x == rhsRect.origin.x && + lhsRect.size.width == rhsRect.size.width && + lhsRect.size.height == rhsRect.size.height); +} + +_oncontextmenuhandler = function () { return false; }; + + +@implementation CPArray(SortedSearching) + +- (unsigned)indexOfObject:(id)anObject sortedByFunction:(Function)aFunction context:(id)aContext +{ + var result = [self _indexOfObject:anObject sortedByFunction:aFunction context:aContext]; + + return (result >= 0) ? result : CPNotFound; +} + +- (unsigned)_indexOfObject:(id)anObject sortedByFunction:(Function)aFunction context:(id)aContext +{ + var length= [self count]; + + if (!aFunction) + return CPNotFound; + + if (length === 0) + return -1; + + var mid, + c, + first = 0, + last = length - 1; + + while (first <= last) + { + mid = FLOOR((first + last) / 2); + c = aFunction(anObject, self[mid], aContext); + + if (c > 0) + first = mid + 1; + else if (c < 0) + last = mid - 1; + else + { + while (mid < length - 1 && aFunction(anObject, self[mid + 1], aContext) == CPOrderedSame) + mid++; + + return mid; + } + } + + return -first - 1; +} + +@end + +var _sortRange = function(location, anObject) +{ + if (CPLocationInRange(location, anObject._range)) + return CPOrderedSame; + else if (CPMaxRange(anObject._range) <= location) + return CPOrderedDescending; + else + return CPOrderedAscending; +} + +var _objectWithLocationInRange = function(aList, aLocation) +{ + var index = [aList indexOfObject: aLocation sortedByFunction:_sortRange context:nil]; + + if (index != CPNotFound) + return aList[index]; + + return nil; +} + +var _objectsInRange = function(aList, aRange) +{ + var list = [], + c = aList.length, + location = aRange.location; + + for (var i = 0; i < c; i++) + { + if (CPLocationInRange(location, aList[i]._range)) + { + list.push(aList[i]); + if (CPMaxRange(aList[i]._range) <= CPMaxRange(aRange)) + location = CPMaxRange(aList[i]._range); + else + break; + } + else if (CPLocationInRange(CPMaxRange(aRange), aList[i]._range)) + { + list.push(aList[i]); + break; + } + else if (CPRangeInRange(aRange, aList[i]._range)) + { + list.push(aList[i]); + } + } + + return list; +} + +@implementation _CPLineFragment : CPObject +{ + CPRect _fragmentRect; + CPRect _usedRect; + CPPoint _location; + CPRange _range; + CPTextContainer _textContainer; + BOOL _isInvalid; + CPMutableArray _runs; + + /* 'Glyphs' frames */ + CPArray _glyphsFrames; +} + +- (id)createDOMElementWithText:aString andFont:aFont andColor:aColor +{ + var style, + span = document.createElement("span"); + + span.oncontextmenu = span.onmousedown = span.onselectstart = _oncontextmenuhandler; + // span.contentEditable = true; // this unfortunately does not work to make native pasting work on safari + + style = span.style; + style.position = "absolute"; + style.visibility = "visible"; + style.padding = "0px"; + style.margin = "0px"; + style.whiteSpace = "pre"; + style.backgroundColor = "transparent"; + style.font = [aFont cssString]; + + if (aColor) + style.color = [aColor cssString]; + + if (CPFeatureIsCompatible(CPJavaScriptInnerTextFeature)) + span.innerText = aString; + else if (CPFeatureIsCompatible(CPJavaScriptTextContentFeature)) + span.textContent = aString; +// FIXME aString.replace(/&/g,'&') + return span; +} + +- (id)initWithRange:(CPRange)aRange textContainer:(CPTextContainer)aContainer textStorage:(CPTextStorage)textStorage +{ + self = [super init]; + + if (self) + { + _fragmentRect = CGRectMakeZero(); + _usedRect = CGRectMakeZero(); + _location = CPPointMakeZero(); + _range = CPMakeRangeCopy(aRange); + _textContainer = aContainer; + _isInvalid = NO; + + _runs = [[CPMutableArray alloc] init]; + var effectiveRange = CPMakeRange(0,0), + location; + + for (location = aRange.location; location < CPMaxRange(aRange); location = CPMaxRange(effectiveRange)) + { + var attributes = [textStorage attributesAtIndex:location effectiveRange:effectiveRange]; + effectiveRange = attributes ? CPIntersectionRange(aRange, effectiveRange) : aRange; + + var string = [textStorage._string substringWithRange:effectiveRange], + font = [textStorage font] || [CPFont systemFontOfSize:12.0]; + + if ([attributes containsKey:CPFontAttributeName]) + font = [attributes objectForKey:CPFontAttributeName]; + + var color = [attributes objectForKey:CPForegroundColorAttributeName], + elem = [self createDOMElementWithText:string andFont:font andColor:color], + run = {_range:CPMakeRangeCopy(effectiveRange), elem:elem, string:string}; + + _runs.push(run); + } + } + + return self; +} + +- (void)setAdvancements:someAdvancements +{ + _glyphsFrames = []; + + var count = someAdvancements.length, + origin = CPPointMake(_fragmentRect.origin.x + _location.x, _fragmentRect.origin.y); // FIXME _location.y + + for (var i = 0; i < count; i++) + { + _glyphsFrames.push(CPRectMake(origin.x, origin.y, someAdvancements[i], _usedRect.size.height)); + origin.x += someAdvancements[i]; + } +} + +- (CPString)description +{ + return [super description] + + "\n\t_fragmentRect="+CPStringFromRect(_fragmentRect) + + "\n\t_usedRect="+CPStringFromRect(_usedRect) + + "\n\t_location="+CPStringFromPoint(_location) + + "\n\t_range="+CPStringFromRange(_range); +} + +- (CPArray)glyphFrames +{ + return _glyphsFrames; +} + +- (void)drawUnderlineForGlyphRange:(CPRange)glyphRange + underlineType:(int)underlineVal + baselineOffset:(float)baselineOffset + containerOrigin:(CPPoint)containerOrigin +{ +// FIXME +} + +- (void)invalidate +{ + _isInvalid = YES; +} + +- (void)_deinvalidate +{ + _isInvalid = NO; +} + +- (void)_removeFromDOM +{ + var i, + l = _runs.length; + + for (var i = 0; i < l; i++) + { + if (_runs[i].elem && _runs[i].DOMactive) + _textContainer._textView._DOMElement.removeChild(_runs[i].elem); + + _runs[i].elem = nil; + _runs[i].DOMactive = NO; + } +} + +- (void)drawInContext:(CGContext)context atPoint:(CPPoint)aPoint forRange:(CPRange)aRange +{ + var runs = _objectsInRange(_runs, aRange), + c = runs.length, + orig = CPPointMake(_location.x, _location.y + _fragmentRect.origin.y); + + orig.y += aPoint.y; + + for (var i = 0; i < c; i++) + { + var run = runs[i]; + + if (run.DOMactive && !run.DOMpatched) + { + continue; + } + + orig.x = _glyphsFrames[run._range.location - _runs[0]._range.location].origin.x + aPoint.x; + + run.elem.style.left = (orig.x) + "px"; + run.elem.style.top = (orig.y - _usedRect.size.height + 4) + "px"; // FIXME: consolidate this strange constant + + if (!run.DOMactive) + _textContainer._textView._DOMElement.appendChild(run.elem); + + run.DOMactive = YES; + run.DOMpatched = NO; + + if (run.underline) + { + // FIXME + } + } +} + +- (void)backgroundColorForGlyphAtIndex:(unsigned)index +{ + var run = _objectWithLocationInRange(_runs, index); + + if (run) + return run.backgroundColor; + + return [CPColor clearColor]; +} + +- (BOOL)isVisuallyIdenticalToFragment:(_CPLineFragment)newLineFragment +{ + var newFragmentRuns= newLineFragment._runs, + oldFragmentRuns= _runs; + + if (!oldFragmentRuns || !newFragmentRuns || oldFragmentRuns.length !== newFragmentRuns.length) + return NO; + + var l = oldFragmentRuns.length; + + for (var i = 0; i < l; i++) + { + if (newFragmentRuns[i].string !== oldFragmentRuns[i].string || + !_RectEqualToRectHorizontally(newLineFragment._fragmentRect, _fragmentRect)) + // FIXME newFragmentRuns[i].elem.style.left !== oldFragmentRuns[i].elem.style.left && compare CSS-strings + { + return NO; + } + } + + return YES; +} + +- (void)_relocateVerticallyByY:(double) verticalOffset rangeOffset:(unsigned) rangeOffset +{ + _range.location += rangeOffset; + var l = _runs.length; + + for (var i = 0; i < l; i++) + { + _runs[i]._range.location += rangeOffset; + + if (verticalOffset) + { + _runs[i].elem.top = (_runs[i].elem.top + verticalOffset) + 'px'; + _runs[i].DOMpatched = YES; + } + } + + if (!verticalOffset) + return NO; + + _fragmentRect.origin.y += verticalOffset; + _usedRect.origin.y += verticalOffset; + + var l = _glyphsFrames.length; + + for (var i = 0; i < l ; i++) + { + _glyphsFrames[i].origin.y += verticalOffset; + } +} + +@end + +@implementation _CPTemporaryAttributes : CPObject +{ + CPDictionary _attributes; + CPRange _range; +} + +- (id)initWithRange:(CPRange)aRange attributes:(CPDictionary)attributes +{ + self = [super init]; + + if (self) + { + _attributes = attributes; + _range = CPMakeRangeCopy(aRange); + } + + return self; +} + +- (CPString)description +{ + return [super description] + + "\n\t_range="+CPStringFromRange(_range) + + "\n\t_attributes="+[_attributes description]; +} + +@end + +/*! + @ingroup appkit + @class CPLayoutManager +*/ +@implementation CPLayoutManager : CPObject +{ + CPTextStorage _textStorage; + id _delegate; + CPMutableArray _textContainers; + CPTypesetter _typesetter; + + CPMutableArray _lineFragments; + CPMutableArray _lineFragmentsForRescue; + id _extraLineFragment; + Class _lineFragmentFactory; + + CPMutableArray _temporaryAttributes; + + BOOL _isValidatingLayoutAndGlyphs; + var _removeInvalidLineFragmentsRange; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + _textContainers = [[CPMutableArray alloc] init]; + _lineFragments = [[CPMutableArray alloc] init]; + _typesetter = [CPTypesetter sharedSystemTypesetter]; + _isValidatingLayoutAndGlyphs = NO; + _lineFragmentFactory = [_CPLineFragment class]; + } + + return self; +} + +- (void)setTextStorage:(CPTextStorage)textStorage +{ + if (_textStorage === textStorage) + return; + + _textStorage = textStorage; +} + +- (CPTextStorage)textStorage +{ + return _textStorage; +} + +- (void)insertTextContainer:(CPTextContainer)aContainer atIndex:(int)index +{ + [_textContainers insertObject:aContainer atIndex:index]; + [aContainer setLayoutManager:self]; +} + +- (void)addTextContainer:(CPTextContainer)aContainer +{ + [_textContainers addObject:aContainer]; + [aContainer setLayoutManager:self]; +} + +- (void)removeTextContainerAtIndex:(int)index +{ + var container = [_textContainers objectAtIndex:index]; + [container setLayoutManager:nil]; + [_textContainers removeObjectAtIndex:index]; +} + +- (CPArray)textContainers +{ + return _textContainers; +} + +// fixme +- (int)numberOfGlyphs +{ + return [_textStorage length]; +} +- (int)numberOfCharacters +{ + return [_textStorage length]; +} + +- (CPTextView)firstTextView +{ + return [_textContainers[0] textView]; +} + +// from cocoa (?) +- (CPTextView)textViewForBeginningOfSelection +{ + return [[_textContainers objectAtIndex:0] textView]; +} + +- (BOOL)layoutManagerOwnsFirstResponderInWindow:(CPWindow)aWindow +{ + var firstResponder = [aWindow firstResponder], + c = [_textContainers count]; + + for (var i = 0; i < c; i++) + { + if ([_textContainers[i] textView] === firstResponder) + return YES; + } + + return NO; +} + +- (CPRect)boundingRectForGlyphRange:(CPRange)aRange inTextContainer:(CPTextContainer)container +{ + if (![self numberOfGlyphs]) + return CPRectMake(0, 0, 1, 12); // crude hack to give a cursor in an empty doc. + + if (CPMaxRange(aRange) >= [self numberOfGlyphs]) + aRange = CPMakeRange([self numberOfGlyphs] - 1, 1); + + var fragments = _objectsInRange(_lineFragments, aRange), + rect = nil, + c = [fragments count]; + + for (var i = 0; i < c; i++) + { + var fragment = fragments[i]; + if (fragment._textContainer === container) + { + var frames = [fragment glyphFrames], + l = frames.length; + + for (var j = 0; j < l; j++) + { + if (CPLocationInRange(fragment._range.location + j, aRange)) + { + if (!rect) + rect = CPRectCreateCopy(frames[j]); + else + rect = CPRectUnion(rect, frames[j]); + } + } + } + } + return (rect) ? rect : CGRectMakeZero(); +} + +- (CPRange)glyphRangeForTextContainer:(CPTextContainer)aTextContainer +{ + var range = nil, + c = [_lineFragments count]; + for (var i = 0; i < c; i++) + { + var fragment = _lineFragments[i]; + if (fragment._textContainer === aTextContainer) + { + if (!range) + range = CPMakeRangeCopy(fragment._range); + else + range = CPUnionRange(range, fragment._range); + } + } + return (range)?range:CPMakeRange(CPNotFound, 0); +} + +- (void)_removeInvalidLineFragments +{ + _lineFragmentsForRescue = [_lineFragments copy]; + [_lineFragmentsForRescue makeObjectsPerformSelector:@selector(_deinvalidate)]; + + if (_removeInvalidLineFragmentsRange && _removeInvalidLineFragmentsRange.length && _lineFragments.length) + { + [[_lineFragments subarrayWithRange:_removeInvalidLineFragmentsRange] makeObjectsPerformSelector:@selector(invalidate)]; + [_lineFragments removeObjectsInRange:_removeInvalidLineFragmentsRange]; + [[_lineFragmentsForRescue subarrayWithRange:_removeInvalidLineFragmentsRange] makeObjectsPerformSelector:@selector(invalidate)]; + } + +} + +- (void)_cleanUpDOM +{ + var l = _lineFragmentsForRescue.length; + + for (var i = 0; i < l; i++) + { + if (_lineFragmentsForRescue[i]._isInvalid) + [_lineFragmentsForRescue[i] _removeFromDOM]; + } +} + +- (void)_validateLayoutAndGlyphs +{ + if (_isValidatingLayoutAndGlyphs) + return; + + _isValidatingLayoutAndGlyphs = YES; + + var startIndex = CPNotFound, + removeRange = CPMakeRange(0,0); + + var l = _lineFragments.length; + if (l) + { + for (var i = 0; i < l; i++) + { + if (_lineFragments[i]._isInvalid) + { + startIndex = _lineFragments[i]._range.location; + removeRange.location = i; + removeRange.length = l - i; + break; + } + } + + if (startIndex == CPNotFound && CPMaxRange (_lineFragments[l - 1]._range) < [_textStorage length]) + startIndex = CPMaxRange(_lineFragments[l - 1]._range); // start one line above current line to make sure that a word can jump up + } + else + startIndex = 0; + + /* nothing to validate and layout */ + if (startIndex == CPNotFound) + { + _isValidatingLayoutAndGlyphs = NO; + return; + } + + if (removeRange.length) + _removeInvalidLineFragmentsRange = CPMakeRangeCopy(removeRange); + + if (!startIndex) // We erased all lines + [self setExtraLineFragmentRect:CPRectMake(0,0) usedRect:CPRectMake(0,0) textContainer:nil]; + + // document.title=startIndex; + [_typesetter layoutGlyphsInLayoutManager:self startingAtGlyphIndex:startIndex maxNumberOfLineFragments:-1 nextGlyphIndex:nil]; + [self _cleanUpDOM]; + _isValidatingLayoutAndGlyphs = NO; +} + +- (BOOL)_rescuingInvalidFragmentsWasPossibleForGlyphRange:(CPRange)aRange +{ + var l = _lineFragments.length, + location = aRange.location, + found = NO; + + // try to find the first linefragment of the desired range + for (var i = 0; i < l; i++) + { + if (CPLocationInRange(location, _lineFragments[i]._range)) + { found = YES; + break; + } + } + + if (!found) + return NO; + + if (!_lineFragmentsForRescue[i]) + return NO; + + var startLineForDOMRemoval = i, + isIdentical = YES, + newLineFragment= _lineFragments[i], + oldLineFragment = _lineFragmentsForRescue[i], + oldLength = CPMaxRange([_lineFragmentsForRescue lastObject]._range), + newLength = [[_textStorage string].length]; + + if (![oldLineFragment isVisuallyIdenticalToFragment: newLineFragment]) + { + isIdentical = NO; + if (newLength < oldLength && oldLineFragment._range.length == 1 && newLineFragment._range.length > 1 && newLineFragment._range.location === oldLineFragment._range.location) // deleting newline in its own line-> move up instead of re.layouting + { + isIdentical = YES; + i--; + startLineForDOMRemoval--; + } + if (newLength > oldLength && newLineFragment._range.length == 1 && oldLineFragment._range.length > 1 && newLineFragment._range.location === oldLineFragment._range.location) // newline entered in its own line-> move down instead of re.layouting + { + isIdentical = YES; + startLineForDOMRemoval--; + } + } + + if (isIdentical) // patch the linefragments instead of re-layoutung + { + var rangeOffset = CPMaxRange(_lineFragments[i]._range) - CPMaxRange(_lineFragmentsForRescue[startLineForDOMRemoval]._range); + + if (!rangeOffset) + return NO; + + var verticalOffset = _lineFragments[i]._usedRect.origin.y - _lineFragmentsForRescue[startLineForDOMRemoval]._usedRect.origin.y, + l = _lineFragmentsForRescue.length; + + for (var i = startLineForDOMRemoval + 1; i < l; i++) + { + _lineFragmentsForRescue[i]._isInvalid = NO; // protect them from final removal + [_lineFragmentsForRescue[i] _relocateVerticallyByY:verticalOffset rangeOffset:rangeOffset]; + _lineFragments.push(_lineFragmentsForRescue[i]); + } + } + + return isIdentical; +} + +- (void)invalidateDisplayForGlyphRange:(CPRange)range +{ + var lineFragments = _objectsInRange(_lineFragments, range); + + for (var i = 0; i < lineFragments.length; i++) + [[lineFragments[i]._textContainer textView] setNeedsDisplayInRect: lineFragments[i]._fragmentRect]; +} + +- (void)invalidateLayoutForCharacterRange:(CPRange)aRange isSoft:(BOOL)flag actualCharacterRange:(CPRangePointer)actualCharRange +{ + var firstFragmentIndex = _lineFragments.length? [_lineFragments indexOfObject: aRange.location sortedByFunction:_sortRange context:nil]:CPNotFound; + + if (firstFragmentIndex == CPNotFound) + { + if (_lineFragments.length) + firstFragmentIndex = _lineFragments.length - 1; + else + { + if (actualCharRange) + { + actualCharRange.length = aRange.length; + actualCharRange.location = 0; + } + + return; + } + } + else + firstFragmentIndex = firstFragmentIndex + (firstFragmentIndex ? - 1 : 0); + + var fragment = _lineFragments[firstFragmentIndex], + range = CPMakeRangeCopy(fragment._range); + + fragment._isInvalid = YES; + + /* invalidated all fragments that follow */ + for (var i = firstFragmentIndex + 1; i < _lineFragments.length; i++) + { + _lineFragments[i]._isInvalid = YES; + range = CPUnionRange(range, _lineFragments[i]._range); + } + + if (CPMaxRange(range) < CPMaxRange(aRange)) + range = CPUnionRange(range, aRange); + + if (actualCharRange) + { actualCharRange.length = range.length; + actualCharRange.location = range.location; + } +} + +- (void)textStorage:(CPTextStorage)textStorage edited:(unsigned)mask range:(CPRange)charRange changeInLength:(int)delta invalidatedRange:(CPRange)invalidatedRange +{ + var actualRange = CPMakeRange(CPNotFound,0); + [self invalidateLayoutForCharacterRange: invalidatedRange isSoft:NO actualCharacterRange:actualRange]; + [self invalidateDisplayForGlyphRange: actualRange]; +} + +- (CPRange)glyphRangeForBoundingRect:(CPRect)aRect inTextContainer:(CPTextContainer)container +{ + var range = nil, + i, + c = [_lineFragments count]; + + for (i = 0; i < c; i++) + { + var fragment = _lineFragments[i]; + + if (fragment._textContainer === container) + { + if (CPRectContainsRect(aRect, fragment._usedRect)) + { + if (!range) + range = CPMakeRangeCopy(fragment._range); + else + range = CPUnionRange(range, fragment._range); + } + else + { + var glyphRange = CPMakeRange(CPNotFound, 0), + frames = [fragment glyphFrames]; + + for (var j = 0; j < frames.length; j++) + { + if (CPRectIntersectsRect(aRect, frames[j])) + { + if (glyphRange.location == CPNotFound) + glyphRange.location = fragment._range.location + j; + else + glyphRange.length++; + } + } + if (glyphRange.location != CPNotFound) + { + if (!range) + range = CPMakeRangeCopy(glyphRange); + else + range = CPUnionRange(range, glyphRange); + } + } + } + } + return (range)?range:CPMakeRange(0,0); +} + +- (void)drawBackgroundForGlyphRange:(CPRange)aRange atPoint:(CPPoint)aPoint +{ +} + +- (void)drawUnderlineForGlyphRange:(CPRange)glyphRange + underlineType:(int)underlineVal + baselineOffset:(float)baselineOffset + lineFragmentRect:(CGRect)lineFragmentRect + lineFragmentGlyphRange:(CPRange)lineGlyphRange + containerOrigin:(CPPoint)containerOrigin +{ +// FIXME +} + +- (void)drawGlyphsForGlyphRange:(CPRange)aRange atPoint:(CPPoint)aPoint +{ + var lineFragments = _objectsInRange(_lineFragments, aRange); + + if (!lineFragments.length) + return; + + var ctx = nil, + paintedRange = CPMakeRangeCopy(aRange), + lineFragmentIndex, + l= lineFragments.length; + + for (lineFragmentIndex = 0; lineFragmentIndex < l; lineFragmentIndex++) + { + var currentFragment = lineFragments[lineFragmentIndex]; + [currentFragment drawInContext:ctx atPoint:aPoint forRange:paintedRange]; + } +} + +- (unsigned)glyphIndexForPoint:(CPPoint)point inTextContainer:(CPTextContainer)container fractionOfDistanceThroughGlyph:(FloatArray)partialFraction +{ + var c = [_lineFragments count]; + for (var i = 0; i < c; i++) + { + var fragment = _lineFragments[i]; + if (fragment._textContainer === container) + { + var frames = [fragment glyphFrames]; + var len = fragment._range.length; + for (var j = 0; j < len; j++) + { + if (CPRectContainsPoint(frames[j], point)) + { + if (partialFraction) + partialFraction[0] = (point.x - frames[j].origin.x) / frames[j].size.width; + + return fragment._range.location + j; + } + } + } + } + // not found, maybe a point left to the last character was clicked->search again with broader constraints + if ([[_textStorage string] length]) + { + for (var i = 0; i < c; i++) + { + var fragment = _lineFragments[i]; + + if (fragment._textContainer === container) + { + if (fragment._range.length > 0 && point.y > fragment._fragmentRect.origin.y && + point.y <= fragment._fragmentRect.origin.y + fragment._fragmentRect.size.height) + { + var nlLoc = CPMaxRange(fragment._range) - 1, + lastFrame = [fragment glyphFrames][fragment._range.length-1], + firstFrame = [fragment glyphFrames][0]; + + // skip tabs and move on the last fragment in this line + if (i < c - 1 && _lineFragments[i + 1]._fragmentRect.origin.y === fragment._fragmentRect.origin.y) + continue; + // this allows clicking before and after the (invisible) return character + if (point.x > CPRectGetMaxX(lastFrame) && fragment.length > 0 && + [[_textStorage string] characterAtIndex: nlLoc] === '\n' || i === c - 1) + return nlLoc + 1; + else if (point.x <= CPRectGetMinX(firstFrame)) + return fragment._range.location; + else + return nlLoc; + } + } + } + } + return CPNotFound; +} + +- (unsigned)glyphIndexForPoint:(CPPoint)point inTextContainer:(CPTextContainer)container +{ + return [self glyphIndexForPoint:point inTextContainer:container fractionOfDistanceThroughGlyph:nil]; +} + +- (void)_setAttributes:(CPDictionary)attributes toTemporaryAttributes:(_CPTemporaryAttributes)tempAttributes +{ + tempAttributes._attributes = attributes; +} + +- (void)_addAttributes:(CPDictionary)attributes toTemporaryAttributes:(_CPTemporaryAttributes)tempAttributes +{ + [tempAttributes._attributes addEntriesFromDictionary:attributes]; +} + +// i did not touch this monster (yet) +- (void)_handleTemporaryAttributes:(CPDictionary)attributes forCharacterRange:(CPRange)charRange withSelector:(SEL)attributesOperation +{ + if (!_temporaryAttributes) + _temporaryAttributes = [[CPMutableArray alloc] init]; + + var location = charRange.location, + length = 0, + dirtyRange = nil; + + while (length != charRange.length) + { + var tempAttributesIndex = [_temporaryAttributes indexOfObject: location sortedByFunction:_sortRange context:nil]; + + if (tempAttributesIndex != CPNotFound) + { + var tempAttributes = _temporaryAttributes[tempAttributesIndex]; + + if (CPRangeInRange(charRange, tempAttributes._range)) + { + [self performSelector:attributesOperation withObject:attributes withObject:tempAttributes]; + dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); + location += tempAttributes._range.length; + length += tempAttributes._range.length; + } + else if (location == tempAttributes._range.location && CPMaxRange(tempAttributes._range) > CPMaxRange(charRange)) + { + var maxRange = CPMaxRange(charRange), + splittedAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(maxRange, CPMaxRange(tempAttributes._range) - maxRange) + attributes:[tempAttributes._attributes copy]]; + + if ([_temporaryAttributes count] == tempAttributesIndex + 1) + [_temporaryAttributes addObject:splittedAttribute]; + else + [_temporaryAttributes insertObject:splittedAttribute atIndex:tempAttributesIndex + 1]; + + tempAttributes._range = CPMakeRange(tempAttributes._range.location, maxRange - tempAttributes._range.location); + [self performSelector:attributesOperation withObject:attributes withObject:tempAttributes]; + + location += tempAttributes._range.length; + length += tempAttributes._range.length; + + dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); + dirtyRange = CPUnionRange(dirtyRange, splittedAttribute._range); + } + else + { + var splittedAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(location, CPMaxRange(tempAttributes._range) - location) + attributes:[tempAttributes._attributes copy]]; + + if ([_temporaryAttributes count] == tempAttributesIndex + 1) + [_temporaryAttributes addObject:splittedAttribute]; + else + [_temporaryAttributes insertObject:splittedAttribute atIndex:tempAttributesIndex + 1]; + + tempAttributes._range = CPMakeRange(tempAttributes._range.location, location - tempAttributes._range.location); + dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); + dirtyRange = CPUnionRange(dirtyRange, splittedAttribute._range); + + if (splittedAttribute._range.length <= charRange.length) + { + location += splittedAttribute._range.length; + length += splittedAttribute._range.length; + } + else + { + var nextLocation = location + charRange.length, + nextAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(nextLocation, CPMaxRange(splittedAttribute._range) - nextLocation) + attributes:[tempAttributes._attributes copy]]; + + splittedAttribute._range = CPMakeRange(splittedAttribute._range.location, nextLocation - splittedAttribute._range.location); + + var insertIndex = [_temporaryAttributes indexOfObject:splittedAttribute]; + + if ([_temporaryAttributes count] == insertIndex + 1) + [_temporaryAttributes addObject:nextAttribute]; + else + [_temporaryAttributes insertObject:nextAttribute atIndex:insertIndex + 1]; + + length = charRange.length; + } + [self performSelector:attributesOperation withObject:attributes withObject:splittedAttribute]; + } + } + else + { + [_temporaryAttributes addObject:[[_CPTemporaryAttributes alloc] initWithRange:charRange attributes:attributes]]; + dirtyRange = CPMakeRangeCopy(charRange); + break; + } + } + + if (dirtyRange) + [self invalidateDisplayForGlyphRange:dirtyRange]; +} + +- (void)setTemporaryAttributes:(CPDictionary)attributes forCharacterRange:(CPRange)charRange +{ + [self _handleTemporaryAttributes:attributes forCharacterRange:charRange withSelector:@selector(_setAttributes:toTemporaryAttributes:)]; +} + +- (void)addTemporaryAttributes:(CPDictionary)attributes forCharacterRange:(CPRange)charRange +{ + [self _handleTemporaryAttributes:attributes forCharacterRange:charRange withSelector:@selector(_addAttributes:toTemporaryAttributes:)]; +} + +// i did not touch this monster (yet) +- (void)removeTemporaryAttribute:(CPString)attributeName forCharacterRange:(CPRange)charRange +{ + if (!_temporaryAttributes) + return; + + var location = charRange.location, + length = 0, + dirtyRange = nil; + while (length != charRange.length) + { + var tempAttributesIndex = [_temporaryAttributes indexOfObject: location sortedByFunction:_sortRange context:nil]; + + if (tempAttributesIndex != CPNotFound) + { + var tempAttributes = _temporaryAttributes[tempAttributesIndex]; + + if (CPRangeInRange(charRange, tempAttributes._range)) + { + location += tempAttributes._range.length; + length += tempAttributes._range.length; + dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); + + [tempAttributes._attributes removeObjectForKey:attributeName]; + + if ([[tempAttributes._attributes allKeys] count] == 0) + [_temporaryAttributes removeObjectAtIndex:tempAttributesIndex]; + } + else if (location == tempAttributes._range.location && CPMaxRange(tempAttributes._range) > CPMaxRange(charRange)) + { + var maxRange = CPMaxRange(charRange), + splittedAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(maxRange, CPMaxRange(tempAttributes._range) - maxRange) + attributes:[tempAttributes._attributes copy]]; + + if ([_temporaryAttributes count] == tempAttributesIndex + 1) + [_temporaryAttributes addObject:splittedAttribute]; + else + [_temporaryAttributes insertObject:splittedAttribute atIndex:tempAttributesIndex + 1]; + + tempAttributes._range = CPMakeRange(tempAttributes._range.location, maxRange - tempAttributes._range.location); + location += tempAttributes._range.length; + length += tempAttributes._range.length; + + [tempAttributes._attributes removeObjectForKey:attributeName]; + if ([[tempAttributes._attributes allKeys] count] == 0) + [_temporaryAttributes removeObjectAtIndex:tempAttributesIndex]; + + dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); + dirtyRange = CPUnionRange(dirtyRange, splittedAttribute._range); + } + else + { + var splittedAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(location, CPMaxRange(tempAttributes._range) - location) + attributes:[tempAttributes._attributes copy]]; + + if ([_temporaryAttributes count] == tempAttributesIndex + 1) + [_temporaryAttributes addObject:splittedAttribute]; + else + [_temporaryAttributes insertObject:splittedAttribute atIndex:tempAttributesIndex + 1]; + + tempAttributes._range = CPMakeRange(tempAttributes._range.location, location - tempAttributes._range.location); + + dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); + dirtyRange = CPUnionRange(dirtyRange, splittedAttribute._range); + + if (splittedAttribute._range.length < charRange.length) + { + location += splittedAttribute._range.length; + length += splittedAttribute._range.length; + } + else + { + var nextLocation = location + charRange.length, + nextAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(nextLocation, CPMaxRange(splittedAttribute._range) - nextLocation) + attributes:[tempAttributes._attributes copy]]; + + splittedAttribute._range = CPMakeRange(splittedAttribute._range.location, nextLocation - splittedAttribute._range.location); + var insertIndex = [_temporaryAttributes indexOfObject:splittedAttribute]; + + if ([_temporaryAttributes count] == insertIndex + 1) + [_temporaryAttributes addObject:nextAttribute]; + else + [_temporaryAttributes insertObject:nextAttribute atIndex:insertIndex + 1]; + + length = charRange.length; + } + + [splittedAttribute._attributes removeObjectForKey:attributeName]; + if ([[splittedAttribute._attributes allKeys] count] == 0) + [_temporaryAttributes removeObject:splittedAttribute]; + } + } + else + break; + } + + if (dirtyRange) + [self invalidateDisplayForGlyphRange:dirtyRange]; + +} + +- (CPDictionary)temporaryAttributesAtCharacterIndex:(unsigned)index effectiveRange:(CPRangePointer)effectiveRange +{ + var tempAttribute = _objectWithLocationInRange(_runs, index); // _runs is wild guess + + if (!tempAttribute) + return nil; + + if (effectiveRange) + { + effectiveRange.location = tempAttribute._range.location; + effectiveRange.length = tempAttribute._range.length; + } + + return tempAttribute._attributes; +} + +- (void)textContainerChangedTextView:(CPTextContainer)aContainer +{ + /* FIXME: stub */ +} + +- (CPTypesetter)typesetter +{ + return _typesetter; +} + +- (void)setTypesetter:(CPTypesetter)aTypesetter +{ + _typesetter = aTypesetter; +} + +- (void)setTextContainer:(CPTextContainer)aTextContainer forGlyphRange:(CPRange)glyphRange +{ + var fragments = _objectsInRange(_lineFragments, glyphRange), + l = fragments.length; + + for (var i = 0; i < l; i++) + { + [fragments[i] invalidate]; + } + + var lineFragment = [[_lineFragmentFactory alloc] initWithRange:glyphRange textContainer:aTextContainer textStorage:_textStorage]; + _lineFragments.push(lineFragment); +} + +- (id) _lineFragmentForLocation:(unsigned) aLoc +{ + var fragments = _objectsInRange(_lineFragments, CPMakeRange(aLoc,0)), + l = fragments.length; + + if (l > 0) + return fragments[0]; + + return nil; +} +- (void)setLineFragmentRect:(CPRect)fragmentRect forGlyphRange:(CPRange)glyphRange usedRect:(CPRect)usedRect +{ + var lineFragment = _objectWithLocationInRange(_lineFragments, glyphRange.location); + + if (lineFragment) + { + lineFragment._fragmentRect = CPRectCreateCopy(fragmentRect); + lineFragment._usedRect = CPRectCreateCopy(usedRect); + } +} + +- (void) _setAdvancements:(CPArray)someAdvancements forGlyphRange:(CPRange)glyphRange +{ + var lineFragment = _objectWithLocationInRange(_lineFragments, glyphRange.location); + + if (lineFragment) + [lineFragment setAdvancements: someAdvancements]; +} + +- (void)setLocation:(CPPoint)aPoint forStartOfGlyphRange:(CPRange)glyphRange +{ + var lineFragment = _objectWithLocationInRange(_lineFragments, glyphRange.location); + if (lineFragment) + lineFragment._location = CPPointCreateCopy(aPoint); +} + +- (CPRect)extraLineFragmentRect +{ + if (_extraLineFragment) + return CPRectCreateCopy(_extraLineFragment._fragmentRect); + + return CGRectMakeZero(); +} + +- (CPTextContainer)extraLineFragmentTextContainer +{ + if (_extraLineFragment) + return _extraLineFragment._textContainer; + + return nil; +} + +- (CPRect)extraLineFragmentUsedRect +{ + if (_extraLineFragment) + return CPRectCreateCopy(_extraLineFragment._usedRect); + + return CGRectMakeZero(); +} + +- (void)setExtraLineFragmentRect:(CPRect)rect usedRect:(CPRect)usedRect textContainer:(CPTextContainer)textContainer +{ + if (textContainer) + { + _extraLineFragment = {}; + _extraLineFragment._fragmentRect = CPRectCreateCopy(rect); + _extraLineFragment._usedRect = CPRectCreateCopy(usedRect); + _extraLineFragment._textContainer = textContainer; + } + else + _extraLineFragment = nil; +} + +/*! + NOTE: will not validate glyphs and layout +*/ +- (CPRect)usedRectForTextContainer:(CPTextContainer)textContainer +{ + var rect = nil; + + for (var i = 0; i < _lineFragments.length; i++) + { + if (_lineFragments[i]._textContainer === textContainer) + { + if (rect) + rect = CPRectUnion(rect, _lineFragments[i]._usedRect); + else + rect = CPRectCreateCopy(_lineFragments[i]._usedRect); + } + } + + return (rect)?rect:CGRectMakeZero(); +} + +- (CPRect)lineFragmentRectForGlyphAtIndex:(unsigned)glyphIndex effectiveRange:(CPRangePointer)effectiveGlyphRange +{ + var lineFragment = _objectWithLocationInRange(_lineFragments, glyphIndex); + + if (!lineFragment) + return CGRectMakeZero(); + + if (effectiveGlyphRange) + { + effectiveGlyphRange.location = lineFragment._range.location; + effectiveGlyphRange.length = lineFragment._range.length; + } + + return CPRectCreateCopy(lineFragment._fragmentRect); +} + +- (CPRect)lineFragmentUsedRectForGlyphAtIndex:(unsigned)glyphIndex effectiveRange:(CPRangePointer)effectiveGlyphRange +{ + var lineFragment = _objectWithLocationInRange(_lineFragments, glyphIndex); + + if (!lineFragment) + return CGRectMakeZero(); + + if (effectiveGlyphRange) + { + effectiveGlyphRange.location = lineFragment._range.location; + effectiveGlyphRange.length = lineFragment._range.length; + } + + return CPRectCreateCopy(lineFragment._usedRect); +} + +- (CPPoint)locationForGlyphAtIndex:(unsigned)index +{ + if (_lineFragments.length > 0 && index >= [self numberOfGlyphs] - 1) + { + var lineFragment= _lineFragments[_lineFragments.length-1], + glyphFrames = [lineFragment glyphFrames]; + + if (glyphFrames.length > 0) + return CPPointCreateCopy(glyphFrames[glyphFrames.length - 1].origin); + } + + var lineFragment = _objectWithLocationInRange(_lineFragments, index); + + if (lineFragment) + { + if (index == lineFragment._range.location) + return CPPointCreateCopy(lineFragment._location); + + var glyphFrames = [lineFragment glyphFrames]; + + return CPPointCreateCopy(glyphFrames[index - lineFragment._range.location].origin); + } + + return CPPointMakeZero(); +} + +- (CPTextContainer)textContainerForGlyphAtIndex:(unsigned)index effectiveRange:(CPRangePointer)effectiveGlyphRange withoutAdditionalLayout:(BOOL)flag +{ + var lineFragment = _objectWithLocationInRange(_lineFragments, index); + + if (lineFragment) + { + if (effectiveGlyphRange) + { + effectiveGlyphRange.location = lineFragment._range.location; + effectiveGlyphRange.length = lineFragment._range.length; + } + + return lineFragment._textContainer; + } + + return [_textContainers lastObject]; +} + +- (CPTextContainer)textContainerForGlyphAtIndex:(unsigned)index effectiveRange:(CPRangePointer)effectiveGlyphRange +{ + return [self textContainerForGlyphAtIndex:index effectiveRange:effectiveGlyphRange withoutAdditionalLayout:NO]; +} + +- (CPRange)characterRangeForGlyphRange:(CPRange)aRange actualGlyphRange:(CPRangePointer)actualRange +{ + return _MakeRangeFromAbs([self characterIndexForGlyphAtIndex:aRange.location], + [self characterIndexForGlyphAtIndex:CPMaxRange(aRange)]); +} + +- (unsigned)characterIndexForGlyphAtIndex:(unsigned)index +{ + /* FIXME: stub */ + return index; +} + +- (void)setLineFragmentFactory:(Class)lineFragmentFactory +{ + _lineFragmentFactory = lineFragmentFactory; +} + +- (CPArray)rectArrayForCharacterRange:(CPRange)charRange + withinSelectedCharacterRange:(CPRange)selectedCharRange + inTextContainer:(CPTextContainer)container + rectCount:(CPRectPointer)rectCount +{ + + var rectArray = [], + lineFragments = _objectsInRange(_lineFragments, selectedCharRange); + + if (!lineFragments.length) + return rectArray; + + var containerSize = [container containerSize]; + + for (var i = 0; i < lineFragments.length; i++) + { + var fragment = lineFragments[i]; + if (fragment._textContainer === container) + { + var frames = [fragment glyphFrames], + rect = nil, + len = fragment._range.length; + + for (var j = 0; j < len; j++) + { + if (CPLocationInRange(fragment._range.location + j, selectedCharRange)) + { + if (!rect) + rect = CPRectCreateCopy(frames[j]); + else + rect = CPRectUnion(rect, frames[j]); + + if ([[_textStorage string] characterAtIndex:MAX(0, CPMaxRange(selectedCharRange)-1)] === '\n' ) + { + rect.size.width = containerSize.width - rect.origin.x; + } + } + } + + if (rect) + rectArray.push(rect); + } + } + + var len = rectArray.length; + for (var i = 0; i < len - 1; i++) // extend the width of all but the last one + { + if (rectArray[i].origin.y == rectArray[i + 1].origin.y) + continue; + rectArray[i].size.width = containerSize.width - rectArray[i].origin.x; + } + + return rectArray; +} +@end diff --git a/AppKit/CPTextView/CPParagraphStyle.j b/AppKit/CPTextView/CPParagraphStyle.j new file mode 100755 index 000000000..b325dc4dd --- /dev/null +++ b/AppKit/CPTextView/CPParagraphStyle.j @@ -0,0 +1,186 @@ +/* + * CPParagraphStyle.j + * AppKit + * + * FIXME + * This is basically a stub. + * We need to store all the spacing informations as well as writing direction (among others) + * + * Created by Daniel Boehringer on 11/01/2014 + * Copyright Daniel Boehringer 2014. + * + * 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 _sharedDefaultParagraphStyle, + _defaultTabStopArray; + +CPLeftTabStopType = 0; + +/* +CPLeftTextAlignment = 0; +CPCenterTextAlignment = 1; +CPRightTextAlignment = 2; +*/ + +CPParagraphStyleAttributeName = @"CPParagraphStyleAttributeName"; + +@implementation CPTextTab : CPObject +{ + int _type @accessors(property=tabStopType); + double _location @accessors(property=location); +} + +- (id)initWithType:(CPTabStopType) aType location:(double) aLocation +{ + if ([self = [super init]]) + { + _type = aType; + _location = aLocation; + } + + return self; +} + +- (id)initWithCoder:(id)aCoder +{ + self = [self init]; + + if (self) + { + _type = [aCoder decodeIntForKey:"_type"]; + _location = [aCoder decodeDoubleForKey:"_location"]; + } + + return self; +} + +- (void)encodeWithCoder:(id)aCoder +{ + [aCoder encodeInt:_type forKey:"_type"]; + [aCoder encodeDouble:_location forKey:"_location"]; +} + +@end + +@implementation CPParagraphStyle : CPObject +{ + CPArray _tabStops @accessors(property = tabStops); + CPTextAlignment _alignment @accessors(property = alignment); + unsigned _firstLineHeadIndent @accessors(property = firstLineHeadIndent); + unsigned _headIndent @accessors(property = headIndent); + unsigned _tailIndent @accessors(property = tailIndent); + unsigned _paragraphSpacing @accessors(property = paragraphSpacing); + unsigned _minimumLineHeight @accessors(property = minimumLineHeight); + unsigned _maximumLineHeight @accessors(property = maximumLineHeight); + unsigned _lineSpacing @accessors(property = lineSpacing); +} + ++ (CPParagraphStyle)defaultParagraphStyle +{ + if (!_sharedDefaultParagraphStyle) + _sharedDefaultParagraphStyle = [self new]; + + return _sharedDefaultParagraphStyle; +} + ++ (CPArray)_defaultTabStops +{ + if (!_defaultTabStopArray) + { + var i; + _defaultTabStopArray = []; + + // FIXME: Define constants for these magic numbers: 13, 28 + for (i = 1; i < 16 ; i++) + { + _defaultTabStopArray.push([[CPTextTab alloc] initWithType:CPLeftTabStopType location:i * 28]); + } + } + return _defaultTabStopArray; +} +- (void)addTabStop:(CPTextTab)aStop +{ + _tabStops.push(aStop); +} + +- (void)_initWithDefaults +{ + _alignment = CPLeftTextAlignment; + _tabStops = [[[self class] _defaultTabStops] copy]; +} + +- (id)init +{ + [self _initWithDefaults]; + + return self; +} +- (id)copy +{ + var other = [[self class] alloc]; + return [other initWithParagraphStyle:self]; +} +- initWithParagraphStyle:(CPParagraphStyle) other +{ + other._tabStops = [_tabStops copy]; + other._alignment = _alignment; + other._firstLineHeadIndent = _firstLineHeadIndent; + other._headIndent = _headIndent; + other._tailIndent = _tailIndent; + other._paragraphSpacing = _paragraphSpacing; + other._minimumLineHeight = _minimumLineHeight; + other._maximumLineHeight = _maximumLineHeight; + other._lineSpacing = _lineSpacing; + + return self; +} + +- (id)initWithCoder:(id)aCoder +{ + self = [self init]; + + if (self) + { + _tabStops = [aCoder decodeObjectForKey:"_tabStops"]; + _alignment = [aCoder decodeIntForKey:"_alignment"]; + _firstLineHeadIndent = [aCoder decodeIntForKey:"_firstLineHeadIndent"]; + _headIndent = [aCoder decodeIntForKey:"_headIndent"]; + _tailIndent = [aCoder decodeIntForKey:"_tailIndent"]; + _paragraphSpacing = [aCoder decodeIntForKey:"_paragraphSpacing"]; + _minimumLineHeight = [aCoder decodeIntForKey:"_minimumLineHeight"]; + _maximumLineHeight = [aCoder decodeIntForKey:"_maximumLineHeight"]; + _lineSpacing = [aCoder decodeIntForKey:"_lineSpacing"]; + } + + return self; +} + +- (void)encodeWithCoder:(id)aCoder +{ + [aCoder encodeInt:_alignment forKey:"_alignment"]; + [aCoder encodeObject:_tabStops forKey:"_tabStops"]; + [aCoder encodeInt:_firstLineHeadIndent forKey:"_firstLineHeadIndent"]; + [aCoder encodeInt:_headIndent forKey:"_headIndent"]; + [aCoder encodeInt:_tailIndent forKey:"_tailIndent"]; + [aCoder encodeInt:_paragraphSpacing forKey:"_paragraphSpacing"]; + [aCoder encodeInt:_minimumLineHeight forKey:"_minimumLineHeight"]; + [aCoder encodeInt:_maximumLineHeight forKey:"_maximumLineHeight"]; + [aCoder encodeInt:_lineSpacing forKey:"_lineSpacing"]; +} + +@end diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j new file mode 100755 index 000000000..e5bbc68d5 --- /dev/null +++ b/AppKit/CPTextView/CPTextContainer.j @@ -0,0 +1,209 @@ +/* + * CPTextContainer.j + * AppKit + * + * Created by Emmanuel Maillard on 27/02/2010. + * Copyright Emmanuel Maillard 2010. + * + * 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 "CPLayoutManager.j" + +/* + @global + @group CPLineSweepDirection +*/ +CPLineSweepLeft = 0; +/* + @global + @group CPLineSweepDirection +*/ +CPLineSweepRight = 1; +/* + @global + @group CPLineSweepDirection +*/ +CPLineSweepDown = 2; +/* + @global + @group CPLineSweepDirection +*/ +CPLineSweepUp = 3; + +/* + @global + @group CPLineMovementDirection +*/ +CPLineDoesntMoves = 0; +/* + @global + @group CPLineMovementDirection +*/ +CPLineMovesLeft = 1; +/* + @global + @group CPLineMovementDirection +*/ +CPLineMovesRight = 2; +/* + @global + @group CPLineMovementDirection +*/ +CPLineMovesDown = 3; +/* + @global + @group CPLineMovementDirection +*/ +CPLineMovesUp = 4; + +/*! + @ingroup appkit + @class CPTextContainer +*/ +@implementation CPTextContainer : CPObject +{ + CPSize _size; + CPTextView _textView; + CPLayoutManager _layoutManager; + float _lineFragmentPadding; +} + +- (id)initWithContainerSize:(CPSize)aSize +{ + self = [super init]; + + if (self) + { + _size = aSize; + _lineFragmentPadding = 0.0; + } + + return self; +} + +- (id)init +{ + return [self initWithContainerSize:CPMakeSize(1e7, 1e7)]; +} + +- (CPSize)containerSize +{ + return _size; +} + +- (void)setContainerSize:(CPSize)someSize +{ + var oldSize = _size; + + _size = someSize; + + if (oldSize.width != _size.width) + [_layoutManager invalidateLayoutForCharacterRange:CPMakeRange(0,[[_layoutManager textStorage] length]) + isSoft:NO + actualCharacterRange:NULL]; + +} + +- (void)setWidthTracksTextView:(BOOL)flag +{ + // fixme: Controls whether the receiver adjusts the width of its bounding rectangle when its text view is resized. +} + +- (void)setTextView:(CPTextView)aTextView +{ + if (_textView) + { + [self _removeAllLines]; + [_textView setTextContainer:nil]; + } + + _textView = aTextView; + + if (_textView != nil) + [_textView setTextContainer:self]; + + [_layoutManager textContainerChangedTextView:self]; +} + +- (CPTextView)textView +{ + return _textView; +} + +- (void)setLayoutManager:(CPLayoutManager)aManager +{ + if (_layoutManager === aManager) + return; + + _layoutManager = aManager; +} + +- (CPLayoutManager)layoutManager +{ + return _layoutManager; +} + +- (void)setLineFragmentPadding:(float)aFloat +{ + _lineFragmentPadding = aFloat; +} + +- (float)lineFragmentPadding +{ + return _lineFragmentPadding; +} + +- (BOOL)containsPoint:(CPPoint)aPoint +{ + return CPRectContainsPoint(CPRectMake(0, 0, _size.width, _size.height), aPoint); +} + +- (BOOL)isSimpleRectangularTextContainer +{ + return YES; +} + +- (CPRect)lineFragmentRectForProposedRect:(CPRect)proposedRect + sweepDirection:(CPLineSweepDirection)sweep + movementDirection:(CPLineMovementDirection)movement + remainingRect:(CPRectPointer)remainingRect +{ + var resultRect = CPRectCreateCopy(proposedRect); + + if (sweep != CPLineSweepRight || movement != CPLineMovesDown) + { + CPLog.trace(@"FIXME: unsupported sweep ("+sweep+") or movement ("+movement+")"); + return CPRectMakeZero(); + } + + if (resultRect.origin.x + resultRect.size.width > _size.width) + resultRect.size.width = _size.width - resultRect.origin.x; + + if (resultRect.size.width < 0) + resultRect = CPRectMakeZero(); + + if (remainingRect) + { + remainingRect.origin.x = resultRect.origin.x + resultRect.size.width; + remainingRect.origin.y = resultRect.origin.y; + remainingRect.size.height = resultRect.size.height; + remainingRect.size.width = _size.width - (resultRect.origin.x + resultRect.size.width); + } + + return resultRect; +} + +@end diff --git a/AppKit/CPTextView/CPTextStorage.j b/AppKit/CPTextView/CPTextStorage.j new file mode 100755 index 000000000..bf2fc3855 --- /dev/null +++ b/AppKit/CPTextView/CPTextStorage.j @@ -0,0 +1,295 @@ +/* + * CPTextStorage.j + * AppKit + * + * Created by Emmanuel Maillard on 27/02/2010. + * Copyright Emmanuel Maillard 2010. + * + * 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 "CPLayoutManager.j" + + +CPTextStorageEditedAttributes = 1; +CPTextStorageEditedCharacters = 2; + +CPTextStorageWillProcessEditingNotification = @"CPTextStorageWillProcessEditingNotification"; +CPTextStorageDidProcessEditingNotification = @"CPTextStorageDidProcessEditingNotification"; + +/* + FIXME: move these to CPAttributed string + Make use of attributed keys in AppKit +*/ +CPFontAttributeName = @"CPFontAttributeName"; +CPForegroundColorAttributeName = @"CPForegroundColorAttributeName"; +CPBackgroundColorAttributeName = @"CPBackgroundColorAttributeName"; +CPShadowAttributeName = @"CPShadowAttributeName"; +CPUnderlineStyleAttributeName = @"CPUnderlineStyleAttributeName"; +CPSuperscriptAttributeName = @"CPSuperscriptAttributeName"; +CPBaselineOffsetAttributeName = @"CPBaselineOffsetAttributeName"; +CPAttachmentAttributeName = @"CPAttachmentAttributeName"; +CPLigatureAttributeName = @"CPLigatureAttributeName"; +CPKernAttributeName = @"CPKernAttributeName"; + +/*! + @ingroup appkit + @class CPTextStorage +*/ +@implementation CPTextStorage : CPAttributedString +{ + CPMutableArray _layoutManagers; + id _delegate; + + int _changeInLength; + unsigned _editedMask; + CPRange _editedRange; + int _editCount; // {begin,end}Editing counter + + CPFont _font; + CPColor _foregroundColor; +} + +- (id)initWithString:(CPString)aString attributes:(CPDictionary)attributes +{ + self = [super initWithString:aString attributes:attributes]; + + if (self) + { + _layoutManagers = [[CPMutableArray alloc] init]; + _editedRange = CPMakeRange(CPNotFound, 0); + _changeInLength = 0; + _editedMask = 0; + } + + return self; +} + +- (id)initWithString:(CPString)aString +{ + return [self initWithString:aString attributes:nil]; +} + +- (id)init +{ + return [self initWithString:@"" attributes:nil]; +} + +- (id)delegate +{ + return _delegate; +} + +- (void)setDelegate:(id)aDelegate +{ + if (_delegate === aDelegate) + return; + + var notificationCenter = [CPNotificationCenter defaultCenter]; + + if (_delegate && aDelegate === nil) + { + [notificationCenter removeObserver:_delegate name:CPTextStorageWillProcessEditingNotification object:self]; + [notificationCenter removeObserver:_delegate name:CPTextStorageDidProcessEditingNotification object:self]; + } + + _delegate = aDelegate; + + if (_delegate) + { + if ([_delegate respondsToSelector:@selector(textStorageWillProcessEditing:)]) + [notificationCenter addObserver:_delegate selector:@selector(textStorageWillProcessEditing:) name:CPTextStorageWillProcessEditingNotification object:self]; + + if ([_delegate respondsToSelector:@selector(textStorageDidProcessEditing:)]) + [notificationCenter addObserver:_delegate selector:@selector(textStorageDidProcessEditing:) name:CPTextStorageDidProcessEditingNotification object:self]; + } +} + +- (void)addLayoutManager:(CPLayoutManager)aManager +{ + if (![_layoutManagers containsObject:aManager]) + { + [aManager setTextStorage:self]; + [_layoutManagers addObject:aManager]; + } +} +- (void)removeLayoutManager:(CPLayoutManager)aManager +{ + if ([_layoutManagers containsObject:aManager]) + { + [aManager setTextStorage:nil]; + [_layoutManagers removeObject:aManager]; + } +} + +- (CPArray)layoutManagers +{ + return _layoutManagers; +} + +- (CPRange)editedRange +{ + return _editedRange; +} + +- (int)changeInLength +{ + return _changeInLength; +} + +- (unsigned)editedMask +{ + return _editedMask; +} + +- (void)invalidateAttributesInRange:(CPRange)aRange +{ + /* FIXME: stub */ +} + +- (void)processEditing +{ + [[CPNotificationCenter defaultCenter] postNotificationName:CPTextStorageWillProcessEditingNotification + object:self]; + + [self invalidateAttributesInRange:[self editedRange]]; + + [[CPNotificationCenter defaultCenter] postNotificationName:CPTextStorageDidProcessEditingNotification + object:self]; + + var c = [_layoutManagers count]; + + for (var i = 0; i < c; i++) + { + [[_layoutManagers objectAtIndex:i] textStorage:self + edited:_editedMask + range:_editedRange + changeInLength:_changeInLength + invalidatedRange:_editedRange]; + } + + _editedRange.location = CPNotFound; + _editedMask = 0; + _changeInLength = 0; +} + +- (void)beginEditing +{ + if (_editCount == 0) + _editedRange = CPMakeRange(CPNotFound, 0); + + _editCount++; +} + +- (void)endEditing +{ + _editCount--; + + if (_editCount == 0) + [self processEditing]; +} + +- (void)edited:(unsigned)editedMask range:(CPRange)aRange changeInLength:(int)lengthChange +{ + if (_editCount == 0) /* used outside a beginEditing/endEditing */ + { + _editedMask = editedMask; + _changeInLength = lengthChange; + aRange.length += lengthChange; + _editedRange = aRange; + [self processEditing]; + } + else + { + _editedMask |= editedMask; + _changeInLength += lengthChange; + aRange.length += lengthChange; + + if (_editedRange.location == CPNotFound) + _editedRange = aRange; + else + _editedRange = CPUnionRange(_editedRange,aRange); + } +} + +- (void)removeAttribute:(id)anAttribute range:(CPRange)aRange +{ + [self beginEditing]; + [super removeAttribute:anAttribute range:aRange]; + [self edited:CPTextStorageEditedAttributes range:aRange changeInLength:0]; + [self endEditing]; +} + +- (void)addAttributes:(CPDictionary)aDictionary range:(CPRange)aRange +{ + [self beginEditing]; + [super addAttributes:aDictionary range:aRange]; + [self edited:CPTextStorageEditedAttributes range:aRange changeInLength:0]; + [self endEditing]; +} + +- (void)deleteCharactersInRange:(CPRange)aRange +{ + [self beginEditing]; + [super deleteCharactersInRange:aRange]; + [self edited:CPTextStorageEditedCharacters range:aRange changeInLength:-aRange.length]; + [self endEditing]; +} + +- (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString +{ + [self beginEditing]; + [super replaceCharactersInRange: aRange withString: aString]; + [self edited: CPTextStorageEditedCharacters range:aRange changeInLength:([aString length] - aRange.length)]; + [self endEditing]; +} + +- (void)replaceCharactersInRange:(CPRange)aRange withAttributedString:(CPAttributedString)aString +{ + [self beginEditing]; + [super replaceCharactersInRange: aRange withAttributedString:aString]; + [self edited:(CPTextStorageEditedAttributes | CPTextStorageEditedCharacters) range:aRange changeInLength:([aString length] - aRange.length)]; + [self endEditing]; +} + +- (void)setFont:(CPFont)aFont +{ + _font = aFont; +} + +- (CPFont)font +{ + return _font; +} + +- (void)setForegroundColor:(CPColor)color +{ + _foregroundColor = color; +} + +- (CPColor)foregroundColor +{ + return _foregroundColor; +} + +- (CPAttributedString)attributedSubstringFromRange:(CPRange)aRange +{ + if (!aRange.length) + return [CPAttributedString new]; + return [super attributedSubstringFromRange:aRange]; +} +@end diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j new file mode 100755 index 000000000..226526f77 --- /dev/null +++ b/AppKit/CPTextView/CPTextView.j @@ -0,0 +1,1709 @@ +/* + * CPTextView.j + * AppKit + * + * Created by Daniel Boehringer on 27/12/2013. + * All modifications copyright Daniel Boehringer 2013. + * Based on original work by + * Created by Emmanuel Maillard on 27/02/2010. + * Copyright Emmanuel Maillard 2010. + * + * 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 "CPText.j" +@import "CPParagraphStyle.j" +@import "CPTextStorage.j" +@import "CPTextContainer.j" +@import "CPLayoutManager.j" +@import "CPFontManager.j" + +_MakeRangeFromAbs = function(a1, a2) +{ + return (a1 < a2) ? CPMakeRange(a1, a2 - a1) : CPMakeRange(a2, a1 - a2); +}; +_MidRange = function(a1) +{ + return Math.floor((CPMaxRange(a1) + a1.location) / 2); +}; + + +// FIXME: move to theme ? +@implementation CPColor(CPTextViewExtensions) + ++ (CPColor)selectedTextBackgroundColor +{ + return [CPColor colorWithHexString:"99CCFF"]; +} ++ (CPColor)selectedTextBackgroundColorUnfocussed +{ + return [CPColor colorWithHexString:"CCCCCC"]; +} + +@end + +/* + CPTextView Notifications +*/ +CPTextViewDidChangeSelectionNotification = @"CPTextViewDidChangeSelectionNotification"; +CPTextViewDidChangeTypingAttributesNotification = @"CPTextViewDidChangeTypingAttributesNotification"; + +/* + CPSelectionGranularity +*/ +CPSelectByCharacter = 0; +CPSelectByWord = 1; +CPSelectByParagraph = 2; + + +var kDelegateRespondsTo_textShouldBeginEditing = 0x0001, + kDelegateRespondsTo_textView_doCommandBySelector = 0x0002, + kDelegateRespondsTo_textView_willChangeSelectionFromCharacterRange_toCharacterRange = 0x0004, + kDelegateRespondsTo_textView_shouldChangeTextInRange_replacementString = 0x0008, + kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes = 0x0010; + +/*! + @ingroup appkit + @class CPTextView +*/ +@implementation CPTextView : CPText +{ + CPTextStorage _textStorage; + CPTextContainer _textContainer; + CPLayoutManager _layoutManager; + id _delegate; + + unsigned _delegateRespondsToSelectorMask; + + CPSize _textContainerInset; + CPPoint _textContainerOrigin; + + int _startTrackingLocation; + CPRange _selectionRange; + CPDictionary _selectedTextAttributes; + int _selectionGranularity; + + CPColor _insertionPointColor; + + CPDictionary _typingAttributes; + + BOOL _isFirstResponder; + + BOOL _drawCaret; + CPTimer _caretTimer; + CPTimer _scollingTimer; + CPRect _caretRect; + + CPFont _font; + CPColor _textColor; + + CPSize _minSize; + CPSize _maxSize; + + BOOL _scrollingDownward; + + /* use bit mask ? */ + BOOL _isRichText; + BOOL _usesFontPanel; + BOOL _allowsUndo; + BOOL _isHorizontallyResizable; + BOOL _isVerticallyResizable; + BOOL _isEditable; + BOOL _isSelectable; + + var _caretDOM; + int _stickyXLocation; +} + +- (id)initWithFrame:(CPRect)aFrame textContainer:(CPTextContainer)aContainer +{ + self = [super initWithFrame:aFrame]; + + if (self) + { + _DOMElement.style.cursor = "text"; + _textContainerInset = CPSizeMake(2,0); + _textContainerOrigin = CPPointMake(_bounds.origin.x, _bounds.origin.y); + [aContainer setTextView:self]; + _isEditable = YES; + _isSelectable = YES; + + _isFirstResponder = NO; + _delegate = nil; + _delegateRespondsToSelectorMask = 0; + _selectionRange = CPMakeRange(0, 0); + + _selectionGranularity = CPSelectByCharacter; + _selectedTextAttributes = [CPDictionary dictionaryWithObject:[CPColor selectedTextBackgroundColor] + forKey:CPBackgroundColorAttributeName]; + + _insertionPointColor = [CPColor blackColor]; + _textColor = [CPColor blackColor]; + _font = [CPFont systemFontOfSize:12.0]; + [self setFont: _font]; + + _typingAttributes = [[CPDictionary alloc] initWithObjects:[_font, _textColor] forKeys:[CPFontAttributeName, CPForegroundColorAttributeName]]; + + _minSize = CPSizeCreateCopy(aFrame.size); + _maxSize = CPSizeMake(aFrame.size.width, 1e7); + + _isRichText = YES; + _usesFontPanel = YES; + _allowsUndo = YES; + _isVerticallyResizable = YES; + _isHorizontallyResizable = NO; + + _caretRect = CPRectMake(0,0,1,11); + } + + [self registerForDraggedTypes:[CPColorDragType]]; + + return self; +} + +- (BOOL)_isFocused +{ + return [[self window] isKeyWindow] && _isFirstResponder; +} +- (void)becomeKeyWindow +{ + [self setNeedsDisplay:YES]; +} + +/*! + @ignore +*/ +- (void)resignKeyWindow +{ + [self setNeedsDisplay:YES]; +} + +- (void)undo:(id)sender +{ + if (_allowsUndo) + [[[self window] undoManager] undo]; +} + +- (void)redo:(id)sender +{ + if (_allowsUndo) + [[[self window] undoManager] redo]; +} + +- (id)initWithFrame:(CPRect)aFrame +{ + var layoutManager = [[CPLayoutManager alloc] init], + textStorage = [[CPTextStorage alloc] init], + container = [[CPTextContainer alloc] initWithContainerSize:CPSizeMake(aFrame.size.width, 1e7)]; + + [textStorage addLayoutManager:layoutManager]; + [layoutManager addTextContainer:container]; + + return [self initWithFrame:aFrame textContainer:container]; +} + +- (void)setDelegate:(id)aDelegate +{ + _delegateRespondsToSelectorMask = 0; + + if (_delegate) + [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:nil object:self]; + + _delegate = aDelegate; + + if (_delegate) + { + if ([_delegate respondsToSelector:@selector(textDidChange:)]) + [[CPNotificationCenter defaultCenter] addObserver:_delegate selector:@selector(textDidChange:) name:CPTextDidChangeNotification object:self]; + + if ([_delegate respondsToSelector:@selector(textViewDidChangeSelection:)]) + [[CPNotificationCenter defaultCenter] addObserver:_delegate selector:@selector(textViewDidChangeSelection:) name:CPTextViewDidChangeSelectionNotification object:self]; + + if ([_delegate respondsToSelector:@selector(textViewDidChangeTypingAttributes:)]) + [[CPNotificationCenter defaultCenter] addObserver:_delegate selector:@selector(textViewDidChangeTypingAttributes:) name:CPTextViewDidChangeTypingAttributesNotification object:self]; + + if ([_delegate respondsToSelector:@selector(textView:doCommandBySelector:)]) + _delegateRespondsToSelectorMask |= kDelegateRespondsTo_textView_doCommandBySelector; + + if ([_delegate respondsToSelector:@selector(textShouldBeginEditing:)]) + _delegateRespondsToSelectorMask |= kDelegateRespondsTo_textShouldBeginEditing; + + if ([_delegate respondsToSelector:@selector(textView:willChangeSelectionFromCharacterRange:toCharacterRange:)]) + _delegateRespondsToSelectorMask |= kDelegateRespondsTo_textView_willChangeSelectionFromCharacterRange_toCharacterRange; + + if ([_delegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementString:)]) + _delegateRespondsToSelectorMask |= kDelegateRespondsTo_textView_shouldChangeTextInRange_replacementString; + + if ([_delegate respondsToSelector:@selector(textView:shouldChangeTypingAttributes:toAttributes:)]) + _delegateRespondsToSelectorMask |= kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes; + } +} + +- (CPString)string +{ + return [_textStorage string]; +} + +- (void)setString:(CPString)aString +{ + [_textStorage replaceCharactersInRange: CPMakeRange(0, [_layoutManager numberOfCharacters]) withString:aString]; + [self didChangeText]; + [_layoutManager _validateLayoutAndGlyphs]; + [self sizeToFit]; + [self setNeedsDisplay:YES]; +} + +// KVO support +- (void)setValue:(CPString)aValue +{ + [self setString:[aValue description]] +} + +- (id)value +{ + [self string] +} + +- (void)setTextContainer:(CPTextContainer)aContainer +{ + _textContainer = aContainer; + _layoutManager = [_textContainer layoutManager]; + _textStorage = [_layoutManager textStorage]; + [_textStorage setFont:_font]; + [_textStorage setForegroundColor:_textColor]; + + [self invalidateTextContainerOrigin]; +} + +- (CPTextStorage)textStorage +{ + return _textStorage; +} + +- (CPTextContainer)textContainer +{ + return _textContainer; +} + +- (CPLayoutManager)layoutManager +{ + return _layoutManager; +} + +- (void)setTextContainerInset:(CPSize)aSize +{ + _textContainerInset = aSize; + [self invalidateTextContainerOrigin]; +} + +- (CPSize)textContainerInset +{ + return _textContainerInset; +} + +- (CPPoint)textContainerOrigin +{ + return _textContainerOrigin; +} + +- (void)invalidateTextContainerOrigin +{ + _textContainerOrigin.x = _bounds.origin.x; + _textContainerOrigin.x += _textContainerInset.width; + + _textContainerOrigin.y = _bounds.origin.y; + _textContainerOrigin.y += _textContainerInset.height; +} + +- (BOOL)isEditable +{ + return _isEditable; +} + +- (void)setEditable:(BOOL)flag +{ + _isEditable = flag; + if (flag) + _isSelectable = flag; +} + +- (BOOL)isSelectable +{ + return _isSelectable; +} + +- (void)setSelectable:(BOOL)flag +{ + _isSelectable = flag; + if (flag) + _isEditable = flag; +} + +- (void)doCommandBySelector:(SEL)aSelector +{ + var done = NO; + + if (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_doCommandBySelector) + done = [_delegate textView:self doCommandBySelector:aSelector]; + + if (!done) + [super doCommandBySelector:aSelector]; +} + +- (void)didChangeText +{ + [[CPNotificationCenter defaultCenter] postNotificationName: CPTextDidChangeNotification object:self]; +} + +- (BOOL)shouldChangeTextInRange:(CPRange)aRange replacementString:(CPString)aString +{ + if (!_isEditable) + return NO; + + var shouldChange = YES; + + if (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textShouldBeginEditing) + shouldChange = [_delegate textShouldBeginEditing:self]; + + if (shouldChange && (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_shouldChangeTextInRange_replacementString)) + shouldChange = [_delegate textView:self shouldChangeTextInRange:aRange replacementString:aString]; + + return shouldChange; +} + +- (void)_replaceCharactersInRange:aRange withAttributedString: aString +{ + [_textStorage replaceCharactersInRange:aRange withAttributedString:aString]; + [self setSelectedRange:CPMakeRange(aRange.location, [aString length])]; + [_layoutManager _validateLayoutAndGlyphs]; + [self sizeToFit]; + [self scrollRangeToVisible:_selectionRange]; + [self setNeedsDisplay:YES]; + +} +- (void)_replaceCharactersInRange: aRange withString: aString +{ + [_textStorage replaceCharactersInRange:CPMakeRangeCopy(aRange) withString:aString]; + [self setSelectedRange:CPMakeRange(aRange.location, aString.length)]; + [_layoutManager _validateLayoutAndGlyphs]; + [self sizeToFit]; + [self scrollRangeToVisible:_selectionRange]; + [self setNeedsDisplay:YES]; +} + +- (void)insertText:(id)aString +{ + var isAttributed = [aString isKindOfClass:CPAttributedString], + string = (isAttributed)?[aString string]:aString; + + if (![self shouldChangeTextInRange:CPMakeRangeCopy(_selectionRange) replacementString:string]) + return; + + + if (isAttributed) + { + [[[[self window] undoManager] prepareWithInvocationTarget: self] + _replaceCharactersInRange:CPMakeRange(_selectionRange.location, [aString length]) + withAttributedString:[_textStorage attributedSubstringFromRange:CPMakeRangeCopy(_selectionRange)]]; + [[[self window] undoManager] setActionName:@"Replace rich text"]; + + [_textStorage replaceCharactersInRange: CPMakeRangeCopy(_selectionRange) withAttributedString:aString]; + } + else + { + [[[self window] undoManager] setActionName:@"Replace plain text"]; + if (_isRichText) + { + aString = [[CPAttributedString alloc] initWithString:aString attributes:_typingAttributes]; + [[[[self window] undoManager] prepareWithInvocationTarget:self] + _replaceCharactersInRange:CPMakeRange(_selectionRange.location, [aString length]) + withAttributedString: [_textStorage attributedSubstringFromRange:CPMakeRangeCopy(_selectionRange)]]; + [_textStorage replaceCharactersInRange: CPMakeRangeCopy(_selectionRange) withAttributedString:aString]; + } + else + { + [[[[self window] undoManager] prepareWithInvocationTarget:self] _replaceCharactersInRange:CPMakeRange(_selectionRange.location, [aString length]) withString:[[self string] substringWithRange:CPMakeRangeCopy(_selectionRange)]]; + [_textStorage replaceCharactersInRange: CPMakeRangeCopy(_selectionRange) withString:aString]; + } + } + + [self setSelectedRange:CPMakeRange(_selectionRange.location + [string length], 0)]; + + [self didChangeText]; + [_layoutManager _validateLayoutAndGlyphs]; + [self sizeToFit]; + [self scrollRangeToVisible:_selectionRange]; + _stickyXLocation = _caretRect.origin.x; +} + +- (void)_blinkCaret:(CPTimer)aTimer +{ + _drawCaret = !_drawCaret; + [self setNeedsDisplayInRect:_caretRect]; +} + +- (void)drawRect:(CPRect)aRect +{ + var ctx = [[CPGraphicsContext currentContext] graphicsPort], + range = [_layoutManager glyphRangeForBoundingRect:aRect inTextContainer:_textContainer]; + + if (_selectionRange.length) + { + var rects = [_layoutManager rectArrayForCharacterRange:_selectionRange + withinSelectedCharacterRange:_selectionRange + inTextContainer:_textContainer + rectCount:nil]; + + CGContextSaveGState(ctx); + var effectiveSelectionColor = [self _isFocused]? [_selectedTextAttributes objectForKey:CPBackgroundColorAttributeName] : [CPColor selectedTextBackgroundColorUnfocussed]; + + CGContextSetFillColor(ctx, effectiveSelectionColor); + + for (var i = 0; i < rects.length; i++) + { + rects[i].origin.x += _textContainerOrigin.x; + rects[i].origin.y += _textContainerOrigin.y; + + CGContextFillRect(ctx, rects[i]); + } + + CGContextRestoreGState(ctx); + } + + if (range.length) + [_layoutManager drawGlyphsForGlyphRange: range atPoint:_textContainerOrigin]; + + if ([self shouldDrawInsertionPoint]) + { + [self updateInsertionPointStateAndRestartTimer:NO]; + [self drawInsertionPointInRect:_caretRect color:_insertionPointColor turnedOn:_drawCaret]; + } + else // FIXME: breaks DOM abstraction, but i did get it working otherwise + if (_caretDOM) + _caretDOM.style.visibility = "hidden"; +} + +- (void)setSelectedRange:(CPRange)range +{ + [self setSelectedRange:range affinity:0 stillSelecting:NO]; + [self setTypingAttributes:[_textStorage attributesAtIndex:MAX(0, range.location -1) effectiveRange:nil]]; +} + +- (void)setSelectedRange:(CPRange)range affinity:(CPSelectionAffinity /* unused */ )affinity stillSelecting:(BOOL)selecting +{ + var maxRange = CPMakeRange(0, [_layoutManager numberOfCharacters]); + range = CPIntersectionRange(maxRange, range); + + if (!selecting && (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_willChangeSelectionFromCharacterRange_toCharacterRange)) + _selectionRange = [_delegate textView:self willChangeSelectionFromCharacterRange:_selectionRange toCharacterRange:range]; + else + { + _selectionRange = CPMakeRangeCopy(range); + _selectionRange = [self selectionRangeForProposedRange:_selectionRange granularity:[self selectionGranularity]]; + } + + if (_selectionRange.length) + [_layoutManager invalidateDisplayForGlyphRange:_selectionRange]; + else + [self setNeedsDisplay:YES]; + + if (!selecting) + { + if (_isFirstResponder) + [self updateInsertionPointStateAndRestartTimer:((_selectionRange.length === 0) && ![_caretTimer isValid])]; + + [[CPNotificationCenter defaultCenter] postNotificationName:CPTextViewDidChangeSelectionNotification object:self]; + + [self setTypingAttributes:[_textStorage attributesAtIndex:MAX(0, range.location -1) effectiveRange:nil]]; + } +} + +- (CPArray)selectedRanges +{ + return [_selectionRange]; +} + +- (void)keyDown:(CPEvent)event +{ + [self interpretKeyEvents:[event]]; +} + +- (void)mouseDown:(CPEvent)event +{ + var fraction = [], + point = [self convertPoint:[event locationInWindow] fromView:nil]; + + /* stop _caretTimer */ + [_caretTimer invalidate]; + _caretTimer = nil; + [self _hideCaret]; + + // convert to container coordinate + point.x -= _textContainerOrigin.x; + point.y -= _textContainerOrigin.y; + + _startTrackingLocation = [_layoutManager glyphIndexForPoint: point inTextContainer:_textContainer fractionOfDistanceThroughGlyph:fraction]; + + if (_startTrackingLocation === CPNotFound) + _startTrackingLocation = [_layoutManager numberOfCharacters]; + + var granularities = [-1, CPSelectByCharacter, CPSelectByWord, CPSelectByParagraph]; + [self setSelectionGranularity:granularities[[event clickCount]]]; + + var setRange = CPMakeRange(_startTrackingLocation, 0); + + if ([event modifierFlags] & CPShiftKeyMask) + { + setRange = _MakeRangeFromAbs(_startTrackingLocation < _MidRange(_selectionRange)? + CPMaxRange(_selectionRange) : _selectionRange.location, + _startTrackingLocation); + + } + [self setSelectedRange:setRange affinity:0 stillSelecting:YES]; +} + +- (void)_clearRange:(var)range +{ + var rects = [_layoutManager rectArrayForCharacterRange:nil withinSelectedCharacterRange:range + inTextContainer:_textContainer + rectCount:nil], + l = rects.length; + + for (var i = 0; i < l ; i++) + { + rects[i].origin.x += _textContainerOrigin.x; + rects[i].origin.y += _textContainerOrigin.y; + [self setNeedsDisplayInRect:rects[i]]; + } +} + +- (void)mouseDragged:(CPEvent)event +{ + var fraction = [], + point = [self convertPoint:[event locationInWindow] fromView:nil]; + + // convert to container coordinate + point.x -= _textContainerOrigin.x; + point.y -= _textContainerOrigin.y; + + var oldRange = [self selectedRange], + index = [_layoutManager glyphIndexForPoint:point + inTextContainer:_textContainer + fractionOfDistanceThroughGlyph:fraction]; + + if (index == CPNotFound) + index = _scrollingDownward ? CPMaxRange(oldRange) : oldRange.location; + + if (index > oldRange.location) + { + [self _clearRange:_MakeRangeFromAbs(oldRange.location,index)]; + _scrollingDownward = YES; + } + + if (index < CPMaxRange(oldRange)) + { + [self _clearRange:_MakeRangeFromAbs(index, CPMaxRange(oldRange))]; + _scrollingDownward = NO; + } + + if (index < _startTrackingLocation) + [self setSelectedRange:CPMakeRange(index, _startTrackingLocation - index) + affinity:0 + stillSelecting:YES]; + else + [self setSelectedRange:CPMakeRange(_startTrackingLocation, index - _startTrackingLocation) + affinity:0 + stillSelecting:YES]; + + [self scrollRangeToVisible:CPMakeRange(index, 0)]; +} + +// handle all the other methods from CPKeyBinding.j + +- (void)mouseUp:(CPEvent)event +{ + /* will post CPTextViewDidChangeSelectionNotification */ + [self setSelectionGranularity:CPSelectByCharacter]; + [self setSelectedRange:[self selectedRange] affinity:0 stillSelecting:NO]; + var point = [_layoutManager locationForGlyphAtIndex: [self selectedRange].location]; + _stickyXLocation= point.x; + _startTrackingLocation = _selectionRange.location; +} + +- (void)moveDown:(id)sender +{ + if (_isSelectable) + { + var fraction = [], + nglyphs= [_layoutManager numberOfCharacters], + sindex = CPMaxRange([self selectedRange]), + rectSource = [_layoutManager boundingRectForGlyphRange:CPMakeRange(sindex, 1) inTextContainer:_textContainer], + rectEnd = nglyphs ? [_layoutManager boundingRectForGlyphRange:CPMakeRange(nglyphs - 1, 1) inTextContainer:_textContainer] : rectSource, + point = rectSource.origin; + + if (point.y >= rectEnd.origin.y) + return; + + if (_stickyXLocation) + point.x = _stickyXLocation; + + // FIXME: Define constants for this magic number + point.y += 2 + rectSource.size.height; + point.x += 2; + + var dindex= [_layoutManager glyphIndexForPoint: point inTextContainer:_textContainer fractionOfDistanceThroughGlyph:fraction], + oldStickyLoc = _stickyXLocation; + [self _establishSelection:CPMakeRange(dindex,0) byExtending:NO]; + _stickyXLocation = oldStickyLoc; + [self scrollRangeToVisible: CPMakeRange(dindex, 0)] + } +} +- (void)moveDownAndModifySelection:(id)sender +{ + if (_isSelectable) + { + var oldStartTrackingLocation = _startTrackingLocation; + [self _performSelectionFixupForRange:CPMakeRange(_selectionRange.location < _startTrackingLocation? _selectionRange.location : CPMaxRange(_selectionRange), 0)]; + [self moveDown:sender]; + _startTrackingLocation = oldStartTrackingLocation; + [self _performSelectionFixupForRange:_MakeRangeFromAbs(_startTrackingLocation, (_selectionRange.location < _startTrackingLocation? _selectionRange.location : CPMaxRange(_selectionRange)))]; + } +} + +- (void)moveUp:(id)sender +{ + if (_isSelectable) + { + var fraction = [], + sindex = [self selectedRange].location, + rectSource = [_layoutManager boundingRectForGlyphRange:CPMakeRange(sindex, 1) inTextContainer:_textContainer], + point = rectSource.origin; + + if (point.y <= 0) + return; + + if (_stickyXLocation) + point.x = _stickyXLocation; + + point.y -= 2; // FIXME these should not be constants + point.x += 2; + + var dindex= [_layoutManager glyphIndexForPoint:point inTextContainer:_textContainer fractionOfDistanceThroughGlyph:fraction], + oldStickyLoc = _stickyXLocation; + [self _establishSelection:CPMakeRange(dindex,0) byExtending:NO]; + _stickyXLocation = oldStickyLoc; + [self scrollRangeToVisible: CPMakeRange(dindex, 0)] + } +} +- (void)moveUpAndModifySelection:(id)sender +{ + if (_isSelectable) + { + var oldStartTrackingLocation = _startTrackingLocation; + [self _performSelectionFixupForRange:CPMakeRange(_selectionRange.location < _startTrackingLocation? _selectionRange.location : CPMaxRange(_selectionRange), 0)]; + [self moveUp:sender]; + _startTrackingLocation = oldStartTrackingLocation; + [self _performSelectionFixupForRange:_MakeRangeFromAbs(_startTrackingLocation, (_selectionRange.location < _startTrackingLocation? _selectionRange.location : CPMaxRange(_selectionRange)))]; + } +} +- (void)_performSelectionFixupForRange:(CPRange)aSel +{ + aSel.location = MAX(0, aSel.location); + if (CPMaxRange(aSel) > [_layoutManager numberOfCharacters]) + aSel = CPMakeRange([_layoutManager numberOfCharacters], 0); + [self setSelectedRange:aSel]; + var point = [_layoutManager locationForGlyphAtIndex:aSel.location]; + _stickyXLocation = point.x; +} + +- (void)_establishSelection:(CPSelection)aSel byExtending:(BOOL)flag +{ + if (flag) + { + aSel = CPUnionRange(aSel, _selectionRange); + } + + [self _performSelectionFixupForRange:aSel]; + _startTrackingLocation = _selectionRange.location; +} +- (unsigned) _calculateMoveSelectionFromRange:(CPRange)aRange intoDirection:(integer)move granularity:(CPSelectionGranularity)granularity +{ + var inWord = ![self _isCharacterAtIndex:(move > 0 ? CPMaxRange(aRange) : aRange.location) + move granularity:granularity], + aSel = [self selectionRangeForProposedRange:CPMakeRange((move > 0 ? CPMaxRange(aRange) : aRange.location) + move, 0) granularity:granularity], + bSel = [self selectionRangeForProposedRange:CPMakeRange((move > 0 ? CPMaxRange(aSel) : aSel.location) + move, 0) granularity:granularity]; + return move > 0 ? CPMaxRange(inWord? aSel:bSel) : (inWord? aSel:bSel).location; +} + +- (void) _moveSelectionIntoDirection:(integer)move granularity:(CPSelectionGranularity)granularity +{ + var pos = [self _calculateMoveSelectionFromRange:_selectionRange intoDirection:move granularity:granularity]; + [self _performSelectionFixupForRange:CPMakeRange(pos, 0)]; + _startTrackingLocation = _selectionRange.location; +} + +- (void) _extendSelectionIntoDirection:(integer)move granularity:(CPSelectionGranularity)granularity +{ + var aSel = CPMakeRangeCopy(_selectionRange); + + if (granularity !== CPSelectByCharacter) + { var pos = [self _calculateMoveSelectionFromRange:CPMakeRange(aSel.location < _startTrackingLocation? aSel.location : CPMaxRange(aSel), 0) + intoDirection:move granularity:granularity]; + aSel = CPMakeRange(pos, 0); + } + else + aSel = CPMakeRange((aSel.location < _startTrackingLocation? aSel.location : CPMaxRange(aSel)) + move, 0); + + aSel = _MakeRangeFromAbs(_startTrackingLocation, aSel.location); + [self _performSelectionFixupForRange:aSel]; +} + +- (void)moveLeftAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _extendSelectionIntoDirection: -1 granularity:CPSelectByCharacter]; + } +} +- (void)moveBackward:(id)sender +{ + [self moveLeft:sender]; +} + +- (void)moveBackwardAndModifySelection:(id)sender +{ + [self moveLeftAndModifySelection:sender]; +} + +- (void)moveRightAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _extendSelectionIntoDirection: +1 granularity:CPSelectByCharacter]; + } +} +- (void)moveLeft:(id)sender +{ + if (_isSelectable) + { + [self _establishSelection:CPMakeRange(_selectionRange.location - 1, 0) byExtending:NO]; + } +} + +- (void)moveToEndOfParagraph:(id)sender +{ + if (_isSelectable) + { + var parRange = [self _characterRangeForUnitAtIndex:_selectionRange.location + inString:[self stringValue] + asDefinedByCharArray:['\n'] skip:YES]; + + [self _establishSelection:CPMakeRange(CPMaxRange(parRange), 0) byExtending:NO]; + } +} +- (void) moveToEndOfParagraphAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _extendSelectionIntoDirection: +1 granularity:CPSelectByParagraph]; + } +} +- (void) moveParagraphForwardAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _extendSelectionIntoDirection: +1 granularity:CPSelectByParagraph]; + } +} +- (void) moveParagraphForward:(id)sender +{ + if (_isSelectable) + { + [self _moveSelectionIntoDirection: +1 granularity:CPSelectByParagraph] + } +} +- (void) moveWordBackwardAndModifySelection:(id)sender +{ + [self moveWordLeftAndModifySelection:sender]; +} +- (void) moveWordBackward:(id)sender +{ + [self moveWordLeft:sender]; +} +- (void) moveWordForwardAndModifySelection:(id)sender +{ + [self moveWordRightAndModifySelection:sender]; +} +- (void) moveWordForward:(id)sender +{ + [self moveWordRight:sender]; +} + +- (void) moveToBeginningOfDocument:(id)sender +{ + if (_isSelectable) + { + [self _establishSelection:CPMakeRange(0, 0) byExtending:NO]; + } +} +- (void) moveToBeginningOfDocumentAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _establishSelection:CPMakeRange(0, 0) byExtending:YES]; + } +} +- (void) moveToEndOfDocument:(id)sender +{ + if (_isSelectable) + { + [self _establishSelection:CPMakeRange([_layoutManager numberOfCharacters], 0) byExtending:NO]; + } +} +- (void) moveToEndOfDocumentAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _establishSelection:CPMakeRange([_layoutManager numberOfCharacters], 0) byExtending:YES]; + } +} + +- (void) moveWordRight:(id)sender +{ + if (_isSelectable) + { + [self _moveSelectionIntoDirection: +1 granularity:CPSelectByWord] + } +} + +// FIXME +- (void)moveToBeginningOfParagraph:(id)sender +{ + if (_isSelectable) + { + var parRange = [self _characterRangeForUnitAtIndex:_selectionRange.location + inString:[self stringValue] + asDefinedByCharArray: ['\n'] skip:YES]; + + [self _establishSelection:CPMakeRange(parRange.location, 0) byExtending:NO]; + } +} +- (void) moveToBeginningOfParagraphAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _extendSelectionIntoDirection: -1 granularity:CPSelectByParagraph]; + } +} +- (void) moveParagraphBackward:(id)sender +{ + if (_isSelectable) + { + [self _moveSelectionIntoDirection: -1 granularity:CPSelectByParagraph] + } +} +- (void) moveParagraphBackwardAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _extendSelectionIntoDirection: -1 granularity:CPSelectByParagraph]; + } +} +- (void) moveWordRightAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _extendSelectionIntoDirection: +1 granularity:CPSelectByWord]; + + } +} + +- (void) deleteToEndOfParagraph:(id)sender +{ + if (_isSelectable && _isEditable) + { + [self moveToEndOfParagraphAndModifySelection:self]; + [self delete:self]; + } +} + +- (void) deleteToBeginningOfParagraph:(id)sender +{ + if (_isSelectable && _isEditable) + { + [self moveToBeginningOfParagraphAndModifySelection:self]; + [self delete:self]; + } +} +- (void) deleteToBeginningOfLine:(id)sender +{ + if (_isSelectable && _isEditable) + { + [self moveToLeftEndOfLineAndModifySelection:self]; + [self delete:self]; + } +} +- (void) deleteToEndOfLine:(id)sender +{ + if (_isSelectable && _isEditable) + { + [self moveToRightEndOfLineAndModifySelection:self]; + [self delete:self]; + } +} +- (void) deleteWordBackward:(id)sender +{ + if (_isSelectable && _isEditable) + { + [self moveWordLeftAndModifySelection:self]; + [self delete:self]; + } +} +- (void) deleteWordForward:(id)sender +{ + if (_isSelectable && _isEditable) + { + [self moveWordRightAndModifySelection:self]; + [self delete:self]; + } +} +- (void) moveToLeftEndOfLine:(id)sender +{ + if (_isSelectable) + { + var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; + if (fragment) + [self _establishSelection:CPMakeRange(fragment._range.location, 0) byExtending:NO]; + } +} +- (void) moveToLeftEndOfLineAndModifySelection:(id)sender +{ + if (_isSelectable) + { + var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; + if (fragment) + [self _establishSelection:CPMakeRange(fragment._range.location, 0) byExtending:YES]; + } +} +- (void) moveToRightEndOfLine:(id)sender +{ + if (_isSelectable) + { + var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; + if (fragment) + [self _establishSelection:CPMakeRange(CPMaxRange(fragment._range), 0) byExtending:NO]; + } +} +- (void) moveToRightEndOfLineAndModifySelection:(id)sender +{ + if (_isSelectable) + { + var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; + if (fragment) + [self _establishSelection:CPMakeRange(CPMaxRange(fragment._range), 0) byExtending:YES]; + } +} + +- (void) moveWordLeftAndModifySelection:(id)sender +{ + if (_isSelectable) + { + [self _extendSelectionIntoDirection: -1 granularity:CPSelectByWord]; + } +} +- (void) moveWordLeft:(id)sender +{ + if (_isSelectable) + { + [self _moveSelectionIntoDirection: -1 granularity:CPSelectByWord] + } +} + +- (void)moveRight:(id)sender +{ + if (_isSelectable) + { + [self _establishSelection:CPMakeRange(CPMaxRange(_selectionRange) + 1, 0) byExtending:NO]; + } +} + +- (void)selectAll:(id)sender +{ + if (_isSelectable) + { + if (_caretTimer) + { + [_caretTimer invalidate]; + _caretTimer = nil; + } + + [self setSelectedRange:CPMakeRange(0, [_layoutManager numberOfCharacters])]; + } +} + +- (void)_deleteForRange:(CPRange) changedRange +{ + if (![self shouldChangeTextInRange:changedRange replacementString:@""]) + return; + + [[[[self window] undoManager] prepareWithInvocationTarget:self] _replaceCharactersInRange:CPMakeRange(_selectionRange.location, 0) withAttributedString:[_textStorage attributedSubstringFromRange:CPMakeRangeCopy(changedRange)]]; + [_textStorage deleteCharactersInRange: CPMakeRangeCopy(changedRange)]; + + [self setSelectedRange:CPMakeRange(changedRange.location, 0)]; + [self didChangeText]; + [_layoutManager _validateLayoutAndGlyphs]; + [self sizeToFit]; + _stickyXLocation = _caretRect.origin.x; +} + +- (void)deleteBackward:(id)sender +{ + var changedRange; + + if (CPEmptyRange(_selectionRange) && _selectionRange.location > 0) + changedRange = CPMakeRange(_selectionRange.location - 1, 1); + else + changedRange = _selectionRange; + + [self _deleteForRange: changedRange]; +} + +- (void)deleteForward:(id)sender +{ + var changedRange = nil; + + if (CPEmptyRange(_selectionRange) && _selectionRange.location < [_layoutManager numberOfCharacters]) + changedRange = CPMakeRange(_selectionRange.location, 1); + else + changedRange = _selectionRange; + + [self _deleteForRange: changedRange]; +} + +- (void)cut:(id)sender +{ + [self copy:sender]; + [self deleteBackward:sender] +} + +- (void)insertLineBreak:(id)sender +{ + [self insertText:@"\n"]; +} +- (void)insertTab:(id)sender +{ + [self insertText:@"\t"]; +} +- (void)insertTabIgnoringFieldEditor:(id)sender +{ + [self insertTab:sender]; +} + +- (void) insertNewlineIgnoringFieldEditor:(id)sender +{ + [self insertLineBreak:sender]; +} + +- (void) insertNewline:(id)sender +{ + [self insertLineBreak:sender]; +} + +- (BOOL)acceptsFirstResponder +{ + if (_isSelectable) + return YES; + + return NO; +} + +- (BOOL)becomeFirstResponder +{ + _isFirstResponder = YES; + [self updateInsertionPointStateAndRestartTimer:YES]; + [[CPFontManager sharedFontManager] setSelectedFont:[self font] isMultiple:NO]; + [self setNeedsDisplay:YES]; + return YES; +} + +- (BOOL)resignFirstResponder +{ + [_caretTimer invalidate]; + _caretTimer = nil; + _isFirstResponder = NO; + [self setNeedsDisplay:YES]; + return YES; +} + +- (void)setTypingAttributes:(CPDictionary)attributes +{ + if (!attributes) + attributes = [CPDictionary dictionary]; + + if (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes) + _typingAttributes = [_delegate textView:self shouldChangeTypingAttributes:_typingAttributes toAttributes:attributes]; + else + { + _typingAttributes = [attributes copy]; + /* check that new attributes contains essentials one's */ + if (![_typingAttributes containsKey:CPFontAttributeName]) + [_typingAttributes setObject:[self font] forKey:CPFontAttributeName]; + + if (![_typingAttributes containsKey:CPForegroundColorAttributeName]) + [_typingAttributes setObject:[self textColor] forKey:CPForegroundColorAttributeName]; + } + + [[CPNotificationCenter defaultCenter] postNotificationName:CPTextViewDidChangeTypingAttributesNotification + object:self]; +} + +- (CPDictionary)typingAttributes +{ + return _typingAttributes; +} + +- (void)setSelectedTextAttributes:(CPDictionary)attributes +{ + _selectedTextAttributes = attributes; +} + +- (CPDictionary)selectedTextAttributes +{ + return _selectedTextAttributes; +} + +- (void)delete:(id)sender +{ + [self deleteBackward: sender]; +} + +- stringValue +{ + return _textStorage._string; +} + +- objectValue +{ + return [self stringValue]; +} + +- (void)setFont:(CPFont)font +{ + _font = font; + var length = [_layoutManager numberOfCharacters]; + [_textStorage addAttribute:CPFontAttributeName value:_font range:CPMakeRange(0, length)]; + [_textStorage setFont:_font]; + [self scrollRangeToVisible:CPMakeRange(length, 0)]; +} + +- (void)setFont:(CPFont)font range:(CPRange)range +{ + if (!_isRichText) + { + _font = font; + [_textStorage setFont:_font]; + } + + [_textStorage addAttribute:CPFontAttributeName value:font range:CPMakeRangeCopy(range)]; + [_layoutManager _validateLayoutAndGlyphs]; + [self scrollRangeToVisible:CPMakeRange(CPMaxRange(range), 0)]; +} + +- (CPFont)font +{ + return _font; +} + +- (void)changeColor:(id)sender +{ + [self setTextColor:[sender color] range:_selectionRange]; +} + +- (void)changeFont:(id)sender +{ + var currRange = CPMakeRange(_selectionRange.location, 0), + oldFont, + attributes, + scrollRange = CPMakeRange(CPMaxRange(_selectionRange), 0); + + if (_isRichText) + { + if (!CPEmptyRange(_selectionRange)) + { + while (CPMaxRange(currRange) < CPMaxRange(_selectionRange)) // iterate all "runs" + { + attributes = [_textStorage attributesAtIndex:CPMaxRange(currRange) + longestEffectiveRange:currRange + inRange:_selectionRange]; + oldFont = [attributes objectForKey:CPFontAttributeName] || [self font]; + [self setFont:[sender convertFont:oldFont] range: currRange]; + } + } + else + { + [_typingAttributes setObject:[sender selectedFont] forKey:CPFontAttributeName]; + } + } + else + { + oldFont = [self font]; + var length = [_textStorage length]; + [self setFont:[sender convertFont:oldFont] range:CPMakeRange(0,length)]; + scrollRange = CPMakeRange(length, 0); + } + [_layoutManager _validateLayoutAndGlyphs]; + [self sizeToFit]; + [self setNeedsDisplay:YES]; + [self scrollRangeToVisible:scrollRange]; +} + +- (void)underline:(id)sender +{ + if (![self shouldChangeTextInRange:_selectionRange replacementString:nil]) + return; + + if (!CPEmptyRange(_selectionRange)) + { + var attrib = [_textStorage attributesAtIndex:_selectionRange.location effectiveRange:nil]; + if ([attrib containsKey:CPUnderlineStyleAttributeName] && [[attrib objectForKey:CPUnderlineStyleAttributeName] intValue]) + [_textStorage removeAttribute:CPUnderlineStyleAttributeName range:_selectionRange]; + else + [_textStorage addAttribute:CPUnderlineStyleAttributeName value:[CPNumber numberWithInt:1] range:CPMakeRangeCopy(_selectionRange)]; + } + else + { + if ([_typingAttributes containsKey:CPUnderlineStyleAttributeName] && [[_typingAttributes objectForKey:CPUnderlineStyleAttributeName] intValue]) + [_typingAttributes setObject:[CPNumber numberWithInt:0] forKey:CPUnderlineStyleAttributeName]; + else + [_typingAttributes setObject:[CPNumber numberWithInt:1] forKey:CPUnderlineStyleAttributeName]; + } +} + +- (CPSelectionAffinity)selectionAffinity +{ + return 0; +} + +- (void)setUsesFontPanel:(BOOL)flag +{ + _usesFontPanel = flags; +} + +- (BOOL)usesFontPanel +{ + return _usesFontPanel; +} + +- (void)setTextColor:(CPColor)aColor +{ + _textColor = aColor; + + if (_textColor) + [_textStorage addAttribute:CPForegroundColorAttributeName value:_textColor range:CPMakeRange(0, [_layoutManager numberOfCharacters])]; + else + [_textStorage removeAttribute:CPForegroundColorAttributeName range:CPMakeRange(0, [_layoutManager numberOfCharacters])]; + + [_layoutManager _validateLayoutAndGlyphs]; + [self scrollRangeToVisible:CPMakeRange([_layoutManager numberOfCharacters], 0)]; +} + +- (void)setTextColor:(CPColor)aColor range:(CPRange)range +{ + if (!_isRichText) // FIXME + return; + + if (!CPEmptyRange(_selectionRange)) + { + if (aColor) + [_textStorage addAttribute:CPForegroundColorAttributeName value:aColor range:CPMakeRangeCopy(range)]; + else + [_textStorage removeAttribute:CPForegroundColorAttributeName range:CPMakeRangeCopy(range)]; + } + else + { + [_typingAttributes setObject: aColor forKey:CPForegroundColorAttributeName]; + } + [_layoutManager _validateLayoutAndGlyphs]; + [self setNeedsDisplay:YES]; + [self scrollRangeToVisible:CPMakeRange(CPMaxRange(range), 0)]; +} + +- (CPColor)textColor +{ + return _textColor; +} + +- (BOOL)isRichText +{ + return _isRichText; +} + +- (BOOL)isRulerVisible +{ + return NO; +} + +- (BOOL)allowsUndo +{ + return _allowsUndo; +} + +- (CPRange)selectedRange +{ + return _selectionRange; +} + +- (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString +{ + + [_textStorage replaceCharactersInRange: aRange withString:aString]; +} + +- (CPString)string +{ + return [_textStorage string]; +} + +- (BOOL)isHorizontallyResizable +{ + return _isHorizontallyResizable; +} + +- (void)setHorizontallyResizable:(BOOL)flag +{ + _isHorizontallyResizable = flag; +} + +- (BOOL)isVerticallyResizable +{ + return _isVerticallyResizable; +} + +- (void)setVerticallyResizable:(BOOL)flag +{ + _isVerticallyResizable = flag; +} + +- (CPSize)maxSize +{ + return _maxSize; +} + +- (CPSize)minSize +{ + return _minSize; +} + +- (void)setMaxSize:(CPSize)aSize +{ + _maxSize = aSize; +} + +- (void)setMinSize:(CPSize)aSize +{ + _minSize = aSize; +} + +- (void)setConstrainedFrameSize:(CPSize)desiredSize +{ + [self setFrameSize:desiredSize]; +} + +- (void)sizeToFit +{ + [self setFrameSize:[self frameSize]] + +} + +- (void)setFrameSize:(CPSize) aSize +{ + var minSize = [self minSize], + maxSize = [self maxSize], + desiredSize = aSize, + rect = [_layoutManager boundingRectForGlyphRange: CPMakeRange(0, MAX(0, [_layoutManager numberOfCharacters] - 1)) inTextContainer:_textContainer]; + + if ([_layoutManager extraLineFragmentTextContainer] === _textContainer) + rect = CPRectUnion(rect, [_layoutManager extraLineFragmentRect]); + + if (_isHorizontallyResizable) + { + desiredSize.width = rect.size.width + 2 * _textContainerInset.width; + + if (desiredSize.width < minSize.width) + desiredSize.width = minSize.width; + else if (desiredSize.width > maxSize.width) + desiredSize.width = maxSize.width; + } + + if (_isVerticallyResizable) + { + desiredSize.height = rect.size.height + 2 * _textContainerInset.height; + + if (desiredSize.height < minSize.height) + desiredSize.height = minSize.height; + else if (desiredSize.height > maxSize.height) + desiredSize.height = maxSize.height; + } + + [super setFrameSize: desiredSize]; +} + +- (void)scrollRangeToVisible:(CPRange)aRange +{ + var rect; + + if (CPEmptyRange(aRange)) + { + if (aRange.location >= [_layoutManager numberOfCharacters]) + rect = [_layoutManager extraLineFragmentRect]; + else + rect = [_layoutManager lineFragmentRectForGlyphAtIndex:aRange.location effectiveRange:nil]; + } + else + rect = [_layoutManager boundingRectForGlyphRange:aRange inTextContainer:_textContainer]; + + rect.origin.x += _textContainerOrigin.x; + rect.origin.y += _textContainerOrigin.y; + + [self scrollRectToVisible:rect]; +} + +- (BOOL)_isCharacterAtIndex:(unsigned)index granularity:(CPSelectionGranularity)granularity +{ + var characterSet; + + switch (granularity) + { + case CPSelectByWord: + characterSet = [[self class] _wordBoundaryCharacterArray]; + break; + case CPSelectByParagraph: + characterSet = ['\n']; + break; + } + // FIXME if (!characterSet) croak! + return characterSet.join("").indexOf([self string].charAt(index)) !== CPNotFound; +} + +- (CPRange)_characterRangeForUnitAtIndex:(unsigned)index inString:(CPString)string asDefinedByCharArray: characterSet skip:(BOOL)flag +{ + var wordRange = CPMakeRange(0, 0), + lastIndex = CPNotFound, + searchIndex, + setString = characterSet.join(""); + + // do we start on a boundary character? + if (flag && string.charAt(index) && setString.indexOf(string.charAt(index)) !== CPNotFound) + { + // -> extend to the left + wordRange = CPMakeRange(index, 1); + while(setString.indexOf(string.charAt(--index)) !== CPNotFound && index > -1) + { + wordRange = CPMakeRange(index, 1); + + } + // -> extend to the right + for(index = wordRange.location; setString.indexOf(string.charAt(++index)) !== CPNotFound && index < string.length; ) + { + wordRange = _MakeRangeFromAbs(wordRange.location, MIN(string.length - 1, index + 1)); + + } + return wordRange; + } + + for (searchIndex = 0; searchIndex < characterSet.length; searchIndex++) + { + var peek = string.lastIndexOf(characterSet[searchIndex], index); + + if (peek !== CPNotFound) + { + if (lastIndex === CPNotFound) + lastIndex = peek; + else + lastIndex = MAX(lastIndex, peek); + } + } + + if (lastIndex !== CPNotFound) + wordRange.location = lastIndex + 1; + + lastIndex = CPNotFound; + + for (searchIndex = 0 ; searchIndex < characterSet.length; searchIndex++) + { + var peek= string.indexOf(characterSet[searchIndex], index); + + if (peek !== CPNotFound) + { + if (lastIndex === CPNotFound) + lastIndex = peek; + else + lastIndex = MIN(lastIndex, peek); + } + + } + + if (lastIndex != CPNotFound) + wordRange.length = lastIndex - wordRange.location; + else + wordRange.length = string.length - wordRange.location; + + return wordRange; +} + +/* FIXME + just a testing characterSet + all of this depend of the current language. + Need some CPLocale support and maybe even a FSM... + */ ++ (CPArray)_wordBoundaryCharacterArray +{ + return ['\n', ' ', '\t', ',', ';', '.', '!', '?', '\'', '"', '-', ':']; +} + + +- (CPRange)selectionRangeForProposedRange:(CPRange)proposedRange granularity:(CPSelectionGranularity)granularity +{ + var textStorageLength = [_layoutManager numberOfCharacters]; + + if (textStorageLength == 0) + return CPMakeRange(0, 0); + + if (proposedRange.location >= textStorageLength) + return CPMakeRange(textStorageLength, 0); + + if (CPMaxRange(proposedRange) > textStorageLength) + proposedRange.length = textStorageLength - proposedRange.location; + + var string = [_textStorage string]; + + switch (granularity) + { + case CPSelectByWord: + var wordRange = [self _characterRangeForUnitAtIndex:proposedRange.location inString:string asDefinedByCharArray: [[self class] _wordBoundaryCharacterArray] skip:YES]; + + if (proposedRange.length) + wordRange = CPUnionRange(wordRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) inString:string asDefinedByCharArray: [[self class] _wordBoundaryCharacterArray] skip:NO]); + + return wordRange; + + case CPSelectByParagraph: + var parRange = [self _characterRangeForUnitAtIndex: proposedRange.location inString: string asDefinedByCharArray: ['\n'] skip:NO]; + + if (proposedRange.length) + parRange = CPUnionRange(parRange, [self _characterRangeForUnitAtIndex: CPMaxRange(proposedRange) inString: string asDefinedByCharArray: ['\n'] skip:NO]); + + return parRange; + + default: + return proposedRange; + } +} + +- (void)setSelectionGranularity:(CPSelectionGranularity)granularity +{ + _selectionGranularity = granularity; +} + +- (CPSelectionGranularity)selectionGranularity +{ + return _selectionGranularity; +} + +- (CPColor)insertionPointColor +{ + return _insertionPointColor; +} + +- (void)setInsertionPointColor:(CPColor)aColor +{ + _insertionPointColor = aColor; +} + +- (BOOL)shouldDrawInsertionPoint +{ + return (_selectionRange.length === 0 && [self _isFocused]) +} + +- (void)drawInsertionPointInRect:(CPRect)aRect color:(CPColor)aColor turnedOn:(BOOL)flag +{ + var style; + if (!_caretDOM) + { + _caretDOM = document.createElement("span"); + style = _caretDOM.style; + style.position = "absolute"; + style.visibility = "visible"; + style.padding = "0px"; + style.margin = "0px"; + style.whiteSpace = "pre"; + style.backgroundColor = "black"; + _caretDOM.style.width = "1px"; + self._DOMElement.appendChild(_caretDOM); + } + + _caretDOM.style.left = (aRect.origin.x) + "px"; + _caretDOM.style.top = (aRect.origin.y) + "px"; + _caretDOM.style.height = (aRect.size.height) + "px"; + _caretDOM.style.visibility = flag ? "visible" : "hidden"; +} + +- (void)_hideCaret +{ + if (_caretDOM) + _caretDOM.style.visibility = "hidden"; +} + +- (void)updateInsertionPointStateAndRestartTimer:(BOOL)flag +{ + if (_selectionRange.length) + [self _hideCaret]; + + if (_selectionRange.location >= [_layoutManager numberOfCharacters]) // cursor is "behind" the last chacacter + { + _caretRect = [_layoutManager boundingRectForGlyphRange:CPMakeRange(MAX(0,_selectionRange.location - 1), 1) inTextContainer:_textContainer]; + _caretRect.origin.x += _caretRect.size.width; + + if (_selectionRange.location > 0 && [[_textStorage string] characterAtIndex:_selectionRange.location - 1] === '\n') + { + _caretRect.origin.y += _caretRect.size.height; + _caretRect.origin.x = 0; + } + } + else + _caretRect = [_layoutManager boundingRectForGlyphRange: CPMakeRange(_selectionRange.location, 1) inTextContainer:_textContainer]; + + _caretRect.origin.x += _textContainerOrigin.x; + _caretRect.origin.y += _textContainerOrigin.y; + _caretRect.size.width = 1; + + if (flag) + { + _drawCaret = flag; + _caretTimer = [CPTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(_blinkCaret:) userInfo:nil repeats:YES]; + } +} + +- (void)performDragOperation:(CPDraggingInfo)aSender +{ + var location = [self convertPoint:[aSender draggingLocation] fromView:nil], + pasteboard = [aSender draggingPasteboard]; + + if (![pasteboard availableTypeFromArray:[CPColorDragType]]) + return NO; + + [self setTextColor:[CPKeyedUnarchiver unarchiveObjectWithData:[pasteboard dataForType:CPColorDragType]] range: _selectionRange ]; +} + +@end diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j new file mode 100755 index 000000000..a4efc9991 --- /dev/null +++ b/AppKit/CPTextView/CPTypesetter.j @@ -0,0 +1,393 @@ + +/* + * CPTypesetter.j + * AppKit + * + * Created by Daniel Boehringer on 27/12/2013. + * All modifications copyright Daniel Boehringer 2013. + * Based on original work by + * Emmanuel Maillard on 27/02/2010. + * Copyright Emmanuel Maillard 2010. + * + * FIXME: paragraphStyle indent information is currently not properly respected + * + * 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 "CPTextStorage.j" +@import "CPParagraphStyle.j" + +/* + CPTypesetterControlCharacterAction +*/ +CPTypesetterZeroAdvancementAction = (1 << 0); +CPTypesetterWhitespaceAction = (1 << 1); +CPSTypesetterHorizontalTabAction = (1 << 2); +CPTypesetterLineBreakAction = (1 << 3); +CPTypesetterParagraphBreakAction = (1 << 4); +CPTypesetterContainerBreakAction = (1 << 5); + + +var _measuringContext; +var _measuringContextFont; +var _isCanvasSizingInvalid = 0; +var _didTestCanvasSizingValid; +function _widthOfStringForFont(aString, aFont) +{ + if (!_measuringContext) + _measuringContext = CGBitmapGraphicsContextCreate(); + if (!_didTestCanvasSizingValid && CPFeatureIsCompatible(CPHTMLCanvasFeature)) + { + var teststring = "0123456879abcdefghiklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-()"; + _didTestCanvasSizingValid = YES; + _measuringContext.font = [aFont cssString]; + _isCanvasSizingInvalid = [teststring sizeWithFont:aFont].width != _measuringContext.measureText(teststring).width; + } + if (!CPFeatureIsCompatible(CPHTMLCanvasFeature) || _isCanvasSizingInvalid) // measuring with canvas is _much_ faster on chrome + return [aString sizeWithFont:aFont]; + if (_measuringContextFont !== aFont) + { + _measuringContextFont = aFont + _measuringContext.font = [aFont cssString]; + } + return _measuringContext.measureText(aString); +} + +var CPSystemTypesetterFactory = Nil; + +@implementation CPTypesetter : CPObject +{ +} + ++ (id)sharedSystemTypesetter +{ + return [CPSystemTypesetterFactory sharedInstance]; +} + ++ (void)_setSystemTypesetterFactory:(Class)aClass +{ + CPSystemTypesetterFactory = aClass; +} + ++ (void)initialize +{ + [CPTypesetter _setSystemTypesetterFactory:[CPSimpleTypesetter class]]; +} + +- (CPTypesetterControlCharacterAction)actionForControlCharacterAtIndex:(unsigned)charIndex +{ + return CPTypesetterZeroAdvancementAction; +} + +- (CPLayoutManager)layoutManager +{ + return nil; +} + +- (CPTextContainer)currentTextContainer +{ + return nil; +} + +- (CPArray)textContainers +{ + return nil; +} + +- (void)layoutGlyphsInLayoutManager:(CPLayoutManager)layoutManager + startingAtGlyphIndex:(unsigned)startGlyphIndex + maxNumberOfLineFragments:(unsigned)maxNumLines + nextGlyphIndex:(UIntegerPointer)nextGlyph +{ + CPLog.error(@"-[CPTypesetter subclass responsibility"); +} + +@end + +var _sharedSimpleTypesetter = nil; + +@implementation CPSimpleTypesetter:CPTypesetter +{ + CPLayoutManager _layoutManager; + CPTextContainer _currentTextContainer; + CPTextStorage _textStorage; + + CPRange _attributesRange; + CPDictionary _currentAttributes; + CPFont _currentFont; + CPParagraphStyle _currentParagraph; + + float _lineHeight; + float _lineBase; + float _lineWidth; + + unsigned _indexOfCurrentContainer; +} + ++ (id)sharedInstance +{ + if (_sharedSimpleTypesetter === nil) + _sharedSimpleTypesetter = [[CPSimpleTypesetter alloc] init]; + + return _sharedSimpleTypesetter; +} + +- (CPLayoutManager)layoutManager +{ + return _layoutManager; +} + +- (CPTextContainer)currentTextContainer +{ + return _currentTextContainer; +} + +- (CPArray)textContainers +{ + return [_layoutManager textContainers]; +} + +- (CPTextTab)textTabForWidth:(double)aWidth writingDirection:(CPWritingDirection)direction +{ + var tabStops = [_currentParagraph tabStops]; + + if (!tabStops) + tabStops = [CPParagraphStyle _defaultTabStops]; + + var i, + l = tabStops.length; + + if (aWidth > tabStops[l-1]._location) + return nil; + + for (i = l-1; i >= 0; i--) + { + if (aWidth > tabStops[i]._location) + { + if (i + 1 < l) + return tabStops[i + 1]; + } + } + return nil; +} + +- (BOOL)_flushRange:(CPRange)lineRange + lineOrigin:(CPPoint)lineOrigin + currentContainerSize:(CPSize)containerSize + advancements:(CPArray)advancements + lineCount:(unsigned)lineCount +{ + [_layoutManager setTextContainer:_currentTextContainer forGlyphRange:lineRange]; // creates a new lineFragment + var rect = CPRectMake(lineOrigin.x, lineOrigin.y, _lineWidth, _lineHeight); + [_layoutManager setLineFragmentRect: rect forGlyphRange:lineRange usedRect:rect]; + var myX = 0; + + switch ([_currentParagraph alignment]) + { + case CPLeftTextAlignment: + myX = 0; + break; + + case CPCenterTextAlignment: + myX = (containerSize.width - _lineWidth) / 2; + break; + + case CPRightTextAlignment: + myX = containerSize.width - _lineWidth; + break; + } + + [_layoutManager setLocation:CPMakePoint(myX, _lineBase) forStartOfGlyphRange:lineRange]; + [_layoutManager _setAdvancements:advancements forGlyphRange:lineRange]; + + if (!lineCount) + return NO; + + return ([_layoutManager _rescuingInvalidFragmentsWasPossibleForGlyphRange:lineRange]); +} + +- (void)layoutGlyphsInLayoutManager:(CPLayoutManager)layoutManager + startingAtGlyphIndex:(unsigned)glyphIndex + maxNumberOfLineFragments:(unsigned)maxNumLines + nextGlyphIndex:(UIntegerReference)nextGlyph +{ + _layoutManager = layoutManager; + _textStorage = [_layoutManager textStorage]; + _indexOfCurrentContainer = MAX(0, [[_layoutManager textContainers] + indexOfObject:[_layoutManager textContainerForGlyphAtIndex:glyphIndex effectiveRange:nil withoutAdditionalLayout:YES] + inRange:CPMakeRange(0, [[_layoutManager textContainers] count])]); + _currentTextContainer = [[_layoutManager textContainers] objectAtIndex:_indexOfCurrentContainer]; + _attributesRange = CPMakeRange(0, 0); + _lineHeight = 0; + _lineBase = 0; + _lineWidth = 0; + + var containerSize = [_currentTextContainer containerSize], + lineRange = CPMakeRange(glyphIndex, 0), + wrapRange = CPMakeRange(0, 0), + wrapWidth = 0, + isNewline = NO, + isTabStop = NO, + isWordWrapped = NO, + numberOfGlyphs= [_textStorage length], + leading; + + var numLines = 0, + theString = [_textStorage string], + lineOrigin, + ascent, descent; + + var advancements = [], + prevRangeWidth = 0, + measuringRange = CPMakeRange(glyphIndex, 0), + currentAnchor = 0, + _previousFont = nil; + + if (glyphIndex > 0) + lineOrigin = CPPointCreateCopy([_layoutManager lineFragmentRectForGlyphAtIndex:glyphIndex effectiveRange:nil].origin); + else if ([_layoutManager extraLineFragmentTextContainer]) + lineOrigin = CPPointMake(0, [_layoutManager extraLineFragmentUsedRect].origin.y); + else + lineOrigin = CPPointMake(0, 0); + + [_layoutManager _removeInvalidLineFragments]; + + if (![_textStorage length]) + return; + + for (; numLines != maxNumLines && glyphIndex < numberOfGlyphs; glyphIndex++) + { + if (!CPLocationInRange(glyphIndex, _attributesRange)) + { + _currentAttributes = [_textStorage attributesAtIndex:glyphIndex effectiveRange:_attributesRange]; + _currentFont = [_currentAttributes objectForKey:CPFontAttributeName]; + _currentParagraph = [_currentAttributes objectForKey:CPParagraphStyleAttributeName] || [CPParagraphStyle defaultParagraphStyle]; + + if (!_currentFont) + _currentFont = [_textStorage font]; + + ascent = ["x" sizeWithFont:_currentFont].height; //FIXME + descent = 0; //FIXME + leading = (ascent - descent) * 0.2; // FAKE leading + } + + if (_previousFont !== _currentFont) + { + measuringRange = CPMakeRange(glyphIndex, 0); + currentAnchor = prevRangeWidth; + _previousFont = _currentFont; + } + + lineRange.length++; + measuringRange.length++; + + var currentChar = theString[glyphIndex], // use pure javascript methods for performance reasons + rangeWidth = _widthOfStringForFont(theString.substr(measuringRange.location, measuringRange.length), _currentFont).width + currentAnchor; + + switch (currentChar) // faster than sending actionForControlCharacterAtIndex: called for each char. + { + case '\n': + isNewline = YES; + break; + case '\t': + { + isTabStop = YES; + var nextTab = [self textTabForWidth:rangeWidth + lineOrigin.x writingDirection:0]; + if (nextTab) + { + rangeWidth = nextTab._location - lineOrigin.x; + } + else + rangeWidth += 28; //FIXME + } // fallthrough intentional + case ' ': + wrapRange = CPMakeRangeCopy(lineRange); + wrapWidth = rangeWidth; + break; + } + + advancements.push(rangeWidth - prevRangeWidth); + prevRangeWidth = _lineWidth = rangeWidth; + + if (lineOrigin.x + rangeWidth > containerSize.width) + { + if (wrapWidth) + { + lineRange = wrapRange; + _lineWidth = wrapWidth; + } + + isNewline = YES; + isWordWrapped = YES; + glyphIndex = CPMaxRange(lineRange) - 1; + } + + _lineHeight = MAX(_lineHeight, ascent - descent + leading); + _lineBase = MAX(_lineBase, ascent); + + if (isNewline || isTabStop) + { + if ([self _flushRange:lineRange lineOrigin:lineOrigin currentContainerSize:containerSize advancements:advancements lineCount:numLines]) + return; + + if (isTabStop) + { + lineOrigin.x += rangeWidth; + isTabStop = NO; + } + if (isNewline) + { + if ([_currentParagraph minimumLineHeight]) + _lineHeight = MAX(_lineHeight, [_currentParagraph minimumLineHeight]); + if ([_currentParagraph maximumLineHeight]) + _lineHeight = MIN(_lineHeight, [_currentParagraph maximumLineHeight]); + lineOrigin.y += _lineHeight; + if ([_currentParagraph lineSpacing]) + lineOrigin.y += [_currentParagraph lineSpacing]; + if (lineOrigin.y > [_currentTextContainer containerSize].height) + { + _currentTextContainer = [[_layoutManager textContainers] objectAtIndex: ++_indexOfCurrentContainer]; + } + lineOrigin.x = 0; + numLines++; + isNewline = NO; + } + _lineWidth = 0; + advancements = []; + prevRangeWidth = 0; + currentAnchor = 0; + _lineHeight = 0; + _lineBase = 0; + _previousFont = nil; + lineRange = CPMakeRange(glyphIndex + 1, 0); + wrapRange = CPMakeRange(0, 0); + wrapWidth = 0; + isWordWrapped = NO; + } + } + + // this is to "flush" the remaining characters + if (lineRange.length) + [self _flushRange:lineRange lineOrigin:lineOrigin currentContainerSize:containerSize advancements:advancements lineCount:numLines]; + + if ([theString.charAt(theString.length - 1) ==="\n"]) + { + var rect = CPRectMake(0, lineOrigin.y, containerSize.width, [_layoutManager._lineFragments lastObject]._usedRect.size.height); // fixme: row-height is crudely hacked + [_layoutManager setExtraLineFragmentRect:rect usedRect:rect textContainer:_currentTextContainer]; + } +} + +@end diff --git a/AppKit/CPTextView/RTFParser.j b/AppKit/CPTextView/RTFParser.j new file mode 100755 index 000000000..777800234 --- /dev/null +++ b/AppKit/CPTextView/RTFParser.j @@ -0,0 +1,700 @@ +/* RTFParser.j + + Parse a RTF string into a CPAttributedString + + Copyright (C) 2014 Daniel Boehringer + +FIXME: this really sucks and should be redone using a 'real' parser +e.g. using zaach/jison on github + * all paragraph spacing information is currently not parsed + + + * 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 + +// Hold the attributes of the current run +@implementation _RTFAttribute: CPObject +{ + CPRange _range; + CPParagraphStyle paragraph; + CPColor fgColour; + CPColor bgColour; + CPColor ulColour; + CPString fontName; + unsigned fontSize; + BOOL bold; + BOOL italic; + BOOL underline; + BOOL strikethrough; + BOOL script; + BOOL _tabChanged; +} + +- (id) init +{ + [self resetFont]; + [self resetParagraphStyle]; + _range = CPMakeRange(0, 0); + + return self; +} + +- (id) copy +{ + var mynew = [_RTFAttribute new]; + + mynew.paragraph = [paragraph copy]; + mynew.fontName = fontName; + mynew.fgColour = fgColour; + mynew.bgColour = bgColour; + mynew.ulColour = ulColour; + + return mynew; +} + +- (CPFont)currentFont +{ + var font = [CPFont _fontWithName:fontName size:fontSize bold:bold italic:italic]; + + if (font == nil) + { + /* Before giving up and using a default font, we try if this is + * not the case of a font with a composite name, such as + * 'Helvetica-Light'. In that case, even if we don't have + * exactly an 'Helvetica-Light' font family, we might have an + * 'Helvetica' one. */ + var range = [fontName rangeOfString:@"-"]; + + if (range.location != CPNotFound) + { + var fontFamily = [fontName substringToIndex: range.location]; + + font = [[CPFontManager sharedFontManager] fontWithFamily: fontFamily + traits: traits + weight: weight + size: fontSize]; + } + + if (font == nil) + { + console.log(@"RTFParser", + @"Could not find font %@ size %f traits %d weight %d", + fontName, fontSize, traits, weight); + + /* Last resort, default font. :-( */ + font = [CPFont systemFontOfSize: fontSize]; + } + } + return font; +} + +- (CPNumber)script +{ + return [CPNumber numberWithInt: script]; +} + +- (CPNumber)underline +{ + if (underline != 0) + return [CPNumber numberWithInteger: underline]; + else + return nil; +} + +- (CPNumber)strikethrough +{ + if (strikethrough != 0) + return [CPNumber numberWithInteger: strikethrough]; + else + return nil; +} + +- (void)resetParagraphStyle +{ + paragraph = [[CPParagraphStyle defaultParagraphStyle] copy]; +} + +- (void)resetFont +{ + var font = [CPFont systemFontOfSize:12]; + + fontName = [font familyName]; + fontSize = 12.0; + italic = NO; + bold = NO; + + underline = 0; + strikethrough = 0; + script = 0; +} + +- (void)addTab:(float)location type:(CPTextTabType)type +{ + var tab = [[CPTextTab alloc] initWithType: CPLeftTabStopType + location: location]; + + if (!_tabChanged) + { + [paragraph setTabStops:[tab]]; + _tabChanged = YES; + } + else + { + [paragraph addTabStop: tab]; + } +} + +-(CPDictionary) dictionary +{ + var ret = @{}; + [ret setObject:[self currentFont] forKey:CPFontAttributeName]; + [ret setObject:paragraph forKey:CPParagraphStyleAttributeName]; + + if (fgColour) + [ret setObject:fgColour forKey:CPForegroundColorAttributeName]; + + return ret; +} +@end + + +// based on https://github.com/lazygyu/RTF-parser + +var kRTFParserType_char = 0, + kRTFParserType_dest = 1, + kRTFParserType_prop = 2, + kRTFParserType_spec = 3; + +// Keyword descriptions +var kRgsymRtf = { + // keyword dflt fPassDflt kwd idx + "b" : [ "b", 1, false, kRTFParserType_prop, "propBold"], + "ul" : [ "ul", 1, false, kRTFParserType_prop, "propUnderline"], + "i" : [ "i", 1, false, kRTFParserType_prop, "propItalic"], + "li" : [ "li", 0, false, kRTFParserType_prop, "propPgnFormat"], + "pgnucltr" : [ "pgnucltr", "pgULtr", true, kRTFParserType_prop, "propPgnFormat"], + "pgnlcltr" : [ "pgnlcltr", "pgLLtr", true, kRTFParserType_prop, "propPgnFormat"], + "qc" : [ "qc", "justC", true, kRTFParserType_prop, "propJust"], + "ql" : [ "ql", "justL", true, kRTFParserType_prop, "propJust"], + "qr" : [ "qr", "justR", true, kRTFParserType_prop, "propJust"], + "qj" : [ "qj", "justF", true, kRTFParserType_prop, "propJust"], + "paperw" : [ "paperw", 12240, false, kRTFParserType_prop, "propXaPage"], + "paperh" : [ "paperh", 15480, false, kRTFParserType_prop, "propYaPage"], + "margl" : [ "margl", 1800, false, kRTFParserType_prop, "propXaLeft"], + "margr" : [ "margr", 1800, false, kRTFParserType_prop, "propXaRight"], + "margt" : [ "margt", 1440, false, kRTFParserType_prop, "propYaTop"], + "margb" : [ "margb", 1440, false, kRTFParserType_prop, "propYaBottom"], + "pgnstart" : [ "pgnstart", 1, true, kRTFParserType_prop, "propPgnStart"], + "facingp" : [ "facingp", 1, true, kRTFParserType_prop, "propFacingp"], + "landscape" : [ "landscape",1, true, kRTFParserType_prop, "propLandscape"], + "par" : [ "par", 0, false, kRTFParserType_char, "\n"], + "pard" : [ "pard", 0, false, kRTFParserType_prop, "propDefaultPara"], + "\0x0a" : [ "\0x0a", 0, false, kRTFParserType_char, "\n"], + "\0x0d" : [ "\0x0d", 0, false, kRTFParserType_char, ""], + "tab" : [ "tab", 0, false, kRTFParserType_char, "\t"], + "ldblquote" : [ "ldblquote",0, false, kRTFParserType_char, '"'], + "rdblquote" : [ "rdblquote",0, false, kRTFParserType_char, '"'], + "bin" : [ "bin", 0, false, kRTFParserType_spec, "ipfnBin"], + "*" : [ "*", 0, false, kRTFParserType_spec, "ipfnDestSkip"], + "'" : [ "'", 0, false, kRTFParserType_spec, "ipfnHex"], + "author" : [ "author", 0, false, kRTFParserType_dest, "destSkip"], + "buptim" : [ "buptim", 0, false, kRTFParserType_dest, "destSkip"], + "colortbl" : [ "colortbl", 0, false, kRTFParserType_dest, "destSkip"], + "comment" : [ "comment", 0, false, kRTFParserType_dest, "destSkip"], + "creatim" : [ "creatim", 0, false, kRTFParserType_dest, "destSkip"], + "doccomm" : [ "doccomm", 0, false, kRTFParserType_dest, "destSkip"], + "fonttbl" : [ "fonttbl", 0, false, kRTFParserType_dest, "destSkip"], + "footer" : [ "footer", 0, false, kRTFParserType_dest, "destSkip"], + "footerf" : [ "footerf", 0, false, kRTFParserType_dest, "destSkip"], + "footerl" : [ "footerl", 0, false, kRTFParserType_dest, "destSkip"], + "footerr" : [ "footerr", 0, false, kRTFParserType_dest, "destSkip"], + "footnote" : [ "footnote", 0, false, kRTFParserType_dest, "destSkip"], + "ftncn" : [ "ftncn", 0, false, kRTFParserType_dest, "destSkip"], + "ftnsep" : [ "ftnsep", 0, false, kRTFParserType_dest, "destSkip"], + "ftnsepc" : [ "ftnsepc", 0, false, kRTFParserType_dest, "destSkip"], + "fprq" : [ "fprq", 0, false, kRTFParserType_dest, "destSkip"], + "fcharset" : [ "fcharset", 0, false, kRTFParserType_dest, "destSkip"], + "rquote" : [ "rquote", 0, false, kRTFParserType_char, "'"], +// "s" : [ "s", 0, false, kRTFParserType_dest, "destSkip"], + "header" : [ "header", 0, false, kRTFParserType_dest, "destSkip"], + "headerf" : [ "headerf", 0, false, kRTFParserType_dest, "destSkip"], + "headerl" : [ "headerl", 0, false, kRTFParserType_dest, "destSkip"], + "headerr" : [ "headerr", 0, false, kRTFParserType_dest, "destSkip"], + "info" : [ "info", 0, false, kRTFParserType_dest, "destSkip"], + "keywords" : [ "keywords", 0, false, kRTFParserType_dest, "destSkip"], + "operator" : [ "operator", 0, false, kRTFParserType_dest, "destSkip"], + "pict" : [ "pict", 0, false, kRTFParserType_dest, "destSkip"], + "printim" : [ "printim", 0, false, kRTFParserType_dest, "destSkip"], + "private1" : [ "private1", 0, false, kRTFParserType_dest, "destSkip"], + "revtim" : [ "revtim", 0, false, kRTFParserType_dest, "destSkip"], + "rxe" : [ "rxe", 0, false, kRTFParserType_dest, "destSkip"], + "stylesheet" : [ "stylesheet",0, false, kRTFParserType_dest, "destSkip"], + "subject" : [ "subject", 0, false, kRTFParserType_dest, "destSkip"], + "tc" : [ "tc", 0, false, kRTFParserType_dest, "destSkip"], + "title" : [ "title", 0, false, kRTFParserType_dest, "destSkip"], + "txe" : [ "txe", 0, false, kRTFParserType_dest, "destSkip"], + "xe" : [ "xe", 0, false, kRTFParserType_dest, "destSkip"], + "[" : [ "[", 0, false, kRTFParserType_char, '['], + " " : [ " ", 0, false, kRTFParserType_char, ' '], + "]" : [ "]", 0, false, kRTFParserType_char, ']'], + "\\" : [ "\\", 0, false, kRTFParserType_char, '\\'] +} + +@implementation _RTFParser : CPObject +{ + CPString _codePage; + CPSize _paper; + CPString _rtf; + unsigned _curState; + CPArray _states; + unsigned _currentParseIndex; + BOOL _hexreturn; + _RTFAttribute _currentRun; + CPAttributedString _result; + CPArray _colorArray; + CPArray _fontArray; + CPString _freename; + BOOL _parsingFontTable; +} + +- (id)init +{ + if (self = [super init]) + { + _paper = CPMakeSize(0, 0); + _rtf = ""; + _curState = 0; // 0 = normal, 1 = skip + _states = []; + _currentParseIndex = 0; + _hexreturn = NO; + _currentRun = nil; + _result = [CPAttributedString new]; + _colorArray = []; + _fontArray = ['Arial']; // FIXME: should be name of system font + _freename = ""; + _parsingFontTable = NO; + } + return self; +} + +- (CPString)_checkChar:sym parameter:ch +{ + switch(_curState) + { + case 0: + if (sym && sym[4]) + return sym[4]; + + case 1: + console.log("skipped : " + sym[4]); + return ''; + default: + if (sym && sym[4]) + return sym[4]; + } +} +- (BOOL)pushState +{ + _states.push["group"]; + return YES; +} + +- (BOOL)popState +{ + _states.pop(); + if(_curState > 0) _curState--; + return YES; +} + +- (CPString)_parseSpec:sym parameter:v +{ + var ch = ''; + switch(sym[4]) + { + case "ipfnDestSkip": + _curState++; + return ''; + case "ipfnHex": + ch = _rtf.charAt(++_currentParseIndex); + var hex = ''; + while(/[a-fA-F0-9\']/.test(ch)) + { + if(ch == "'") + { + _currentParseIndex++; + continue; + } + hex += (ch + ''); + ch = _rtf.charAt(++_currentParseIndex); + } + //ch = parseInt(ch, 16); + console.log("hex : " + hex); + _hexreturn = YES; + _currentParseIndex--; + if (_curState !== 0) return ''; + else return hex; + break; + case "codePage": + ch = _rtf.charAt(++_currentParseIndex); + var code = ''; + while(/[0-9]/.test(ch)) + { + code += (ch + ''); + ch = _rtf.charAt(++_currentParseIndex); + } + _codePage=code; + _currentParseIndex--; + break; + } + return ''; +} + +- (void) _flushCurrentRun +{ + var newOffset = 0; + if (_currentRun) + { + if ([_result length] == _currentRun._range.location) + return; + _currentRun._range.length = [_result length] - _currentRun._range.location; + newOffset = CPMaxRange(_currentRun._range); + var dict = [_currentRun dictionary]; + [_result setAttributes:dict range:_currentRun._range]; // flush previous run + } + _currentRun = [_RTFAttribute new]; + _currentRun._range = CPMakeRange(newOffset, 0); // open a new one +} +- (CPString)_applyPropChange:sym parameter:param +{ + console.log("prop : " + sym[0] + " / param : " + param+ ' '); + + switch (sym[0]) + { + case "pard": + [self _flushCurrentRun]; + break; + case "b": // bold + if (param === 0) + { + if (_currentRun && _currentRun.bold) + [self _flushCurrentRun]; + _currentRun.bold = NO + } else + { + if (_currentRun && !_currentRun.bold) + [self _flushCurrentRun] + _currentRun.bold = YES; + } + break; + case "i": // italic + if (param === 0) + { + if (_currentRun && _currentRun.italic) + [self _flushCurrentRun]; + _currentRun.italic = NO + } else + { + if (_currentRun && !_currentRun.italic) + [self _flushCurrentRun] + _currentRun.italic = YES; + } + break; + case "qc": // paragraph center + [_currentRun.paragraph setAlignment:CPCenterTextAlignment]; + break; + case "paperw": + _paper.width = param; + break; + case "paperh": + _paper.height = param; + break; + } + + return ''; +} + + +- (CPString)_changeDest:sym +{ + switch (sym[0]) + { + case "colortbl": + _colorArray.push([CPColor blackColor]); + break; + case "fonttbl": + _parsingFontTable = YES; + break; + } + if (sym[4] == "destSkip") + { + console.log("Dest skip start : [" + sym[0] + "]"); + _curState++; + + } + return ''; +} + +- (CPString)_translateKeyword:keyword parameter:param fParameter:(BOOL)fParam +{ + if (kRgsymRtf[keyword] !== undefined ){ + var sym = kRgsymRtf[keyword]; + switch (sym[3]) + { + case kRTFParserType_prop: + if (sym[2] || !fParam) + { + param = sym[1]; + } + return [self _applyPropChange:sym parameter:param]; + case kRTFParserType_char: + return [self _checkChar:sym parameter:param]; + case kRTFParserType_dest: + return [self _changeDest:sym]; + case kRTFParserType_spec: + return [self _parseSpec:sym parameter:param]; + default: + return ''; + break; + } + } else + { + switch (keyword) + { + case "red": + var oldColor = [_colorArray lastObject], + green = [oldColor greenComponent], + blue = [oldColor blueComponent]; + _colorArray.pop(); + _colorArray.push([CPColor colorWithRed: parseInt(param) / 255 green:green blue:blue alpha:1.0]); + break; + case "green": + var oldColor = [_colorArray lastObject], + red = [oldColor redComponent], + blue = [oldColor blueComponent]; + _colorArray.pop(); + _colorArray.push([CPColor colorWithRed: red green: parseInt(param) / 255 blue:blue alpha:1.0]); + break; + case "blue": + var oldColor = [_colorArray lastObject], + green = [oldColor greenComponent], + red = [oldColor redComponent]; + _colorArray.pop(); + _colorArray.push([CPColor colorWithRed: red green:green blue:parseInt(param) / 255 alpha:1.0]); + break; + case "cf": // change foreground color + var fontIndex = parseInt(param) - 1; + if (_currentRun && fontIndex >= 0) + _currentRun.fgColour = _colorArray[fontIndex]; + break; + case "f": // change font + var fontIndex = parseInt(param); + if (_currentRun && fontIndex >= 0 && fontIndex < _fontArray.length) + _currentRun.fontName = _fontArray[fontIndex]; + + break; + case "fs": // change font size + _currentRun.fontSize = parseInt(param) / 2; + break; + case "tx": // tabstop + var location = parseInt(param) / 20; + if (_currentRun) + { + [_currentRun addTab:location type:CPLeftTabStopType]; + } + break; + default: + console.log("skip : " + keyword + " param: " + param); + + } + if (_states.length > 0) _curState = 1; + return ''; + } +} + +- (CPString)_parseKeyword:rtf length:len +{ + var ch = ''; + var fParam = false, fNeg = false; + var keyword = ''; + var param = ''; + _rtf = rtf; + + if (++_currentParseIndex >= len) + return len; + ch = rtf.charAt(_currentParseIndex); + + if (!/[a-zA-Z]/.test(ch)) + { + return [self _translateKeyword:ch parameter:nil fParameter:fParam]; + } + + while (/[a-zA-Z]/.test(ch)) + { + keyword += ch; + ch = rtf.charAt(++_currentParseIndex); + } + + if( ch == '-' ) + { + fNeg = true; + ch = rtf.charAt(++_currentParseIndex); + } + fParam = true; + + while (/[0-9]/.test(ch)) + { + param += (ch + ''); + ch = rtf.charAt(++_currentParseIndex); + } + _currentParseIndex--; + param = parseInt(param); + + if (fNeg) + param *= -1; + + return [self _translateKeyword:keyword parameter:param fParameter:fParam]; +} +- (void) _appendPlainString:(CPString) aString +{ + [_result replaceCharactersInRange:CPMakeRange([_result length], 0) withString:aString]; + +} +- (CPAttributedString) parseRTF:(CPString)rtf +{ + if(rtf.length == 0) + { + // alert("invalid rtf"); + return ''; + } + _currentParseIndex = -1; + var len = rtf.length; + var tmp = ''; + var ch = ''; + var hex = ''; + var lastchar = 0; + + while (_currentParseIndex < len) + { + tmp = rtf.charAt(++_currentParseIndex); + + if (tmp !== "\\" && hex.length > 0) + { + [self _appendPlainString: String.fromCharCode(parseInt((hex), 16))]; + hex = ''; + } + switch(tmp) + { + case " ": + if (lastchar == 1) + { + lastchar = 0; + } else + { + _freename += tmp; + [self _appendPlainString:tmp]; + } + break; + case "{": + if ([self pushState]) + { + console.log("push"); + } + break; + case "}": + if ([self popState]) + { + + console.log("pop"); + } + if (_freename) + { + console.log(_freename); + if (_parsingFontTable) + { + _fontArray.push(_freename); + _parsingFontTable = NO; + } + _freename = ""; + } + [self _flushCurrentRun] + break; + case "\\": + _freename = ''; + ch = [self _parseKeyword:rtf length:len]; + if (!_hexreturn && ch.length == 0) + { + lastchar = 1; + } else + { + lastchar = 0; + } + if (_hexreturn) + { + if(ch.length > 0) + { + if(parseInt(ch, 16) & 0x80) + { + hex += ch.toUpperCase(); + } else + { + [self _appendPlainString: String.fromCharCode(parseInt((hex + ch), 16))]; + hex = ''; + } + + if (hex.length == 4) + { + var temp = parseInt(hex, 16); + if (hexTable && hexTable[hex.toUpperCase()] !== undefined) + { + temp = parseInt(hexTable[hex.toUpperCase()], 16); + } + [self _appendPlainString: String.fromCharCode(temp)] + hex = ''; + } + } else + { + console.log("hex skipped"); + } + _hexreturn = NO; + } else + if (ch !== undefined && _curState === 0) + { + [self _appendPlainString:ch]; + + } + break; + case 0x0d: + case 0x0a: + case '\n': + case '\r': + break; + default: + lastchar = 0; + if (_curState == 0) + { + [self _appendPlainString:tmp]; + } else if (tmp !== ';') + { + _freename += tmp; + } + break; + } + } + return _result; +} + +@end \ No newline at end of file diff --git a/AppKit/CPTextView/RTFProducer.j b/AppKit/CPTextView/RTFProducer.j new file mode 100755 index 000000000..b33042d95 --- /dev/null +++ b/AppKit/CPTextView/RTFProducer.j @@ -0,0 +1,600 @@ +/* + RTFProducer.j + + Serialize CPAttributedString to a RTF String + + Copyright (C) 2014 Daniel Boehringer + This file is based on the RTFProducer from GNUStep + (which i co-authored with Fred Kiefer in 1999) + + * 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 "CPFont.j" +@import "CPParagraphStyle.j" +@import "CPColor.j" + + +var PAPERSIZE = @"PaperSize"; +var LEFTMARGIN = @"LeftMargin"; +var RIGHTMARGIN = @"RightMargin"; +var TOPMARGIN = @"TopMargin"; +var BUTTOMMARGIN = @"ButtomMargin"; + +CPISOLatin1StringEncoding = "CPISOLatin1StringEncoding"; + +function _points2twips(a) { return (a)*20.0; } + + +@implementation RTFProducer:CPObject +{ + CPAttributedString text; + CPMutableDictionary fontDict; + CPMutableDictionary colorDict; + CPDictionary docDict; + CPMutableArray attachments; + CPFont currentFont; + + CPColor fgColor; + CPColor bgColor; + CPColor ulColor; +} + ++ (CPString)produceRTF: (CPAttributedString) aText documentAttributes: (CPDictionary)dict +{ + var mynew = [self new], + data; + + return [mynew RTFDStringFromAttributedString: aText + documentAttributes: dict]; +} + +- (id)init +{ + /* + * maintain a dictionary for the used colours + * (for rtf-header generation) + */ + colorDict = [CPMutableDictionary new]; + /* + * maintain a dictionary for the used fonts + * (for rtf-header generation) + */ + fontDict = [CPMutableDictionary new]; + + currentFont = nil; + fgColor = [CPColor blackColor]; + bgColor= [CPColor whiteColor]; + + return self; +} + +// private stuff follows +- (CPString) fontTable +{ + // write Font Table + if ([fontDict count]) + { + var fontlistString = ""; + var fontEnum; + var currFont; + var keyArray; + + keyArray = [fontDict allKeys]; + keyArray = [keyArray sortedArrayUsingSelector: @selector(compare:)]; + + fontEnum = [keyArray objectEnumerator]; + while ((currFont = [fontEnum nextObject]) !== nil) + { + var fontFamily; + var detail; + + if ([currFont isEqualToString: @"Symbol"]) + fontFamily = @"tech"; + else if ([currFont isEqualToString: @"Helvetica"]) + fontFamily = @"swiss"; + else if ([currFont isEqualToString: @"Arial"]) + fontFamily = @"swiss"; + else if ([currFont isEqualToString: @"Courier"]) + fontFamily = @"modern"; + else if ([currFont isEqualToString: @"Times"]) + fontFamily = @"roman"; + else fontFamily = @"nil"; + + detail = [CPString stringWithFormat: @"%@\\f%@ %@;", + [fontDict objectForKey: currFont], fontFamily, currFont]; + fontlistString += detail; + } + return [CPString stringWithFormat: @"{\\fonttbl%@}\n", fontlistString]; + } + else + return @""; +} + +- (CPString) colorTable +{ + // write Colour table + if ([colorDict count]) + { + var result, + count = [colorDict count], + list = [CPMutableArray arrayWithCapacity: count], + keyEnum = [colorDict keyEnumerator], + next, + i; + + while ((next = [keyEnum nextObject]) != nil) + { + var cn = [colorDict objectForKey: next]; + [list insertObject: next atIndex: [cn intValue]-1]; + } + + result = [CPString stringWithString: @"{\\colortbl;"]; + for (i = 0; i < count; i++) + { + var color = [[list objectAtIndex: i] + colorUsingColorSpaceName: CPCalibratedRGBColorSpace]; + result += [CPString stringWithFormat: + @"\\red%d\\green%d\\blue%d;", + ([color redComponent]*255), + ([color greenComponent]*255), + ([color blueComponent]*255)]; + } + + result += @"}\n"; + return result; + } + else + return @""; +} + +- (CPString) documentAttributes +{ + if (docDict != nil) + { + var result, + detail, + val, + num, + + result = [CPString string]; + + val = [docDict objectForKey: PAPERSIZE]; + if (val != nil) + { + var size = [val sizeValue]; + detail = [CPString stringWithFormat: @"\\paperw%d \\paperh%d", + _points2twips(size.width), + _points2twips(size.height)]; + result += detail; + } + + num = [docDict objectForKey: LEFTMARGIN]; + if (num != nil) + { + var f = [num floatValue]; + detail = [CPString stringWithFormat: @"\\margl%d", + _points2twips(f)]; + result+= detail; + } + num = [docDict objectForKey: RIGHTMARGIN]; + if (num != nil) + { + var f = [num floatValue]; + detail = [CPString stringWithFormat: @"\\margr%d", + _points2twips(f)]; + result += detail; + } + num = [docDict objectForKey: TOPMARGIN]; + if (num != nil) + { + var f = [num floatValue]; + detail = [CPString stringWithFormat: @"\\margt%d", + _points2twips(f)]; + result += detail; + } + num = [docDict objectForKey: BUTTOMMARGIN]; + if (num != nil) + { + var f = [num floatValue]; + detail = [CPString stringWithFormat: @"\\margb%d", + _points2twips(f)]; + result += detail; + } + + return result; + } + else + return @""; +} + +- (CPString) headerString +{ + var result; + + result = [CPString stringWithString: @"{\\rtf1\\ansi"]; + + result += [self fontTable]; + result += [self colorTable]; + result += [self documentAttributes]; + + return result; +} + +- (CPString) trailerString +{ + return @"}"; +} + +- (CPString)fontToken: (CPString) fontName +{ + var fCount = [fontDict objectForKey: fontName]; + + if (fCount == nil) + { + var count = [fontDict count]; + + fCount = [CPString stringWithFormat: @"\\f%d", count]; + [fontDict setObject: fCount forKey: fontName]; + } + + return fCount; +} + +- (int)numberForColor: (CPColor)color +{ + var cn, + num = [colorDict objectForKey: color]; + + if (num == nil) + { + cn = [colorDict count] + 1; + + [colorDict setObject: [CPNumber numberWithInt: cn] + forKey: color]; + } + var cn = [num intValue]; + + return cn + 1; +} + +- (CPString) paragraphStyle: (CPParagraphStyle) paraStyle +{ + var headerString = [CPString stringWithString:@"\\pard\\plain"], + twips; + + if (paraStyle == nil) + return headerString; + + switch ([paraStyle alignment]) + { + case CPRightTextAlignment: + headerString += @"\\qr"; + break; + case CPCenterTextAlignment: + headerString += @"\\qc"; + break; + case CPLeftTextAlignment: + headerString += @"\\ql"; + break; + case CPJustifiedTextAlignment: + headerString += @"\\qj"; + break; + default: + headerString += @"\\ql"; + break; + } + + // write first line indent and left indent + var twips = _points2twips([paraStyle firstLineHeadIndent]); + if (twips != 0.0) + { + headerString += [CPString stringWithFormat:@"\\fi%d", twips]; + } + twips = _points2twips([paraStyle headIndent]); + if (twips != 0.0) + { + headerString += [CPString stringWithFormat:@"\\li%d", twips]; + } + twips = _points2twips([paraStyle tailIndent]); + if (twips != 0.0) + { + headerString += [CPString stringWithFormat:@"\\ri%d", twips]; + } + twips = _points2twips([paraStyle paragraphSpacing]); + if (twips != 0.0) + { + headerString += [CPString stringWithFormat:@"\\sa%d", twips]; + } + twips = _points2twips([paraStyle minimumLineHeight]); + if (twips != 0.0) + { + headerString += [CPString stringWithFormat:@"\\sl%d", twips]; + } + twips = _points2twips([paraStyle maximumLineHeight]); + if (twips != 0.0) + { + headerString += [CPString stringWithFormat: @"\\sl-%d", twips]; + } +// tabs + if (1) + { + var enumerator, + tab; + + enumerator = [[paraStyle tabStops] objectEnumerator]; + while ((tab = [enumerator nextObject])) + { + switch ([tab tabStopType]) + { + case CPLeftTabStopType: + // no tabkind emission needed + break; +/* case NSRightTabStopType: + headerString += @"\\tqr"; + break; + case NSCenterTabStopType: + headerString += @"\\tqc"; + break; + case NSDecimalTabStopType: + headerString += @"\\tqdec"; + break; + default: + NSLog(@"Unknown tab stop type."); +*/ + } + + headerString += [CPString stringWithFormat:@"\\tx%d",_points2twips([tab location])]; + } + } + return headerString; +} + +- (CPString) runStringForString: (CPString) substring + attributes: (CPDictionary) attributes + paragraphStart: (BOOL) first +{ + var result = "", + headerString = "", + trailerString = "", + attribEnum, + currAttrib; + + if (first) + { + var paraStyle = [attributes objectForKey:CPParagraphStyleAttributeName]; + headerString += [self paragraphStyle: paraStyle]; + } + + /* + * analyze attributes of current run + * + * FIXME: All the character attributes should be output relative to the font + * attributes of the paragraph. So if the paragraph has underline on it should + * still be possible to switch it off for some characters, which currently is + * not possible. + */ + attribEnum = [attributes keyEnumerator]; + while ((currAttrib = [attribEnum nextObject]) != nil) + { + if ([currAttrib isEqualToString: CPFontAttributeName]) + { + /* + * handle fonts + */ + var font, + fontName, + traits; + + font = [attributes objectForKey: CPFontAttributeName]; + fontName = [font familyName]; + traits = [[CPFontManager sharedFontManager] traitsOfFont: font]; + + /* + * font name + */ + if (currentFont == nil || + ![fontName isEqualToString: [currentFont familyName]]) + { + headerString += [self fontToken: fontName]; + } + /* + * font size + */ + if (currentFont == nil || + [font size] != [currentFont size]) + { + var points =[font size]*2, + pString; + + pString = [CPString stringWithFormat: @"\\fs%d", points]; + headerString += pString; + } + /* + * font attributes + */ + if (traits & CPItalicFontMask) + { + headerString += @"\\i"; + trailerString += @"\\i0"; + } + if (traits & CPBoldFontMask) + { + headerString += @"\\b"; + trailerString += @"\\b0"; + } + + if (first) + currentFont = font; + } + else if ([currAttrib isEqualToString: CPForegroundColorAttributeName]) + { + var color = [attributes objectForKey: CPForegroundColorAttributeName]; + if (![color isEqual: fgColor]) + { + headerString += [CPString stringWithFormat:@"\\cf%d", [self numberForColor:color]]; + trailerString += @"\\cf0"; + } + } + else if ([currAttrib isEqualToString: CPBackgroundColorAttributeName]) + { + var color = [attributes objectForKey: CPBackgroundColorAttributeName]; + if (![color isEqual: bgColor]) + { + headerString += [CPString stringWithFormat:@"\\cb%d", [self numberForColor: color]]; + trailerString += @"\\cb0"; + } + } + else if ([currAttrib isEqualToString: CPUnderlineStyleAttributeName]) + { + headerString += @"\\ul"; + trailerString += @"\\ulnone"; + } + else if ([currAttrib isEqualToString: CPSuperscriptAttributeName]) + { + var value = [attributes objectForKey: CPSuperscriptAttributeName], + svalue = [value intValue] * 6; + + if (svalue > 0) + { + headerString += [CPString stringWithFormat:@"\\up%d", svalue]; + trailerString += @"\\up0"; + } + else if (svalue < 0) + { + headerString +=[CPString stringWithFormat:@"\\dn-%d", svalue]; + trailerString += @"\\dn0"; + } + } + else if ([currAttrib isEqualToString: CPBaselineOffsetAttributeName]) + { + var value = [attributes objectForKey: CPBaselineOffsetAttributeName], + svalue = [value floatValue] * 2; + + if (svalue > 0) + { + headerString +=[CPString stringWithFormat:@"\\up%d", svalue]; + trailerString += @"\\up0"; + } + else if (svalue < 0) + { + headerString += [CPString stringWithFormat:@"\\dn-%d", svalue]; + trailerString += @"\\dn0"; + } + } + else if ([currAttrib isEqualToString: CPAttachmentAttributeName]) + { + } + else if ([currAttrib isEqualToString: CPLigatureAttributeName]) + { + } + else if ([currAttrib isEqualToString: CPKernAttributeName]) + { + } + } + + substring = substring.replace(/\\/g, '\\\\'); + substring = substring.replace(/\n/g, '\\par\n'); + substring = substring.replace(/\t/g, '\\tab'); + substring = substring.replace(/{/g, '\\{'); + substring = substring.replace(/}/g, '\\}'); + // FIXME: All characters not in the standard encoding must be + // replaced by \'xx + + if (!first) + { + var braces; + + if ([headerString length]) + braces = [CPString stringWithFormat: @"{%@ %@}", headerString, substring]; + else + braces = substring; + + result += braces; + } + else + { + var nobraces; + + if ([headerString length]) + nobraces = [CPString stringWithFormat: @"%@ %@", headerString, substring]; + else + nobraces = substring; + + + result += nobraces; + } + + return result + trailerString; +} + +- (CPString)bodyString +{ + var string = [text string], + result = "", + loc = 0, + length = [string length]; + + var currRange = CPMakeRange(loc, 0), + completeRange = CPMakeRange(0, length), + first = YES; + +// FIXME split along newline characters and run as outer loop + while (CPMaxRange(currRange) < CPMaxRange(completeRange)) // save all "runs" + { + var attributes, + substring, + runString; + + attributes = [text attributesAtIndex: CPMaxRange(currRange) + longestEffectiveRange:currRange + inRange:completeRange]; + substring = [string substringWithRange:currRange]; + + runString = [self runStringForString:substring + attributes:attributes + paragraphStart:YES]; + result += runString; + first = NO; + } + return result; +} + + +- (CPString) RTFDStringFromAttributedString: (CPAttributedString)aText + documentAttributes: (CPDictionary)dict +{ + var output = [CPString string], + headerString, + trailerString, + bodyString; + + text = aText; + docDict = dict; + + /* + * do not change order! (esp. body has to be generated first; builds context) + */ + bodyString = [self bodyString]; + trailerString = [self trailerString]; + headerString = [self headerString]; + + output += headerString; + output += bodyString; + output += trailerString; + return output; +} +@end \ No newline at end of file From f734a60c62d56411d682ced5f4da962de5f8f95b Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 8 Feb 2014 20:46:04 +0100 Subject: [PATCH 221/278] manual test --- Tests/Manual/CPTextView/AppController.j | 102 +++++++++++++++++ Tests/Manual/CPTextView/Info.plist | 10 ++ Tests/Manual/CPTextView/Jakefile | 94 ++++++++++++++++ Tests/Manual/CPTextView/Resources/spinner.gif | Bin 0 -> 1434 bytes Tests/Manual/CPTextView/index-debug.html | 103 ++++++++++++++++++ Tests/Manual/CPTextView/index.html | 77 +++++++++++++ Tests/Manual/CPTextView/main.j | 18 +++ 7 files changed, 404 insertions(+) create mode 100755 Tests/Manual/CPTextView/AppController.j create mode 100644 Tests/Manual/CPTextView/Info.plist create mode 100644 Tests/Manual/CPTextView/Jakefile create mode 100644 Tests/Manual/CPTextView/Resources/spinner.gif create mode 100644 Tests/Manual/CPTextView/index-debug.html create mode 100644 Tests/Manual/CPTextView/index.html create mode 100644 Tests/Manual/CPTextView/main.j diff --git a/Tests/Manual/CPTextView/AppController.j b/Tests/Manual/CPTextView/AppController.j new file mode 100755 index 000000000..1ba92ae56 --- /dev/null +++ b/Tests/Manual/CPTextView/AppController.j @@ -0,0 +1,102 @@ +/* + * AppController.j + * + * Manual test application for the cappuccino text system + * Copyright (C) 2014 Daniel Boehringer + */ + +@import +@import +@import + +@implementation AppController : CPObject +{ + CPTextView _textView; + CPTextView _textView2; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // CPLogRegister(CPLogConsole); + + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], + contentView = [theWindow contentView]; + + [contentView setBackgroundColor:[CPColor colorWithWhite:0.95 alpha:1.0]]; + + _textView = [[CPTextView alloc] initWithFrame:CGRectMake(0,0,500,500)]; + _textView2 = [[CPTextView alloc] initWithFrame:CGRectMake(0,0,500,500)]; + _textView2._isRichText = NO; + [_textView setBackgroundColor:[CPColor whiteColor]]; + [_textView2 setBackgroundColor:[CPColor whiteColor]]; + + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(20, 20,520,510)]; + var scrollView2 = [[CPScrollView alloc] initWithFrame:CGRectMake(560, 20,520,510)]; + // [scrollView setAutohidesScrollers:YES]; + [scrollView setDocumentView:_textView]; + [scrollView2 setDocumentView:_textView2]; + + [contentView addSubview: scrollView]; + [contentView addSubview: scrollView2]; + + [_textView setDelegate:self]; + + /* build our menu */ + var mainMenu = [CPApp mainMenu]; + + while ([mainMenu numberOfItems] > 0) + [mainMenu removeItemAtIndex:0]; + + var item = [mainMenu insertItemWithTitle:@"Edit" action:nil keyEquivalent:nil atIndex:0], + editMenu = [[CPMenu alloc] initWithTitle:@"Edit Menu"]; + + [_textView2 insertText:"RTF goes here"]; + + [editMenu addItemWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; + [editMenu addItemWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; + [editMenu addItemWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; + [editMenu addItemWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; + [editMenu addItemWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; + [editMenu addItemWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; + [editMenu addItemWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; + + [mainMenu setSubmenu:editMenu forItem:item]; + + item = [mainMenu insertItemWithTitle:@"Font" action:@selector(orderFrontFontPanel:) keyEquivalent:nil atIndex:1]; + item = [mainMenu insertItemWithTitle:@"RTFRoundtrip" action:@selector(makeRTF:) keyEquivalent:nil atIndex:1]; + + var centeredParagraph=[CPParagraphStyle new]; + [centeredParagraph setAlignment: CPCenterTextAlignment]; + [_textView insertText:[[CPAttributedString alloc] initWithString:@"Fusce\n" + attributes:[CPDictionary dictionaryWithObjects:[centeredParagraph, [CPFont boldFontWithName:"Arial" size:18], [CPColor redColor]] + forKeys:[CPParagraphStyleAttributeName, CPFontAttributeName, CPForegroundColorAttributeName]]]]; + + [_textView insertText: [[CPAttributedString alloc] initWithString:@"lectus neque cr as eget lectus neque cr as eget lectus cr as eget lectus" + attributes:[CPDictionary dictionaryWithObjects:[ [CPFont fontWithName:"Arial" size:12]] forKeys: [CPFontAttributeName]]]]; + + [_textView insertText:[[CPAttributedString alloc] initWithString:@" proin, this is text in boldface " + attributes:[CPDictionary dictionaryWithObjects:[ [CPFont boldFontWithName:"Arial" size:12]] forKeys: [CPFontAttributeName]]]]; + [_textView insertText:[[CPAttributedString alloc] initWithString:@"111111 neque cr as eget lectus neque cr as eget lectus cr as eget lectus" + attributes:[CPDictionary dictionaryWithObjects:[ [CPFont fontWithName:"Arial" size:12.0]] forKeys: [CPFontAttributeName]]]]; + + [theWindow orderFront:self]; + [CPMenu setMenuBarVisible:YES]; +} + +//-> CPApplication (?) +- (void)orderFrontFontPanel:sender +{ + [[CPFontManager sharedFontManager] orderFrontFontPanel:self]; +} + +- (void) makeRTF:sender +{ + [_textView2 setString: [RTFProducer produceRTF:[_textView textStorage] documentAttributes: @{}] ]; + var tc = [_RTFParser new]; + var mystr=[tc parseRTF:[_textView2 stringValue]]; + [_textView selectAll: self]; + [_textView insertText: mystr]; + +} + +@end diff --git a/Tests/Manual/CPTextView/Info.plist b/Tests/Manual/CPTextView/Info.plist new file mode 100644 index 000000000..877388578 --- /dev/null +++ b/Tests/Manual/CPTextView/Info.plist @@ -0,0 +1,10 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPLevelIndicator + + diff --git a/Tests/Manual/CPTextView/Jakefile b/Tests/Manual/CPTextView/Jakefile new file mode 100644 index 000000000..bd57b7a0d --- /dev/null +++ b/Tests/Manual/CPTextView/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CPLevelIndicator + * + * Created by Alexander Ljungberg on May 28, 2011. + * Copyright 2011, WireLoad All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("CPLevelIndicator", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPLevelIndicator.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPLevelIndicator"); + task.setIdentifier("com.yourcompany.CPLevelIndicator"); + task.setVersion("1.0"); + task.setAuthor("WireLoad"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPLevelIndicator"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["CPLevelIndicator"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CPLevelIndicator", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPLevelIndicator", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPLevelIndicator")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPLevelIndicator"), FILE.join("Build", "Deployment", "CPLevelIndicator")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPLevelIndicator")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPLevelIndicator"), FILE.join("Build", "Desktop", "CPLevelIndicator", "CPLevelIndicator.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPLevelIndicator", "CPLevelIndicator.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPLevelIndicator")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPTextView/Resources/spinner.gif b/Tests/Manual/CPTextView/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..a5e705f6cbdf914e5e714c35a8dfef807f19e3c2 GIT binary patch literal 1434 zcmZvbdrVVj7{t$-UNOu86#VHu^|s&3rWfwHBbPG_8{SrlB{Tv1uvvj4t6zP!)#d!Ogc zP^62J^$0+~?-ZcXXpBaq%jFsw8L`=H2?+@R02Yg-*Xw;gACBV^i3CMahr>Z667S!? zk3LDe>VLEsU;sWo$Py~o!gWuaIAnaG3Sv``&tvc+8DJO!| zt4fcbQ8tW}a&xZfgtQ9BnFYLvGG|PvCNlg&uh@Q^w9Pz}+I^hCj`vu9JQADPqdkyk zR40xycD9geUgJu1e;$L`Fpa)?Wl-2&6hO@U*KrPqK(I1H=1h?2fce}6GhhP1oBZC# z1e@gt-qFa6lZrl%s1>bdxg*W)Ebt__O(4sj6(*2X@ciUClwHH#U(NRM7XAjS z+scDZ32J*PCoslsgS~#ZlCCGo`r>S6F)Ghw5wVlqHioFaw?ucD(XoLJ0j;28oPoPV z9A}dR$0SKn>uExfkl#j09o;v$BZ909R=*p{ATNq8BJW;YduX2QMOU7$a$_L5e!G^g zpbkx5G4&FZ%7m14rTN}5YB(;x7$5XOc_hf3E|Hw$TVg)P#qf~}nOn03uqsp>UG>vi zWThIoO)-1Q#@u#O;fMC#WAf@Xj70-0g9YZ;dA$HH1fW1q=9-c>>_yA0S$7M*5?}vi z)8MU`Q%P!7sEBBnd$DrKgFQ2?O%6LpdaC%F8Pn-)EC2t=j~ zoaLamla$FX!GQqWi!%s>sj-#5SJX0IF!TP=r21Z}s)k#btN0?=I7uD9C)Gb$fZ#sm zaVq7g`LwZ%PfNpN^_N-IGLHj@AV`s#4&va7_{Hw63G6BkSGXHdogTZ%QOiRb bDpZ@qYcJKM>x%b%*HX74c8MnqfHi*u-bC?g literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPTextView/index-debug.html b/Tests/Manual/CPTextView/index-debug.html new file mode 100644 index 000000000..1097bcf1b --- /dev/null +++ b/Tests/Manual/CPTextView/index-debug.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + CPLevelIndicator + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPTextView/index.html b/Tests/Manual/CPTextView/index.html new file mode 100644 index 000000000..26086f976 --- /dev/null +++ b/Tests/Manual/CPTextView/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + CPLevelIndicator + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPTextView/main.j b/Tests/Manual/CPTextView/main.j new file mode 100644 index 000000000..7a956f1f5 --- /dev/null +++ b/Tests/Manual/CPTextView/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPLevelIndicator + * + * Created by Alexander Ljungberg on May 28, 2011. + * Copyright 2011, WireLoad All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From db2b1a0a35cf0ba469a08914dfb7458763272a97 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 8 Feb 2014 21:14:56 +0100 Subject: [PATCH 222/278] typos --- AppKit/CPText.j | 10 ++++++---- AppKit/CPTextView/CPParagraphStyle.j | 1 + AppKit/CPTextView/RTFParser.j | 8 ++++++-- AppKit/CPTextView/RTFProducer.j | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/AppKit/CPText.j b/AppKit/CPText.j index bbe6af959..a238216cc 100644 --- a/AppKit/CPText.j +++ b/AppKit/CPText.j @@ -29,13 +29,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPView.j" +@import "CPControl.j" + +/* @import "RTFProducer.j" @import "RTFParser.j" +*/ - -CPParagraphSeparatorCharacter = 0x2029; -CPLineSeparatorCharacter = 0x2028; +CPParagraphSeparatorCharacter = 0x2029; +CPLineSeparatorCharacter = 0x2028; CPEnterCharacter = "\u0003"; CPBackspaceCharacter = "\u0008"; CPTabCharacter = "\u0009"; diff --git a/AppKit/CPTextView/CPParagraphStyle.j b/AppKit/CPTextView/CPParagraphStyle.j index b325dc4dd..5d372880f 100755 --- a/AppKit/CPTextView/CPParagraphStyle.j +++ b/AppKit/CPTextView/CPParagraphStyle.j @@ -25,6 +25,7 @@ */ @import +@import "CPText.j" var _sharedDefaultParagraphStyle, _defaultTabStopArray; diff --git a/AppKit/CPTextView/RTFParser.j b/AppKit/CPTextView/RTFParser.j index 777800234..240c23ba6 100755 --- a/AppKit/CPTextView/RTFParser.j +++ b/AppKit/CPTextView/RTFParser.j @@ -24,10 +24,14 @@ e.g. using zaach/jison on github * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -//@import +@import +@import "CPControl.j" +@import + +var hexTable = []; // Hold the attributes of the current run -@implementation _RTFAttribute: CPObject +@implementation _RTFAttribute : CPObject { CPRange _range; CPParagraphStyle paragraph; diff --git a/AppKit/CPTextView/RTFProducer.j b/AppKit/CPTextView/RTFProducer.j index b33042d95..ec7f061a2 100755 --- a/AppKit/CPTextView/RTFProducer.j +++ b/AppKit/CPTextView/RTFProducer.j @@ -22,7 +22,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import +@import @import "CPFont.j" @import "CPParagraphStyle.j" @import "CPColor.j" From f32b9e26e098545e51f86636f8d523eca1d7db85 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sun, 9 Feb 2014 11:00:25 +0100 Subject: [PATCH 223/278] eliminate warnings + style --- AppKit/CPFontManager.j | 14 +- AppKit/CPText.j | 202 +--------------- AppKit/CPTextView/CPFontPanel.j | 8 +- AppKit/CPTextView/CPLayoutManager.j | 208 +--------------- AppKit/CPTextView/CPParagraphStyle.j | 2 +- AppKit/CPTextView/CPTextContainer.j | 1 + AppKit/CPTextView/CPTextStorage.j | 5 +- AppKit/CPTextView/CPTextView.j | 222 +++++++++++++++++- AppKit/CPTextView/CPTypesetter.j | 4 +- .../{RTFParser.j => _CPRTFParser.j} | 15 +- .../{RTFProducer.j => _CPRTFProducer.j} | 146 ++++++------ 11 files changed, 320 insertions(+), 507 deletions(-) rename AppKit/CPTextView/{RTFParser.j => _CPRTFParser.j} (98%) rename AppKit/CPTextView/{RTFProducer.j => _CPRTFProducer.j} (73%) diff --git a/AppKit/CPFontManager.j b/AppKit/CPFontManager.j index 4cb17da0e..309334de8 100644 --- a/AppKit/CPFontManager.j +++ b/AppKit/CPFontManager.j @@ -22,6 +22,7 @@ @import +@import "CPControl.j" @import "CPFont.j" @import "CPFontPanel.j" @import "CPFontDescriptor.j" @@ -74,6 +75,8 @@ CPRemoveTraitFontAction = 7; BOOL _multiple @accessors(getter=isMultiple, setter=setMultiple:); CPDictionary _activeChange; + + unsigned _fontAction; } // Getting the Shared Font Manager @@ -98,6 +101,15 @@ CPRemoveTraitFontAction = 7; { CPFontManagerFactory = aClass; } +/*! + Sets the class that will be used to create the application's + Font panel. +*/ ++ (void)setFontPanelFactory:(Class)aClass +{ + CPFontPanelFactory = aClass; +} + - (id)init { @@ -380,7 +392,7 @@ CPRemoveTraitFontAction = 7; break; case CPAddTraitFontAction: - newFont = [self convertFont:aFont toHaveTrait:_currentFontTrait]; + newFont = [self convertFont:aFont toHaveTrait:[self traitsOfFont:aFont]]; break; case CPSizeUpFontAction: diff --git a/AppKit/CPText.j b/AppKit/CPText.j index a238216cc..d612f987b 100644 --- a/AppKit/CPText.j +++ b/AppKit/CPText.j @@ -10,6 +10,8 @@ * Daniel Boehringer on 8/02/2014. * Copyright Daniel Boehringer on 8/02/2014. * + * and + * * Emmanuel Maillard on 28/02/2010. * Copyright Emmanuel Maillard 2010. * @@ -29,13 +31,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPControl.j" - -/* -@import "RTFProducer.j" -@import "RTFParser.j" -*/ - CPParagraphSeparatorCharacter = 0x2029; CPLineSeparatorCharacter = 0x2028; CPEnterCharacter = "\u0003"; @@ -65,196 +60,3 @@ CPTextDidBeginEditingNotification = @"CPTextDidBeginEditingNotification"; CPTextDidChangeNotification = @"CPTextDidChangeNotification"; CPTextDidEndEditingNotification = @"CPTextDidEndEditingNotification"; -@implementation CPText : CPControl -{ -} - -- (void)changeFont:(id)sender -{ - CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); -} - -- (void)copy:(id)sender -{ - var selectedRange = [self selectedRange]; - - if (selectedRange.length < 1) - return; - - var pasteboard = [CPPasteboard generalPasteboard], - stringForPasting = [[self stringValue] substringWithRange:selectedRange]; - - [pasteboard declareTypes:[CPStringPboardType] owner:nil]; - - if ([self isRichText]) - { - // crude hack to make rich pasting possible in chrome and firefox. this requires a RTF roundtrip, unfortunately - var richData = [RTFProducer produceRTF:[[self textStorage] attributedSubstringFromRange:selectedRange] documentAttributes: @{}]; - [pasteboard setString:richData forType:CPStringPboardType]; - } - else - [pasteboard setString:stringForPasting forType:CPStringPboardType]; - -} -- (void)paste:(id)sender -{ - var pasteboard = [CPPasteboard generalPasteboard], - // dataForPasting = [pasteboard dataForType:CPRichStringPboardType], - stringForPasting = [pasteboard stringForType:CPStringPboardType]; - - if ([stringForPasting hasPrefix:"{\\rtf1\\ansi"]) - stringForPasting = [[_RTFParser new] parseRTF:stringForPasting]; - - if (![self isRichText] && [stringForPasting isKindOfClass:[CPAttributedString class]]) - stringForPasting = stringForPasting._string; - - if (stringForPasting) - [self insertText:stringForPasting]; -} - -- (void)copyFont:(id)sender -{ - CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); -} - -- (void)cut:(id)sender -{ - [self copy:sender]; - - var loc = [self selectedRange].location; - - [self replaceCharactersInRange:[self selectedRange] withString:""]; - [self setSelectedRange:CPMakeRange(loc,0) ]; -} - -- (void)delete:(id)sender -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (CPFont)font:(CPFont)aFont -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return nil; -} - -- (BOOL)isHorizontallyResizable -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return NO; -} - -- (BOOL)isRichText -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return NO; -} - -- (BOOL)isRulerVisible -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return NO; -} - -- (BOOL)isVerticallyResizable -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return NO; -} - -- (CPSize)maxSize -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return CPMakeSize(0,0); -} - -- (CPSize)minSize -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return CPMakeSize(0,0); -} - -- (void)pasteFont:(id)sender -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)scrollRangeToVisible:(CPRange)aRange -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)selectedAll:(id)sender -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (CPRange)selectedRange -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return CPMakeRange(CPNotFound, 0); -} - -- (void)setFont:(CPFont)aFont -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)setFont:(CPFont)aFont rang:(CPRange)aRange -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)setHorizontallyResizable:(BOOL)flag -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)setMaxSize:(CPSize)aSize -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)setMinSize:(CPSize)aSize -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)setString:(CPString)aString -{ - [self replaceCharactersInRange: CPMakeRange(0, [[self string] length]) withString:aString]; -} - -- (void)setUsesFontPanel:(BOOL)flag -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (void)setVerticallyResizable:(BOOL)flag -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (CPString)string -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return nil; -} - -- (void)underline:(id)sender -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); -} - -- (BOOL)usesFontPanel -{ - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); - return NO; -} - -@end diff --git a/AppKit/CPTextView/CPFontPanel.j b/AppKit/CPTextView/CPFontPanel.j index fac94ed4b..d8385cb73 100755 --- a/AppKit/CPTextView/CPFontPanel.j +++ b/AppKit/CPTextView/CPFontPanel.j @@ -30,9 +30,11 @@ */ +@import "CPTextStorage.j" @import "CPFontManager.j" @import "CPPanel.j" -@import "CPLayoutManager.j" +@import "CPColorWell.j" +@import "CPColorPanel.j" /* Collection indexes @@ -69,7 +71,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], CPTextContainer _textContainer; } -- (id)initWithFrame:(CPRect)rect +- (id)initWithFrame:(CGRect)rect { self = [super initWithFrame:rect]; @@ -95,7 +97,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], [self setNeedsDisplay:YES]; } -- (void)drawRect:(CPRect)rect +- (void)drawRect:(CGRect)rect { var ctx = [[CPGraphicsContext currentContext] graphicsPort], glyphRange = [_layoutManager glyphRangeForTextContainer:_textContainer], diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 1e18b58d5..040e2ec1c 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -28,7 +28,7 @@ @import "CPTextStorage.j" @import "CPTextContainer.j" -@import "CPTypesetter.j" +@import "CPTextView.j" function _RectEqualToRectHorizontally(lhsRect, rhsRect) { @@ -918,100 +918,9 @@ var _objectsInRange = function(aList, aRange) [tempAttributes._attributes addEntriesFromDictionary:attributes]; } -// i did not touch this monster (yet) - (void)_handleTemporaryAttributes:(CPDictionary)attributes forCharacterRange:(CPRange)charRange withSelector:(SEL)attributesOperation { - if (!_temporaryAttributes) - _temporaryAttributes = [[CPMutableArray alloc] init]; - - var location = charRange.location, - length = 0, - dirtyRange = nil; - - while (length != charRange.length) - { - var tempAttributesIndex = [_temporaryAttributes indexOfObject: location sortedByFunction:_sortRange context:nil]; - - if (tempAttributesIndex != CPNotFound) - { - var tempAttributes = _temporaryAttributes[tempAttributesIndex]; - - if (CPRangeInRange(charRange, tempAttributes._range)) - { - [self performSelector:attributesOperation withObject:attributes withObject:tempAttributes]; - dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); - location += tempAttributes._range.length; - length += tempAttributes._range.length; - } - else if (location == tempAttributes._range.location && CPMaxRange(tempAttributes._range) > CPMaxRange(charRange)) - { - var maxRange = CPMaxRange(charRange), - splittedAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(maxRange, CPMaxRange(tempAttributes._range) - maxRange) - attributes:[tempAttributes._attributes copy]]; - - if ([_temporaryAttributes count] == tempAttributesIndex + 1) - [_temporaryAttributes addObject:splittedAttribute]; - else - [_temporaryAttributes insertObject:splittedAttribute atIndex:tempAttributesIndex + 1]; - - tempAttributes._range = CPMakeRange(tempAttributes._range.location, maxRange - tempAttributes._range.location); - [self performSelector:attributesOperation withObject:attributes withObject:tempAttributes]; - - location += tempAttributes._range.length; - length += tempAttributes._range.length; - - dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); - dirtyRange = CPUnionRange(dirtyRange, splittedAttribute._range); - } - else - { - var splittedAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(location, CPMaxRange(tempAttributes._range) - location) - attributes:[tempAttributes._attributes copy]]; - - if ([_temporaryAttributes count] == tempAttributesIndex + 1) - [_temporaryAttributes addObject:splittedAttribute]; - else - [_temporaryAttributes insertObject:splittedAttribute atIndex:tempAttributesIndex + 1]; - - tempAttributes._range = CPMakeRange(tempAttributes._range.location, location - tempAttributes._range.location); - dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); - dirtyRange = CPUnionRange(dirtyRange, splittedAttribute._range); - - if (splittedAttribute._range.length <= charRange.length) - { - location += splittedAttribute._range.length; - length += splittedAttribute._range.length; - } - else - { - var nextLocation = location + charRange.length, - nextAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(nextLocation, CPMaxRange(splittedAttribute._range) - nextLocation) - attributes:[tempAttributes._attributes copy]]; - - splittedAttribute._range = CPMakeRange(splittedAttribute._range.location, nextLocation - splittedAttribute._range.location); - - var insertIndex = [_temporaryAttributes indexOfObject:splittedAttribute]; - - if ([_temporaryAttributes count] == insertIndex + 1) - [_temporaryAttributes addObject:nextAttribute]; - else - [_temporaryAttributes insertObject:nextAttribute atIndex:insertIndex + 1]; - - length = charRange.length; - } - [self performSelector:attributesOperation withObject:attributes withObject:splittedAttribute]; - } - } - else - { - [_temporaryAttributes addObject:[[_CPTemporaryAttributes alloc] initWithRange:charRange attributes:attributes]]; - dirtyRange = CPMakeRangeCopy(charRange); - break; - } - } - - if (dirtyRange) - [self invalidateDisplayForGlyphRange:dirtyRange]; + // FIXME } - (void)setTemporaryAttributes:(CPDictionary)attributes forCharacterRange:(CPRange)charRange @@ -1024,126 +933,19 @@ var _objectsInRange = function(aList, aRange) [self _handleTemporaryAttributes:attributes forCharacterRange:charRange withSelector:@selector(_addAttributes:toTemporaryAttributes:)]; } -// i did not touch this monster (yet) - (void)removeTemporaryAttribute:(CPString)attributeName forCharacterRange:(CPRange)charRange { - if (!_temporaryAttributes) - return; - - var location = charRange.location, - length = 0, - dirtyRange = nil; - while (length != charRange.length) - { - var tempAttributesIndex = [_temporaryAttributes indexOfObject: location sortedByFunction:_sortRange context:nil]; - - if (tempAttributesIndex != CPNotFound) - { - var tempAttributes = _temporaryAttributes[tempAttributesIndex]; - - if (CPRangeInRange(charRange, tempAttributes._range)) - { - location += tempAttributes._range.length; - length += tempAttributes._range.length; - dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); - - [tempAttributes._attributes removeObjectForKey:attributeName]; - - if ([[tempAttributes._attributes allKeys] count] == 0) - [_temporaryAttributes removeObjectAtIndex:tempAttributesIndex]; - } - else if (location == tempAttributes._range.location && CPMaxRange(tempAttributes._range) > CPMaxRange(charRange)) - { - var maxRange = CPMaxRange(charRange), - splittedAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(maxRange, CPMaxRange(tempAttributes._range) - maxRange) - attributes:[tempAttributes._attributes copy]]; - - if ([_temporaryAttributes count] == tempAttributesIndex + 1) - [_temporaryAttributes addObject:splittedAttribute]; - else - [_temporaryAttributes insertObject:splittedAttribute atIndex:tempAttributesIndex + 1]; - - tempAttributes._range = CPMakeRange(tempAttributes._range.location, maxRange - tempAttributes._range.location); - location += tempAttributes._range.length; - length += tempAttributes._range.length; - - [tempAttributes._attributes removeObjectForKey:attributeName]; - if ([[tempAttributes._attributes allKeys] count] == 0) - [_temporaryAttributes removeObjectAtIndex:tempAttributesIndex]; - - dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); - dirtyRange = CPUnionRange(dirtyRange, splittedAttribute._range); - } - else - { - var splittedAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(location, CPMaxRange(tempAttributes._range) - location) - attributes:[tempAttributes._attributes copy]]; - - if ([_temporaryAttributes count] == tempAttributesIndex + 1) - [_temporaryAttributes addObject:splittedAttribute]; - else - [_temporaryAttributes insertObject:splittedAttribute atIndex:tempAttributesIndex + 1]; - - tempAttributes._range = CPMakeRange(tempAttributes._range.location, location - tempAttributes._range.location); - - dirtyRange = (dirtyRange)?CPUnionRange(dirtyRange, tempAttributes._range):CPMakeRangeCopy(tempAttributes._range); - dirtyRange = CPUnionRange(dirtyRange, splittedAttribute._range); - - if (splittedAttribute._range.length < charRange.length) - { - location += splittedAttribute._range.length; - length += splittedAttribute._range.length; - } - else - { - var nextLocation = location + charRange.length, - nextAttribute = [[_CPTemporaryAttributes alloc] initWithRange:CPMakeRange(nextLocation, CPMaxRange(splittedAttribute._range) - nextLocation) - attributes:[tempAttributes._attributes copy]]; - - splittedAttribute._range = CPMakeRange(splittedAttribute._range.location, nextLocation - splittedAttribute._range.location); - var insertIndex = [_temporaryAttributes indexOfObject:splittedAttribute]; - - if ([_temporaryAttributes count] == insertIndex + 1) - [_temporaryAttributes addObject:nextAttribute]; - else - [_temporaryAttributes insertObject:nextAttribute atIndex:insertIndex + 1]; - - length = charRange.length; - } - - [splittedAttribute._attributes removeObjectForKey:attributeName]; - if ([[splittedAttribute._attributes allKeys] count] == 0) - [_temporaryAttributes removeObject:splittedAttribute]; - } - } - else - break; - } - - if (dirtyRange) - [self invalidateDisplayForGlyphRange:dirtyRange]; - + // FIXME } - (CPDictionary)temporaryAttributesAtCharacterIndex:(unsigned)index effectiveRange:(CPRangePointer)effectiveRange { - var tempAttribute = _objectWithLocationInRange(_runs, index); // _runs is wild guess - - if (!tempAttribute) - return nil; - - if (effectiveRange) - { - effectiveRange.location = tempAttribute._range.location; - effectiveRange.length = tempAttribute._range.length; - } - - return tempAttribute._attributes; + // FIXME } - (void)textContainerChangedTextView:(CPTextContainer)aContainer { - /* FIXME: stub */ + // FIXME } - (CPTypesetter)typesetter diff --git a/AppKit/CPTextView/CPParagraphStyle.j b/AppKit/CPTextView/CPParagraphStyle.j index 5d372880f..1c67cd668 100755 --- a/AppKit/CPTextView/CPParagraphStyle.j +++ b/AppKit/CPTextView/CPParagraphStyle.j @@ -25,7 +25,7 @@ */ @import -@import "CPText.j" +@import "CPControl.j" var _sharedDefaultParagraphStyle, _defaultTabStopArray; diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j index e5bbc68d5..248dd78cf 100755 --- a/AppKit/CPTextView/CPTextContainer.j +++ b/AppKit/CPTextView/CPTextContainer.j @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@import @import "CPLayoutManager.j" /* diff --git a/AppKit/CPTextView/CPTextStorage.j b/AppKit/CPTextView/CPTextStorage.j index bf2fc3855..ecb3306c6 100755 --- a/AppKit/CPTextView/CPTextStorage.j +++ b/AppKit/CPTextView/CPTextStorage.j @@ -21,7 +21,8 @@ */ -//@import +@import +@import @import "CPLayoutManager.j" @@ -226,7 +227,7 @@ CPKernAttributeName = @"CPKernAttributeName"; } } -- (void)removeAttribute:(id)anAttribute range:(CPRange)aRange +- (void)removeAttribute:(CPString)anAttribute range:(CPRange)aRange { [self beginEditing]; [super removeAttribute:anAttribute range:aRange]; diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 226526f77..326fbec8b 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -24,11 +24,12 @@ */ @import "CPText.j" -@import "CPParagraphStyle.j" @import "CPTextStorage.j" @import "CPTextContainer.j" -@import "CPLayoutManager.j" @import "CPFontManager.j" +@import "_CPRTFProducer.j" +@import "_CPRTFParser.j" +@import "CPLayoutManager.j" _MakeRangeFromAbs = function(a1, a2) { @@ -74,6 +75,203 @@ var kDelegateRespondsTo_textShouldBeginEditing kDelegateRespondsTo_textView_shouldChangeTextInRange_replacementString = 0x0008, kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes = 0x0010; + + +@implementation CPText : CPControl +{ +} + +- (void)changeFont:(id)sender +{ + CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); +} + +- (void)copy:(id)sender +{ + var selectedRange = [self selectedRange]; + + if (selectedRange.length < 1) + return; + + var pasteboard = [CPPasteboard generalPasteboard], + stringForPasting = [[self stringValue] substringWithRange:selectedRange]; + + [pasteboard declareTypes:[CPStringPboardType] owner:nil]; + + if ([self isRichText]) + { + // crude hack to make rich pasting possible in chrome and firefox. this requires a RTF roundtrip, unfortunately + var richData = [_CPRTFProducer produceRTF:[[self textStorage] attributedSubstringFromRange:selectedRange] documentAttributes: @{}]; + [pasteboard setString:richData forType:CPStringPboardType]; + } + else + [pasteboard setString:stringForPasting forType:CPStringPboardType]; + +} +- (void)paste:(id)sender +{ + var pasteboard = [CPPasteboard generalPasteboard], + // dataForPasting = [pasteboard dataForType:CPRichStringPboardType], + stringForPasting = [pasteboard stringForType:CPStringPboardType]; + + if ([stringForPasting hasPrefix:"{\\rtf1\\ansi"]) + stringForPasting = [[_CPRTFParser new] parseRTF:stringForPasting]; + + if (![self isRichText] && [stringForPasting isKindOfClass:[CPAttributedString class]]) + stringForPasting = stringForPasting._string; + + if (stringForPasting) + [self insertText:stringForPasting]; +} + +- (void)copyFont:(id)sender +{ + CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); +} + +- (void)cut:(id)sender +{ + [self copy:sender]; + + var loc = [self selectedRange].location; + + [self replaceCharactersInRange:[self selectedRange] withString:""]; + [self setSelectedRange:CPMakeRange(loc,0) ]; +} + +- (void)delete:(id)sender +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (CPFont)font:(CPFont)aFont +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return nil; +} + +- (BOOL)isHorizontallyResizable +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +- (BOOL)isRichText +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +- (BOOL)isRulerVisible +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +- (BOOL)isVerticallyResizable +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +- (CPSize)maxSize +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return CPMakeSize(0,0); +} + +- (CPSize)minSize +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return CPMakeSize(0,0); +} + +- (void)pasteFont:(id)sender +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)scrollRangeToVisible:(CPRange)aRange +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)selectedAll:(id)sender +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (CPRange)selectedRange +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return CPMakeRange(CPNotFound, 0); +} + +- (void)setFont:(CPFont)aFont +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setFont:(CPFont)aFont rang:(CPRange)aRange +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setHorizontallyResizable:(BOOL)flag +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setMaxSize:(CPSize)aSize +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setMinSize:(CPSize)aSize +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setString:(CPString)aString +{ + [self replaceCharactersInRange: CPMakeRange(0, [[self string] length]) withString:aString]; +} + +- (void)setUsesFontPanel:(BOOL)flag +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (void)setVerticallyResizable:(BOOL)flag +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (CPString)string +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return nil; +} + +- (void)underline:(id)sender +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); +} + +- (BOOL)usesFontPanel +{ + CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + return NO; +} + +@end + + /*! @ingroup appkit @class CPTextView @@ -127,13 +325,13 @@ var kDelegateRespondsTo_textShouldBeginEditing int _stickyXLocation; } -- (id)initWithFrame:(CPRect)aFrame textContainer:(CPTextContainer)aContainer +- (id)initWithFrame:(CGRect)aFrame textContainer:(CPTextContainer)aContainer { self = [super initWithFrame:aFrame]; if (self) { - _DOMElement.style.cursor = "text"; + self._DOMElement.style.cursor = "text"; _textContainerInset = CPSizeMake(2,0); _textContainerOrigin = CPPointMake(_bounds.origin.x, _bounds.origin.y); [aContainer setTextView:self]; @@ -202,7 +400,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [[[self window] undoManager] redo]; } -- (id)initWithFrame:(CPRect)aFrame +- (id)initWithFrame:(CGRect)aFrame { var layoutManager = [[CPLayoutManager alloc] init], textStorage = [[CPTextStorage alloc] init], @@ -403,7 +601,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self setNeedsDisplay:YES]; } -- (void)insertText:(id)aString +- (void)insertText:(CPString)aString { var isAttributed = [aString isKindOfClass:CPAttributedString], string = (isAttributed)?[aString string]:aString; @@ -454,7 +652,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self setNeedsDisplayInRect:_caretRect]; } -- (void)drawRect:(CPRect)aRect +- (void)drawRect:(CGRect)aRect { var ctx = [[CPGraphicsContext currentContext] graphicsPort], range = [_layoutManager glyphRangeForBoundingRect:aRect inTextContainer:_textContainer]; @@ -1188,7 +1386,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self deleteBackward: sender]; } -- stringValue +- (CPString)stringValue { return _textStorage._string; } @@ -1297,7 +1495,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)setUsesFontPanel:(BOOL)flag { - _usesFontPanel = flags; + _usesFontPanel = flag; } - (BOOL)usesFontPanel @@ -1415,7 +1613,7 @@ var kDelegateRespondsTo_textShouldBeginEditing _minSize = aSize; } -- (void)setConstrainedFrameSize:(CPSize)desiredSize +- (void)setConstrainedFrameSize:(CGSize)desiredSize { [self setFrameSize:desiredSize]; } @@ -1426,7 +1624,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } -- (void)setFrameSize:(CPSize) aSize +- (void)setFrameSize:(CGSize) aSize { var minSize = [self minSize], maxSize = [self maxSize], @@ -1636,7 +1834,7 @@ var kDelegateRespondsTo_textShouldBeginEditing return (_selectionRange.length === 0 && [self _isFocused]) } -- (void)drawInsertionPointInRect:(CPRect)aRect color:(CPColor)aColor turnedOn:(BOOL)flag +- (void)drawInsertionPointInRect:(CGRect)aRect color:(CPColor)aColor turnedOn:(BOOL)flag { var style; if (!_caretDOM) diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index a4efc9991..ee2726817 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -27,8 +27,8 @@ */ @import -@import "CPTextStorage.j" @import "CPParagraphStyle.j" +@import "CPTextStorage.j" /* CPTypesetterControlCharacterAction @@ -110,7 +110,7 @@ var CPSystemTypesetterFactory = Nil; - (void)layoutGlyphsInLayoutManager:(CPLayoutManager)layoutManager startingAtGlyphIndex:(unsigned)startGlyphIndex maxNumberOfLineFragments:(unsigned)maxNumLines - nextGlyphIndex:(UIntegerPointer)nextGlyph + nextGlyphIndex:(UIntegerReference)nextGlyph { CPLog.error(@"-[CPTypesetter subclass responsibility"); } diff --git a/AppKit/CPTextView/RTFParser.j b/AppKit/CPTextView/_CPRTFParser.j similarity index 98% rename from AppKit/CPTextView/RTFParser.j rename to AppKit/CPTextView/_CPRTFParser.j index 240c23ba6..996b5a863 100755 --- a/AppKit/CPTextView/RTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -25,8 +25,9 @@ e.g. using zaach/jison on github */ @import -@import "CPControl.j" @import +@import "CPControl.j" +@import "CPFontManager.j" var hexTable = []; @@ -87,20 +88,14 @@ var hexTable = []; { var fontFamily = [fontName substringToIndex: range.location]; - font = [[CPFontManager sharedFontManager] fontWithFamily: fontFamily - traits: traits - weight: weight - size: fontSize]; + font = [CPFont fontWithName:fontFamily size:fontSize]; } if (font == nil) { - console.log(@"RTFParser", - @"Could not find font %@ size %f traits %d weight %d", - fontName, fontSize, traits, weight); /* Last resort, default font. :-( */ - font = [CPFont systemFontOfSize: fontSize]; + font = [CPFont systemFontOfSize:fontSize]; } } return font; @@ -258,7 +253,7 @@ var kRgsymRtf = { "\\" : [ "\\", 0, false, kRTFParserType_char, '\\'] } -@implementation _RTFParser : CPObject +@implementation _CPRTFParser : CPObject { CPString _codePage; CPSize _paper; diff --git a/AppKit/CPTextView/RTFProducer.j b/AppKit/CPTextView/_CPRTFProducer.j similarity index 73% rename from AppKit/CPTextView/RTFProducer.j rename to AppKit/CPTextView/_CPRTFProducer.j index ec7f061a2..f7dea8aa1 100755 --- a/AppKit/CPTextView/RTFProducer.j +++ b/AppKit/CPTextView/_CPRTFProducer.j @@ -23,9 +23,11 @@ */ @import -@import "CPFont.j" @import "CPParagraphStyle.j" @import "CPColor.j" +@import "CPGraphics.j" +@import "CPTextStorage.j" +@import "CPFontManager.j" var PAPERSIZE = @"PaperSize"; @@ -34,12 +36,10 @@ var RIGHTMARGIN = @"RightMargin"; var TOPMARGIN = @"TopMargin"; var BUTTOMMARGIN = @"ButtomMargin"; -CPISOLatin1StringEncoding = "CPISOLatin1StringEncoding"; - function _points2twips(a) { return (a)*20.0; } -@implementation RTFProducer:CPObject +@implementation _CPRTFProducer:CPObject { CPAttributedString text; CPMutableDictionary fontDict; @@ -53,13 +53,13 @@ function _points2twips(a) { return (a)*20.0; } CPColor ulColor; } -+ (CPString)produceRTF: (CPAttributedString) aText documentAttributes: (CPDictionary)dict ++ (CPString)produceRTF:(CPAttributedString) aText documentAttributes:(CPDictionary)dict { var mynew = [self new], data; - return [mynew RTFDStringFromAttributedString: aText - documentAttributes: dict]; + return [mynew RTFDStringFromAttributedString:aText + documentAttributes:dict]; } - (id)init @@ -94,7 +94,7 @@ function _points2twips(a) { return (a)*20.0; } var keyArray; keyArray = [fontDict allKeys]; - keyArray = [keyArray sortedArrayUsingSelector: @selector(compare:)]; + keyArray = [keyArray sortedArrayUsingSelector:@selector(compare:)]; fontEnum = [keyArray objectEnumerator]; while ((currFont = [fontEnum nextObject]) !== nil) @@ -102,23 +102,23 @@ function _points2twips(a) { return (a)*20.0; } var fontFamily; var detail; - if ([currFont isEqualToString: @"Symbol"]) + if ([currFont isEqualToString:@"Symbol"]) fontFamily = @"tech"; - else if ([currFont isEqualToString: @"Helvetica"]) + else if ([currFont isEqualToString:@"Helvetica"]) fontFamily = @"swiss"; - else if ([currFont isEqualToString: @"Arial"]) + else if ([currFont isEqualToString:@"Arial"]) fontFamily = @"swiss"; - else if ([currFont isEqualToString: @"Courier"]) + else if ([currFont isEqualToString:@"Courier"]) fontFamily = @"modern"; - else if ([currFont isEqualToString: @"Times"]) + else if ([currFont isEqualToString:@"Times"]) fontFamily = @"roman"; else fontFamily = @"nil"; - detail = [CPString stringWithFormat: @"%@\\f%@ %@;", - [fontDict objectForKey: currFont], fontFamily, currFont]; + detail = [CPString stringWithFormat:@"%@\\f%@ %@;", + [fontDict objectForKey:currFont], fontFamily, currFont]; fontlistString += detail; } - return [CPString stringWithFormat: @"{\\fonttbl%@}\n", fontlistString]; + return [CPString stringWithFormat:@"{\\fonttbl%@}\n", fontlistString]; } else return @""; @@ -131,22 +131,22 @@ function _points2twips(a) { return (a)*20.0; } { var result, count = [colorDict count], - list = [CPMutableArray arrayWithCapacity: count], + list = [CPMutableArray arrayWithCapacity:count], keyEnum = [colorDict keyEnumerator], next, i; while ((next = [keyEnum nextObject]) != nil) { - var cn = [colorDict objectForKey: next]; - [list insertObject: next atIndex: [cn intValue]-1]; + var cn = [colorDict objectForKey:next]; + [list insertObject:next atIndex:[cn intValue]-1]; } - result = [CPString stringWithString: @"{\\colortbl;"]; + result = [CPString stringWithString:@"{\\colortbl;"]; for (i = 0; i < count; i++) { - var color = [[list objectAtIndex: i] - colorUsingColorSpaceName: CPCalibratedRGBColorSpace]; + var color = [[list objectAtIndex:i] + colorUsingColorSpaceName:CPCalibratedRGBColorSpace]; result += [CPString stringWithFormat: @"\\red%d\\green%d\\blue%d;", ([color redComponent]*255), @@ -172,45 +172,45 @@ function _points2twips(a) { return (a)*20.0; } result = [CPString string]; - val = [docDict objectForKey: PAPERSIZE]; + val = [docDict objectForKey:PAPERSIZE]; if (val != nil) { var size = [val sizeValue]; - detail = [CPString stringWithFormat: @"\\paperw%d \\paperh%d", + detail = [CPString stringWithFormat:@"\\paperw%d \\paperh%d", _points2twips(size.width), _points2twips(size.height)]; result += detail; } - num = [docDict objectForKey: LEFTMARGIN]; + num = [docDict objectForKey:LEFTMARGIN]; if (num != nil) { var f = [num floatValue]; - detail = [CPString stringWithFormat: @"\\margl%d", + detail = [CPString stringWithFormat:@"\\margl%d", _points2twips(f)]; result+= detail; } - num = [docDict objectForKey: RIGHTMARGIN]; + num = [docDict objectForKey:RIGHTMARGIN]; if (num != nil) { var f = [num floatValue]; - detail = [CPString stringWithFormat: @"\\margr%d", + detail = [CPString stringWithFormat:@"\\margr%d", _points2twips(f)]; result += detail; } - num = [docDict objectForKey: TOPMARGIN]; + num = [docDict objectForKey:TOPMARGIN]; if (num != nil) { var f = [num floatValue]; - detail = [CPString stringWithFormat: @"\\margt%d", + detail = [CPString stringWithFormat:@"\\margt%d", _points2twips(f)]; result += detail; } - num = [docDict objectForKey: BUTTOMMARGIN]; + num = [docDict objectForKey:BUTTOMMARGIN]; if (num != nil) { var f = [num floatValue]; - detail = [CPString stringWithFormat: @"\\margb%d", + detail = [CPString stringWithFormat:@"\\margb%d", _points2twips(f)]; result += detail; } @@ -225,7 +225,7 @@ function _points2twips(a) { return (a)*20.0; } { var result; - result = [CPString stringWithString: @"{\\rtf1\\ansi"]; + result = [CPString stringWithString:@"{\\rtf1\\ansi"]; result += [self fontTable]; result += [self colorTable]; @@ -239,39 +239,39 @@ function _points2twips(a) { return (a)*20.0; } return @"}"; } -- (CPString)fontToken: (CPString) fontName +- (CPString)fontToken:(CPString) fontName { - var fCount = [fontDict objectForKey: fontName]; + var fCount = [fontDict objectForKey:fontName]; if (fCount == nil) { var count = [fontDict count]; - fCount = [CPString stringWithFormat: @"\\f%d", count]; - [fontDict setObject: fCount forKey: fontName]; + fCount = [CPString stringWithFormat:@"\\f%d", count]; + [fontDict setObject:fCount forKey:fontName]; } return fCount; } -- (int)numberForColor: (CPColor)color +- (int)numberForColor:(CPColor)color { var cn, - num = [colorDict objectForKey: color]; + num = [colorDict objectForKey:color]; if (num == nil) { cn = [colorDict count] + 1; - [colorDict setObject: [CPNumber numberWithInt: cn] - forKey: color]; + [colorDict setObject:[CPNumber numberWithInt:cn] + forKey:color]; } var cn = [num intValue]; return cn + 1; } -- (CPString) paragraphStyle: (CPParagraphStyle) paraStyle +- (CPString) paragraphStyle:(CPParagraphStyle) paraStyle { var headerString = [CPString stringWithString:@"\\pard\\plain"], twips; @@ -327,7 +327,7 @@ function _points2twips(a) { return (a)*20.0; } twips = _points2twips([paraStyle maximumLineHeight]); if (twips != 0.0) { - headerString += [CPString stringWithFormat: @"\\sl-%d", twips]; + headerString += [CPString stringWithFormat:@"\\sl-%d", twips]; } // tabs if (1) @@ -363,9 +363,9 @@ function _points2twips(a) { return (a)*20.0; } return headerString; } -- (CPString) runStringForString: (CPString) substring - attributes: (CPDictionary) attributes - paragraphStart: (BOOL) first +- (CPString) runStringForString:(CPString) substring + attributes:(CPDictionary) attributes + paragraphStart:(BOOL) first { var result = "", headerString = "", @@ -376,7 +376,7 @@ function _points2twips(a) { return (a)*20.0; } if (first) { var paraStyle = [attributes objectForKey:CPParagraphStyleAttributeName]; - headerString += [self paragraphStyle: paraStyle]; + headerString += [self paragraphStyle:paraStyle]; } /* @@ -390,7 +390,7 @@ function _points2twips(a) { return (a)*20.0; } attribEnum = [attributes keyEnumerator]; while ((currAttrib = [attribEnum nextObject]) != nil) { - if ([currAttrib isEqualToString: CPFontAttributeName]) + if ([currAttrib isEqualToString:CPFontAttributeName]) { /* * handle fonts @@ -399,17 +399,17 @@ function _points2twips(a) { return (a)*20.0; } fontName, traits; - font = [attributes objectForKey: CPFontAttributeName]; + font = [attributes objectForKey:CPFontAttributeName]; fontName = [font familyName]; - traits = [[CPFontManager sharedFontManager] traitsOfFont: font]; + traits = [[CPFontManager sharedFontManager] traitsOfFont:font]; /* * font name */ if (currentFont == nil || - ![fontName isEqualToString: [currentFont familyName]]) + ![fontName isEqualToString:[currentFont familyName]]) { - headerString += [self fontToken: fontName]; + headerString += [self fontToken:fontName]; } /* * font size @@ -420,7 +420,7 @@ function _points2twips(a) { return (a)*20.0; } var points =[font size]*2, pString; - pString = [CPString stringWithFormat: @"\\fs%d", points]; + pString = [CPString stringWithFormat:@"\\fs%d", points]; headerString += pString; } /* @@ -440,32 +440,32 @@ function _points2twips(a) { return (a)*20.0; } if (first) currentFont = font; } - else if ([currAttrib isEqualToString: CPForegroundColorAttributeName]) + else if ([currAttrib isEqualToString:CPForegroundColorAttributeName]) { - var color = [attributes objectForKey: CPForegroundColorAttributeName]; - if (![color isEqual: fgColor]) + var color = [attributes objectForKey:CPForegroundColorAttributeName]; + if (![color isEqual:fgColor]) { headerString += [CPString stringWithFormat:@"\\cf%d", [self numberForColor:color]]; trailerString += @"\\cf0"; } } - else if ([currAttrib isEqualToString: CPBackgroundColorAttributeName]) + else if ([currAttrib isEqualToString:CPBackgroundColorAttributeName]) { - var color = [attributes objectForKey: CPBackgroundColorAttributeName]; - if (![color isEqual: bgColor]) + var color = [attributes objectForKey:CPBackgroundColorAttributeName]; + if (![color isEqual:bgColor]) { - headerString += [CPString stringWithFormat:@"\\cb%d", [self numberForColor: color]]; + headerString += [CPString stringWithFormat:@"\\cb%d", [self numberForColor:color]]; trailerString += @"\\cb0"; } } - else if ([currAttrib isEqualToString: CPUnderlineStyleAttributeName]) + else if ([currAttrib isEqualToString:CPUnderlineStyleAttributeName]) { headerString += @"\\ul"; trailerString += @"\\ulnone"; } - else if ([currAttrib isEqualToString: CPSuperscriptAttributeName]) + else if ([currAttrib isEqualToString:CPSuperscriptAttributeName]) { - var value = [attributes objectForKey: CPSuperscriptAttributeName], + var value = [attributes objectForKey:CPSuperscriptAttributeName], svalue = [value intValue] * 6; if (svalue > 0) @@ -479,9 +479,9 @@ function _points2twips(a) { return (a)*20.0; } trailerString += @"\\dn0"; } } - else if ([currAttrib isEqualToString: CPBaselineOffsetAttributeName]) + else if ([currAttrib isEqualToString:CPBaselineOffsetAttributeName]) { - var value = [attributes objectForKey: CPBaselineOffsetAttributeName], + var value = [attributes objectForKey:CPBaselineOffsetAttributeName], svalue = [value floatValue] * 2; if (svalue > 0) @@ -495,13 +495,13 @@ function _points2twips(a) { return (a)*20.0; } trailerString += @"\\dn0"; } } - else if ([currAttrib isEqualToString: CPAttachmentAttributeName]) + else if ([currAttrib isEqualToString:CPAttachmentAttributeName]) { } - else if ([currAttrib isEqualToString: CPLigatureAttributeName]) + else if ([currAttrib isEqualToString:CPLigatureAttributeName]) { } - else if ([currAttrib isEqualToString: CPKernAttributeName]) + else if ([currAttrib isEqualToString:CPKernAttributeName]) { } } @@ -519,7 +519,7 @@ function _points2twips(a) { return (a)*20.0; } var braces; if ([headerString length]) - braces = [CPString stringWithFormat: @"{%@ %@}", headerString, substring]; + braces = [CPString stringWithFormat:@"{%@ %@}", headerString, substring]; else braces = substring; @@ -530,7 +530,7 @@ function _points2twips(a) { return (a)*20.0; } var nobraces; if ([headerString length]) - nobraces = [CPString stringWithFormat: @"%@ %@", headerString, substring]; + nobraces = [CPString stringWithFormat:@"%@ %@", headerString, substring]; else nobraces = substring; @@ -559,7 +559,7 @@ function _points2twips(a) { return (a)*20.0; } substring, runString; - attributes = [text attributesAtIndex: CPMaxRange(currRange) + attributes = [text attributesAtIndex:CPMaxRange(currRange) longestEffectiveRange:currRange inRange:completeRange]; substring = [string substringWithRange:currRange]; @@ -574,8 +574,8 @@ function _points2twips(a) { return (a)*20.0; } } -- (CPString) RTFDStringFromAttributedString: (CPAttributedString)aText - documentAttributes: (CPDictionary)dict +- (CPString) RTFDStringFromAttributedString:(CPAttributedString)aText + documentAttributes:(CPDictionary)dict { var output = [CPString string], headerString, From 627d0e4e6f9bcca37d94167e601e590739cf4c59 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 10 Feb 2014 06:02:28 +0100 Subject: [PATCH 224/278] fix circular imports --- AppKit/CPTextView/CPFontPanel.j | 10 ++++++++-- AppKit/CPTextView/CPLayoutManager.j | 2 +- AppKit/CPTextView/CPTextStorage.j | 3 ++- AppKit/CPTextView/CPTextView.j | 8 ++++++-- AppKit/CPTextView/_CPRTFParser.j | 6 +++--- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/AppKit/CPTextView/CPFontPanel.j b/AppKit/CPTextView/CPFontPanel.j index d8385cb73..46cba7dbc 100755 --- a/AppKit/CPTextView/CPFontPanel.j +++ b/AppKit/CPTextView/CPFontPanel.j @@ -30,11 +30,17 @@ */ -@import "CPTextStorage.j" -@import "CPFontManager.j" @import "CPPanel.j" @import "CPColorWell.j" @import "CPColorPanel.j" +@import "CPBrowser.j" +@import "CPText.j" + + +@class CPTextStorage +@class CPLayoutManager +@class CPTextContainer +@class CPFontManager /* Collection indexes diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 040e2ec1c..75d226f54 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -28,7 +28,7 @@ @import "CPTextStorage.j" @import "CPTextContainer.j" -@import "CPTextView.j" +@import "CGContext.j" function _RectEqualToRectHorizontally(lhsRect, rhsRect) { diff --git a/AppKit/CPTextView/CPTextStorage.j b/AppKit/CPTextView/CPTextStorage.j index ecb3306c6..3ddf4173b 100755 --- a/AppKit/CPTextView/CPTextStorage.j +++ b/AppKit/CPTextView/CPTextStorage.j @@ -23,7 +23,8 @@ @import @import -@import "CPLayoutManager.j" + +@class CPLayoutManager; CPTextStorageEditedAttributes = 1; diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 326fbec8b..3e321f613 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -27,10 +27,14 @@ @import "CPTextStorage.j" @import "CPTextContainer.j" @import "CPFontManager.j" -@import "_CPRTFProducer.j" -@import "_CPRTFParser.j" +//@import "_CPRTFProducer.j" +//@import "_CPRTFParser.j" @import "CPLayoutManager.j" +@class _CPRTFProducer; +@class _CPRTFParser; + + _MakeRangeFromAbs = function(a1, a2) { return (a1 < a2) ? CPMakeRange(a1, a2 - a1) : CPMakeRange(a2, a1 - a2); diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index 996b5a863..b7a94790a 100755 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -26,8 +26,8 @@ e.g. using zaach/jison on github @import @import -@import "CPControl.j" @import "CPFontManager.j" +@import "CPTextStorage.j" var hexTable = []; @@ -143,8 +143,8 @@ var hexTable = []; - (void)addTab:(float)location type:(CPTextTabType)type { - var tab = [[CPTextTab alloc] initWithType: CPLeftTabStopType - location: location]; + var tab = [[CPTextTab alloc] initWithType:CPLeftTabStopType + location:location]; if (!_tabChanged) { From dacaf293b218e545a583217f5818f063c506ce9e Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 10 Feb 2014 21:07:57 +0100 Subject: [PATCH 225/278] fix of circular imports --- AppKit/CPFontManager.j | 3 +-- AppKit/CPText.j | 24 ++++++++++++++++++++---- AppKit/CPTextView/CPFontPanel.j | 2 ++ AppKit/CPTextView/CPLayoutManager.j | 5 ++++- AppKit/CPTextView/CPTextStorage.j | 15 +-------------- AppKit/CPTextView/CPTextView.j | 13 +++++-------- AppKit/CPTextView/_CPRTFParser.j | 3 ++- AppKit/CPTextView/_CPRTFProducer.j | 2 +- Tests/Manual/CPTextView/AppController.j | 8 ++++---- Tests/Manual/CPTextView/Info.plist | 10 ++++++---- 10 files changed, 46 insertions(+), 39 deletions(-) diff --git a/AppKit/CPFontManager.j b/AppKit/CPFontManager.j index 309334de8..a3932a469 100644 --- a/AppKit/CPFontManager.j +++ b/AppKit/CPFontManager.j @@ -24,10 +24,10 @@ @import "CPControl.j" @import "CPFont.j" -@import "CPFontPanel.j" @import "CPFontDescriptor.j" @global CPApp +@class CPFontPanel CPItalicFontMask = 1 << 0; CPBoldFontMask = 1 << 1; @@ -495,4 +495,3 @@ var _CPFontDetectPickTwoDifferentFonts = function(candidates) }; [CPFontManager setFontManagerFactory:[CPFontManager class]]; -[CPFontManager setFontPanelFactory:CPFontPanel]; diff --git a/AppKit/CPText.j b/AppKit/CPText.j index d612f987b..0474af889 100644 --- a/AppKit/CPText.j +++ b/AppKit/CPText.j @@ -10,10 +10,6 @@ * Daniel Boehringer on 8/02/2014. * Copyright Daniel Boehringer on 8/02/2014. * - * and - * - * Emmanuel Maillard on 28/02/2010. - * Copyright Emmanuel Maillard 2010. * * * This library is free software; you can redistribute it and/or @@ -60,3 +56,23 @@ CPTextDidBeginEditingNotification = @"CPTextDidBeginEditingNotification"; CPTextDidChangeNotification = @"CPTextDidChangeNotification"; CPTextDidEndEditingNotification = @"CPTextDidEndEditingNotification"; +/* + CPTextView Notifications +*/ +CPTextViewDidChangeSelectionNotification = @"CPTextViewDidChangeSelectionNotification"; +CPTextViewDidChangeTypingAttributesNotification = @"CPTextViewDidChangeTypingAttributesNotification"; + +/* + FIXME: move these to CPAttributed string + Make use of attributed keys in AppKit +*/ +CPFontAttributeName = @"CPFontAttributeName"; +CPForegroundColorAttributeName = @"CPForegroundColorAttributeName"; +CPBackgroundColorAttributeName = @"CPBackgroundColorAttributeName"; +CPShadowAttributeName = @"CPShadowAttributeName"; +CPUnderlineStyleAttributeName = @"CPUnderlineStyleAttributeName"; +CPSuperscriptAttributeName = @"CPSuperscriptAttributeName"; +CPBaselineOffsetAttributeName = @"CPBaselineOffsetAttributeName"; +CPAttachmentAttributeName = @"CPAttachmentAttributeName"; +CPLigatureAttributeName = @"CPLigatureAttributeName"; +CPKernAttributeName = @"CPKernAttributeName"; diff --git a/AppKit/CPTextView/CPFontPanel.j b/AppKit/CPTextView/CPFontPanel.j index 46cba7dbc..49ffd1821 100755 --- a/AppKit/CPTextView/CPFontPanel.j +++ b/AppKit/CPTextView/CPFontPanel.j @@ -35,6 +35,7 @@ @import "CPColorPanel.j" @import "CPBrowser.j" @import "CPText.j" +@import "CPFontManager.j" @class CPTextStorage @@ -493,3 +494,4 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], } @end +[CPFontManager setFontPanelFactory:CPFontPanel]; diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 75d226f54..0fe64fb64 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -26,9 +26,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPTextStorage.j" +@import "CPText.j" @import "CPTextContainer.j" @import "CGContext.j" +@import "CPTypesetter.j" + +@global _MakeRangeFromAbs function _RectEqualToRectHorizontally(lhsRect, rhsRect) { diff --git a/AppKit/CPTextView/CPTextStorage.j b/AppKit/CPTextView/CPTextStorage.j index 3ddf4173b..3bb139d69 100755 --- a/AppKit/CPTextView/CPTextStorage.j +++ b/AppKit/CPTextView/CPTextStorage.j @@ -23,6 +23,7 @@ @import @import +@import "CPText.j" @class CPLayoutManager; @@ -33,20 +34,6 @@ CPTextStorageEditedCharacters = 2; CPTextStorageWillProcessEditingNotification = @"CPTextStorageWillProcessEditingNotification"; CPTextStorageDidProcessEditingNotification = @"CPTextStorageDidProcessEditingNotification"; -/* - FIXME: move these to CPAttributed string - Make use of attributed keys in AppKit -*/ -CPFontAttributeName = @"CPFontAttributeName"; -CPForegroundColorAttributeName = @"CPForegroundColorAttributeName"; -CPBackgroundColorAttributeName = @"CPBackgroundColorAttributeName"; -CPShadowAttributeName = @"CPShadowAttributeName"; -CPUnderlineStyleAttributeName = @"CPUnderlineStyleAttributeName"; -CPSuperscriptAttributeName = @"CPSuperscriptAttributeName"; -CPBaselineOffsetAttributeName = @"CPBaselineOffsetAttributeName"; -CPAttachmentAttributeName = @"CPAttachmentAttributeName"; -CPLigatureAttributeName = @"CPLigatureAttributeName"; -CPKernAttributeName = @"CPKernAttributeName"; /*! @ingroup appkit diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 3e321f613..dc7f2757f 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -59,11 +59,6 @@ _MidRange = function(a1) @end -/* - CPTextView Notifications -*/ -CPTextViewDidChangeSelectionNotification = @"CPTextViewDidChangeSelectionNotification"; -CPTextViewDidChangeTypingAttributesNotification = @"CPTextViewDidChangeTypingAttributesNotification"; /* CPSelectionGranularity @@ -1404,9 +1399,11 @@ var kDelegateRespondsTo_textShouldBeginEditing { _font = font; var length = [_layoutManager numberOfCharacters]; - [_textStorage addAttribute:CPFontAttributeName value:_font range:CPMakeRange(0, length)]; - [_textStorage setFont:_font]; - [self scrollRangeToVisible:CPMakeRange(length, 0)]; + if (length) + { [_textStorage addAttribute:CPFontAttributeName value:_font range:CPMakeRange(0, length)]; + [_textStorage setFont:_font]; + [self scrollRangeToVisible:CPMakeRange(length, 0)]; + } } - (void)setFont:(CPFont)font range:(CPRange)range diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index b7a94790a..81c9617ef 100755 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -27,7 +27,8 @@ e.g. using zaach/jison on github @import @import @import "CPFontManager.j" -@import "CPTextStorage.j" +@import "CPText.j" +@import "CPParagraphStyle.j" var hexTable = []; diff --git a/AppKit/CPTextView/_CPRTFProducer.j b/AppKit/CPTextView/_CPRTFProducer.j index f7dea8aa1..9509de639 100755 --- a/AppKit/CPTextView/_CPRTFProducer.j +++ b/AppKit/CPTextView/_CPRTFProducer.j @@ -26,7 +26,7 @@ @import "CPParagraphStyle.j" @import "CPColor.j" @import "CPGraphics.j" -@import "CPTextStorage.j" +@import "CPText.j" @import "CPFontManager.j" diff --git a/Tests/Manual/CPTextView/AppController.j b/Tests/Manual/CPTextView/AppController.j index 1ba92ae56..0994a618e 100755 --- a/Tests/Manual/CPTextView/AppController.j +++ b/Tests/Manual/CPTextView/AppController.j @@ -6,8 +6,8 @@ */ @import -@import -@import +@import +@import @implementation AppController : CPObject { @@ -91,8 +91,8 @@ - (void) makeRTF:sender { - [_textView2 setString: [RTFProducer produceRTF:[_textView textStorage] documentAttributes: @{}] ]; - var tc = [_RTFParser new]; + [_textView2 setString: [_CPRTFProducer produceRTF:[_textView textStorage] documentAttributes: @{}] ]; + var tc = [_CPRTFParser new]; var mystr=[tc parseRTF:[_textView2 stringValue]]; [_textView selectAll: self]; [_textView insertText: mystr]; diff --git a/Tests/Manual/CPTextView/Info.plist b/Tests/Manual/CPTextView/Info.plist index 877388578..68f9e7d32 100644 --- a/Tests/Manual/CPTextView/Info.plist +++ b/Tests/Manual/CPTextView/Info.plist @@ -2,9 +2,11 @@ - Main cib file base name - MainMenu.cib - CPBundleName - CPLevelIndicator + CPApplicationDelegateClass + AppController + CPBundleName + CPTextViewTest + CPPrincipalClass + CPApplication From f0fb4b8842c2b9d12e35985fd74db9caa190245b Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 10 Feb 2014 21:25:56 +0100 Subject: [PATCH 226/278] formatting --- AppKit/CPTextView/CPTextView.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index dc7f2757f..574c5a337 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -971,7 +971,7 @@ var kDelegateRespondsTo_textShouldBeginEditing if (_isSelectable) { [self _extendSelectionIntoDirection: -1 granularity:CPSelectByCharacter]; - } + } } - (void)moveBackward:(id)sender { @@ -1027,7 +1027,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - [self _moveSelectionIntoDirection: +1 granularity:CPSelectByParagraph] + [self _moveSelectionIntoDirection: +1 granularity:CPSelectByParagraph] } } - (void) moveWordBackwardAndModifySelection:(id)sender @@ -1080,7 +1080,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - [self _moveSelectionIntoDirection: +1 granularity:CPSelectByWord] + [self _moveSelectionIntoDirection: +1 granularity:CPSelectByWord] } } From ccb15f278af3551864de0a4d56e8ecf7ffd295b1 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 10 Feb 2014 21:28:25 +0100 Subject: [PATCH 227/278] formatting --- AppKit/CPTextView/CPLayoutManager.j | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 0fe64fb64..bd9e60239 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -758,7 +758,8 @@ var _objectsInRange = function(aList, aRange) range = CPUnionRange(range, aRange); if (actualCharRange) - { actualCharRange.length = range.length; + { + actualCharRange.length = range.length; actualCharRange.location = range.location; } } From fa9a3fb7c4112d0101bf42fc33391d4913ddd6b3 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 11 Feb 2014 20:33:47 +0100 Subject: [PATCH 228/278] formatting --- AppKit/CPTextView/_CPRTFParser.j | 55 +++++++++++++++++--------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index 81c9617ef..d35e69c56 100755 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -50,7 +50,7 @@ var hexTable = []; BOOL _tabChanged; } -- (id) init +- (id)init { [self resetFont]; [self resetParagraphStyle]; @@ -59,7 +59,7 @@ var hexTable = []; return self; } -- (id) copy +- (id)copy { var mynew = [_RTFAttribute new]; @@ -86,18 +86,18 @@ var hexTable = []; var range = [fontName rangeOfString:@"-"]; if (range.location != CPNotFound) - { - var fontFamily = [fontName substringToIndex: range.location]; + { + var fontFamily = [fontName substringToIndex: range.location]; + + font = [CPFont fontWithName:fontFamily size:fontSize]; + } - font = [CPFont fontWithName:fontFamily size:fontSize]; - } - if (font == nil) - { + { - /* Last resort, default font. :-( */ - font = [CPFont systemFontOfSize:fontSize]; - } + /* Last resort, default font. :-( */ + font = [CPFont systemFontOfSize:fontSize]; + } } return font; } @@ -144,8 +144,8 @@ var hexTable = []; - (void)addTab:(float)location type:(CPTextTabType)type { - var tab = [[CPTextTab alloc] initWithType:CPLeftTabStopType - location:location]; + var tab = [[CPTextTab alloc] initWithType:CPLeftTabStopType + location:location]; if (!_tabChanged) { @@ -158,7 +158,7 @@ var hexTable = []; } } --(CPDictionary) dictionary +- (CPDictionary)dictionary { var ret = @{}; [ret setObject:[self currentFont] forKey:CPFontAttributeName]; @@ -252,12 +252,12 @@ var kRgsymRtf = { " " : [ " ", 0, false, kRTFParserType_char, ' '], "]" : [ "]", 0, false, kRTFParserType_char, ']'], "\\" : [ "\\", 0, false, kRTFParserType_char, '\\'] -} +}; @implementation _CPRTFParser : CPObject { CPString _codePage; - CPSize _paper; + CGSize _paper; CPString _rtf; unsigned _curState; CPArray _states; @@ -293,7 +293,7 @@ var kRgsymRtf = { - (CPString)_checkChar:sym parameter:ch { - switch(_curState) + switch (_curState) { case 0: if (sym && sym[4]) @@ -316,24 +316,26 @@ var kRgsymRtf = { - (BOOL)popState { _states.pop(); - if(_curState > 0) _curState--; + + if (_curState > 0) + _curState--; return YES; } - (CPString)_parseSpec:sym parameter:v { var ch = ''; - switch(sym[4]) + switch (sym[4]) { - case "ipfnDestSkip": + case "ipfnDestSkip": _curState++; return ''; case "ipfnHex": ch = _rtf.charAt(++_currentParseIndex); var hex = ''; - while(/[a-fA-F0-9\']/.test(ch)) + while (/[a-fA-F0-9\']/.test(ch)) { - if(ch == "'") + if (ch == "'") { _currentParseIndex++; continue; @@ -345,25 +347,26 @@ var kRgsymRtf = { console.log("hex : " + hex); _hexreturn = YES; _currentParseIndex--; - if (_curState !== 0) return ''; + if (_curState !== 0) + return ''; else return hex; break; case "codePage": ch = _rtf.charAt(++_currentParseIndex); var code = ''; - while(/[0-9]/.test(ch)) + while (/[0-9]/.test(ch)) { code += (ch + ''); ch = _rtf.charAt(++_currentParseIndex); } - _codePage=code; + _codePage = code; _currentParseIndex--; break; } return ''; } -- (void) _flushCurrentRun +- (void)_flushCurrentRun { var newOffset = 0; if (_currentRun) From 549b4a9ebf766f60cc10e47f280b4a9f861bbde0 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 11 Feb 2014 22:04:39 +0100 Subject: [PATCH 229/278] formatting --- AppKit/CPTextView/_CPRTFParser.j | 45 +-- AppKit/CPTextView/_CPRTFProducer.j | 423 ++++++++++++++--------------- 2 files changed, 235 insertions(+), 233 deletions(-) diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index d35e69c56..05bfe4c78 100755 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -453,7 +453,8 @@ var kRgsymRtf = { - (CPString)_translateKeyword:keyword parameter:param fParameter:(BOOL)fParam { - if (kRgsymRtf[keyword] !== undefined ){ + if (kRgsymRtf[keyword] !== undefined) + { var sym = kRgsymRtf[keyword]; switch (sym[3]) { @@ -523,17 +524,19 @@ var kRgsymRtf = { console.log("skip : " + keyword + " param: " + param); } - if (_states.length > 0) _curState = 1; - return ''; + if (_states.length > 0) + _curState = 1; + return ''; } } - (CPString)_parseKeyword:rtf length:len { - var ch = ''; - var fParam = false, fNeg = false; - var keyword = ''; - var param = ''; + var ch = '', + fParam = false, + fNeg = false, + keyword = '', + param = ''; _rtf = rtf; if (++_currentParseIndex >= len) @@ -550,8 +553,8 @@ var kRgsymRtf = { keyword += ch; ch = rtf.charAt(++_currentParseIndex); } - - if( ch == '-' ) + + if (ch == '-') { fNeg = true; ch = rtf.charAt(++_currentParseIndex); @@ -568,27 +571,27 @@ var kRgsymRtf = { if (fNeg) param *= -1; - + return [self _translateKeyword:keyword parameter:param fParameter:fParam]; } -- (void) _appendPlainString:(CPString) aString +- (void)_appendPlainString:(CPString) aString { [_result replaceCharactersInRange:CPMakeRange([_result length], 0) withString:aString]; } -- (CPAttributedString) parseRTF:(CPString)rtf +- (CPAttributedString)parseRTF:(CPString)rtf { - if(rtf.length == 0) + if (rtf.length == 0) { // alert("invalid rtf"); return ''; } _currentParseIndex = -1; - var len = rtf.length; - var tmp = ''; - var ch = ''; - var hex = ''; - var lastchar = 0; + var len = rtf.length, + tmp = '', + ch = '', + hex = '', + lastchar = 0; while (_currentParseIndex < len) { @@ -599,7 +602,7 @@ var kRgsymRtf = { [self _appendPlainString: String.fromCharCode(parseInt((hex), 16))]; hex = ''; } - switch(tmp) + switch (tmp) { case " ": if (lastchar == 1) @@ -647,9 +650,9 @@ var kRgsymRtf = { } if (_hexreturn) { - if(ch.length > 0) + if (ch.length > 0) { - if(parseInt(ch, 16) & 0x80) + if (parseInt(ch, 16) & 0x80) { hex += ch.toUpperCase(); } else diff --git a/AppKit/CPTextView/_CPRTFProducer.j b/AppKit/CPTextView/_CPRTFProducer.j index 9509de639..3a4884cda 100755 --- a/AppKit/CPTextView/_CPRTFProducer.j +++ b/AppKit/CPTextView/_CPRTFProducer.j @@ -1,4 +1,4 @@ -/* +/* RTFProducer.j Serialize CPAttributedString to a RTF String @@ -30,13 +30,13 @@ @import "CPFontManager.j" -var PAPERSIZE = @"PaperSize"; -var LEFTMARGIN = @"LeftMargin"; -var RIGHTMARGIN = @"RightMargin"; -var TOPMARGIN = @"TopMargin"; -var BUTTOMMARGIN = @"ButtomMargin"; +var PAPERSIZE = @"PaperSize", + LEFTMARGIN = @"LeftMargin", + RIGHTMARGIN = @"RightMargin", + TOPMARGIN = @"TopMargin", + BUTTOMMARGIN = @"ButtomMargin"; -function _points2twips(a) { return (a)*20.0; } +function _points2twips(a) { return (a) * 20.0; } @implementation _CPRTFProducer:CPObject @@ -53,13 +53,13 @@ function _points2twips(a) { return (a)*20.0; } CPColor ulColor; } -+ (CPString)produceRTF:(CPAttributedString) aText documentAttributes:(CPDictionary)dict ++ (CPString)produceRTF:(CPAttributedString)aText documentAttributes:(CPDictionary)dict { var mynew = [self new], data; return [mynew RTFDStringFromAttributedString:aText - documentAttributes:dict]; + documentAttributes:dict]; } - (id)init @@ -74,7 +74,7 @@ function _points2twips(a) { return (a)*20.0; } * (for rtf-header generation) */ fontDict = [CPMutableDictionary new]; - + currentFont = nil; fgColor = [CPColor blackColor]; bgColor= [CPColor whiteColor]; @@ -83,48 +83,48 @@ function _points2twips(a) { return (a)*20.0; } } // private stuff follows -- (CPString) fontTable +- (CPString)fontTable { // write Font Table if ([fontDict count]) { - var fontlistString = ""; - var fontEnum; - var currFont; - var keyArray; + var fontlistString = "", + fontEnum, + currFont, + keyArray; keyArray = [fontDict allKeys]; keyArray = [keyArray sortedArrayUsingSelector:@selector(compare:)]; fontEnum = [keyArray objectEnumerator]; while ((currFont = [fontEnum nextObject]) !== nil) - { - var fontFamily; - var detail; + { + var fontFamily, + detail; - if ([currFont isEqualToString:@"Symbol"]) - fontFamily = @"tech"; - else if ([currFont isEqualToString:@"Helvetica"]) - fontFamily = @"swiss"; - else if ([currFont isEqualToString:@"Arial"]) - fontFamily = @"swiss"; - else if ([currFont isEqualToString:@"Courier"]) - fontFamily = @"modern"; - else if ([currFont isEqualToString:@"Times"]) - fontFamily = @"roman"; - else fontFamily = @"nil"; + if ([currFont isEqualToString:@"Symbol"]) + fontFamily = @"tech"; + else if ([currFont isEqualToString:@"Helvetica"]) + fontFamily = @"swiss"; + else if ([currFont isEqualToString:@"Arial"]) + fontFamily = @"swiss"; + else if ([currFont isEqualToString:@"Courier"]) + fontFamily = @"modern"; + else if ([currFont isEqualToString:@"Times"]) + fontFamily = @"roman"; + else fontFamily = @"nil"; - detail = [CPString stringWithFormat:@"%@\\f%@ %@;", - [fontDict objectForKey:currFont], fontFamily, currFont]; - fontlistString += detail; - } + detail = [CPString stringWithFormat:@"%@\\f%@ %@;", + [fontDict objectForKey:currFont], fontFamily, currFont]; + fontlistString += detail; + } return [CPString stringWithFormat:@"{\\fonttbl%@}\n", fontlistString]; } else return @""; } -- (CPString) colorTable +- (CPString)colorTable { // write Colour table if ([colorDict count]) @@ -137,22 +137,22 @@ function _points2twips(a) { return (a)*20.0; } i; while ((next = [keyEnum nextObject]) != nil) - { - var cn = [colorDict objectForKey:next]; - [list insertObject:next atIndex:[cn intValue]-1]; - } + { + var cn = [colorDict objectForKey:next]; + [list insertObject:next atIndex:[cn intValue] - 1]; + } result = [CPString stringWithString:@"{\\colortbl;"]; for (i = 0; i < count; i++) - { - var color = [[list objectAtIndex:i] - colorUsingColorSpaceName:CPCalibratedRGBColorSpace]; - result += [CPString stringWithFormat: - @"\\red%d\\green%d\\blue%d;", - ([color redComponent]*255), - ([color greenComponent]*255), - ([color blueComponent]*255)]; - } + { + var color = [[list objectAtIndex:i] + colorUsingColorSpaceName:CPCalibratedRGBColorSpace]; + result += [CPString stringWithFormat: + @"\\red%d\\green%d\\blue%d;", + ([color redComponent] * 255), + ([color greenComponent] * 255), + ([color blueComponent] * 255)]; + } result += @"}\n"; return result; @@ -161,59 +161,59 @@ function _points2twips(a) { return (a)*20.0; } return @""; } -- (CPString) documentAttributes +- (CPString)documentAttributes { if (docDict != nil) { var result, detail, val, - num, + num; result = [CPString string]; val = [docDict objectForKey:PAPERSIZE]; if (val != nil) { - var size = [val sizeValue]; - detail = [CPString stringWithFormat:@"\\paperw%d \\paperh%d", - _points2twips(size.width), - _points2twips(size.height)]; - result += detail; - } + var size = [val sizeValue]; + detail = [CPString stringWithFormat:@"\\paperw%d \\paperh%d", + _points2twips(size.width), + _points2twips(size.height)]; + result += detail; + } num = [docDict objectForKey:LEFTMARGIN]; if (num != nil) { - var f = [num floatValue]; - detail = [CPString stringWithFormat:@"\\margl%d", - _points2twips(f)]; - result+= detail; - } + var f = [num floatValue]; + detail = [CPString stringWithFormat:@"\\margl%d", + _points2twips(f)]; + result+= detail; + } num = [docDict objectForKey:RIGHTMARGIN]; if (num != nil) { - var f = [num floatValue]; - detail = [CPString stringWithFormat:@"\\margr%d", - _points2twips(f)]; - result += detail; - } + var f = [num floatValue]; + detail = [CPString stringWithFormat:@"\\margr%d", + _points2twips(f)]; + result += detail; + } num = [docDict objectForKey:TOPMARGIN]; if (num != nil) { - var f = [num floatValue]; - detail = [CPString stringWithFormat:@"\\margt%d", - _points2twips(f)]; - result += detail; - } + var f = [num floatValue]; + detail = [CPString stringWithFormat:@"\\margt%d", + _points2twips(f)]; + result += detail; + } num = [docDict objectForKey:BUTTOMMARGIN]; if (num != nil) { - var f = [num floatValue]; - detail = [CPString stringWithFormat:@"\\margb%d", - _points2twips(f)]; - result += detail; - } + var f = [num floatValue]; + detail = [CPString stringWithFormat:@"\\margb%d", + _points2twips(f)]; + result += detail; + } return result; } @@ -221,7 +221,7 @@ function _points2twips(a) { return (a)*20.0; } return @""; } -- (CPString) headerString +- (CPString)headerString { var result; @@ -234,7 +234,7 @@ function _points2twips(a) { return (a)*20.0; } return result; } -- (CPString) trailerString +- (CPString)trailerString { return @"}"; } @@ -246,7 +246,7 @@ function _points2twips(a) { return (a)*20.0; } if (fCount == nil) { var count = [fontDict count]; - + fCount = [CPString stringWithFormat:@"\\f%d", count]; [fontDict setObject:fCount forKey:fontName]; } @@ -262,16 +262,16 @@ function _points2twips(a) { return (a)*20.0; } if (num == nil) { cn = [colorDict count] + 1; - + [colorDict setObject:[CPNumber numberWithInt:cn] - forKey:color]; + forKey:color]; } var cn = [num intValue]; return cn + 1; } -- (CPString) paragraphStyle:(CPParagraphStyle) paraStyle +- (CPString)paragraphStyle:(CPParagraphStyle)paraStyle { var headerString = [CPString stringWithString:@"\\pard\\plain"], twips; @@ -282,19 +282,19 @@ function _points2twips(a) { return (a)*20.0; } switch ([paraStyle alignment]) { case CPRightTextAlignment: - headerString += @"\\qr"; - break; + headerString += @"\\qr"; + break; case CPCenterTextAlignment: - headerString += @"\\qc"; - break; + headerString += @"\\qc"; + break; case CPLeftTextAlignment: - headerString += @"\\ql"; - break; + headerString += @"\\ql"; + break; case CPJustifiedTextAlignment: - headerString += @"\\qj"; - break; + headerString += @"\\qj"; + break; default: - headerString += @"\\ql"; + headerString += @"\\ql"; break; } @@ -359,20 +359,20 @@ function _points2twips(a) { return (a)*20.0; } headerString += [CPString stringWithFormat:@"\\tx%d",_points2twips([tab location])]; } - } + } return headerString; } -- (CPString) runStringForString:(CPString) substring - attributes:(CPDictionary) attributes - paragraphStart:(BOOL) first +- (CPString)runStringForString:(CPString) substring + attributes:(CPDictionary) attributes + paragraphStart:(BOOL) first { var result = "", headerString = "", trailerString = "", attribEnum, currAttrib; - + if (first) { var paraStyle = [attributes objectForKey:CPParagraphStyleAttributeName]; @@ -392,118 +392,118 @@ function _points2twips(a) { return (a)*20.0; } { if ([currAttrib isEqualToString:CPFontAttributeName]) { - /* - * handle fonts - */ - var font, - fontName, - traits; - - font = [attributes objectForKey:CPFontAttributeName]; - fontName = [font familyName]; - traits = [[CPFontManager sharedFontManager] traitsOfFont:font]; - - /* - * font name - */ - if (currentFont == nil || - ![fontName isEqualToString:[currentFont familyName]]) - { - headerString += [self fontToken:fontName]; - } - /* - * font size - */ - if (currentFont == nil || - [font size] != [currentFont size]) - { - var points =[font size]*2, - pString; - - pString = [CPString stringWithFormat:@"\\fs%d", points]; - headerString += pString; - } - /* - * font attributes - */ - if (traits & CPItalicFontMask) - { - headerString += @"\\i"; - trailerString += @"\\i0"; - } - if (traits & CPBoldFontMask) - { - headerString += @"\\b"; - trailerString += @"\\b0"; - } + /* + * handle fonts + */ + var font, + fontName, + traits; - if (first) - currentFont = font; - } + font = [attributes objectForKey:CPFontAttributeName]; + fontName = [font familyName]; + traits = [[CPFontManager sharedFontManager] traitsOfFont:font]; + + /* + * font name + */ + if (currentFont == nil || + ![fontName isEqualToString:[currentFont familyName]]) + { + headerString += [self fontToken:fontName]; + } + /* + * font size + */ + if (currentFont == nil || + [font size] != [currentFont size]) + { + var points = [font size] * 2, + pString; + + pString = [CPString stringWithFormat:@"\\fs%d", points]; + headerString += pString; + } + /* + * font attributes + */ + if (traits & CPItalicFontMask) + { + headerString += @"\\i"; + trailerString += @"\\i0"; + } + if (traits & CPBoldFontMask) + { + headerString += @"\\b"; + trailerString += @"\\b0"; + } + + if (first) + currentFont = font; + } else if ([currAttrib isEqualToString:CPForegroundColorAttributeName]) { - var color = [attributes objectForKey:CPForegroundColorAttributeName]; - if (![color isEqual:fgColor]) - { - headerString += [CPString stringWithFormat:@"\\cf%d", [self numberForColor:color]]; - trailerString += @"\\cf0"; - } - } + var color = [attributes objectForKey:CPForegroundColorAttributeName]; + if (![color isEqual:fgColor]) + { + headerString += [CPString stringWithFormat:@"\\cf%d", [self numberForColor:color]]; + trailerString += @"\\cf0"; + } + } else if ([currAttrib isEqualToString:CPBackgroundColorAttributeName]) { - var color = [attributes objectForKey:CPBackgroundColorAttributeName]; - if (![color isEqual:bgColor]) - { - headerString += [CPString stringWithFormat:@"\\cb%d", [self numberForColor:color]]; - trailerString += @"\\cb0"; - } - } + var color = [attributes objectForKey:CPBackgroundColorAttributeName]; + if (![color isEqual:bgColor]) + { + headerString += [CPString stringWithFormat:@"\\cb%d", [self numberForColor:color]]; + trailerString += @"\\cb0"; + } + } else if ([currAttrib isEqualToString:CPUnderlineStyleAttributeName]) { - headerString += @"\\ul"; - trailerString += @"\\ulnone"; - } + headerString += @"\\ul"; + trailerString += @"\\ulnone"; + } else if ([currAttrib isEqualToString:CPSuperscriptAttributeName]) { - var value = [attributes objectForKey:CPSuperscriptAttributeName], - svalue = [value intValue] * 6; - - if (svalue > 0) - { - headerString += [CPString stringWithFormat:@"\\up%d", svalue]; - trailerString += @"\\up0"; - } - else if (svalue < 0) - { - headerString +=[CPString stringWithFormat:@"\\dn-%d", svalue]; - trailerString += @"\\dn0"; - } - } + var value = [attributes objectForKey:CPSuperscriptAttributeName], + svalue = [value intValue] * 6; + + if (svalue > 0) + { + headerString += [CPString stringWithFormat:@"\\up%d", svalue]; + trailerString += @"\\up0"; + } + else if (svalue < 0) + { + headerString += [CPString stringWithFormat:@"\\dn-%d", svalue]; + trailerString += @"\\dn0"; + } + } else if ([currAttrib isEqualToString:CPBaselineOffsetAttributeName]) { - var value = [attributes objectForKey:CPBaselineOffsetAttributeName], - svalue = [value floatValue] * 2; - - if (svalue > 0) - { - headerString +=[CPString stringWithFormat:@"\\up%d", svalue]; - trailerString += @"\\up0"; - } - else if (svalue < 0) - { - headerString += [CPString stringWithFormat:@"\\dn-%d", svalue]; - trailerString += @"\\dn0"; - } - } + var value = [attributes objectForKey:CPBaselineOffsetAttributeName], + svalue = [value floatValue] * 2; + + if (svalue > 0) + { + headerString += [CPString stringWithFormat:@"\\up%d", svalue]; + trailerString += @"\\up0"; + } + else if (svalue < 0) + { + headerString += [CPString stringWithFormat:@"\\dn-%d", svalue]; + trailerString += @"\\dn0"; + } + } else if ([currAttrib isEqualToString:CPAttachmentAttributeName]) { - } + } else if ([currAttrib isEqualToString:CPLigatureAttributeName]) { - } + } else if ([currAttrib isEqualToString:CPKernAttributeName]) { - } + } } substring = substring.replace(/\\/g, '\\\\'); @@ -513,16 +513,16 @@ function _points2twips(a) { return (a)*20.0; } substring = substring.replace(/}/g, '\\}'); // FIXME: All characters not in the standard encoding must be // replaced by \'xx - + if (!first) { var braces; - + if ([headerString length]) - braces = [CPString stringWithFormat:@"{%@ %@}", headerString, substring]; + braces = [CPString stringWithFormat:@"{%@ %@}", headerString, substring]; else braces = substring; - + result += braces; } else @@ -530,11 +530,10 @@ function _points2twips(a) { return (a)*20.0; } var nobraces; if ([headerString length]) - nobraces = [CPString stringWithFormat:@"%@ %@", headerString, substring]; + nobraces = [CPString stringWithFormat:@"%@ %@", headerString, substring]; else nobraces = substring; - result += nobraces; } @@ -555,27 +554,27 @@ function _points2twips(a) { return (a)*20.0; } // FIXME split along newline characters and run as outer loop while (CPMaxRange(currRange) < CPMaxRange(completeRange)) // save all "runs" { - var attributes, - substring, - runString; - - attributes = [text attributesAtIndex:CPMaxRange(currRange) - longestEffectiveRange:currRange - inRange:completeRange]; - substring = [string substringWithRange:currRange]; - - runString = [self runStringForString:substring - attributes:attributes - paragraphStart:YES]; - result += runString; - first = NO; + var attributes, + substring, + runString; + + attributes = [text attributesAtIndex:CPMaxRange(currRange) + longestEffectiveRange:currRange + inRange:completeRange]; + substring = [string substringWithRange:currRange]; + + runString = [self runStringForString:substring + attributes:attributes + paragraphStart:YES]; + result += runString; + first = NO; } return result; } -- (CPString) RTFDStringFromAttributedString:(CPAttributedString)aText - documentAttributes:(CPDictionary)dict +- (CPString)RTFDStringFromAttributedString:(CPAttributedString)aText + documentAttributes:(CPDictionary)dict { var output = [CPString string], headerString, From b9e1afae17504d1d363436824d1c3fd5adfaf6dc Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 12 Feb 2014 05:59:34 +0100 Subject: [PATCH 230/278] formatting --- AppKit/CPTextView/CPLayoutManager.j | 118 ++++++++++++++-------------- AppKit/CPTextView/CPTextContainer.j | 22 +++--- AppKit/CPTextView/CPTextStorage.j | 2 +- AppKit/CPTextView/_CPRTFParser.j | 2 +- 4 files changed, 72 insertions(+), 72 deletions(-) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index bd9e60239..1a76f2957 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -142,9 +142,9 @@ var _objectsInRange = function(aList, aRange) @implementation _CPLineFragment : CPObject { - CPRect _fragmentRect; - CPRect _usedRect; - CPPoint _location; + CGRect _fragmentRect; + CGRect _usedRect; + CGPoint _location; CPRange _range; CPTextContainer _textContainer; BOOL _isInvalid; @@ -190,7 +190,7 @@ var _objectsInRange = function(aList, aRange) { _fragmentRect = CGRectMakeZero(); _usedRect = CGRectMakeZero(); - _location = CPPointMakeZero(); + _location = CGPointMakeZero(); _range = CPMakeRangeCopy(aRange); _textContainer = aContainer; _isInvalid = NO; @@ -226,11 +226,11 @@ var _objectsInRange = function(aList, aRange) _glyphsFrames = []; var count = someAdvancements.length, - origin = CPPointMake(_fragmentRect.origin.x + _location.x, _fragmentRect.origin.y); // FIXME _location.y + origin = CGPointMake(_fragmentRect.origin.x + _location.x, _fragmentRect.origin.y); // FIXME _location.y for (var i = 0; i < count; i++) { - _glyphsFrames.push(CPRectMake(origin.x, origin.y, someAdvancements[i], _usedRect.size.height)); + _glyphsFrames.push(CGRectMake(origin.x, origin.y, someAdvancements[i], _usedRect.size.height)); origin.x += someAdvancements[i]; } } @@ -252,7 +252,7 @@ var _objectsInRange = function(aList, aRange) - (void)drawUnderlineForGlyphRange:(CPRange)glyphRange underlineType:(int)underlineVal baselineOffset:(float)baselineOffset - containerOrigin:(CPPoint)containerOrigin + containerOrigin:(CGPoint)containerOrigin { // FIXME } @@ -282,11 +282,11 @@ var _objectsInRange = function(aList, aRange) } } -- (void)drawInContext:(CGContext)context atPoint:(CPPoint)aPoint forRange:(CPRange)aRange +- (void)drawInContext:(CGContext)context atPoint:(CGPoint)aPoint forRange:(CPRange)aRange { var runs = _objectsInRange(_runs, aRange), c = runs.length, - orig = CPPointMake(_location.x, _location.y + _fragmentRect.origin.y); + orig = CGPointMake(_location.x, _location.y + _fragmentRect.origin.y); orig.y += aPoint.y; @@ -520,10 +520,10 @@ var _objectsInRange = function(aList, aRange) return NO; } -- (CPRect)boundingRectForGlyphRange:(CPRange)aRange inTextContainer:(CPTextContainer)container +- (CGRect)boundingRectForGlyphRange:(CGRange)aRange inTextContainer:(CPTextContainer)container { if (![self numberOfGlyphs]) - return CPRectMake(0, 0, 1, 12); // crude hack to give a cursor in an empty doc. + return CGRectMake(0, 0, 1, 12); // crude hack to give a cursor in an empty doc. if (CPMaxRange(aRange) >= [self numberOfGlyphs]) aRange = CPMakeRange([self numberOfGlyphs] - 1, 1); @@ -545,9 +545,9 @@ var _objectsInRange = function(aList, aRange) if (CPLocationInRange(fragment._range.location + j, aRange)) { if (!rect) - rect = CPRectCreateCopy(frames[j]); + rect = CGRectCreateCopy(frames[j]); else - rect = CPRectUnion(rect, frames[j]); + rect = CGRectUnion(rect, frames[j]); } } } @@ -639,7 +639,7 @@ var _objectsInRange = function(aList, aRange) _removeInvalidLineFragmentsRange = CPMakeRangeCopy(removeRange); if (!startIndex) // We erased all lines - [self setExtraLineFragmentRect:CPRectMake(0,0) usedRect:CPRectMake(0,0) textContainer:nil]; + [self setExtraLineFragmentRect:CGRectMake(0,0) usedRect:CGRectMake(0,0) textContainer:nil]; // document.title=startIndex; [_typesetter layoutGlyphsInLayoutManager:self startingAtGlyphIndex:startIndex maxNumberOfLineFragments:-1 nextGlyphIndex:nil]; @@ -771,7 +771,7 @@ var _objectsInRange = function(aList, aRange) [self invalidateDisplayForGlyphRange: actualRange]; } -- (CPRange)glyphRangeForBoundingRect:(CPRect)aRect inTextContainer:(CPTextContainer)container +- (CPRange)glyphRangeForBoundingRect:(CGRect)aRect inTextContainer:(CPTextContainer)container { var range = nil, i, @@ -783,7 +783,7 @@ var _objectsInRange = function(aList, aRange) if (fragment._textContainer === container) { - if (CPRectContainsRect(aRect, fragment._usedRect)) + if (CGRectContainsRect(aRect, fragment._usedRect)) { if (!range) range = CPMakeRangeCopy(fragment._range); @@ -797,7 +797,7 @@ var _objectsInRange = function(aList, aRange) for (var j = 0; j < frames.length; j++) { - if (CPRectIntersectsRect(aRect, frames[j])) + if (CGRectIntersectsRect(aRect, frames[j])) { if (glyphRange.location == CPNotFound) glyphRange.location = fragment._range.location + j; @@ -818,7 +818,7 @@ var _objectsInRange = function(aList, aRange) return (range)?range:CPMakeRange(0,0); } -- (void)drawBackgroundForGlyphRange:(CPRange)aRange atPoint:(CPPoint)aPoint +- (void)drawBackgroundForGlyphRange:(CPRange)aRange atPoint:(CGPoint)aPoint { } @@ -827,12 +827,12 @@ var _objectsInRange = function(aList, aRange) baselineOffset:(float)baselineOffset lineFragmentRect:(CGRect)lineFragmentRect lineFragmentGlyphRange:(CPRange)lineGlyphRange - containerOrigin:(CPPoint)containerOrigin + containerOrigin:(CGPoint)containerOrigin { // FIXME } -- (void)drawGlyphsForGlyphRange:(CPRange)aRange atPoint:(CPPoint)aPoint +- (void)drawGlyphsForGlyphRange:(CPRange)aRange atPoint:(CGPoint)aPoint { var lineFragments = _objectsInRange(_lineFragments, aRange); @@ -851,7 +851,7 @@ var _objectsInRange = function(aList, aRange) } } -- (unsigned)glyphIndexForPoint:(CPPoint)point inTextContainer:(CPTextContainer)container fractionOfDistanceThroughGlyph:(FloatArray)partialFraction +- (unsigned)glyphIndexForPoint:(CGPoint)point inTextContainer:(CPTextContainer)container fractionOfDistanceThroughGlyph:(FloatArray)partialFraction { var c = [_lineFragments count]; for (var i = 0; i < c; i++) @@ -859,11 +859,11 @@ var _objectsInRange = function(aList, aRange) var fragment = _lineFragments[i]; if (fragment._textContainer === container) { - var frames = [fragment glyphFrames]; - var len = fragment._range.length; + var frames = [fragment glyphFrames], + len = fragment._range.length; for (var j = 0; j < len; j++) { - if (CPRectContainsPoint(frames[j], point)) + if (CGRectContainsPoint(frames[j], point)) { if (partialFraction) partialFraction[0] = (point.x - frames[j].origin.x) / frames[j].size.width; @@ -886,17 +886,17 @@ var _objectsInRange = function(aList, aRange) point.y <= fragment._fragmentRect.origin.y + fragment._fragmentRect.size.height) { var nlLoc = CPMaxRange(fragment._range) - 1, - lastFrame = [fragment glyphFrames][fragment._range.length-1], + lastFrame = [fragment glyphFrames][fragment._range.length - 1], firstFrame = [fragment glyphFrames][0]; // skip tabs and move on the last fragment in this line if (i < c - 1 && _lineFragments[i + 1]._fragmentRect.origin.y === fragment._fragmentRect.origin.y) continue; // this allows clicking before and after the (invisible) return character - if (point.x > CPRectGetMaxX(lastFrame) && fragment.length > 0 && + if (point.x > CGRectGetMaxX(lastFrame) && fragment.length > 0 && [[_textStorage string] characterAtIndex: nlLoc] === '\n' || i === c - 1) return nlLoc + 1; - else if (point.x <= CPRectGetMinX(firstFrame)) + else if (point.x <= CGRectGetMinX(firstFrame)) return fragment._range.location; else return nlLoc; @@ -907,7 +907,7 @@ var _objectsInRange = function(aList, aRange) return CPNotFound; } -- (unsigned)glyphIndexForPoint:(CPPoint)point inTextContainer:(CPTextContainer)container +- (unsigned)glyphIndexForPoint:(CGPoint)point inTextContainer:(CPTextContainer)container { return [self glyphIndexForPoint:point inTextContainer:container fractionOfDistanceThroughGlyph:nil]; } @@ -976,7 +976,7 @@ var _objectsInRange = function(aList, aRange) _lineFragments.push(lineFragment); } -- (id) _lineFragmentForLocation:(unsigned) aLoc +- (id)_lineFragmentForLocation:(unsigned) aLoc { var fragments = _objectsInRange(_lineFragments, CPMakeRange(aLoc,0)), l = fragments.length; @@ -986,18 +986,18 @@ var _objectsInRange = function(aList, aRange) return nil; } -- (void)setLineFragmentRect:(CPRect)fragmentRect forGlyphRange:(CPRange)glyphRange usedRect:(CPRect)usedRect +- (void)setLineFragmentRect:(CGRect)fragmentRect forGlyphRange:(CPRange)glyphRange usedRect:(CGRect)usedRect { var lineFragment = _objectWithLocationInRange(_lineFragments, glyphRange.location); if (lineFragment) { - lineFragment._fragmentRect = CPRectCreateCopy(fragmentRect); - lineFragment._usedRect = CPRectCreateCopy(usedRect); + lineFragment._fragmentRect = CGRectCreateCopy(fragmentRect); + lineFragment._usedRect = CGRectCreateCopy(usedRect); } } -- (void) _setAdvancements:(CPArray)someAdvancements forGlyphRange:(CPRange)glyphRange +- (void)_setAdvancements:(CPArray)someAdvancements forGlyphRange:(CPRange)glyphRange { var lineFragment = _objectWithLocationInRange(_lineFragments, glyphRange.location); @@ -1005,17 +1005,17 @@ var _objectsInRange = function(aList, aRange) [lineFragment setAdvancements: someAdvancements]; } -- (void)setLocation:(CPPoint)aPoint forStartOfGlyphRange:(CPRange)glyphRange +- (void)setLocation:(CGPoint)aPoint forStartOfGlyphRange:(CPRange)glyphRange { var lineFragment = _objectWithLocationInRange(_lineFragments, glyphRange.location); if (lineFragment) - lineFragment._location = CPPointCreateCopy(aPoint); + lineFragment._location = CGPointCreateCopy(aPoint); } -- (CPRect)extraLineFragmentRect +- (CGRect)extraLineFragmentRect { if (_extraLineFragment) - return CPRectCreateCopy(_extraLineFragment._fragmentRect); + return CGRectCreateCopy(_extraLineFragment._fragmentRect); return CGRectMakeZero(); } @@ -1028,21 +1028,21 @@ var _objectsInRange = function(aList, aRange) return nil; } -- (CPRect)extraLineFragmentUsedRect +- (CGRect)extraLineFragmentUsedRect { if (_extraLineFragment) - return CPRectCreateCopy(_extraLineFragment._usedRect); + return CGRectCreateCopy(_extraLineFragment._usedRect); return CGRectMakeZero(); } -- (void)setExtraLineFragmentRect:(CPRect)rect usedRect:(CPRect)usedRect textContainer:(CPTextContainer)textContainer +- (void)setExtraLineFragmentRect:(CGRect)rect usedRect:(CGRect)usedRect textContainer:(CPTextContainer)textContainer { if (textContainer) { _extraLineFragment = {}; - _extraLineFragment._fragmentRect = CPRectCreateCopy(rect); - _extraLineFragment._usedRect = CPRectCreateCopy(usedRect); + _extraLineFragment._fragmentRect = CGRectCreateCopy(rect); + _extraLineFragment._usedRect = CGRectCreateCopy(usedRect); _extraLineFragment._textContainer = textContainer; } else @@ -1052,7 +1052,7 @@ var _objectsInRange = function(aList, aRange) /*! NOTE: will not validate glyphs and layout */ -- (CPRect)usedRectForTextContainer:(CPTextContainer)textContainer +- (CGRect)usedRectForTextContainer:(CPTextContainer)textContainer { var rect = nil; @@ -1061,16 +1061,16 @@ var _objectsInRange = function(aList, aRange) if (_lineFragments[i]._textContainer === textContainer) { if (rect) - rect = CPRectUnion(rect, _lineFragments[i]._usedRect); + rect = CGRectUnion(rect, _lineFragments[i]._usedRect); else - rect = CPRectCreateCopy(_lineFragments[i]._usedRect); + rect = CGRectCreateCopy(_lineFragments[i]._usedRect); } } return (rect)?rect:CGRectMakeZero(); } -- (CPRect)lineFragmentRectForGlyphAtIndex:(unsigned)glyphIndex effectiveRange:(CPRangePointer)effectiveGlyphRange +- (CGRect)lineFragmentRectForGlyphAtIndex:(unsigned)glyphIndex effectiveRange:(CPRangePointer)effectiveGlyphRange { var lineFragment = _objectWithLocationInRange(_lineFragments, glyphIndex); @@ -1083,10 +1083,10 @@ var _objectsInRange = function(aList, aRange) effectiveGlyphRange.length = lineFragment._range.length; } - return CPRectCreateCopy(lineFragment._fragmentRect); + return CGRectCreateCopy(lineFragment._fragmentRect); } -- (CPRect)lineFragmentUsedRectForGlyphAtIndex:(unsigned)glyphIndex effectiveRange:(CPRangePointer)effectiveGlyphRange +- (CGRect)lineFragmentUsedRectForGlyphAtIndex:(unsigned)glyphIndex effectiveRange:(CPRangePointer)effectiveGlyphRange { var lineFragment = _objectWithLocationInRange(_lineFragments, glyphIndex); @@ -1099,18 +1099,18 @@ var _objectsInRange = function(aList, aRange) effectiveGlyphRange.length = lineFragment._range.length; } - return CPRectCreateCopy(lineFragment._usedRect); + return CGRectCreateCopy(lineFragment._usedRect); } -- (CPPoint)locationForGlyphAtIndex:(unsigned)index +- (CGPoint)locationForGlyphAtIndex:(unsigned)index { if (_lineFragments.length > 0 && index >= [self numberOfGlyphs] - 1) { - var lineFragment= _lineFragments[_lineFragments.length-1], + var lineFragment= _lineFragments[_lineFragments.length - 1], glyphFrames = [lineFragment glyphFrames]; if (glyphFrames.length > 0) - return CPPointCreateCopy(glyphFrames[glyphFrames.length - 1].origin); + return CGPointCreateCopy(glyphFrames[glyphFrames.length - 1].origin); } var lineFragment = _objectWithLocationInRange(_lineFragments, index); @@ -1118,14 +1118,14 @@ var _objectsInRange = function(aList, aRange) if (lineFragment) { if (index == lineFragment._range.location) - return CPPointCreateCopy(lineFragment._location); + return CGPointCreateCopy(lineFragment._location); var glyphFrames = [lineFragment glyphFrames]; - return CPPointCreateCopy(glyphFrames[index - lineFragment._range.location].origin); + return CGPointCreateCopy(glyphFrames[index - lineFragment._range.location].origin); } - return CPPointMakeZero(); + return CGPointMakeZero(); } - (CPTextContainer)textContainerForGlyphAtIndex:(unsigned)index effectiveRange:(CPRangePointer)effectiveGlyphRange withoutAdditionalLayout:(BOOL)flag @@ -1171,7 +1171,7 @@ var _objectsInRange = function(aList, aRange) - (CPArray)rectArrayForCharacterRange:(CPRange)charRange withinSelectedCharacterRange:(CPRange)selectedCharRange inTextContainer:(CPTextContainer)container - rectCount:(CPRectPointer)rectCount + rectCount:(CGRectPointer)rectCount { var rectArray = [], @@ -1196,11 +1196,11 @@ var _objectsInRange = function(aList, aRange) if (CPLocationInRange(fragment._range.location + j, selectedCharRange)) { if (!rect) - rect = CPRectCreateCopy(frames[j]); + rect = CGRectCreateCopy(frames[j]); else - rect = CPRectUnion(rect, frames[j]); + rect = CGRectUnion(rect, frames[j]); - if ([[_textStorage string] characterAtIndex:MAX(0, CPMaxRange(selectedCharRange)-1)] === '\n' ) + if ([[_textStorage string] characterAtIndex:MAX(0, CPMaxRange(selectedCharRange) - 1)] === '\n') { rect.size.width = containerSize.width - rect.origin.x; } diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j index 248dd78cf..962d71e79 100755 --- a/AppKit/CPTextView/CPTextContainer.j +++ b/AppKit/CPTextView/CPTextContainer.j @@ -76,13 +76,13 @@ CPLineMovesUp = 4; */ @implementation CPTextContainer : CPObject { - CPSize _size; + CGSize _size; CPTextView _textView; CPLayoutManager _layoutManager; float _lineFragmentPadding; } -- (id)initWithContainerSize:(CPSize)aSize +- (id)initWithContainerSize:(CGSize)aSize { self = [super init]; @@ -100,12 +100,12 @@ CPLineMovesUp = 4; return [self initWithContainerSize:CPMakeSize(1e7, 1e7)]; } -- (CPSize)containerSize +- (CGSize)containerSize { return _size; } -- (void)setContainerSize:(CPSize)someSize +- (void)setContainerSize:(CGSize)someSize { var oldSize = _size; @@ -167,9 +167,9 @@ CPLineMovesUp = 4; return _lineFragmentPadding; } -- (BOOL)containsPoint:(CPPoint)aPoint +- (BOOL)containsPoint:(CGPoint)aPoint { - return CPRectContainsPoint(CPRectMake(0, 0, _size.width, _size.height), aPoint); + return CGRectContainsPoint(CGRectMake(0, 0, _size.width, _size.height), aPoint); } - (BOOL)isSimpleRectangularTextContainer @@ -177,24 +177,24 @@ CPLineMovesUp = 4; return YES; } -- (CPRect)lineFragmentRectForProposedRect:(CPRect)proposedRect +- (CGRect)lineFragmentRectForProposedRect:(CGRect)proposedRect sweepDirection:(CPLineSweepDirection)sweep movementDirection:(CPLineMovementDirection)movement - remainingRect:(CPRectPointer)remainingRect + remainingRect:(CGRectPointer)remainingRect { - var resultRect = CPRectCreateCopy(proposedRect); + var resultRect = CGRectCreateCopy(proposedRect); if (sweep != CPLineSweepRight || movement != CPLineMovesDown) { CPLog.trace(@"FIXME: unsupported sweep ("+sweep+") or movement ("+movement+")"); - return CPRectMakeZero(); + return CGRectMakeZero(); } if (resultRect.origin.x + resultRect.size.width > _size.width) resultRect.size.width = _size.width - resultRect.origin.x; if (resultRect.size.width < 0) - resultRect = CPRectMakeZero(); + resultRect = CGRectMakeZero(); if (remainingRect) { diff --git a/AppKit/CPTextView/CPTextStorage.j b/AppKit/CPTextView/CPTextStorage.j index 3bb139d69..3e6251c3e 100755 --- a/AppKit/CPTextView/CPTextStorage.j +++ b/AppKit/CPTextView/CPTextStorage.j @@ -278,7 +278,7 @@ CPTextStorageDidProcessEditingNotification = @"CPTextStorageDidProcessEditingNot - (CPAttributedString)attributedSubstringFromRange:(CPRange)aRange { if (!aRange.length) - return [CPAttributedString new]; + return [CPAttributedString new]; return [super attributedSubstringFromRange:aRange]; } @end diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index 05bfe4c78..97a193c74 100755 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -252,7 +252,7 @@ var kRgsymRtf = { " " : [ " ", 0, false, kRTFParserType_char, ' '], "]" : [ "]", 0, false, kRTFParserType_char, ']'], "\\" : [ "\\", 0, false, kRTFParserType_char, '\\'] -}; + }; @implementation _CPRTFParser : CPObject { From c07065e45721e66fba5d66f57b4569bee32bbf09 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 12 Feb 2014 07:13:21 +0100 Subject: [PATCH 231/278] more formatting --- AppKit/CPTextView/CPTextView.j | 98 +++++++++++++++++----------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 574c5a337..f5510f61f 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -173,13 +173,13 @@ var kDelegateRespondsTo_textShouldBeginEditing return NO; } -- (CPSize)maxSize +- (CGSize)maxSize { CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); return CPMakeSize(0,0); } -- (CPSize)minSize +- (CGSize)minSize { CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); return CPMakeSize(0,0); @@ -226,12 +226,12 @@ var kDelegateRespondsTo_textShouldBeginEditing CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); } -- (void)setMaxSize:(CPSize)aSize +- (void)setMaxSize:(CGSize)aSize { CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); } -- (void)setMinSize:(CPSize)aSize +- (void)setMinSize:(CGSize)aSize { CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); } @@ -284,8 +284,8 @@ var kDelegateRespondsTo_textShouldBeginEditing unsigned _delegateRespondsToSelectorMask; - CPSize _textContainerInset; - CPPoint _textContainerOrigin; + CGSize _textContainerInset; + CGPoint _textContainerOrigin; int _startTrackingLocation; CPRange _selectionRange; @@ -301,13 +301,13 @@ var kDelegateRespondsTo_textShouldBeginEditing BOOL _drawCaret; CPTimer _caretTimer; CPTimer _scollingTimer; - CPRect _caretRect; + CPGect _caretRect; CPFont _font; CPColor _textColor; - CPSize _minSize; - CPSize _maxSize; + CGSize _minSize; + CGSize _maxSize; BOOL _scrollingDownward; @@ -331,8 +331,8 @@ var kDelegateRespondsTo_textShouldBeginEditing if (self) { self._DOMElement.style.cursor = "text"; - _textContainerInset = CPSizeMake(2,0); - _textContainerOrigin = CPPointMake(_bounds.origin.x, _bounds.origin.y); + _textContainerInset = CGSizeMake(2,0); + _textContainerOrigin = CGPointMake(_bounds.origin.x, _bounds.origin.y); [aContainer setTextView:self]; _isEditable = YES; _isSelectable = YES; @@ -353,8 +353,8 @@ var kDelegateRespondsTo_textShouldBeginEditing _typingAttributes = [[CPDictionary alloc] initWithObjects:[_font, _textColor] forKeys:[CPFontAttributeName, CPForegroundColorAttributeName]]; - _minSize = CPSizeCreateCopy(aFrame.size); - _maxSize = CPSizeMake(aFrame.size.width, 1e7); + _minSize = CGSizeCreateCopy(aFrame.size); + _maxSize = CGSizeMake(aFrame.size.width, 1e7); _isRichText = YES; _usesFontPanel = YES; @@ -362,7 +362,7 @@ var kDelegateRespondsTo_textShouldBeginEditing _isVerticallyResizable = YES; _isHorizontallyResizable = NO; - _caretRect = CPRectMake(0,0,1,11); + _caretRect = CGRectMake(0,0,1,11); } [self registerForDraggedTypes:[CPColorDragType]]; @@ -403,7 +403,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { var layoutManager = [[CPLayoutManager alloc] init], textStorage = [[CPTextStorage alloc] init], - container = [[CPTextContainer alloc] initWithContainerSize:CPSizeMake(aFrame.size.width, 1e7)]; + container = [[CPTextContainer alloc] initWithContainerSize:CGSizeMake(aFrame.size.width, 1e7)]; [textStorage addLayoutManager:layoutManager]; [layoutManager addTextContainer:container]; @@ -499,18 +499,18 @@ var kDelegateRespondsTo_textShouldBeginEditing return _layoutManager; } -- (void)setTextContainerInset:(CPSize)aSize +- (void)setTextContainerInset:(CGSize)aSize { _textContainerInset = aSize; [self invalidateTextContainerOrigin]; } -- (CPSize)textContainerInset +- (CGSize)textContainerInset { return _textContainerInset; } -- (CPPoint)textContainerOrigin +- (CGPoint)textContainerOrigin { return _textContainerOrigin; } @@ -1061,14 +1061,14 @@ var kDelegateRespondsTo_textShouldBeginEditing [self _establishSelection:CPMakeRange(0, 0) byExtending:YES]; } } -- (void) moveToEndOfDocument:(id)sender +- (void)moveToEndOfDocument:(id)sender { if (_isSelectable) { [self _establishSelection:CPMakeRange([_layoutManager numberOfCharacters], 0) byExtending:NO]; } } -- (void) moveToEndOfDocumentAndModifySelection:(id)sender +- (void)moveToEndOfDocumentAndModifySelection:(id)sender { if (_isSelectable) { @@ -1076,7 +1076,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } } -- (void) moveWordRight:(id)sender +- (void)moveWordRight:(id)sender { if (_isSelectable) { @@ -1096,28 +1096,28 @@ var kDelegateRespondsTo_textShouldBeginEditing [self _establishSelection:CPMakeRange(parRange.location, 0) byExtending:NO]; } } -- (void) moveToBeginningOfParagraphAndModifySelection:(id)sender +- (void)moveToBeginningOfParagraphAndModifySelection:(id)sender { if (_isSelectable) { [self _extendSelectionIntoDirection: -1 granularity:CPSelectByParagraph]; } } -- (void) moveParagraphBackward:(id)sender +- (void)moveParagraphBackward:(id)sender { if (_isSelectable) { - [self _moveSelectionIntoDirection: -1 granularity:CPSelectByParagraph] + [self _moveSelectionIntoDirection: -1 granularity:CPSelectByParagraph] } } -- (void) moveParagraphBackwardAndModifySelection:(id)sender +- (void)moveParagraphBackwardAndModifySelection:(id)sender { if (_isSelectable) { [self _extendSelectionIntoDirection: -1 granularity:CPSelectByParagraph]; } } -- (void) moveWordRightAndModifySelection:(id)sender +- (void)moveWordRightAndModifySelection:(id)sender { if (_isSelectable) { @@ -1126,7 +1126,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } } -- (void) deleteToEndOfParagraph:(id)sender +- (void)deleteToEndOfParagraph:(id)sender { if (_isSelectable && _isEditable) { @@ -1135,7 +1135,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } } -- (void) deleteToBeginningOfParagraph:(id)sender +- (void)deleteToBeginningOfParagraph:(id)sender { if (_isSelectable && _isEditable) { @@ -1143,7 +1143,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } -- (void) deleteToBeginningOfLine:(id)sender +- (void)deleteToBeginningOfLine:(id)sender { if (_isSelectable && _isEditable) { @@ -1151,7 +1151,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } -- (void) deleteToEndOfLine:(id)sender +- (void)deleteToEndOfLine:(id)sender { if (_isSelectable && _isEditable) { @@ -1159,7 +1159,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } -- (void) deleteWordBackward:(id)sender +- (void)deleteWordBackward:(id)sender { if (_isSelectable && _isEditable) { @@ -1167,7 +1167,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } -- (void) deleteWordForward:(id)sender +- (void)deleteWordForward:(id)sender { if (_isSelectable && _isEditable) { @@ -1175,7 +1175,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } -- (void) moveToLeftEndOfLine:(id)sender +- (void)moveToLeftEndOfLine:(id)sender { if (_isSelectable) { @@ -1184,7 +1184,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self _establishSelection:CPMakeRange(fragment._range.location, 0) byExtending:NO]; } } -- (void) moveToLeftEndOfLineAndModifySelection:(id)sender +- (void)moveToLeftEndOfLineAndModifySelection:(id)sender { if (_isSelectable) { @@ -1193,7 +1193,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self _establishSelection:CPMakeRange(fragment._range.location, 0) byExtending:YES]; } } -- (void) moveToRightEndOfLine:(id)sender +- (void)moveToRightEndOfLine:(id)sender { if (_isSelectable) { @@ -1202,7 +1202,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self _establishSelection:CPMakeRange(CPMaxRange(fragment._range), 0) byExtending:NO]; } } -- (void) moveToRightEndOfLineAndModifySelection:(id)sender +- (void)moveToRightEndOfLineAndModifySelection:(id)sender { if (_isSelectable) { @@ -1212,18 +1212,18 @@ var kDelegateRespondsTo_textShouldBeginEditing } } -- (void) moveWordLeftAndModifySelection:(id)sender +- (void)moveWordLeftAndModifySelection:(id)sender { if (_isSelectable) { [self _extendSelectionIntoDirection: -1 granularity:CPSelectByWord]; } } -- (void) moveWordLeft:(id)sender +- (void)moveWordLeft:(id)sender { if (_isSelectable) { - [self _moveSelectionIntoDirection: -1 granularity:CPSelectByWord] + [self _moveSelectionIntoDirection: -1 granularity:CPSelectByWord] } } @@ -1249,7 +1249,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } } -- (void)_deleteForRange:(CPRange) changedRange +- (void)_deleteForRange:(CPRange)changedRange { if (![self shouldChangeTextInRange:changedRange replacementString:@""]) return; @@ -1307,12 +1307,12 @@ var kDelegateRespondsTo_textShouldBeginEditing [self insertTab:sender]; } -- (void) insertNewlineIgnoringFieldEditor:(id)sender +- (void)insertNewlineIgnoringFieldEditor:(id)sender { [self insertLineBreak:sender]; } -- (void) insertNewline:(id)sender +- (void)insertNewline:(id)sender { [self insertLineBreak:sender]; } @@ -1453,7 +1453,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { [_typingAttributes setObject:[sender selectedFont] forKey:CPFontAttributeName]; } - } + } else { oldFont = [self font]; @@ -1594,22 +1594,22 @@ var kDelegateRespondsTo_textShouldBeginEditing _isVerticallyResizable = flag; } -- (CPSize)maxSize +- (CGSize)maxSize { return _maxSize; } -- (CPSize)minSize +- (CGSize)minSize { return _minSize; } -- (void)setMaxSize:(CPSize)aSize +- (void)setMaxSize:(CGSize)aSize { _maxSize = aSize; } -- (void)setMinSize:(CPSize)aSize +- (void)setMinSize:(CGSize)aSize { _minSize = aSize; } @@ -1633,7 +1633,7 @@ var kDelegateRespondsTo_textShouldBeginEditing rect = [_layoutManager boundingRectForGlyphRange: CPMakeRange(0, MAX(0, [_layoutManager numberOfCharacters] - 1)) inTextContainer:_textContainer]; if ([_layoutManager extraLineFragmentTextContainer] === _textContainer) - rect = CPRectUnion(rect, [_layoutManager extraLineFragmentRect]); + rect = CGRectUnion(rect, [_layoutManager extraLineFragmentRect]); if (_isHorizontallyResizable) { @@ -1707,7 +1707,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { // -> extend to the left wordRange = CPMakeRange(index, 1); - while(setString.indexOf(string.charAt(--index)) !== CPNotFound && index > -1) + while (setString.indexOf(string.charAt(--index)) !== CPNotFound && index > -1) { wordRange = CPMakeRange(index, 1); From 112301e0e0f85fb60a4e563749dd9621df1fb235 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 12 Feb 2014 07:14:49 +0100 Subject: [PATCH 232/278] formatting --- AppKit/CPTextView/CPTextView.j | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index f5510f61f..6d210ddfc 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -935,7 +935,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self _performSelectionFixupForRange:aSel]; _startTrackingLocation = _selectionRange.location; } -- (unsigned) _calculateMoveSelectionFromRange:(CPRange)aRange intoDirection:(integer)move granularity:(CPSelectionGranularity)granularity +- (unsigned)_calculateMoveSelectionFromRange:(CPRange)aRange intoDirection:(integer)move granularity:(CPSelectionGranularity)granularity { var inWord = ![self _isCharacterAtIndex:(move > 0 ? CPMaxRange(aRange) : aRange.location) + move granularity:granularity], aSel = [self selectionRangeForProposedRange:CPMakeRange((move > 0 ? CPMaxRange(aRange) : aRange.location) + move, 0) granularity:granularity], @@ -943,14 +943,14 @@ var kDelegateRespondsTo_textShouldBeginEditing return move > 0 ? CPMaxRange(inWord? aSel:bSel) : (inWord? aSel:bSel).location; } -- (void) _moveSelectionIntoDirection:(integer)move granularity:(CPSelectionGranularity)granularity +- (void)_moveSelectionIntoDirection:(integer)move granularity:(CPSelectionGranularity)granularity { var pos = [self _calculateMoveSelectionFromRange:_selectionRange intoDirection:move granularity:granularity]; [self _performSelectionFixupForRange:CPMakeRange(pos, 0)]; _startTrackingLocation = _selectionRange.location; } -- (void) _extendSelectionIntoDirection:(integer)move granularity:(CPSelectionGranularity)granularity +- (void)_extendSelectionIntoDirection:(integer)move granularity:(CPSelectionGranularity)granularity { var aSel = CPMakeRangeCopy(_selectionRange); @@ -1009,52 +1009,52 @@ var kDelegateRespondsTo_textShouldBeginEditing [self _establishSelection:CPMakeRange(CPMaxRange(parRange), 0) byExtending:NO]; } } -- (void) moveToEndOfParagraphAndModifySelection:(id)sender +- (void)moveToEndOfParagraphAndModifySelection:(id)sender { if (_isSelectable) { [self _extendSelectionIntoDirection: +1 granularity:CPSelectByParagraph]; } } -- (void) moveParagraphForwardAndModifySelection:(id)sender +- (void)moveParagraphForwardAndModifySelection:(id)sender { if (_isSelectable) { [self _extendSelectionIntoDirection: +1 granularity:CPSelectByParagraph]; } } -- (void) moveParagraphForward:(id)sender +- (void)moveParagraphForward:(id)sender { if (_isSelectable) { [self _moveSelectionIntoDirection: +1 granularity:CPSelectByParagraph] } } -- (void) moveWordBackwardAndModifySelection:(id)sender +- (void)moveWordBackwardAndModifySelection:(id)sender { [self moveWordLeftAndModifySelection:sender]; } -- (void) moveWordBackward:(id)sender +- (void)moveWordBackward:(id)sender { [self moveWordLeft:sender]; } -- (void) moveWordForwardAndModifySelection:(id)sender +- (void)moveWordForwardAndModifySelection:(id)sender { [self moveWordRightAndModifySelection:sender]; } -- (void) moveWordForward:(id)sender +- (void)moveWordForward:(id)sender { [self moveWordRight:sender]; } -- (void) moveToBeginningOfDocument:(id)sender +- (void)moveToBeginningOfDocument:(id)sender { if (_isSelectable) { [self _establishSelection:CPMakeRange(0, 0) byExtending:NO]; } } -- (void) moveToBeginningOfDocumentAndModifySelection:(id)sender +- (void)moveToBeginningOfDocumentAndModifySelection:(id)sender { if (_isSelectable) { @@ -1713,7 +1713,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } // -> extend to the right - for(index = wordRange.location; setString.indexOf(string.charAt(++index)) !== CPNotFound && index < string.length; ) + for (index = wordRange.location; setString.indexOf(string.charAt(++index)) !== CPNotFound && index < string.length;) { wordRange = _MakeRangeFromAbs(wordRange.location, MIN(string.length - 1, index + 1)); @@ -1804,7 +1804,7 @@ var kDelegateRespondsTo_textShouldBeginEditing parRange = CPUnionRange(parRange, [self _characterRangeForUnitAtIndex: CPMaxRange(proposedRange) inString: string asDefinedByCharArray: ['\n'] skip:NO]); return parRange; - + default: return proposedRange; } From ba7d6df5a43af206337b6525e0b7b1f4c6163d0d Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 12 Feb 2014 18:00:11 +0100 Subject: [PATCH 233/278] formatting --- AppKit/CPTextView/CPTypesetter.j | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index ee2726817..ccdfb4380 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -42,9 +42,10 @@ CPTypesetterContainerBreakAction = (1 << 5); var _measuringContext; -var _measuringContextFont; -var _isCanvasSizingInvalid = 0; -var _didTestCanvasSizingValid; + _measuringContextFont, + _isCanvasSizingInvalid, + _didTestCanvasSizingValid; + function _widthOfStringForFont(aString, aFont) { if (!_measuringContext) @@ -170,7 +171,7 @@ var _sharedSimpleTypesetter = nil; var i, l = tabStops.length; - if (aWidth > tabStops[l-1]._location) + if (aWidth > tabStops[l - 1]._location) return nil; for (i = l-1; i >= 0; i--) @@ -185,13 +186,13 @@ var _sharedSimpleTypesetter = nil; } - (BOOL)_flushRange:(CPRange)lineRange - lineOrigin:(CPPoint)lineOrigin - currentContainerSize:(CPSize)containerSize + lineOrigin:(CGPoint)lineOrigin + currentContainerSize:(CGSize)containerSize advancements:(CPArray)advancements lineCount:(unsigned)lineCount { [_layoutManager setTextContainer:_currentTextContainer forGlyphRange:lineRange]; // creates a new lineFragment - var rect = CPRectMake(lineOrigin.x, lineOrigin.y, _lineWidth, _lineHeight); + var rect = CGRectMake(lineOrigin.x, lineOrigin.y, _lineWidth, _lineHeight); [_layoutManager setLineFragmentRect: rect forGlyphRange:lineRange usedRect:rect]; var myX = 0; @@ -248,7 +249,8 @@ var _sharedSimpleTypesetter = nil; var numLines = 0, theString = [_textStorage string], lineOrigin, - ascent, descent; + ascent, + descent; var advancements = [], prevRangeWidth = 0, @@ -257,11 +259,11 @@ var _sharedSimpleTypesetter = nil; _previousFont = nil; if (glyphIndex > 0) - lineOrigin = CPPointCreateCopy([_layoutManager lineFragmentRectForGlyphAtIndex:glyphIndex effectiveRange:nil].origin); + lineOrigin = CGPointCreateCopy([_layoutManager lineFragmentRectForGlyphAtIndex:glyphIndex effectiveRange:nil].origin); else if ([_layoutManager extraLineFragmentTextContainer]) - lineOrigin = CPPointMake(0, [_layoutManager extraLineFragmentUsedRect].origin.y); + lineOrigin = CGPointMake(0, [_layoutManager extraLineFragmentUsedRect].origin.y); else - lineOrigin = CPPointMake(0, 0); + lineOrigin = CGPointMake(0, 0); [_layoutManager _removeInvalidLineFragments]; @@ -383,9 +385,9 @@ var _sharedSimpleTypesetter = nil; if (lineRange.length) [self _flushRange:lineRange lineOrigin:lineOrigin currentContainerSize:containerSize advancements:advancements lineCount:numLines]; - if ([theString.charAt(theString.length - 1) ==="\n"]) + if ([theString.charAt(theString.length - 1) === "\n"]) { - var rect = CPRectMake(0, lineOrigin.y, containerSize.width, [_layoutManager._lineFragments lastObject]._usedRect.size.height); // fixme: row-height is crudely hacked + var rect = CGRectMake(0, lineOrigin.y, containerSize.width, [_layoutManager._lineFragments lastObject]._usedRect.size.height); // fixme: row-height is crudely hacked [_layoutManager setExtraLineFragmentRect:rect usedRect:rect textContainer:_currentTextContainer]; } } From 806db24c0eff6093b01f3246144408ec80aec547 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 14 Feb 2014 18:05:45 +0100 Subject: [PATCH 234/278] formatting+ fix prototypes --- AppKit/CPTextView/CPFontPanel.j | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/AppKit/CPTextView/CPFontPanel.j b/AppKit/CPTextView/CPFontPanel.j index 49ffd1821..aa77b6f2f 100755 --- a/AppKit/CPTextView/CPFontPanel.j +++ b/AppKit/CPTextView/CPFontPanel.j @@ -193,7 +193,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], - (void)_setupToolbarView { _toolbarView = [[CPView alloc] initWithFrame:CGRectMake(0, kBorderSpacing, CGRectGetWidth([self frame]), kToolbarHeight)]; - [_toolbarView setAutoresizingMask: CPViewWidthSizable]; + [_toolbarView setAutoresizingMask:CPViewWidthSizable]; /* text color */ _textColorWell = [[CPColorWell alloc] initWithFrame:CGRectMake(10, 0, 25, 25)]; @@ -204,13 +204,13 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], [colorPanel setAction:@selector(changeColor:)]; } -- (void)_setupBrowser: aBrowser +- (void)_setupBrowser:(CPBrowser)aBrowser { [aBrowser setTarget:self]; [aBrowser setAction:@selector(browserClicked:)]; [aBrowser setDoubleAction:@selector(dblClicked:)]; [aBrowser setAllowsEmptySelection:NO]; - [aBrowser setAllowsMultipleSelection: NO]; + [aBrowser setAllowsMultipleSelection:NO]; [aBrowser setDelegate:self]; [[self contentView] addSubview:aBrowser]; } @@ -248,7 +248,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], } -- (void)_refreshWithTextView: textView +- (void)_refreshWithTextView:(CPTextView)textView { if ([self isVisible]) { @@ -266,9 +266,9 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], else if ([font isBold]) trait = kTypefaceIndex_Bold; - [self setCurrentFont: font]; - [self setCurrentTrait: trait]; - [self setCurrentSize: [font size] + ""]; //cast to string + [self setCurrentFont:font]; + [self setCurrentTrait:trait]; + [self setCurrentSize:[font size] + ""]; //cast to string } } } @@ -277,7 +277,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], { [self _setupContents]; [super orderFront:sender]; - [self _refreshWithTextView: [[CPApp keyWindow] firstResponder]]; + [self _refreshWithTextView:[[CPApp keyWindow] firstResponder]]; } - (void)reloadDefaultFontFamilies @@ -303,7 +303,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], { case kFontNameChanged: newFont = [CPFont fontWithDescriptor:[[aFont fontDescriptor] fontDescriptorByAddingAttributes: - [CPDictionary dictionaryWithObject: [self currentFont] forKey:CPFontNameAttribute]] size:0.0]; + [CPDictionary dictionaryWithObject:[self currentFont] forKey:CPFontNameAttribute]] size:0.0]; break; case kTypefaceChanged: @@ -333,9 +333,9 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], return newFont; } -- (void)setCurrentSize: aSize +- (void)setCurrentSize:(CGSize)aSize { - [_sizeBrowser selectRow: [_availableSizes indexOfObject: aSize] inColumn:0]; + [_sizeBrowser selectRow:[_availableSizes indexOfObject:aSize] inColumn:0]; } - (CPString)currentSize @@ -343,9 +343,9 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], return [_sizeBrowser selectedItem]; } -- (void)setCurrentFont: aFont +- (void)setCurrentFont:(CPFont)aFont { - [_fontBrowser selectRow: [_availableFonts indexOfObject: [aFont familyName]] inColumn:0]; + [_fontBrowser selectRow:[_availableFonts indexOfObject:[aFont familyName]] inColumn:0]; } - (CPString)currentFont @@ -353,7 +353,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], return [_fontBrowser selectedItem]; } -- (void)setCurrentTrait: aTrait +- (void)setCurrentTrait:(unsigned)aTrait { var row = 0; @@ -372,7 +372,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], break; } - [_traitBrowser selectRow: row inColumn:0]; + [_traitBrowser selectRow:row inColumn:0]; } // FIXME Locale support @@ -418,7 +418,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], typefaceIndex = kTypefaceIndex_Bold; if ([self currentTrait] != typefaceIndex) - [self setCurrentTrait: typefaceIndex ]; + [self setCurrentTrait:typefaceIndex ]; [_sampleView setAttributedString: [[CPAttributedString alloc] initWithString:[font familyName] From 89525330c441c059c31f3256f75693843ca7eb82 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 14 Feb 2014 18:09:04 +0100 Subject: [PATCH 235/278] formatting+prototypes --- AppKit/CPTextView/CPTextStorage.j | 6 +- AppKit/CPTextView/CPTextView.j | 94 +++++++++++++++---------------- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/AppKit/CPTextView/CPTextStorage.j b/AppKit/CPTextView/CPTextStorage.j index 3e6251c3e..a9e897f7f 100755 --- a/AppKit/CPTextView/CPTextStorage.j +++ b/AppKit/CPTextView/CPTextStorage.j @@ -242,15 +242,15 @@ CPTextStorageDidProcessEditingNotification = @"CPTextStorageDidProcessEditingNot - (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString { [self beginEditing]; - [super replaceCharactersInRange: aRange withString: aString]; - [self edited: CPTextStorageEditedCharacters range:aRange changeInLength:([aString length] - aRange.length)]; + [super replaceCharactersInRange:aRange withString:aString]; + [self edited:CPTextStorageEditedCharacters range:aRange changeInLength:([aString length] - aRange.length)]; [self endEditing]; } - (void)replaceCharactersInRange:(CPRange)aRange withAttributedString:(CPAttributedString)aString { [self beginEditing]; - [super replaceCharactersInRange: aRange withAttributedString:aString]; + [super replaceCharactersInRange:aRange withAttributedString:aString]; [self edited:(CPTextStorageEditedAttributes | CPTextStorageEditedCharacters) range:aRange changeInLength:([aString length] - aRange.length)]; [self endEditing]; } diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 6d210ddfc..dd21b5b1d 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -100,7 +100,7 @@ var kDelegateRespondsTo_textShouldBeginEditing if ([self isRichText]) { // crude hack to make rich pasting possible in chrome and firefox. this requires a RTF roundtrip, unfortunately - var richData = [_CPRTFProducer produceRTF:[[self textStorage] attributedSubstringFromRange:selectedRange] documentAttributes: @{}]; + var richData = [_CPRTFProducer produceRTF:[[self textStorage] attributedSubstringFromRange:selectedRange] documentAttributes:@{}]; [pasteboard setString:richData forType:CPStringPboardType]; } else @@ -238,7 +238,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)setString:(CPString)aString { - [self replaceCharactersInRange: CPMakeRange(0, [[self string] length]) withString:aString]; + [self replaceCharactersInRange:CPMakeRange(0, [[self string] length]) withString:aString]; } - (void)setUsesFontPanel:(BOOL)flag @@ -349,7 +349,7 @@ var kDelegateRespondsTo_textShouldBeginEditing _insertionPointColor = [CPColor blackColor]; _textColor = [CPColor blackColor]; _font = [CPFont systemFontOfSize:12.0]; - [self setFont: _font]; + [self setFont:_font]; _typingAttributes = [[CPDictionary alloc] initWithObjects:[_font, _textColor] forKeys:[CPFontAttributeName, CPForegroundColorAttributeName]]; @@ -455,7 +455,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)setString:(CPString)aString { - [_textStorage replaceCharactersInRange: CPMakeRange(0, [_layoutManager numberOfCharacters]) withString:aString]; + [_textStorage replaceCharactersInRange:CPMakeRange(0, [_layoutManager numberOfCharacters]) withString:aString]; [self didChangeText]; [_layoutManager _validateLayoutAndGlyphs]; [self sizeToFit]; @@ -561,7 +561,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)didChangeText { - [[CPNotificationCenter defaultCenter] postNotificationName: CPTextDidChangeNotification object:self]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPTextDidChangeNotification object:self]; } - (BOOL)shouldChangeTextInRange:(CPRange)aRange replacementString:(CPString)aString @@ -580,7 +580,7 @@ var kDelegateRespondsTo_textShouldBeginEditing return shouldChange; } -- (void)_replaceCharactersInRange:aRange withAttributedString: aString +- (void)_replaceCharactersInRange:aRange withAttributedString:(CPString)aString { [_textStorage replaceCharactersInRange:aRange withAttributedString:aString]; [self setSelectedRange:CPMakeRange(aRange.location, [aString length])]; @@ -590,7 +590,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self setNeedsDisplay:YES]; } -- (void)_replaceCharactersInRange: aRange withString: aString +- (void)_replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString { [_textStorage replaceCharactersInRange:CPMakeRangeCopy(aRange) withString:aString]; [self setSelectedRange:CPMakeRange(aRange.location, aString.length)]; @@ -611,12 +611,12 @@ var kDelegateRespondsTo_textShouldBeginEditing if (isAttributed) { - [[[[self window] undoManager] prepareWithInvocationTarget: self] + [[[[self window] undoManager] prepareWithInvocationTarget:self] _replaceCharactersInRange:CPMakeRange(_selectionRange.location, [aString length]) withAttributedString:[_textStorage attributedSubstringFromRange:CPMakeRangeCopy(_selectionRange)]]; [[[self window] undoManager] setActionName:@"Replace rich text"]; - [_textStorage replaceCharactersInRange: CPMakeRangeCopy(_selectionRange) withAttributedString:aString]; + [_textStorage replaceCharactersInRange:CPMakeRangeCopy(_selectionRange) withAttributedString:aString]; } else { @@ -626,13 +626,13 @@ var kDelegateRespondsTo_textShouldBeginEditing aString = [[CPAttributedString alloc] initWithString:aString attributes:_typingAttributes]; [[[[self window] undoManager] prepareWithInvocationTarget:self] _replaceCharactersInRange:CPMakeRange(_selectionRange.location, [aString length]) - withAttributedString: [_textStorage attributedSubstringFromRange:CPMakeRangeCopy(_selectionRange)]]; - [_textStorage replaceCharactersInRange: CPMakeRangeCopy(_selectionRange) withAttributedString:aString]; + withAttributedString:[_textStorage attributedSubstringFromRange:CPMakeRangeCopy(_selectionRange)]]; + [_textStorage replaceCharactersInRange:CPMakeRangeCopy(_selectionRange) withAttributedString:aString]; } else { [[[[self window] undoManager] prepareWithInvocationTarget:self] _replaceCharactersInRange:CPMakeRange(_selectionRange.location, [aString length]) withString:[[self string] substringWithRange:CPMakeRangeCopy(_selectionRange)]]; - [_textStorage replaceCharactersInRange: CPMakeRangeCopy(_selectionRange) withString:aString]; + [_textStorage replaceCharactersInRange:CPMakeRangeCopy(_selectionRange) withString:aString]; } } @@ -680,7 +680,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } if (range.length) - [_layoutManager drawGlyphsForGlyphRange: range atPoint:_textContainerOrigin]; + [_layoutManager drawGlyphsForGlyphRange:range atPoint:_textContainerOrigin]; if ([self shouldDrawInsertionPoint]) { @@ -751,7 +751,7 @@ var kDelegateRespondsTo_textShouldBeginEditing point.x -= _textContainerOrigin.x; point.y -= _textContainerOrigin.y; - _startTrackingLocation = [_layoutManager glyphIndexForPoint: point inTextContainer:_textContainer fractionOfDistanceThroughGlyph:fraction]; + _startTrackingLocation = [_layoutManager glyphIndexForPoint:point inTextContainer:_textContainer fractionOfDistanceThroughGlyph:fraction]; if (_startTrackingLocation === CPNotFound) _startTrackingLocation = [_layoutManager numberOfCharacters]; @@ -834,7 +834,7 @@ var kDelegateRespondsTo_textShouldBeginEditing /* will post CPTextViewDidChangeSelectionNotification */ [self setSelectionGranularity:CPSelectByCharacter]; [self setSelectedRange:[self selectedRange] affinity:0 stillSelecting:NO]; - var point = [_layoutManager locationForGlyphAtIndex: [self selectedRange].location]; + var point = [_layoutManager locationForGlyphAtIndex:[self selectedRange].location]; _stickyXLocation= point.x; _startTrackingLocation = _selectionRange.location; } @@ -860,11 +860,11 @@ var kDelegateRespondsTo_textShouldBeginEditing point.y += 2 + rectSource.size.height; point.x += 2; - var dindex= [_layoutManager glyphIndexForPoint: point inTextContainer:_textContainer fractionOfDistanceThroughGlyph:fraction], + var dindex= [_layoutManager glyphIndexForPoint:point inTextContainer:_textContainer fractionOfDistanceThroughGlyph:fraction], oldStickyLoc = _stickyXLocation; [self _establishSelection:CPMakeRange(dindex,0) byExtending:NO]; _stickyXLocation = oldStickyLoc; - [self scrollRangeToVisible: CPMakeRange(dindex, 0)] + [self scrollRangeToVisible:CPMakeRange(dindex, 0)] } } - (void)moveDownAndModifySelection:(id)sender @@ -901,7 +901,7 @@ var kDelegateRespondsTo_textShouldBeginEditing oldStickyLoc = _stickyXLocation; [self _establishSelection:CPMakeRange(dindex,0) byExtending:NO]; _stickyXLocation = oldStickyLoc; - [self scrollRangeToVisible: CPMakeRange(dindex, 0)] + [self scrollRangeToVisible:CPMakeRange(dindex, 0)] } } - (void)moveUpAndModifySelection:(id)sender @@ -970,7 +970,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - [self _extendSelectionIntoDirection: -1 granularity:CPSelectByCharacter]; + [self _extendSelectionIntoDirection:-1 granularity:CPSelectByCharacter]; } } - (void)moveBackward:(id)sender @@ -987,7 +987,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - [self _extendSelectionIntoDirection: +1 granularity:CPSelectByCharacter]; + [self _extendSelectionIntoDirection:+1 granularity:CPSelectByCharacter]; } } - (void)moveLeft:(id)sender @@ -1013,21 +1013,21 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - [self _extendSelectionIntoDirection: +1 granularity:CPSelectByParagraph]; + [self _extendSelectionIntoDirection:+1 granularity:CPSelectByParagraph]; } } - (void)moveParagraphForwardAndModifySelection:(id)sender { if (_isSelectable) { - [self _extendSelectionIntoDirection: +1 granularity:CPSelectByParagraph]; + [self _extendSelectionIntoDirection:+1 granularity:CPSelectByParagraph]; } } - (void)moveParagraphForward:(id)sender { if (_isSelectable) { - [self _moveSelectionIntoDirection: +1 granularity:CPSelectByParagraph] + [self _moveSelectionIntoDirection:+1 granularity:CPSelectByParagraph] } } - (void)moveWordBackwardAndModifySelection:(id)sender @@ -1080,7 +1080,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - [self _moveSelectionIntoDirection: +1 granularity:CPSelectByWord] + [self _moveSelectionIntoDirection:+1 granularity:CPSelectByWord] } } @@ -1091,7 +1091,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { var parRange = [self _characterRangeForUnitAtIndex:_selectionRange.location inString:[self stringValue] - asDefinedByCharArray: ['\n'] skip:YES]; + asDefinedByCharArray:['\n'] skip:YES]; [self _establishSelection:CPMakeRange(parRange.location, 0) byExtending:NO]; } @@ -1100,28 +1100,28 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - [self _extendSelectionIntoDirection: -1 granularity:CPSelectByParagraph]; + [self _extendSelectionIntoDirection:-1 granularity:CPSelectByParagraph]; } } - (void)moveParagraphBackward:(id)sender { if (_isSelectable) { - [self _moveSelectionIntoDirection: -1 granularity:CPSelectByParagraph] + [self _moveSelectionIntoDirection:-1 granularity:CPSelectByParagraph] } } - (void)moveParagraphBackwardAndModifySelection:(id)sender { if (_isSelectable) { - [self _extendSelectionIntoDirection: -1 granularity:CPSelectByParagraph]; + [self _extendSelectionIntoDirection:-1 granularity:CPSelectByParagraph]; } } - (void)moveWordRightAndModifySelection:(id)sender { if (_isSelectable) { - [self _extendSelectionIntoDirection: +1 granularity:CPSelectByWord]; + [self _extendSelectionIntoDirection:+1 granularity:CPSelectByWord]; } } @@ -1216,14 +1216,14 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - [self _extendSelectionIntoDirection: -1 granularity:CPSelectByWord]; + [self _extendSelectionIntoDirection:-1 granularity:CPSelectByWord]; } } - (void)moveWordLeft:(id)sender { if (_isSelectable) { - [self _moveSelectionIntoDirection: -1 granularity:CPSelectByWord] + [self _moveSelectionIntoDirection:-1 granularity:CPSelectByWord] } } @@ -1255,7 +1255,7 @@ var kDelegateRespondsTo_textShouldBeginEditing return; [[[[self window] undoManager] prepareWithInvocationTarget:self] _replaceCharactersInRange:CPMakeRange(_selectionRange.location, 0) withAttributedString:[_textStorage attributedSubstringFromRange:CPMakeRangeCopy(changedRange)]]; - [_textStorage deleteCharactersInRange: CPMakeRangeCopy(changedRange)]; + [_textStorage deleteCharactersInRange:CPMakeRangeCopy(changedRange)]; [self setSelectedRange:CPMakeRange(changedRange.location, 0)]; [self didChangeText]; @@ -1273,7 +1273,7 @@ var kDelegateRespondsTo_textShouldBeginEditing else changedRange = _selectionRange; - [self _deleteForRange: changedRange]; + [self _deleteForRange:changedRange]; } - (void)deleteForward:(id)sender @@ -1285,7 +1285,7 @@ var kDelegateRespondsTo_textShouldBeginEditing else changedRange = _selectionRange; - [self _deleteForRange: changedRange]; + [self _deleteForRange:changedRange]; } - (void)cut:(id)sender @@ -1382,7 +1382,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)delete:(id)sender { - [self deleteBackward: sender]; + [self deleteBackward:sender]; } - (CPString)stringValue @@ -1446,7 +1446,7 @@ var kDelegateRespondsTo_textShouldBeginEditing longestEffectiveRange:currRange inRange:_selectionRange]; oldFont = [attributes objectForKey:CPFontAttributeName] || [self font]; - [self setFont:[sender convertFont:oldFont] range: currRange]; + [self setFont:[sender convertFont:oldFont] range:currRange]; } } else @@ -1531,7 +1531,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } else { - [_typingAttributes setObject: aColor forKey:CPForegroundColorAttributeName]; + [_typingAttributes setObject:aColor forKey:CPForegroundColorAttributeName]; } [_layoutManager _validateLayoutAndGlyphs]; [self setNeedsDisplay:YES]; @@ -1566,7 +1566,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString { - [_textStorage replaceCharactersInRange: aRange withString:aString]; + [_textStorage replaceCharactersInRange:aRange withString:aString]; } - (CPString)string @@ -1630,7 +1630,7 @@ var kDelegateRespondsTo_textShouldBeginEditing var minSize = [self minSize], maxSize = [self maxSize], desiredSize = aSize, - rect = [_layoutManager boundingRectForGlyphRange: CPMakeRange(0, MAX(0, [_layoutManager numberOfCharacters] - 1)) inTextContainer:_textContainer]; + rect = [_layoutManager boundingRectForGlyphRange:CPMakeRange(0, MAX(0, [_layoutManager numberOfCharacters] - 1)) inTextContainer:_textContainer]; if ([_layoutManager extraLineFragmentTextContainer] === _textContainer) rect = CGRectUnion(rect, [_layoutManager extraLineFragmentRect]); @@ -1655,7 +1655,7 @@ var kDelegateRespondsTo_textShouldBeginEditing desiredSize.height = maxSize.height; } - [super setFrameSize: desiredSize]; + [super setFrameSize:desiredSize]; } - (void)scrollRangeToVisible:(CPRange)aRange @@ -1695,7 +1695,7 @@ var kDelegateRespondsTo_textShouldBeginEditing return characterSet.join("").indexOf([self string].charAt(index)) !== CPNotFound; } -- (CPRange)_characterRangeForUnitAtIndex:(unsigned)index inString:(CPString)string asDefinedByCharArray: characterSet skip:(BOOL)flag +- (CPRange)_characterRangeForUnitAtIndex:(unsigned)index inString:(CPString)string asDefinedByCharArray:characterSet skip:(BOOL)flag { var wordRange = CPMakeRange(0, 0), lastIndex = CPNotFound, @@ -1790,18 +1790,18 @@ var kDelegateRespondsTo_textShouldBeginEditing switch (granularity) { case CPSelectByWord: - var wordRange = [self _characterRangeForUnitAtIndex:proposedRange.location inString:string asDefinedByCharArray: [[self class] _wordBoundaryCharacterArray] skip:YES]; + var wordRange = [self _characterRangeForUnitAtIndex:proposedRange.location inString:string asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:YES]; if (proposedRange.length) - wordRange = CPUnionRange(wordRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) inString:string asDefinedByCharArray: [[self class] _wordBoundaryCharacterArray] skip:NO]); + wordRange = CPUnionRange(wordRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) inString:string asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:NO]); return wordRange; case CPSelectByParagraph: - var parRange = [self _characterRangeForUnitAtIndex: proposedRange.location inString: string asDefinedByCharArray: ['\n'] skip:NO]; + var parRange = [self _characterRangeForUnitAtIndex:proposedRange.location inString:string asDefinedByCharArray:['\n'] skip:NO]; if (proposedRange.length) - parRange = CPUnionRange(parRange, [self _characterRangeForUnitAtIndex: CPMaxRange(proposedRange) inString: string asDefinedByCharArray: ['\n'] skip:NO]); + parRange = CPUnionRange(parRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) inString:string asDefinedByCharArray:['\n'] skip:NO]); return parRange; @@ -1881,7 +1881,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } } else - _caretRect = [_layoutManager boundingRectForGlyphRange: CPMakeRange(_selectionRange.location, 1) inTextContainer:_textContainer]; + _caretRect = [_layoutManager boundingRectForGlyphRange:CPMakeRange(_selectionRange.location, 1) inTextContainer:_textContainer]; _caretRect.origin.x += _textContainerOrigin.x; _caretRect.origin.y += _textContainerOrigin.y; @@ -1902,7 +1902,7 @@ var kDelegateRespondsTo_textShouldBeginEditing if (![pasteboard availableTypeFromArray:[CPColorDragType]]) return NO; - [self setTextColor:[CPKeyedUnarchiver unarchiveObjectWithData:[pasteboard dataForType:CPColorDragType]] range: _selectionRange ]; + [self setTextColor:[CPKeyedUnarchiver unarchiveObjectWithData:[pasteboard dataForType:CPColorDragType]] range:_selectionRange ]; } @end From c980f4f6e3ceaad8d3b1e6dffcf4c8341248720a Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 15 Feb 2014 12:43:09 +0100 Subject: [PATCH 236/278] prototypes+style --- AppKit/CPTextView/CPLayoutManager.j | 4 ++-- AppKit/CPTextView/CPParagraphStyle.j | 2 +- AppKit/CPTextView/CPTextView.j | 3 ++- AppKit/CPTextView/_CPRTFParser.j | 8 ++++---- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 1a76f2957..9460684ad 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -154,7 +154,7 @@ var _objectsInRange = function(aList, aRange) CPArray _glyphsFrames; } -- (id)createDOMElementWithText:aString andFont:aFont andColor:aColor +- (id)createDOMElementWithText:(CPString)aString andFont:(CPFont)aFont andColor: (CPColor)aColor { var style, span = document.createElement("span"); @@ -221,7 +221,7 @@ var _objectsInRange = function(aList, aRange) return self; } -- (void)setAdvancements:someAdvancements +- (void)setAdvancements:(CPArray)someAdvancements { _glyphsFrames = []; diff --git a/AppKit/CPTextView/CPParagraphStyle.j b/AppKit/CPTextView/CPParagraphStyle.j index 1c67cd668..f3b509e1a 100755 --- a/AppKit/CPTextView/CPParagraphStyle.j +++ b/AppKit/CPTextView/CPParagraphStyle.j @@ -136,7 +136,7 @@ CPParagraphStyleAttributeName = @"CPParagraphStyleAttributeName"; var other = [[self class] alloc]; return [other initWithParagraphStyle:self]; } -- initWithParagraphStyle:(CPParagraphStyle) other +- (CPParagraphStyle)initWithParagraphStyle:(CPParagraphStyle)other { other._tabStops = [_tabStops copy]; other._alignment = _alignment; diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index dd21b5b1d..bc504c2d6 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -1390,7 +1390,8 @@ var kDelegateRespondsTo_textShouldBeginEditing return _textStorage._string; } -- objectValue +// fixme: rich text should return attributed string, shouldn't it? +- (CPString)objectValue { return [self stringValue]; } diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index 97a193c74..2be2c2368 100755 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -291,7 +291,7 @@ var kRgsymRtf = { return self; } -- (CPString)_checkChar:sym parameter:ch +- (CPString)_checkChar:(CPArray)sym parameter:(CPString)ch { switch (_curState) { @@ -431,7 +431,7 @@ var kRgsymRtf = { } -- (CPString)_changeDest:sym +- (CPString)_changeDest:(CPArray)sym { switch (sym[0]) { @@ -451,7 +451,7 @@ var kRgsymRtf = { return ''; } -- (CPString)_translateKeyword:keyword parameter:param fParameter:(BOOL)fParam +- (CPString)_translateKeyword:(CPString)keyword parameter:(CPString)param fParameter:(BOOL)fParam { if (kRgsymRtf[keyword] !== undefined) { @@ -530,7 +530,7 @@ var kRgsymRtf = { } } -- (CPString)_parseKeyword:rtf length:len +- (CPString)_parseKeyword:(CPString)rtf length:(unsigned)len { var ch = '', fParam = false, From 5272d4f9e3e2f17c4c921dc94bb6904c5ab27f85 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 15 Feb 2014 19:47:50 +0100 Subject: [PATCH 237/278] style --- AppKit/CPTextView/CPLayoutManager.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 9460684ad..af83047ba 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -154,7 +154,7 @@ var _objectsInRange = function(aList, aRange) CPArray _glyphsFrames; } -- (id)createDOMElementWithText:(CPString)aString andFont:(CPFont)aFont andColor: (CPColor)aColor +- (id)createDOMElementWithText:(CPString)aString andFont:(CPFont)aFont andColor:(CPColor)aColor { var style, span = document.createElement("span"); From 875b51720bab453e057a6afc04959dc03c5953e5 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 18 Feb 2014 20:07:29 +0100 Subject: [PATCH 238/278] more missing prototypes --- AppKit/CPTextView/CPFontPanel.j | 2 +- AppKit/CPTextView/_CPRTFParser.j | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTextView/CPFontPanel.j b/AppKit/CPTextView/CPFontPanel.j index aa77b6f2f..aa431084e 100755 --- a/AppKit/CPTextView/CPFontPanel.j +++ b/AppKit/CPTextView/CPFontPanel.j @@ -376,7 +376,7 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"], } // FIXME Locale support -- (void)currentTrait +- (unsigned)currentTrait { var sel = [_traitBrowser selectedItem]; diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index 2be2c2368..88b5e8d46 100755 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -322,7 +322,7 @@ var kRgsymRtf = { return YES; } -- (CPString)_parseSpec:sym parameter:v +- (CPString)_parseSpec:(CPArray)sym parameter:(CPString)v { var ch = ''; switch (sym[4]) From b90e482add8f1fa4b0d9e93f79dd952322d7f8b7 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 18 Feb 2014 20:08:39 +0100 Subject: [PATCH 239/278] typo --- AppKit/CPTextView/CPTypesetter.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index ccdfb4380..f4f770c57 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -41,7 +41,7 @@ CPTypesetterParagraphBreakAction = (1 << 4); CPTypesetterContainerBreakAction = (1 << 5); -var _measuringContext; +var _measuringContext, _measuringContextFont, _isCanvasSizingInvalid, _didTestCanvasSizingValid; From eee1ea7a09c4f551da1b84776fe63ffdf5ad6a14 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 19 Feb 2014 20:55:05 +0100 Subject: [PATCH 240/278] fontmanager fix --- AppKit/CPFontManager.j | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/AppKit/CPFontManager.j b/AppKit/CPFontManager.j index a3932a469..b5c7d7ec3 100644 --- a/AppKit/CPFontManager.j +++ b/AppKit/CPFontManager.j @@ -237,6 +237,7 @@ CPRemoveTraitFontAction = 7; { var tag = [sender tag]; _activeChange = tag === nil ? @{} : @{ @"addTraits": tag }; + _fontAction = CPAddTraitFontAction; [self sendAction]; } @@ -392,7 +393,14 @@ CPRemoveTraitFontAction = 7; break; case CPAddTraitFontAction: - newFont = [self convertFont:aFont toHaveTrait:[self traitsOfFont:aFont]]; + newFont = aFont; + if (!_activeChange) + break; + + var addTraits = [_activeChange valueForKey:@"addTraits"]; + + if (addTraits) + newFont = [self convertFont:aFont toHaveTrait:addTraits]; break; case CPSizeUpFontAction: From 422ff93dcd1913424791e0b9fa0ea6810558cb42 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 17 Apr 2014 09:55:25 +0200 Subject: [PATCH 241/278] added support for setWidthTracksTextView: --- AppKit/CPTextView/CPTextContainer.j | 29 ++++++++++++++++++++++++++--- AppKit/CPTextView/CPTypesetter.j | 4 +++- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j index 962d71e79..6b450a37a 100755 --- a/AppKit/CPTextView/CPTextContainer.j +++ b/AppKit/CPTextView/CPTextContainer.j @@ -112,15 +112,38 @@ CPLineMovesUp = 4; _size = someSize; if (oldSize.width != _size.width) - [_layoutManager invalidateLayoutForCharacterRange:CPMakeRange(0,[[_layoutManager textStorage] length]) + { [_layoutManager invalidateLayoutForCharacterRange:CPMakeRange(0,[[_layoutManager textStorage] length]) isSoft:NO actualCharacterRange:NULL]; - + [_layoutManager _validateLayoutAndGlyphs]; + } } +// Controls whether the receiver adjusts the width of its bounding rectangle when its text view is resized. - (void)setWidthTracksTextView:(BOOL)flag { - // fixme: Controls whether the receiver adjusts the width of its bounding rectangle when its text view is resized. + [_textView setPostsFrameChangedNotifications:flag]; + + if (flag) + { + [[CPNotificationCenter defaultCenter] addObserver:self + selector:@selector(textViewFrameChanged:) + name:CPViewFrameDidChangeNotification + object:_textView]; + } + else + { + [[CPNotificationCenter defaultCenter] removeObserver:self + name:CPViewFrameDidChangeNotification + object:_textView]; + } +} + +- (void) textViewFrameChanged:(CPNotification)aNotification +{ + var newSize=CPMakeSize([_textView frame].size.width, _size.height); +debugger + [self setContainerSize:newSize]; } - (void)setTextView:(CPTextView)aTextView diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index f4f770c57..506d7ca43 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -361,7 +361,9 @@ var _sharedSimpleTypesetter = nil; lineOrigin.y += [_currentParagraph lineSpacing]; if (lineOrigin.y > [_currentTextContainer containerSize].height) { - _currentTextContainer = [[_layoutManager textContainers] objectAtIndex: ++_indexOfCurrentContainer]; + _indexOfCurrentContainer++; + _indexOfCurrentContainer=MAX(_indexOfCurrentContainer, [[_layoutManager textContainers] count]-1); + _currentTextContainer = [[_layoutManager textContainers] objectAtIndex: _indexOfCurrentContainer]; } lineOrigin.x = 0; numLines++; From 7bf9d334ad300c4d34590bd5d5c02cb6cce18c24 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 17 Apr 2014 09:58:04 +0200 Subject: [PATCH 242/278] style --- AppKit/CPTextView/CPTextContainer.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j index 6b450a37a..19f8fc47a 100755 --- a/AppKit/CPTextView/CPTextContainer.j +++ b/AppKit/CPTextView/CPTextContainer.j @@ -125,7 +125,7 @@ CPLineMovesUp = 4; [_textView setPostsFrameChangedNotifications:flag]; if (flag) - { + { [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewFrameChanged:) name:CPViewFrameDidChangeNotification @@ -141,7 +141,7 @@ CPLineMovesUp = 4; - (void) textViewFrameChanged:(CPNotification)aNotification { - var newSize=CPMakeSize([_textView frame].size.width, _size.height); + var newSize=CPMakeSize([_textView frame].size.width, _size.height); debugger [self setContainerSize:newSize]; } From c9522cf6ae924efea7b17750165acb21325b24ea Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 17 Apr 2014 09:59:36 +0200 Subject: [PATCH 243/278] more style --- AppKit/CPTextView/CPTypesetter.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index 506d7ca43..3a84bd9f8 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -362,7 +362,7 @@ var _sharedSimpleTypesetter = nil; if (lineOrigin.y > [_currentTextContainer containerSize].height) { _indexOfCurrentContainer++; - _indexOfCurrentContainer=MAX(_indexOfCurrentContainer, [[_layoutManager textContainers] count]-1); + _indexOfCurrentContainer=MAX(_indexOfCurrentContainer, [[_layoutManager textContainers] count]-1); _currentTextContainer = [[_layoutManager textContainers] objectAtIndex: _indexOfCurrentContainer]; } lineOrigin.x = 0; From fbdb21ac72000bfc1cc68e2e4df8d73bfaed9824 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 17 Apr 2014 10:00:50 +0200 Subject: [PATCH 244/278] style --- AppKit/CPTextView/CPTypesetter.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index 3a84bd9f8..fcbfd9a10 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -362,7 +362,7 @@ var _sharedSimpleTypesetter = nil; if (lineOrigin.y > [_currentTextContainer containerSize].height) { _indexOfCurrentContainer++; - _indexOfCurrentContainer=MAX(_indexOfCurrentContainer, [[_layoutManager textContainers] count]-1); + _indexOfCurrentContainer=MAX(_indexOfCurrentContainer, [[_layoutManager textContainers] count] - 1); _currentTextContainer = [[_layoutManager textContainers] objectAtIndex: _indexOfCurrentContainer]; } lineOrigin.x = 0; From e7a44e0b15cf38060f0bab361dcf89f520e0d8e1 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 17 Apr 2014 10:03:24 +0200 Subject: [PATCH 245/278] removed debugging code --- AppKit/CPTextView/CPTextContainer.j | 1 - 1 file changed, 1 deletion(-) diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j index 19f8fc47a..bd5eb3a3a 100755 --- a/AppKit/CPTextView/CPTextContainer.j +++ b/AppKit/CPTextView/CPTextContainer.j @@ -142,7 +142,6 @@ CPLineMovesUp = 4; - (void) textViewFrameChanged:(CPNotification)aNotification { var newSize=CPMakeSize([_textView frame].size.width, _size.height); -debugger [self setContainerSize:newSize]; } From 36e95b93b420395ed3bd51daa62ebd710d0b24c0 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 17 Apr 2014 11:11:53 +0200 Subject: [PATCH 246/278] typesetter fix --- AppKit/CPTextView/CPTextContainer.j | 2 +- AppKit/CPTextView/CPTypesetter.j | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j index bd5eb3a3a..1e18d7677 100755 --- a/AppKit/CPTextView/CPTextContainer.j +++ b/AppKit/CPTextView/CPTextContainer.j @@ -142,7 +142,7 @@ CPLineMovesUp = 4; - (void) textViewFrameChanged:(CPNotification)aNotification { var newSize=CPMakeSize([_textView frame].size.width, _size.height); - [self setContainerSize:newSize]; + [self setContainerSize:newSize]; } - (void)setTextView:(CPTextView)aTextView diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index fcbfd9a10..db5b46e34 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -377,6 +377,7 @@ var _sharedSimpleTypesetter = nil; _lineBase = 0; _previousFont = nil; lineRange = CPMakeRange(glyphIndex + 1, 0); + measuringRange = CPMakeRange(glyphIndex + 1, 0); wrapRange = CPMakeRange(0, 0); wrapWidth = 0; isWordWrapped = NO; From 24c265174591124a3502baefdfde8a7952078a42 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 17 Apr 2014 14:26:01 +0200 Subject: [PATCH 247/278] reverting erroneous patch --- AppKit/CPTextView/CPTypesetter.j | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index db5b46e34..85804017f 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -372,12 +372,10 @@ var _sharedSimpleTypesetter = nil; _lineWidth = 0; advancements = []; prevRangeWidth = 0; - currentAnchor = 0; _lineHeight = 0; _lineBase = 0; - _previousFont = nil; + _previousFont = nil; // resets currentAnchor and measuringRange; lineRange = CPMakeRange(glyphIndex + 1, 0); - measuringRange = CPMakeRange(glyphIndex + 1, 0); wrapRange = CPMakeRange(0, 0); wrapWidth = 0; isWordWrapped = NO; From d2339b915f0630366113343441b83ea28a6535d3 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 18 Apr 2014 00:36:18 +0200 Subject: [PATCH 248/278] spooky chrome fix --- AppKit/CPTextView/CPLayoutManager.j | 2 ++ AppKit/CPTextView/CPTypesetter.j | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index af83047ba..66d6354a9 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -224,6 +224,8 @@ var _objectsInRange = function(aList, aRange) - (void)setAdvancements:(CPArray)someAdvancements { _glyphsFrames = []; + debugger; // interestingly enough, this debugger statement fixes a serious chrome issue introduced in 34.0.1847.116. + var count = someAdvancements.length, origin = CGPointMake(_fragmentRect.origin.x + _location.x, _fragmentRect.origin.y); // FIXME _location.y diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index 85804017f..35e8bf003 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -61,7 +61,7 @@ function _widthOfStringForFont(aString, aFont) return [aString sizeWithFont:aFont]; if (_measuringContextFont !== aFont) { - _measuringContextFont = aFont + _measuringContextFont = aFont; _measuringContext.font = [aFont cssString]; } return _measuringContext.measureText(aString); @@ -279,7 +279,7 @@ var _sharedSimpleTypesetter = nil; _currentParagraph = [_currentAttributes objectForKey:CPParagraphStyleAttributeName] || [CPParagraphStyle defaultParagraphStyle]; if (!_currentFont) - _currentFont = [_textStorage font]; + _currentFont = [_textStorage font] || [CPFont systemFontOfSize:12.0]; ascent = ["x" sizeWithFont:_currentFont].height; //FIXME descent = 0; //FIXME @@ -334,7 +334,7 @@ var _sharedSimpleTypesetter = nil; isNewline = YES; isWordWrapped = YES; - glyphIndex = CPMaxRange(lineRange) - 1; + glyphIndex = CPMaxRange(lineRange) - 1; // start the line starts directly at current character } _lineHeight = MAX(_lineHeight, ascent - descent + leading); @@ -371,11 +371,12 @@ var _sharedSimpleTypesetter = nil; } _lineWidth = 0; advancements = []; + currentAnchor = 0; prevRangeWidth = 0; _lineHeight = 0; _lineBase = 0; - _previousFont = nil; // resets currentAnchor and measuringRange; lineRange = CPMakeRange(glyphIndex + 1, 0); + measuringRange = CPMakeRange(glyphIndex + 1, 0); wrapRange = CPMakeRange(0, 0); wrapWidth = 0; isWordWrapped = NO; From 211a145e584e006f01bbc84d7a7a9bd383619be3 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 18 Apr 2014 00:41:33 +0200 Subject: [PATCH 249/278] stability improvement --- AppKit/CPTextView/CPLayoutManager.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 66d6354a9..257db9571 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -296,7 +296,7 @@ var _objectsInRange = function(aList, aRange) { var run = runs[i]; - if (run.DOMactive && !run.DOMpatched) + if (run.DOMactive && !run.DOMpatched || !run.elem) { continue; } From 39f3bc71005fdf74b2eff10ff62cace5632e96c2 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 18 Apr 2014 13:28:51 +0200 Subject: [PATCH 250/278] better workaorund for chrome bug --- AppKit/CPTextView/CPLayoutManager.j | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 257db9571..f5fd4a2d5 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -223,16 +223,14 @@ var _objectsInRange = function(aList, aRange) - (void)setAdvancements:(CPArray)someAdvancements { - _glyphsFrames = []; - debugger; // interestingly enough, this debugger statement fixes a serious chrome issue introduced in 34.0.1847.116. - - var count = someAdvancements.length, origin = CGPointMake(_fragmentRect.origin.x + _location.x, _fragmentRect.origin.y); // FIXME _location.y + _glyphsFrames = new Array(count); + for (var i = 0; i < count; i++) { - _glyphsFrames.push(CGRectMake(origin.x, origin.y, someAdvancements[i], _usedRect.size.height)); + _glyphsFrames[i] = CGRectMake(origin.x, origin.y, someAdvancements[i], _usedRect.size.height); origin.x += someAdvancements[i]; } } From e71f0f44a47f4dcd7aa7e208aa998c58f899b3b4 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 18 Apr 2014 17:17:01 +0200 Subject: [PATCH 251/278] fix relayouting optimization bug --- AppKit/CPTextView/CPLayoutManager.j | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index f5fd4a2d5..9653671b2 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -675,6 +675,9 @@ var _objectsInRange = function(aList, aRange) oldLength = CPMaxRange([_lineFragmentsForRescue lastObject]._range), newLength = [[_textStorage string].length]; + if(ABS(newLength - oldLength) > 1) + return NO; + if (![oldLineFragment isVisuallyIdenticalToFragment: newLineFragment]) { isIdentical = NO; From ddbe0af29002adc73838a75349f09316ddbea3eb Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 23 May 2014 13:14:29 +0200 Subject: [PATCH 252/278] fix issue --- AppKit/CPTextView/CPTypesetter.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index 35e8bf003..6479b2663 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -302,6 +302,7 @@ var _sharedSimpleTypesetter = nil; switch (currentChar) // faster than sending actionForControlCharacterAtIndex: called for each char. { case '\n': + case '\r': isNewline = YES; break; case '\t': From 07a0be303fa42bcb52acfbcc4108c8f81c3439eb Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 23 May 2014 21:46:59 +0200 Subject: [PATCH 253/278] smart cutting+cleanup --- AppKit/CPTextView/CPTextView.j | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index bc504c2d6..63643caf5 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -27,8 +27,6 @@ @import "CPTextStorage.j" @import "CPTextContainer.j" @import "CPFontManager.j" -//@import "_CPRTFProducer.j" -//@import "_CPRTFParser.j" @import "CPLayoutManager.j" @class _CPRTFProducer; @@ -128,16 +126,6 @@ var kDelegateRespondsTo_textShouldBeginEditing CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); } -- (void)cut:(id)sender -{ - [self copy:sender]; - - var loc = [self selectedRange].location; - - [self replaceCharactersInRange:[self selectedRange] withString:""]; - [self setSelectedRange:CPMakeRange(loc,0) ]; -} - - (void)delete:(id)sender { CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); @@ -291,6 +279,7 @@ var kDelegateRespondsTo_textShouldBeginEditing CPRange _selectionRange; CPDictionary _selectedTextAttributes; int _selectionGranularity; + int _previousSelectionGranularity; CPColor _insertionPointColor; @@ -831,6 +820,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)mouseUp:(CPEvent)event { + _previousSelectionGranularity = [self selectionGranularity]; /* will post CPTextViewDidChangeSelectionNotification */ [self setSelectionGranularity:CPSelectByCharacter]; [self setSelectedRange:[self selectedRange] affinity:0 stillSelecting:NO]; @@ -1273,6 +1263,11 @@ var kDelegateRespondsTo_textShouldBeginEditing else changedRange = _selectionRange; + if (_previousSelectionGranularity > 0 && + changedRange.location > 0 && [self _isCharacterAtIndex:changedRange.location-1 granularity:_previousSelectionGranularity] && + changedRange.location < [[self string] length] && [self _isCharacterAtIndex:CPMaxRange(changedRange) granularity:_previousSelectionGranularity]) + changedRange.length++; + [self _deleteForRange:changedRange]; } From 6da6838bde8164e257ed69765149e9e5d84841a1 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 24 May 2014 08:53:53 +0200 Subject: [PATCH 254/278] beginning/end of line navigation + cleanup --- AppKit/CPTextView/CPTextView.j | 82 ++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 63643caf5..8d363f0da 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -117,6 +117,11 @@ var kDelegateRespondsTo_textShouldBeginEditing if (![self isRichText] && [stringForPasting isKindOfClass:[CPAttributedString class]]) stringForPasting = stringForPasting._string; + if (_previousSelectionGranularity > 0) + { + // FIXME: handle smart pasting + } + if (stringForPasting) [self insertText:stringForPasting]; } @@ -820,8 +825,8 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)mouseUp:(CPEvent)event { - _previousSelectionGranularity = [self selectionGranularity]; /* will post CPTextViewDidChangeSelectionNotification */ + _previousSelectionGranularity = [self selectionGranularity]; [self setSelectionGranularity:CPSelectByCharacter]; [self setSelectedRange:[self selectedRange] affinity:0 stillSelecting:NO]; var point = [_layoutManager locationForGlyphAtIndex:[self selectedRange].location]; @@ -992,11 +997,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { if (_isSelectable) { - var parRange = [self _characterRangeForUnitAtIndex:_selectionRange.location - inString:[self stringValue] - asDefinedByCharArray:['\n'] skip:YES]; - - [self _establishSelection:CPMakeRange(CPMaxRange(parRange), 0) byExtending:NO]; + [self _moveSelectionIntoDirection:+1 granularity:CPSelectByParagraph]; } } - (void)moveToEndOfParagraphAndModifySelection:(id)sender @@ -1074,16 +1075,11 @@ var kDelegateRespondsTo_textShouldBeginEditing } } -// FIXME - (void)moveToBeginningOfParagraph:(id)sender { if (_isSelectable) { - var parRange = [self _characterRangeForUnitAtIndex:_selectionRange.location - inString:[self stringValue] - asDefinedByCharArray:['\n'] skip:YES]; - - [self _establishSelection:CPMakeRange(parRange.location, 0) byExtending:NO]; + [self _moveSelectionIntoDirection:-1 granularity:CPSelectByParagraph] } } - (void)moveToBeginningOfParagraphAndModifySelection:(id)sender @@ -1165,41 +1161,47 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } -- (void)moveToLeftEndOfLine:(id)sender +- (void)moveToLeftEndOfLine:(id)sender byExtending:(BOOL)flag { if (_isSelectable) { var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; + if (!fragment && _selectionRange.location > 0) + fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location - 1]; if (fragment) - [self _establishSelection:CPMakeRange(fragment._range.location, 0) byExtending:NO]; + [self _establishSelection:CPMakeRange(fragment._range.location, 0) byExtending:flag]; } } +- (void)moveToLeftEndOfLine:(id)sender +{ + [self moveToLeftEndOfLine:sender byExtending:NO]; +} - (void)moveToLeftEndOfLineAndModifySelection:(id)sender { - if (_isSelectable) + [self moveToLeftEndOfLine:sender byExtending:YES]; +} +- (void)moveToRightEndOfLine:(id)sender byExtending:(BOOL)flag +{ if (_isSelectable) { var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; if (fragment) - [self _establishSelection:CPMakeRange(fragment._range.location, 0) byExtending:YES]; + { + var loc = CPMaxRange(fragment._range); + if (loc > 0 && loc < [_layoutManager numberOfCharacters]) + { + loc = MAX(0, loc - 1); + } + [self _establishSelection:CPMakeRange(loc, 0) byExtending:flag]; + } } } - (void)moveToRightEndOfLine:(id)sender { - if (_isSelectable) - { - var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; - if (fragment) - [self _establishSelection:CPMakeRange(CPMaxRange(fragment._range), 0) byExtending:NO]; - } + [self moveToRightEndOfLine:sender byExtending:NO]; } - (void)moveToRightEndOfLineAndModifySelection:(id)sender { - if (_isSelectable) - { - var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; - if (fragment) - [self _establishSelection:CPMakeRange(CPMaxRange(fragment._range), 0) byExtending:YES]; - } + [self moveToRightEndOfLine:sender byExtending:YES]; } - (void)moveWordLeftAndModifySelection:(id)sender @@ -1267,7 +1269,6 @@ var kDelegateRespondsTo_textShouldBeginEditing changedRange.location > 0 && [self _isCharacterAtIndex:changedRange.location-1 granularity:_previousSelectionGranularity] && changedRange.location < [[self string] length] && [self _isCharacterAtIndex:CPMaxRange(changedRange) granularity:_previousSelectionGranularity]) changedRange.length++; - [self _deleteForRange:changedRange]; } @@ -1684,19 +1685,20 @@ var kDelegateRespondsTo_textShouldBeginEditing characterSet = [[self class] _wordBoundaryCharacterArray]; break; case CPSelectByParagraph: - characterSet = ['\n']; + characterSet = [[self class] _paragraphBoundaryCharacterArray]; break; } // FIXME if (!characterSet) croak! return characterSet.join("").indexOf([self string].charAt(index)) !== CPNotFound; } -- (CPRange)_characterRangeForUnitAtIndex:(unsigned)index inString:(CPString)string asDefinedByCharArray:characterSet skip:(BOOL)flag +- (CPRange)_characterRangeForUnitAtIndex:(unsigned)index asDefinedByCharArray:(CPArray)characterSet skip:(BOOL)flag { var wordRange = CPMakeRange(0, 0), lastIndex = CPNotFound, searchIndex, - setString = characterSet.join(""); + setString = characterSet.join(""), + string = [_textStorage string]; // do we start on a boundary character? if (flag && string.charAt(index) && setString.indexOf(string.charAt(index)) !== CPNotFound) @@ -1711,7 +1713,7 @@ var kDelegateRespondsTo_textShouldBeginEditing // -> extend to the right for (index = wordRange.location; setString.indexOf(string.charAt(++index)) !== CPNotFound && index < string.length;) { - wordRange = _MakeRangeFromAbs(wordRange.location, MIN(string.length - 1, index + 1)); + wordRange = _MakeRangeFromAbs(wordRange.location, MIN(MAX(0, string.length - 1), index + 1)); } return wordRange; @@ -1764,7 +1766,11 @@ var kDelegateRespondsTo_textShouldBeginEditing */ + (CPArray)_wordBoundaryCharacterArray { - return ['\n', ' ', '\t', ',', ';', '.', '!', '?', '\'', '"', '-', ':']; + return ['\n','\r', ' ', '\t', ',', ';', '.', '!', '?', '\'', '"', '-', ':']; +} ++ (CPArray)_paragraphBoundaryCharacterArray +{ + return ['\n','\r']; } @@ -1786,18 +1792,18 @@ var kDelegateRespondsTo_textShouldBeginEditing switch (granularity) { case CPSelectByWord: - var wordRange = [self _characterRangeForUnitAtIndex:proposedRange.location inString:string asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:YES]; + var wordRange = [self _characterRangeForUnitAtIndex:proposedRange.location asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:YES]; if (proposedRange.length) - wordRange = CPUnionRange(wordRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) inString:string asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:NO]); + wordRange = CPUnionRange(wordRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:NO]); return wordRange; case CPSelectByParagraph: - var parRange = [self _characterRangeForUnitAtIndex:proposedRange.location inString:string asDefinedByCharArray:['\n'] skip:NO]; + var parRange = [self _characterRangeForUnitAtIndex:proposedRange.location asDefinedByCharArray:[[self class] _paragraphBoundaryCharacterArray] skip:NO]; if (proposedRange.length) - parRange = CPUnionRange(parRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) inString:string asDefinedByCharArray:['\n'] skip:NO]); + parRange = CPUnionRange(parRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) asDefinedByCharArray: [[self class] _paragraphBoundaryCharacterArray] skip:NO]); return parRange; From aa889be14018bfa9dc012f27f987594c98be741c Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 24 May 2014 19:32:25 +0200 Subject: [PATCH 255/278] formatting --- AppKit/CPTextView/CPTextView.j | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 8d363f0da..822cec8e6 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -1181,7 +1181,8 @@ var kDelegateRespondsTo_textShouldBeginEditing [self moveToLeftEndOfLine:sender byExtending:YES]; } - (void)moveToRightEndOfLine:(id)sender byExtending:(BOOL)flag -{ if (_isSelectable) +{ + if (_isSelectable) { var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; if (fragment) @@ -1768,6 +1769,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { return ['\n','\r', ' ', '\t', ',', ';', '.', '!', '?', '\'', '"', '-', ':']; } + + (CPArray)_paragraphBoundaryCharacterArray { return ['\n','\r']; From f9de34e36d6c7b5612c7bff7a1510fa39800286b Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sun, 25 May 2014 09:27:54 +0200 Subject: [PATCH 256/278] font panel fix --- AppKit/CPTextView/CPTextView.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 822cec8e6..cef4ee8ed 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -715,9 +715,9 @@ var kDelegateRespondsTo_textShouldBeginEditing if (_isFirstResponder) [self updateInsertionPointStateAndRestartTimer:((_selectionRange.length === 0) && ![_caretTimer isValid])]; - [[CPNotificationCenter defaultCenter] postNotificationName:CPTextViewDidChangeSelectionNotification object:self]; - [self setTypingAttributes:[_textStorage attributesAtIndex:MAX(0, range.location -1) effectiveRange:nil]]; + + [[CPNotificationCenter defaultCenter] postNotificationName:CPTextViewDidChangeSelectionNotification object:self]; } } From cf10d37c90f6309b74c87d5c55079a0cb5329f44 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 29 May 2014 16:27:07 +0200 Subject: [PATCH 257/278] automated tests and cleanup --- AppKit/AppKit.j | 1 + AppKit/CPTextView/CPTextView.j | 9 ++-- Tests/AppKit/CPTextViewTest.j | 83 ++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 Tests/AppKit/CPTextViewTest.j diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index bada5344d..369b88386 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -110,3 +110,4 @@ @import "CPWindow.j" @import "CPWindowController.j" @import "CPWorkspace.j" +@import "CPTextView.j" diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index cef4ee8ed..543fc7821 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -28,6 +28,8 @@ @import "CPTextContainer.j" @import "CPFontManager.j" @import "CPLayoutManager.j" +@import "CPPasteboard.j" +@import "CPColorPanel.j" @class _CPRTFProducer; @class _CPRTFParser; @@ -76,6 +78,7 @@ var kDelegateRespondsTo_textShouldBeginEditing @implementation CPText : CPControl { + int _previousSelectionGranularity; } - (void)changeFont:(id)sender @@ -284,7 +287,6 @@ var kDelegateRespondsTo_textShouldBeginEditing CPRange _selectionRange; CPDictionary _selectedTextAttributes; int _selectionGranularity; - int _previousSelectionGranularity; CPColor _insertionPointColor; @@ -324,7 +326,8 @@ var kDelegateRespondsTo_textShouldBeginEditing if (self) { - self._DOMElement.style.cursor = "text"; + if (self._DOMElement) + self._DOMElement.style.cursor = "text"; _textContainerInset = CGSizeMake(2,0); _textContainerOrigin = CGPointMake(_bounds.origin.x, _bounds.origin.y); [aContainer setTextView:self]; @@ -350,7 +353,7 @@ var kDelegateRespondsTo_textShouldBeginEditing _minSize = CGSizeCreateCopy(aFrame.size); _maxSize = CGSizeMake(aFrame.size.width, 1e7); - _isRichText = YES; + _isRichText = NO; _usesFontPanel = YES; _allowsUndo = YES; _isVerticallyResizable = YES; diff --git a/Tests/AppKit/CPTextViewTest.j b/Tests/AppKit/CPTextViewTest.j new file mode 100644 index 000000000..6eccc7301 --- /dev/null +++ b/Tests/AppKit/CPTextViewTest.j @@ -0,0 +1,83 @@ +@import + +@implementation CPTextViewTest : OJTestCase +{ + CPTextView _textView; +} + +- (void)setUp +{ + _textView = [[CPTextView alloc] initWithFrame:CGRectMake(0,0,500,500)]; + [_textView insertText:"Fusce\nlectus neque cr as eget lectus neque cr as eget lectus cr as eget lectus"]; +} + +- (void)testMoveToEndOfDocument +{ + [_textView setSelectedRange:CPMakeRange(0, 0)]; + [_textView moveToEndOfDocument:self]; + var range = [_textView selectedRange]; + [self assert:range.location equals:[[_textView layoutManager] numberOfCharacters]]; + [self assert:range.length equals:0]; + +} +- (void)testMoveToBeginningOfDocument +{ + [_textView setSelectedRange:CPMakeRange(1, 0)]; + [_textView moveToBeginningOfDocument:self]; + var range = [_textView selectedRange]; + [self assert:range.location equals:0]; + [self assert:range.length equals:0]; +} +- (void)testSelectAll +{ + [_textView setSelectedRange:CPMakeRange(1, 0)]; + [_textView selectAll:self]; + var range = [_textView selectedRange]; + [self assert:range.location equals:0]; + [self assert:range.length equals:[[_textView layoutManager] numberOfCharacters]]; +} +- (void)testMoveToEndOfParagraph +{ + [_textView setSelectedRange:CPMakeRange(1, 0)]; + [_textView moveToEndOfParagraph:self]; + var range = [_textView selectedRange]; + [self assert:range.location equals:5]; + [self assert:range.length equals:0]; +} +- (void)testMoveWordForward +{ + [_textView setSelectedRange:CPMakeRange(19, 0)]; // beginning of "cr" + [_textView moveWordForward:self]; + var range = [_textView selectedRange]; + [self assert:range.location equals:21]; // should be at the end of "cr" + [_textView moveWordForward:self]; + range = [_textView selectedRange]; + [self assert:range.location equals:28]; // should be at the end of "as" +} +- (void)testMoveWordBackward +{ + [_textView setSelectedRange:CPMakeRange(19, 0)]; // beginning of "cr" + [_textView moveWordBackward:self]; + var range = [_textView selectedRange]; + [self assert:range.location equals:13]; // should be at the beginning of "neque" +} +- (void)testMoveWordAndExtend +{ + [_textView setSelectedRange:CPMakeRange(19, 0)]; // beginning of "cr" + [_textView moveRight:self]; // middle of "cr" + [_textView moveWordBackwardAndModifySelection:self]; + var range = [_textView selectedRange]; + [self assert:range.location equals:19]; // "c" of "cr" should be selected + [self assert:range.length equals:1]; +} + +- (void)testCutAndPasteAreDuals +{ + [_textView setSelectedRange:CPMakeRange(19, 2)]; // select "cr" + [_textView cut:self]; + [_textView paste:self]; + var oldString = [_textView stringValue]; + [self assert:[_textView stringValue] equals:oldString]; +} + +@end From 56749d94946a4cf3b02be6c12a8bd19d1f2a3009 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 29 May 2014 20:31:55 +0200 Subject: [PATCH 258/278] protecting document access with PLATFORM(DOM) --- AppKit/CPTextView/CPTextView.j | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 543fc7821..3476a2f21 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -1847,7 +1847,9 @@ var kDelegateRespondsTo_textShouldBeginEditing var style; if (!_caretDOM) { +#if PLATFORM(DOM) _caretDOM = document.createElement("span"); +#endif style = _caretDOM.style; style.position = "absolute"; style.visibility = "visible"; From 00e380e8d841a6d0191b16cac9b67860e4a1746b Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 29 May 2014 20:37:27 +0200 Subject: [PATCH 259/278] more dom protection --- AppKit/CPTextView/CPLayoutManager.j | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index 9653671b2..ac93b7d6d 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -156,6 +156,7 @@ var _objectsInRange = function(aList, aRange) - (id)createDOMElementWithText:(CPString)aString andFont:(CPFont)aFont andColor:(CPColor)aColor { +#if PLATFORM(DOM) var style, span = document.createElement("span"); @@ -180,6 +181,9 @@ var _objectsInRange = function(aList, aRange) span.textContent = aString; // FIXME aString.replace(/&/g,'&') return span; +#else + return nil; +#endif } - (id)initWithRange:(CPRange)aRange textContainer:(CPTextContainer)aContainer textStorage:(CPTextStorage)textStorage From 007d437ee8b80953b127db14d9562b4fe7a8751c Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 30 May 2014 17:17:28 +0200 Subject: [PATCH 260/278] dom projection --- AppKit/CPTextView/CPTextView.j | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 3476a2f21..50b43d0c6 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -1844,12 +1844,11 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)drawInsertionPointInRect:(CGRect)aRect color:(CPColor)aColor turnedOn:(BOOL)flag { +#if PLATFORM(DOM) var style; if (!_caretDOM) { -#if PLATFORM(DOM) _caretDOM = document.createElement("span"); -#endif style = _caretDOM.style; style.position = "absolute"; style.visibility = "visible"; @@ -1865,12 +1864,15 @@ var kDelegateRespondsTo_textShouldBeginEditing _caretDOM.style.top = (aRect.origin.y) + "px"; _caretDOM.style.height = (aRect.size.height) + "px"; _caretDOM.style.visibility = flag ? "visible" : "hidden"; +#endif } - (void)_hideCaret { +#if PLATFORM(DOM) if (_caretDOM) _caretDOM.style.visibility = "hidden"; +#endif } - (void)updateInsertionPointStateAndRestartTimer:(BOOL)flag From d4f5ad641a8a2d7319b821fb7c85980fe3aa0df5 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 30 May 2014 18:52:00 +0200 Subject: [PATCH 261/278] more dom protection --- AppKit/CPTextView/CPTextView.j | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 50b43d0c6..dec9be851 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -322,12 +322,12 @@ var kDelegateRespondsTo_textShouldBeginEditing - (id)initWithFrame:(CGRect)aFrame textContainer:(CPTextContainer)aContainer { +#if PLATFORM(DOM) self = [super initWithFrame:aFrame]; if (self) { - if (self._DOMElement) - self._DOMElement.style.cursor = "text"; + self._DOMElement.style.cursor = "text"; _textContainerInset = CGSizeMake(2,0); _textContainerOrigin = CGPointMake(_bounds.origin.x, _bounds.origin.y); [aContainer setTextView:self]; @@ -363,7 +363,9 @@ var kDelegateRespondsTo_textShouldBeginEditing } [self registerForDraggedTypes:[CPColorDragType]]; - +#else + self=[self init]; +#endif return self; } From 685f836f4178d05fae7ad56c7a7495ff230f8987 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 30 May 2014 19:19:15 +0200 Subject: [PATCH 262/278] another try --- AppKit/CPTextView/CPTextView.j | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index dec9be851..07a2bdcb1 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -297,7 +297,7 @@ var kDelegateRespondsTo_textShouldBeginEditing BOOL _drawCaret; CPTimer _caretTimer; CPTimer _scollingTimer; - CPGect _caretRect; + CPRect _caretRect; CPFont _font; CPColor _textColor; @@ -322,9 +322,9 @@ var kDelegateRespondsTo_textShouldBeginEditing - (id)initWithFrame:(CGRect)aFrame textContainer:(CPTextContainer)aContainer { -#if PLATFORM(DOM) self = [super initWithFrame:aFrame]; +#if PLATFORM(DOM) if (self) { self._DOMElement.style.cursor = "text"; @@ -363,9 +363,8 @@ var kDelegateRespondsTo_textShouldBeginEditing } [self registerForDraggedTypes:[CPColorDragType]]; -#else - self=[self init]; #endif + return self; } From e04d300e18d1ed3f5157044394f741822b16afdb Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 30 May 2014 19:44:37 +0200 Subject: [PATCH 263/278] next try --- AppKit/CPTextView/CPTextView.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 07a2bdcb1..650b0d475 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -324,10 +324,11 @@ var kDelegateRespondsTo_textShouldBeginEditing { self = [super initWithFrame:aFrame]; -#if PLATFORM(DOM) if (self) { +#if PLATFORM(DOM) self._DOMElement.style.cursor = "text"; +#endif _textContainerInset = CGSizeMake(2,0); _textContainerOrigin = CGPointMake(_bounds.origin.x, _bounds.origin.y); [aContainer setTextView:self]; @@ -363,7 +364,6 @@ var kDelegateRespondsTo_textShouldBeginEditing } [self registerForDraggedTypes:[CPColorDragType]]; -#endif return self; } From f2db18820acceaa1dcedf2b5d479803009f6964f Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 30 May 2014 10:49:10 -0700 Subject: [PATCH 264/278] Fixed: CPLog.error is used instead of abstract exception --- AppKit/CPTextView/CPTextView.j | 52 ++++++++++++++++---------------- AppKit/CPTextView/CPTypesetter.j | 4 +-- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 650b0d475..1e1e245ea 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -83,7 +83,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)changeFont:(id)sender { - CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)copy:(id)sender @@ -131,105 +131,105 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)copyFont:(id)sender { - CPLog.error(@"-[CPText " + _cmd + "] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)delete:(id)sender { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (CPFont)font:(CPFont)aFont { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return nil; } - (BOOL)isHorizontallyResizable { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return NO; } - (BOOL)isRichText { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return NO; } - (BOOL)isRulerVisible { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return NO; } - (BOOL)isVerticallyResizable { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return NO; } - (CGSize)maxSize { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return CPMakeSize(0,0); } - (CGSize)minSize { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return CPMakeSize(0,0); } - (void)pasteFont:(id)sender { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)scrollRangeToVisible:(CPRange)aRange { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)selectedAll:(id)sender { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (CPRange)selectedRange { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return CPMakeRange(CPNotFound, 0); } - (void)setFont:(CPFont)aFont { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)setFont:(CPFont)aFont rang:(CPRange)aRange { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)setHorizontallyResizable:(BOOL)flag { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)setMaxSize:(CGSize)aSize { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)setMinSize:(CGSize)aSize { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)setString:(CPString)aString @@ -239,28 +239,28 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)setUsesFontPanel:(BOOL)flag { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (void)setVerticallyResizable:(BOOL)flag { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (CPString)string { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return nil; } - (void)underline:(id)sender { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } - (BOOL)usesFontPanel { - CPLog.error(@"-[CPText "+_cmd+"] subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); return NO; } @@ -1765,7 +1765,7 @@ var kDelegateRespondsTo_textShouldBeginEditing } /* FIXME - just a testing characterSet + just a testing characterSet all of this depend of the current language. Need some CPLocale support and maybe even a FSM... */ diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index 6479b2663..6ff1863c6 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -113,7 +113,7 @@ var CPSystemTypesetterFactory = Nil; maxNumberOfLineFragments:(unsigned)maxNumLines nextGlyphIndex:(UIntegerReference)nextGlyph { - CPLog.error(@"-[CPTypesetter subclass responsibility"); + _CPRaiseInvalidAbstractInvocation(self, _cmd); } @end @@ -335,7 +335,7 @@ var _sharedSimpleTypesetter = nil; isNewline = YES; isWordWrapped = YES; - glyphIndex = CPMaxRange(lineRange) - 1; // start the line starts directly at current character + glyphIndex = CPMaxRange(lineRange) - 1; // start the line starts directly at current character } _lineHeight = MAX(_lineHeight, ascent - descent + leading); From 393113c3e3cbbf607767a6d014ba6cd88eeb4758 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 30 May 2014 11:12:29 -0700 Subject: [PATCH 265/278] Fixed: capp_lint --- AppKit/CPTextView/CPLayoutManager.j | 2 +- AppKit/CPTextView/CPTextContainer.j | 5 +++-- AppKit/CPTextView/CPTextStorage.j | 29 +++++------------------------ AppKit/CPTextView/CPTextView.j | 4 ++-- AppKit/CPTextView/CPTypesetter.j | 9 ++++++++- 5 files changed, 19 insertions(+), 30 deletions(-) diff --git a/AppKit/CPTextView/CPLayoutManager.j b/AppKit/CPTextView/CPLayoutManager.j index ac93b7d6d..acfc71efb 100755 --- a/AppKit/CPTextView/CPLayoutManager.j +++ b/AppKit/CPTextView/CPLayoutManager.j @@ -679,7 +679,7 @@ var _objectsInRange = function(aList, aRange) oldLength = CPMaxRange([_lineFragmentsForRescue lastObject]._range), newLength = [[_textStorage string].length]; - if(ABS(newLength - oldLength) > 1) + if (ABS(newLength - oldLength) > 1) return NO; if (![oldLineFragment isVisuallyIdenticalToFragment: newLineFragment]) diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j index 1e18d7677..7837f9ee3 100755 --- a/AppKit/CPTextView/CPTextContainer.j +++ b/AppKit/CPTextView/CPTextContainer.j @@ -139,9 +139,10 @@ CPLineMovesUp = 4; } } -- (void) textViewFrameChanged:(CPNotification)aNotification +- (void)textViewFrameChanged:(CPNotification)aNotification { - var newSize=CPMakeSize([_textView frame].size.width, _size.height); + var newSize = CGMakeSize([_textView frame].size.width, _size.height); + [self setContainerSize:newSize]; } diff --git a/AppKit/CPTextView/CPTextStorage.j b/AppKit/CPTextView/CPTextStorage.j index a9e897f7f..c57c059fd 100755 --- a/AppKit/CPTextView/CPTextStorage.j +++ b/AppKit/CPTextView/CPTextStorage.j @@ -39,8 +39,11 @@ CPTextStorageDidProcessEditingNotification = @"CPTextStorageDidProcessEditingNot @ingroup appkit @class CPTextStorage */ -@implementation CPTextStorage : CPAttributedString +@implementation CPTextStorage : CPMutableAttributedString { + CPColor _foregroundColor @accessors(property=foregroundColor); + CPFont _font @accessors(property=font); + CPMutableArray _layoutManagers; id _delegate; @@ -48,9 +51,6 @@ CPTextStorageDidProcessEditingNotification = @"CPTextStorageDidProcessEditingNot unsigned _editedMask; CPRange _editedRange; int _editCount; // {begin,end}Editing counter - - CPFont _font; - CPColor _foregroundColor; } - (id)initWithString:(CPString)aString attributes:(CPDictionary)attributes @@ -255,30 +255,11 @@ CPTextStorageDidProcessEditingNotification = @"CPTextStorageDidProcessEditingNot [self endEditing]; } -- (void)setFont:(CPFont)aFont -{ - _font = aFont; -} - -- (CPFont)font -{ - return _font; -} - -- (void)setForegroundColor:(CPColor)color -{ - _foregroundColor = color; -} - -- (CPColor)foregroundColor -{ - return _foregroundColor; -} - - (CPAttributedString)attributedSubstringFromRange:(CPRange)aRange { if (!aRange.length) return [CPAttributedString new]; + return [super attributedSubstringFromRange:aRange]; } @end diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 1e1e245ea..8bfd1ea38 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -297,7 +297,7 @@ var kDelegateRespondsTo_textShouldBeginEditing BOOL _drawCaret; CPTimer _caretTimer; CPTimer _scollingTimer; - CPRect _caretRect; + CGRect _caretRect; CPFont _font; CPColor _textColor; @@ -1271,7 +1271,7 @@ var kDelegateRespondsTo_textShouldBeginEditing changedRange = _selectionRange; if (_previousSelectionGranularity > 0 && - changedRange.location > 0 && [self _isCharacterAtIndex:changedRange.location-1 granularity:_previousSelectionGranularity] && + changedRange.location > 0 && [self _isCharacterAtIndex:(changedRange.location - 1) granularity:_previousSelectionGranularity] && changedRange.location < [[self string] length] && [self _isCharacterAtIndex:CPMaxRange(changedRange) granularity:_previousSelectionGranularity]) changedRange.length++; [self _deleteForRange:changedRange]; diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index 6ff1863c6..2b01afc45 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -351,25 +351,32 @@ var _sharedSimpleTypesetter = nil; lineOrigin.x += rangeWidth; isTabStop = NO; } + if (isNewline) { if ([_currentParagraph minimumLineHeight]) _lineHeight = MAX(_lineHeight, [_currentParagraph minimumLineHeight]); + if ([_currentParagraph maximumLineHeight]) _lineHeight = MIN(_lineHeight, [_currentParagraph maximumLineHeight]); + lineOrigin.y += _lineHeight; + if ([_currentParagraph lineSpacing]) lineOrigin.y += [_currentParagraph lineSpacing]; + if (lineOrigin.y > [_currentTextContainer containerSize].height) { _indexOfCurrentContainer++; - _indexOfCurrentContainer=MAX(_indexOfCurrentContainer, [[_layoutManager textContainers] count] - 1); + _indexOfCurrentContainer = MAX(_indexOfCurrentContainer, [[_layoutManager textContainers] count] - 1); _currentTextContainer = [[_layoutManager textContainers] objectAtIndex: _indexOfCurrentContainer]; } + lineOrigin.x = 0; numLines++; isNewline = NO; } + _lineWidth = 0; advancements = []; currentAnchor = 0; From f4aba5f9eadfc369e6af21e0992324b682c007a3 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 30 May 2014 11:27:31 -0700 Subject: [PATCH 266/278] New: Added protocol CPTextDelegate --- AppKit/CPText.j | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/AppKit/CPText.j b/AppKit/CPText.j index 0474af889..7203a8fd4 100644 --- a/AppKit/CPText.j +++ b/AppKit/CPText.j @@ -27,6 +27,16 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@protocol CPTextDelegate + +- (BOOL)textShouldBeginEditing:(CPText)aTextObject; +- (BOOL)textShouldEndEditing:(CPText)aTextObject; +- (void)textDidBeginEditing:(CPNotification)aNotification; +- (void)textDidChange:(CPNotification)aNotification; +- (void)textDidEndEditing:(CPNotification)aNotification; + +@end + CPParagraphSeparatorCharacter = 0x2029; CPLineSeparatorCharacter = 0x2028; CPEnterCharacter = "\u0003"; From d703945aa3b307d1f30dbfec506861e751000292 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 30 May 2014 20:36:10 +0200 Subject: [PATCH 267/278] corrected inheritance --- AppKit/CPTextView/CPTextView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 8bfd1ea38..da8692579 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -76,7 +76,7 @@ var kDelegateRespondsTo_textShouldBeginEditing -@implementation CPText : CPControl +@implementation CPText : CPView { int _previousSelectionGranularity; } From ff8ddc431bdc38fbcbd0a12f32d88767b7b26c99 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 30 May 2014 11:37:37 -0700 Subject: [PATCH 268/278] New: Added protocol CPTextViewDelegate --- AppKit/CPTextView/CPTextView.j | 44 ++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index da8692579..e9ffd58bb 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -35,6 +35,18 @@ @class _CPRTFParser; +@protocol CPTextViewDelegate + +- (BOOL)textView:(CPTextView)aTextView doCommandBySelector:(SEL)aSelector; +- (BOOL)textView:(CPTextView)aTextView shouldChangeTextInRange:(CPRange)affectedCharRange replacementString:(CPString)replacementString; +- (CPDictionary)textView:(CPTextView)textView shouldChangeTypingAttributes:(CPDictionary)oldTypingAttributes toAttributes:(CPDictionary)newTypingAttributes; +- (CPRange)textView:(CPTextView)aTextView willChangeSelectionFromCharacterRange:(CPRange)oldSelectedCharRange toCharacterRange:(CPRange)newSelectedCharRange; +- (void)textViewDidChangeSelection:(CPNotification)aNotification; +- (void)textViewDidChangeTypingAttributes:(CPNotification)aNotification; + +@end + + _MakeRangeFromAbs = function(a1, a2) { return (a1 < a2) ? CPMakeRange(a1, a2 - a1) : CPMakeRange(a2, a1 - a2); @@ -273,12 +285,12 @@ var kDelegateRespondsTo_textShouldBeginEditing */ @implementation CPTextView : CPText { - CPTextStorage _textStorage; - CPTextContainer _textContainer; - CPLayoutManager _layoutManager; - id _delegate; + CPTextStorage _textStorage; + CPTextContainer _textContainer; + CPLayoutManager _layoutManager; - unsigned _delegateRespondsToSelectorMask; + id _delegate; + unsigned _delegateRespondsToSelectorMask; CGSize _textContainerInset; CGPoint _textContainerOrigin; @@ -409,12 +421,30 @@ var kDelegateRespondsTo_textShouldBeginEditing return [self initWithFrame:aFrame textContainer:container]; } -- (void)setDelegate:(id)aDelegate +/*! + Returns the delegate object for the text view. +*/ +- (id)delegate { + return _delegate; +} + +/*! + TODO : documentation +*/ +- (void)setDelegate:(id )aDelegate +{ + if (aDelegate === _delegate) + return; + _delegateRespondsToSelectorMask = 0; if (_delegate) - [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:nil object:self]; + { + [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:CPTextDidChangeNotification object:self]; + [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:CPTextViewDidChangeSelectionNotification object:self]; + [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:CPTextViewDidChangeTypingAttributesNotification object:self]; + } _delegate = aDelegate; From dd2f573f27d402a3ec6915d7e7df376978bad93a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 30 May 2014 12:04:51 -0700 Subject: [PATCH 269/278] Fixed: changed a bit the readability of the file --- AppKit/CPTextView/CPTextView.j | 539 ++++++++++++++++++--------------- 1 file changed, 288 insertions(+), 251 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index e9ffd58bb..85aa428e0 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -285,6 +285,11 @@ var kDelegateRespondsTo_textShouldBeginEditing */ @implementation CPTextView : CPText { + BOOL _allowsUndo @accessors(property=allowsUndo); + BOOL _usesFontPanel @accessors(property=usesFontPanel); + CPColor _insertionPointColor @accessors(property=insertionPointColor); + CPSelectionGranularity _selectionGranularity @accessors(property=selectionGranularity); + CPTextStorage _textStorage; CPTextContainer _textContainer; CPLayoutManager _layoutManager; @@ -298,9 +303,6 @@ var kDelegateRespondsTo_textShouldBeginEditing int _startTrackingLocation; CPRange _selectionRange; CPDictionary _selectedTextAttributes; - int _selectionGranularity; - - CPColor _insertionPointColor; CPDictionary _typingAttributes; @@ -319,10 +321,7 @@ var kDelegateRespondsTo_textShouldBeginEditing BOOL _scrollingDownward; - /* use bit mask ? */ BOOL _isRichText; - BOOL _usesFontPanel; - BOOL _allowsUndo; BOOL _isHorizontallyResizable; BOOL _isVerticallyResizable; BOOL _isEditable; @@ -332,6 +331,29 @@ var kDelegateRespondsTo_textShouldBeginEditing int _stickyXLocation; } + +#pragma mark - +#pragma mark Class methods + +/* FIXME + just a testing characterSet + all of this depend of the current language. + Need some CPLocale support and maybe even a FSM... + */ ++ (CPArray)_wordBoundaryCharacterArray +{ + return ['\n','\r', ' ', '\t', ',', ';', '.', '!', '?', '\'', '"', '-', ':']; +} + ++ (CPArray)_paragraphBoundaryCharacterArray +{ + return ['\n','\r']; +} + + +#pragma mark - +#pragma mark Init methodes + - (id)initWithFrame:(CGRect)aFrame textContainer:(CPTextContainer)aContainer { self = [super initWithFrame:aFrame]; @@ -372,7 +394,7 @@ var kDelegateRespondsTo_textShouldBeginEditing _isVerticallyResizable = YES; _isHorizontallyResizable = NO; - _caretRect = CGRectMake(0,0,1,11); + _caretRect = CGRectMake(0, 0, 1, 11); } [self registerForDraggedTypes:[CPColorDragType]]; @@ -380,35 +402,6 @@ var kDelegateRespondsTo_textShouldBeginEditing return self; } -- (BOOL)_isFocused -{ - return [[self window] isKeyWindow] && _isFirstResponder; -} -- (void)becomeKeyWindow -{ - [self setNeedsDisplay:YES]; -} - -/*! - @ignore -*/ -- (void)resignKeyWindow -{ - [self setNeedsDisplay:YES]; -} - -- (void)undo:(id)sender -{ - if (_allowsUndo) - [[[self window] undoManager] undo]; -} - -- (void)redo:(id)sender -{ - if (_allowsUndo) - [[[self window] undoManager] redo]; -} - - (id)initWithFrame:(CGRect)aFrame { var layoutManager = [[CPLayoutManager alloc] init], @@ -421,6 +414,42 @@ var kDelegateRespondsTo_textShouldBeginEditing return [self initWithFrame:aFrame textContainer:container]; } + +#pragma mark - +#pragma mark Responders method + +- (BOOL)acceptsFirstResponder +{ + if (_isSelectable) + return YES; + + return NO; +} + +- (BOOL)becomeFirstResponder +{ + _isFirstResponder = YES; + [self updateInsertionPointStateAndRestartTimer:YES]; + [[CPFontManager sharedFontManager] setSelectedFont:[self font] isMultiple:NO]; + [self setNeedsDisplay:YES]; + + return YES; +} + +- (BOOL)resignFirstResponder +{ + [_caretTimer invalidate]; + _caretTimer = nil; + _isFirstResponder = NO; + [self setNeedsDisplay:YES]; + + return YES; +} + + +#pragma mark - +#pragma mark Delegate methods + /*! Returns the delegate object for the text view. */ @@ -476,11 +505,48 @@ var kDelegateRespondsTo_textShouldBeginEditing } } -- (CPString)string + +#pragma mark - +#pragma mark Key window methods + +- (void)becomeKeyWindow { - return [_textStorage string]; + [self setNeedsDisplay:YES]; } +/*! + @ignore +*/ +- (void)resignKeyWindow +{ + [self setNeedsDisplay:YES]; +} + +- (BOOL)_isFocused +{ + return [[self window] isKeyWindow] && _isFirstResponder; +} + + +#pragma mark - +#pragma mark Undo redo methods + +- (void)undo:(id)sender +{ + if (_allowsUndo) + [[[self window] undoManager] undo]; +} + +- (void)redo:(id)sender +{ + if (_allowsUndo) + [[[self window] undoManager] redo]; +} + + +#pragma mark - +#pragma mark Accessors + - (void)setString:(CPString)aString { [_textStorage replaceCharactersInRange:CPMakeRange(0, [_layoutManager numberOfCharacters]) withString:aString]; @@ -490,6 +556,11 @@ var kDelegateRespondsTo_textShouldBeginEditing [self setNeedsDisplay:YES]; } +- (CPString)string +{ + return [_textStorage string]; +} + // KVO support - (void)setValue:(CPString)aValue { @@ -512,16 +583,16 @@ var kDelegateRespondsTo_textShouldBeginEditing [self invalidateTextContainerOrigin]; } -- (CPTextStorage)textStorage -{ - return _textStorage; -} - - (CPTextContainer)textContainer { return _textContainer; } +- (CPTextStorage)textStorage +{ + return _textStorage; +} + - (CPLayoutManager)layoutManager { return _layoutManager; @@ -560,6 +631,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)setEditable:(BOOL)flag { _isEditable = flag; + if (flag) _isSelectable = flag; } @@ -572,6 +644,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)setSelectable:(BOOL)flag { _isSelectable = flag; + if (flag) _isEditable = flag; } @@ -608,6 +681,10 @@ var kDelegateRespondsTo_textShouldBeginEditing return shouldChange; } + +#pragma mark - +#pragma mark Insert characters methods + - (void)_replaceCharactersInRange:aRange withAttributedString:(CPString)aString { [_textStorage replaceCharactersInRange:aRange withAttributedString:aString]; @@ -636,7 +713,6 @@ var kDelegateRespondsTo_textShouldBeginEditing if (![self shouldChangeTextInRange:CPMakeRangeCopy(_selectionRange) replacementString:string]) return; - if (isAttributed) { [[[[self window] undoManager] prepareWithInvocationTarget:self] @@ -649,6 +725,7 @@ var kDelegateRespondsTo_textShouldBeginEditing else { [[[self window] undoManager] setActionName:@"Replace plain text"]; + if (_isRichText) { aString = [[CPAttributedString alloc] initWithString:aString attributes:_typingAttributes]; @@ -679,6 +756,36 @@ var kDelegateRespondsTo_textShouldBeginEditing [self setNeedsDisplayInRect:_caretRect]; } + +#pragma mark - +#pragma mark Drawing methods + +- (void)drawInsertionPointInRect:(CGRect)aRect color:(CPColor)aColor turnedOn:(BOOL)flag +{ +#if PLATFORM(DOM) + var style; + + if (!_caretDOM) + { + _caretDOM = document.createElement("span"); + style = _caretDOM.style; + style.position = "absolute"; + style.visibility = "visible"; + style.padding = "0px"; + style.margin = "0px"; + style.whiteSpace = "pre"; + style.backgroundColor = "black"; + _caretDOM.style.width = "1px"; + self._DOMElement.appendChild(_caretDOM); + } + + _caretDOM.style.left = (aRect.origin.x) + "px"; + _caretDOM.style.top = (aRect.origin.y) + "px"; + _caretDOM.style.height = (aRect.size.height) + "px"; + _caretDOM.style.visibility = flag ? "visible" : "hidden"; +#endif +} + - (void)drawRect:(CGRect)aRect { var ctx = [[CPGraphicsContext currentContext] graphicsPort], @@ -715,9 +822,29 @@ var kDelegateRespondsTo_textShouldBeginEditing [self updateInsertionPointStateAndRestartTimer:NO]; [self drawInsertionPointInRect:_caretRect color:_insertionPointColor turnedOn:_drawCaret]; } - else // FIXME: breaks DOM abstraction, but i did get it working otherwise + else // FIXME: breaks DOM abstraction, but i did get it working otherwise + { if (_caretDOM) _caretDOM.style.visibility = "hidden"; + } +} + + +#pragma mark - +#pragma mark Select methods + +- (void)selectAll:(id)sender +{ + if (_isSelectable) + { + if (_caretTimer) + { + [_caretTimer invalidate]; + _caretTimer = nil; + } + + [self setSelectedRange:CPMakeRange(0, [_layoutManager numberOfCharacters])]; + } } - (void)setSelectedRange:(CPRange)range @@ -732,7 +859,9 @@ var kDelegateRespondsTo_textShouldBeginEditing range = CPIntersectionRange(maxRange, range); if (!selecting && (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_willChangeSelectionFromCharacterRange_toCharacterRange)) + { _selectionRange = [_delegate textView:self willChangeSelectionFromCharacterRange:_selectionRange toCharacterRange:range]; + } else { _selectionRange = CPMakeRangeCopy(range); @@ -760,11 +889,57 @@ var kDelegateRespondsTo_textShouldBeginEditing return [_selectionRange]; } +- (CPRange)selectionRangeForProposedRange:(CPRange)proposedRange granularity:(CPSelectionGranularity)granularity +{ + var textStorageLength = [_layoutManager numberOfCharacters]; + + if (textStorageLength == 0) + return CPMakeRange(0, 0); + + if (proposedRange.location >= textStorageLength) + return CPMakeRange(textStorageLength, 0); + + if (CPMaxRange(proposedRange) > textStorageLength) + proposedRange.length = textStorageLength - proposedRange.location; + + var string = [_textStorage string]; + + switch (granularity) + { + case CPSelectByWord: + var wordRange = [self _characterRangeForUnitAtIndex:proposedRange.location asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:YES]; + + if (proposedRange.length) + wordRange = CPUnionRange(wordRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:NO]); + + return wordRange; + + case CPSelectByParagraph: + var parRange = [self _characterRangeForUnitAtIndex:proposedRange.location asDefinedByCharArray:[[self class] _paragraphBoundaryCharacterArray] skip:NO]; + + if (proposedRange.length) + parRange = CPUnionRange(parRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) asDefinedByCharArray: [[self class] _paragraphBoundaryCharacterArray] skip:NO]); + + return parRange; + + default: + return proposedRange; + } +} + + +#pragma mark - +#pragma mark Keyboard events + - (void)keyDown:(CPEvent)event { [self interpretKeyEvents:[event]]; } + +#pragma mark - +#pragma mark Mouse Events + - (void)mouseDown:(CPEvent)event { var fraction = [], @@ -794,8 +969,8 @@ var kDelegateRespondsTo_textShouldBeginEditing setRange = _MakeRangeFromAbs(_startTrackingLocation < _MidRange(_selectionRange)? CPMaxRange(_selectionRange) : _selectionRange.location, _startTrackingLocation); - } + [self setSelectedRange:setRange affinity:0 stillSelecting:YES]; } @@ -863,6 +1038,7 @@ var kDelegateRespondsTo_textShouldBeginEditing _previousSelectionGranularity = [self selectionGranularity]; [self setSelectionGranularity:CPSelectByCharacter]; [self setSelectedRange:[self selectedRange] affinity:0 stillSelecting:NO]; + var point = [_layoutManager locationForGlyphAtIndex:[self selectedRange].location]; _stickyXLocation= point.x; _startTrackingLocation = _selectionRange.location; @@ -896,6 +1072,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self scrollRangeToVisible:CPMakeRange(dindex, 0)] } } + - (void)moveDownAndModifySelection:(id)sender { if (_isSelectable) @@ -933,6 +1110,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self scrollRangeToVisible:CPMakeRange(dindex, 0)] } } + - (void)moveUpAndModifySelection:(id)sender { if (_isSelectable) @@ -944,11 +1122,14 @@ var kDelegateRespondsTo_textShouldBeginEditing [self _performSelectionFixupForRange:_MakeRangeFromAbs(_startTrackingLocation, (_selectionRange.location < _startTrackingLocation? _selectionRange.location : CPMaxRange(_selectionRange)))]; } } + - (void)_performSelectionFixupForRange:(CPRange)aSel { aSel.location = MAX(0, aSel.location); + if (CPMaxRange(aSel) > [_layoutManager numberOfCharacters]) aSel = CPMakeRange([_layoutManager numberOfCharacters], 0); + [self setSelectedRange:aSel]; var point = [_layoutManager locationForGlyphAtIndex:aSel.location]; _stickyXLocation = point.x; @@ -957,18 +1138,18 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)_establishSelection:(CPSelection)aSel byExtending:(BOOL)flag { if (flag) - { aSel = CPUnionRange(aSel, _selectionRange); - } [self _performSelectionFixupForRange:aSel]; _startTrackingLocation = _selectionRange.location; } + - (unsigned)_calculateMoveSelectionFromRange:(CPRange)aRange intoDirection:(integer)move granularity:(CPSelectionGranularity)granularity { var inWord = ![self _isCharacterAtIndex:(move > 0 ? CPMaxRange(aRange) : aRange.location) + move granularity:granularity], aSel = [self selectionRangeForProposedRange:CPMakeRange((move > 0 ? CPMaxRange(aRange) : aRange.location) + move, 0) granularity:granularity], bSel = [self selectionRangeForProposedRange:CPMakeRange((move > 0 ? CPMaxRange(aSel) : aSel.location) + move, 0) granularity:granularity]; + return move > 0 ? CPMaxRange(inWord? aSel:bSel) : (inWord? aSel:bSel).location; } @@ -988,8 +1169,11 @@ var kDelegateRespondsTo_textShouldBeginEditing intoDirection:move granularity:granularity]; aSel = CPMakeRange(pos, 0); } + else + { aSel = CPMakeRange((aSel.location < _startTrackingLocation? aSel.location : CPMaxRange(aSel)) + move, 0); + } aSel = _MakeRangeFromAbs(_startTrackingLocation, aSel.location); [self _performSelectionFixupForRange:aSel]; @@ -998,10 +1182,9 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)moveLeftAndModifySelection:(id)sender { if (_isSelectable) - { [self _extendSelectionIntoDirection:-1 granularity:CPSelectByCharacter]; - } } + - (void)moveBackward:(id)sender { [self moveLeft:sender]; @@ -1015,58 +1198,54 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)moveRightAndModifySelection:(id)sender { if (_isSelectable) - { [self _extendSelectionIntoDirection:+1 granularity:CPSelectByCharacter]; - } } + - (void)moveLeft:(id)sender { if (_isSelectable) - { [self _establishSelection:CPMakeRange(_selectionRange.location - 1, 0) byExtending:NO]; - } } - (void)moveToEndOfParagraph:(id)sender { if (_isSelectable) - { [self _moveSelectionIntoDirection:+1 granularity:CPSelectByParagraph]; - } } + - (void)moveToEndOfParagraphAndModifySelection:(id)sender { if (_isSelectable) - { [self _extendSelectionIntoDirection:+1 granularity:CPSelectByParagraph]; - } } + - (void)moveParagraphForwardAndModifySelection:(id)sender { if (_isSelectable) - { [self _extendSelectionIntoDirection:+1 granularity:CPSelectByParagraph]; - } } + - (void)moveParagraphForward:(id)sender { if (_isSelectable) - { [self _moveSelectionIntoDirection:+1 granularity:CPSelectByParagraph] - } } + - (void)moveWordBackwardAndModifySelection:(id)sender { [self moveWordLeftAndModifySelection:sender]; } + - (void)moveWordBackward:(id)sender { [self moveWordLeft:sender]; } + - (void)moveWordForwardAndModifySelection:(id)sender { [self moveWordRightAndModifySelection:sender]; } + - (void)moveWordForward:(id)sender { [self moveWordRight:sender]; @@ -1075,75 +1254,61 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)moveToBeginningOfDocument:(id)sender { if (_isSelectable) - { [self _establishSelection:CPMakeRange(0, 0) byExtending:NO]; - } } + - (void)moveToBeginningOfDocumentAndModifySelection:(id)sender { if (_isSelectable) - { [self _establishSelection:CPMakeRange(0, 0) byExtending:YES]; - } } + - (void)moveToEndOfDocument:(id)sender { if (_isSelectable) - { [self _establishSelection:CPMakeRange([_layoutManager numberOfCharacters], 0) byExtending:NO]; - } } + - (void)moveToEndOfDocumentAndModifySelection:(id)sender { if (_isSelectable) - { [self _establishSelection:CPMakeRange([_layoutManager numberOfCharacters], 0) byExtending:YES]; - } } - (void)moveWordRight:(id)sender { if (_isSelectable) - { [self _moveSelectionIntoDirection:+1 granularity:CPSelectByWord] - } } - (void)moveToBeginningOfParagraph:(id)sender { if (_isSelectable) - { [self _moveSelectionIntoDirection:-1 granularity:CPSelectByParagraph] - } } + - (void)moveToBeginningOfParagraphAndModifySelection:(id)sender { if (_isSelectable) - { [self _extendSelectionIntoDirection:-1 granularity:CPSelectByParagraph]; - } } + - (void)moveParagraphBackward:(id)sender { if (_isSelectable) - { [self _moveSelectionIntoDirection:-1 granularity:CPSelectByParagraph] - } } + - (void)moveParagraphBackwardAndModifySelection:(id)sender { if (_isSelectable) - { [self _extendSelectionIntoDirection:-1 granularity:CPSelectByParagraph]; - } } + - (void)moveWordRightAndModifySelection:(id)sender { if (_isSelectable) - { [self _extendSelectionIntoDirection:+1 granularity:CPSelectByWord]; - - } } - (void)deleteToEndOfParagraph:(id)sender @@ -1163,6 +1328,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } + - (void)deleteToBeginningOfLine:(id)sender { if (_isSelectable && _isEditable) @@ -1171,6 +1337,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } + - (void)deleteToEndOfLine:(id)sender { if (_isSelectable && _isEditable) @@ -1179,6 +1346,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } + - (void)deleteWordBackward:(id)sender { if (_isSelectable && _isEditable) @@ -1187,6 +1355,7 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } + - (void)deleteWordForward:(id)sender { if (_isSelectable && _isEditable) @@ -1195,45 +1364,53 @@ var kDelegateRespondsTo_textShouldBeginEditing [self delete:self]; } } + - (void)moveToLeftEndOfLine:(id)sender byExtending:(BOOL)flag { if (_isSelectable) { var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; + if (!fragment && _selectionRange.location > 0) fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location - 1]; if (fragment) [self _establishSelection:CPMakeRange(fragment._range.location, 0) byExtending:flag]; } } + - (void)moveToLeftEndOfLine:(id)sender { [self moveToLeftEndOfLine:sender byExtending:NO]; } + - (void)moveToLeftEndOfLineAndModifySelection:(id)sender { [self moveToLeftEndOfLine:sender byExtending:YES]; } + - (void)moveToRightEndOfLine:(id)sender byExtending:(BOOL)flag { if (_isSelectable) { var fragment = [_layoutManager _lineFragmentForLocation:_selectionRange.location]; + if (fragment) { var loc = CPMaxRange(fragment._range); + if (loc > 0 && loc < [_layoutManager numberOfCharacters]) - { loc = MAX(0, loc - 1); - } + [self _establishSelection:CPMakeRange(loc, 0) byExtending:flag]; } } } + - (void)moveToRightEndOfLine:(id)sender { [self moveToRightEndOfLine:sender byExtending:NO]; } + - (void)moveToRightEndOfLineAndModifySelection:(id)sender { [self moveToRightEndOfLine:sender byExtending:YES]; @@ -1242,38 +1419,19 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)moveWordLeftAndModifySelection:(id)sender { if (_isSelectable) - { [self _extendSelectionIntoDirection:-1 granularity:CPSelectByWord]; - } } + - (void)moveWordLeft:(id)sender { if (_isSelectable) - { [self _moveSelectionIntoDirection:-1 granularity:CPSelectByWord] - } } - (void)moveRight:(id)sender { if (_isSelectable) - { [self _establishSelection:CPMakeRange(CPMaxRange(_selectionRange) + 1, 0) byExtending:NO]; - } -} - -- (void)selectAll:(id)sender -{ - if (_isSelectable) - { - if (_caretTimer) - { - [_caretTimer invalidate]; - _caretTimer = nil; - } - - [self setSelectedRange:CPMakeRange(0, [_layoutManager numberOfCharacters])]; - } } - (void)_deleteForRange:(CPRange)changedRange @@ -1304,6 +1462,7 @@ var kDelegateRespondsTo_textShouldBeginEditing changedRange.location > 0 && [self _isCharacterAtIndex:(changedRange.location - 1) granularity:_previousSelectionGranularity] && changedRange.location < [[self string] length] && [self _isCharacterAtIndex:CPMaxRange(changedRange) granularity:_previousSelectionGranularity]) changedRange.length++; + [self _deleteForRange:changedRange]; } @@ -1329,10 +1488,12 @@ var kDelegateRespondsTo_textShouldBeginEditing { [self insertText:@"\n"]; } + - (void)insertTab:(id)sender { [self insertText:@"\t"]; } + - (void)insertTabIgnoringFieldEditor:(id)sender { [self insertTab:sender]; @@ -1348,39 +1509,15 @@ var kDelegateRespondsTo_textShouldBeginEditing [self insertLineBreak:sender]; } -- (BOOL)acceptsFirstResponder -{ - if (_isSelectable) - return YES; - - return NO; -} - -- (BOOL)becomeFirstResponder -{ - _isFirstResponder = YES; - [self updateInsertionPointStateAndRestartTimer:YES]; - [[CPFontManager sharedFontManager] setSelectedFont:[self font] isMultiple:NO]; - [self setNeedsDisplay:YES]; - return YES; -} - -- (BOOL)resignFirstResponder -{ - [_caretTimer invalidate]; - _caretTimer = nil; - _isFirstResponder = NO; - [self setNeedsDisplay:YES]; - return YES; -} - - (void)setTypingAttributes:(CPDictionary)attributes { if (!attributes) attributes = [CPDictionary dictionary]; if (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes) + { _typingAttributes = [_delegate textView:self shouldChangeTypingAttributes:_typingAttributes toAttributes:attributes]; + } else { _typingAttributes = [attributes copy]; @@ -1430,9 +1567,12 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)setFont:(CPFont)font { _font = font; + var length = [_layoutManager numberOfCharacters]; + if (length) - { [_textStorage addAttribute:CPFontAttributeName value:_font range:CPMakeRange(0, length)]; + { + [_textStorage addAttribute:CPFontAttributeName value:_font range:CPMakeRange(0, length)]; [_textStorage setFont:_font]; [self scrollRangeToVisible:CPMakeRange(length, 0)]; } @@ -1489,10 +1629,13 @@ var kDelegateRespondsTo_textShouldBeginEditing else { oldFont = [self font]; + var length = [_textStorage length]; + [self setFont:[sender convertFont:oldFont] range:CPMakeRange(0,length)]; scrollRange = CPMakeRange(length, 0); } + [_layoutManager _validateLayoutAndGlyphs]; [self sizeToFit]; [self setNeedsDisplay:YES]; @@ -1507,6 +1650,7 @@ var kDelegateRespondsTo_textShouldBeginEditing if (!CPEmptyRange(_selectionRange)) { var attrib = [_textStorage attributesAtIndex:_selectionRange.location effectiveRange:nil]; + if ([attrib containsKey:CPUnderlineStyleAttributeName] && [[attrib objectForKey:CPUnderlineStyleAttributeName] intValue]) [_textStorage removeAttribute:CPUnderlineStyleAttributeName range:_selectionRange]; else @@ -1526,16 +1670,6 @@ var kDelegateRespondsTo_textShouldBeginEditing return 0; } -- (void)setUsesFontPanel:(BOOL)flag -{ - _usesFontPanel = flag; -} - -- (BOOL)usesFontPanel -{ - return _usesFontPanel; -} - - (void)setTextColor:(CPColor)aColor { _textColor = aColor; @@ -1565,6 +1699,7 @@ var kDelegateRespondsTo_textShouldBeginEditing { [_typingAttributes setObject:aColor forKey:CPForegroundColorAttributeName]; } + [_layoutManager _validateLayoutAndGlyphs]; [self setNeedsDisplay:YES]; [self scrollRangeToVisible:CPMakeRange(CPMaxRange(range), 0)]; @@ -1585,11 +1720,6 @@ var kDelegateRespondsTo_textShouldBeginEditing return NO; } -- (BOOL)allowsUndo -{ - return _allowsUndo; -} - - (CPRange)selectedRange { return _selectionRange; @@ -1597,7 +1727,6 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString { - [_textStorage replaceCharactersInRange:aRange withString:aString]; } @@ -1718,11 +1847,13 @@ var kDelegateRespondsTo_textShouldBeginEditing { case CPSelectByWord: characterSet = [[self class] _wordBoundaryCharacterArray]; - break; + break; + case CPSelectByParagraph: characterSet = [[self class] _paragraphBoundaryCharacterArray]; - break; + break; } + // FIXME if (!characterSet) croak! return characterSet.join("").indexOf([self string].charAt(index)) !== CPNotFound; } @@ -1740,16 +1871,15 @@ var kDelegateRespondsTo_textShouldBeginEditing { // -> extend to the left wordRange = CPMakeRange(index, 1); + while (setString.indexOf(string.charAt(--index)) !== CPNotFound && index > -1) { wordRange = CPMakeRange(index, 1); - } // -> extend to the right for (index = wordRange.location; setString.indexOf(string.charAt(++index)) !== CPNotFound && index < string.length;) { wordRange = _MakeRangeFromAbs(wordRange.location, MIN(MAX(0, string.length - 1), index + 1)); - } return wordRange; } @@ -1794,110 +1924,11 @@ var kDelegateRespondsTo_textShouldBeginEditing return wordRange; } -/* FIXME - just a testing characterSet - all of this depend of the current language. - Need some CPLocale support and maybe even a FSM... - */ -+ (CPArray)_wordBoundaryCharacterArray -{ - return ['\n','\r', ' ', '\t', ',', ';', '.', '!', '?', '\'', '"', '-', ':']; -} - -+ (CPArray)_paragraphBoundaryCharacterArray -{ - return ['\n','\r']; -} - - -- (CPRange)selectionRangeForProposedRange:(CPRange)proposedRange granularity:(CPSelectionGranularity)granularity -{ - var textStorageLength = [_layoutManager numberOfCharacters]; - - if (textStorageLength == 0) - return CPMakeRange(0, 0); - - if (proposedRange.location >= textStorageLength) - return CPMakeRange(textStorageLength, 0); - - if (CPMaxRange(proposedRange) > textStorageLength) - proposedRange.length = textStorageLength - proposedRange.location; - - var string = [_textStorage string]; - - switch (granularity) - { - case CPSelectByWord: - var wordRange = [self _characterRangeForUnitAtIndex:proposedRange.location asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:YES]; - - if (proposedRange.length) - wordRange = CPUnionRange(wordRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) asDefinedByCharArray:[[self class] _wordBoundaryCharacterArray] skip:NO]); - - return wordRange; - - case CPSelectByParagraph: - var parRange = [self _characterRangeForUnitAtIndex:proposedRange.location asDefinedByCharArray:[[self class] _paragraphBoundaryCharacterArray] skip:NO]; - - if (proposedRange.length) - parRange = CPUnionRange(parRange, [self _characterRangeForUnitAtIndex:CPMaxRange(proposedRange) asDefinedByCharArray: [[self class] _paragraphBoundaryCharacterArray] skip:NO]); - - return parRange; - - default: - return proposedRange; - } -} - -- (void)setSelectionGranularity:(CPSelectionGranularity)granularity -{ - _selectionGranularity = granularity; -} - -- (CPSelectionGranularity)selectionGranularity -{ - return _selectionGranularity; -} - -- (CPColor)insertionPointColor -{ - return _insertionPointColor; -} - -- (void)setInsertionPointColor:(CPColor)aColor -{ - _insertionPointColor = aColor; -} - - (BOOL)shouldDrawInsertionPoint { return (_selectionRange.length === 0 && [self _isFocused]) } -- (void)drawInsertionPointInRect:(CGRect)aRect color:(CPColor)aColor turnedOn:(BOOL)flag -{ -#if PLATFORM(DOM) - var style; - if (!_caretDOM) - { - _caretDOM = document.createElement("span"); - style = _caretDOM.style; - style.position = "absolute"; - style.visibility = "visible"; - style.padding = "0px"; - style.margin = "0px"; - style.whiteSpace = "pre"; - style.backgroundColor = "black"; - _caretDOM.style.width = "1px"; - self._DOMElement.appendChild(_caretDOM); - } - - _caretDOM.style.left = (aRect.origin.x) + "px"; - _caretDOM.style.top = (aRect.origin.y) + "px"; - _caretDOM.style.height = (aRect.size.height) + "px"; - _caretDOM.style.visibility = flag ? "visible" : "hidden"; -#endif -} - - (void)_hideCaret { #if PLATFORM(DOM) @@ -1923,7 +1954,9 @@ var kDelegateRespondsTo_textShouldBeginEditing } } else + { _caretRect = [_layoutManager boundingRectForGlyphRange:CPMakeRange(_selectionRange.location, 1) inTextContainer:_textContainer]; + } _caretRect.origin.x += _textContainerOrigin.x; _caretRect.origin.y += _textContainerOrigin.y; @@ -1936,6 +1969,10 @@ var kDelegateRespondsTo_textShouldBeginEditing } } + +#pragma mark - +#pragma mark Dragging operation + - (void)performDragOperation:(CPDraggingInfo)aSender { var location = [self convertPoint:[aSender draggingLocation] fromView:nil], From 4fc6f6f59b11ebcdbca3c54ecb7cfdce80a78c19 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 30 May 2014 12:27:43 -0700 Subject: [PATCH 270/278] Fixed: refactoring delegate methods --- AppKit/CPTextView/CPTextView.j | 89 +++++++++++++++++++++++++--------- 1 file changed, 65 insertions(+), 24 deletions(-) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 85aa428e0..e256fb413 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -51,14 +51,15 @@ _MakeRangeFromAbs = function(a1, a2) { return (a1 < a2) ? CPMakeRange(a1, a2 - a1) : CPMakeRange(a2, a1 - a2); }; + _MidRange = function(a1) { return Math.floor((CPMaxRange(a1) + a1.location) / 2); }; -// FIXME: move to theme ? -@implementation CPColor(CPTextViewExtensions) +// FIXME: move to CPColor, and use attribut theme for the color +@implementation CPColor (CPTextViewExtensions) + (CPColor)selectedTextBackgroundColor { @@ -86,11 +87,9 @@ var kDelegateRespondsTo_textShouldBeginEditing kDelegateRespondsTo_textView_shouldChangeTextInRange_replacementString = 0x0008, kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes = 0x0010; - - @implementation CPText : CPView { - int _previousSelectionGranularity; + int _previousSelectionGranularity; } - (void)changeFont:(id)sender @@ -651,12 +650,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)doCommandBySelector:(SEL)aSelector { - var done = NO; - - if (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_doCommandBySelector) - done = [_delegate textView:self doCommandBySelector:aSelector]; - - if (!done) + if (![self _sendDelegateDoCommandBySelector:aSelector]) [super doCommandBySelector:aSelector]; } @@ -670,15 +664,7 @@ var kDelegateRespondsTo_textShouldBeginEditing if (!_isEditable) return NO; - var shouldChange = YES; - - if (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textShouldBeginEditing) - shouldChange = [_delegate textShouldBeginEditing:self]; - - if (shouldChange && (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_shouldChangeTextInRange_replacementString)) - shouldChange = [_delegate textView:self shouldChangeTextInRange:aRange replacementString:aString]; - - return shouldChange; + return [self _sendDelegateTextShouldBeginEditing] && [self _sendDelegateShouldChangeTextInRange:aRange replacementString:aString]; } @@ -858,9 +844,9 @@ var kDelegateRespondsTo_textShouldBeginEditing var maxRange = CPMakeRange(0, [_layoutManager numberOfCharacters]); range = CPIntersectionRange(maxRange, range); - if (!selecting && (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_willChangeSelectionFromCharacterRange_toCharacterRange)) + if (!selecting && [self _delegateRespondsToWillChangeSelectionFromCharacterRangeToCharacterRange]) { - _selectionRange = [_delegate textView:self willChangeSelectionFromCharacterRange:_selectionRange toCharacterRange:range]; + _selectionRange = [self _sendDelegateWillChangeSelectionFromCharacterRange:_selectionRange toCharacterRange:range]; } else { @@ -1514,9 +1500,9 @@ var kDelegateRespondsTo_textShouldBeginEditing if (!attributes) attributes = [CPDictionary dictionary]; - if (_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes) + if ([self _delegateRespondsToShouldChangeTypingAttributesToAttributes]) { - _typingAttributes = [_delegate textView:self shouldChangeTypingAttributes:_typingAttributes toAttributes:attributes]; + _typingAttributes = [self _sendDelegateShouldChangeTypingAttributes:_typingAttributes toAttributes:attributes]; } else { @@ -1985,3 +1971,58 @@ var kDelegateRespondsTo_textShouldBeginEditing } @end + + +@implementation CPTextView (CPTextViewDelegate) + +- (BOOL)_delegateRespondsToShouldChangeTypingAttributesToAttributes +{ + return _delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes; +} + +- (BOOL)_delegateRespondsToWillChangeSelectionFromCharacterRangeToCharacterRange +{ + return _delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_willChangeSelectionFromCharacterRange_toCharacterRange; +} + +- (BOOL)_sendDelegateDoCommandBySelector:(SEL)aSelector +{ + if (!(_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_doCommandBySelector)) + return NO; + + return [_delegate textView:self doCommandBySelector:aSelector]; +} + +- (BOOL)_sendDelegateTextShouldBeginEditing +{ + if (!(_delegateRespondsToSelectorMask & kDelegateRespondsTo_textShouldBeginEditing)) + return YES; + + return [_delegate textShouldBeginEditing:self]; +} + +- (BOOL)_sendDelegateShouldChangeTextInRange:(CPRange)aRange replacementString:(CPString)aString +{ + if (!(_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_shouldChangeTextInRange_replacementString)) + return YES; + + return [_delegate textView:self shouldChangeTextInRange:aRange replacementString:aString]; +} + +- (CPDictionary)_sendDelegateShouldChangeTypingAttributes:(CPDictionary)typingAttributes toAttributes:(CPDictionary)attributes +{ + if (!(_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_doCommandBySelector)) + return [CPDictionary dictionary]; + + return [_delegate textView:self shouldChangeTypingAttributes:typingAttributes toAttributes:attributes]; +} + +- (CPRange)_sendDelegateWillChangeSelectionFromCharacterRange:(CPRange)selectionRange toCharacterRange:(CPRange)range +{ + if (!(_delegateRespondsToSelectorMask & kDelegateRespondsTo_textView_willChangeSelectionFromCharacterRange_toCharacterRange)) + return CPMakeRange(0, 0); + + return [_delegate textView:self willChangeSelectionFromCharacterRange:selectionRange toCharacterRange:range]; +} + +@end From 81a8e911807a636f848d4a6ac6be949b37d14099 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 2 Jun 2014 20:39:50 +0200 Subject: [PATCH 271/278] fix cut with empty selection --- AppKit/CPTextView/CPTextView.j | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index e256fb413..acb5c11f0 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -1466,6 +1466,11 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)cut:(id)sender { + var selectedRange = [self selectedRange]; + + if (selectedRange.length < 1) + return; + [self copy:sender]; [self deleteBackward:sender] } From 39eeaea7e72aeb3c7edac2f1913da5106835ca7a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 3 Jun 2014 21:05:04 -0700 Subject: [PATCH 272/278] Fixed: circular import with CPText Previously CPText was in CPTextView.j, now it is in CPText.j. It fixes some other circular import as well, fixes some global var to import. Fixed some code style. --- AppKit/CPColor.j | 10 ++ AppKit/CPControl.j | 10 ++ AppKit/CPEvent.j | 4 +- AppKit/CPText.j | 210 +++++++++++++++++++++++ AppKit/CPTextView/CPParagraphStyle.j | 79 +++++---- AppKit/CPTextView/CPTextStorage.j | 1 - AppKit/CPTextView/CPTextView.j | 217 +----------------------- AppKit/CPTextView/CPTypesetter.j | 10 +- AppKit/CPTextView/_CPRTFParser.j | 238 +++++++++++++++++---------- AppKit/CPTextView/_CPRTFProducer.j | 111 ++++++++----- 10 files changed, 519 insertions(+), 371 deletions(-) diff --git a/AppKit/CPColor.j b/AppKit/CPColor.j index 5d27584d9..db44e970f 100644 --- a/AppKit/CPColor.j +++ b/AppKit/CPColor.j @@ -467,6 +467,16 @@ var cachedBlackColor, return [[CPColor alloc] _initWithCSSString: aString]; } ++ (CPColor)selectedTextBackgroundColor +{ + return [CPColor colorWithHexString:"99CCFF"]; +} + ++ (CPColor)selectedTextBackgroundColorUnfocussed +{ + return [CPColor colorWithHexString:"CCCCCC"]; +} + /* @ignore */ - (id)_initWithCSSString:(CPString)aString { diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 471a3de36..43974e307 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -42,6 +42,16 @@ @end +@global CPCancelTextMovement +@global CPLeftTextMovement +@global CPRightTextMovement +@global CPUpTextMovement +@global CPDownTextMovement +@global CPReturnTextMovement +@global CPBacktabTextMovement +@global CPTabTextMovement +@global CPOtherTextMovement + CPLeftTextAlignment = 0; CPRightTextAlignment = 1; CPCenterTextAlignment = 2; diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index 190065d4d..e30abf44b 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -28,11 +28,13 @@ @import "CPCompatibility.j" @import "CGGeometry.j" -@import "CPText.j" @class CPTextField @global CPApp +@global CPNewlineCharacter +@global CPCarriageReturnCharacter +@global CPEnterCharacter var _CPEventPeriodicEventPeriod = 0, _CPEventPeriodicEventTimer = nil, diff --git a/AppKit/CPText.j b/AppKit/CPText.j index 7203a8fd4..2df332ab6 100644 --- a/AppKit/CPText.j +++ b/AppKit/CPText.j @@ -27,6 +27,16 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@import + +@import "CPPasteboard.j" +@import "CPView.j" +@import "_CPRTFParser.j" +@import "_CPRTFProducer.j" + +@global CPStringPboardType +@class CPAttributedString + @protocol CPTextDelegate - (BOOL)textShouldBeginEditing:(CPText)aTextObject; @@ -86,3 +96,203 @@ CPBaselineOffsetAttributeName = @"CPBaselineOffsetAttributeName"; CPAttachmentAttributeName = @"CPAttachmentAttributeName"; CPLigatureAttributeName = @"CPLigatureAttributeName"; CPKernAttributeName = @"CPKernAttributeName"; + +@implementation CPText : CPView +{ + int _previousSelectionGranularity; +} + +- (void)changeFont:(id)sender +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)copy:(id)sender +{ + var selectedRange = [self selectedRange]; + + if (selectedRange.length < 1) + return; + + var pasteboard = [CPPasteboard generalPasteboard], + stringForPasting = [[self stringValue] substringWithRange:selectedRange]; + + [pasteboard declareTypes:[CPStringPboardType] owner:nil]; + + if ([self isRichText]) + { + // crude hack to make rich pasting possible in chrome and firefox. this requires a RTF roundtrip, unfortunately + var richData = [_CPRTFProducer produceRTF:[[self textStorage] attributedSubstringFromRange:selectedRange] documentAttributes:@{}]; + [pasteboard setString:richData forType:CPStringPboardType]; + } + else + { + [pasteboard setString:stringForPasting forType:CPStringPboardType]; + } +} +- (void)paste:(id)sender +{ + var pasteboard = [CPPasteboard generalPasteboard], + // dataForPasting = [pasteboard dataForType:CPRichStringPboardType], + stringForPasting = [pasteboard stringForType:CPStringPboardType]; + + if ([stringForPasting hasPrefix:"{\\rtf1\\ansi"]) + stringForPasting = [[_CPRTFParser new] parseRTF:stringForPasting]; + + if (![self isRichText] && [stringForPasting isKindOfClass:[CPAttributedString class]]) + stringForPasting = stringForPasting._string; + + if (_previousSelectionGranularity > 0) + { + // FIXME: handle smart pasting + } + + if (stringForPasting) + [self insertText:stringForPasting]; +} + +- (void)copyFont:(id)sender +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)delete:(id)sender +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (CPFont)font:(CPFont)aFont +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return nil; +} + +- (BOOL)isHorizontallyResizable +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return NO; +} + +- (BOOL)isRichText +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return NO; +} + +- (BOOL)isRulerVisible +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return NO; +} + +- (BOOL)isVerticallyResizable +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return NO; +} + +- (CGSize)maxSize +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return CGSizeMake(0,0); +} + +- (CGSize)minSize +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + return CGSizeMake(0,0); +} + +- (void)pasteFont:(id)sender +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)scrollRangeToVisible:(CPRange)aRange +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)selectedAll:(id)sender +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (CPRange)selectedRange +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return CPMakeRange(CPNotFound, 0); +} + +- (void)setFont:(CPFont)aFont +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)setFont:(CPFont)aFont rang:(CPRange)aRange +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)setHorizontallyResizable:(BOOL)flag +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)setMaxSize:(CGSize)aSize +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)setMinSize:(CGSize)aSize +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)setString:(CPString)aString +{ + [self replaceCharactersInRange:CPMakeRange(0, [[self string] length]) withString:aString]; +} + +- (void)setUsesFontPanel:(BOOL)flag +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (void)setVerticallyResizable:(BOOL)flag +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (CPString)string +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return nil; +} + +- (void)underline:(id)sender +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); +} + +- (BOOL)usesFontPanel +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + + return NO; +} + +@end \ No newline at end of file diff --git a/AppKit/CPTextView/CPParagraphStyle.j b/AppKit/CPTextView/CPParagraphStyle.j index f3b509e1a..bf9737290 100755 --- a/AppKit/CPTextView/CPParagraphStyle.j +++ b/AppKit/CPTextView/CPParagraphStyle.j @@ -25,7 +25,6 @@ */ @import -@import "CPControl.j" var _sharedDefaultParagraphStyle, _defaultTabStopArray; @@ -42,8 +41,8 @@ CPParagraphStyleAttributeName = @"CPParagraphStyleAttributeName"; @implementation CPTextTab : CPObject { - int _type @accessors(property=tabStopType); - double _location @accessors(property=location); + int _type @accessors(property = tabStopType); + double _location @accessors(property = location); } - (id)initWithType:(CPTabStopType) aType location:(double) aLocation @@ -57,6 +56,10 @@ CPParagraphStyleAttributeName = @"CPParagraphStyleAttributeName"; return self; } + +#pragma mark - +#pragma mark Coding methods + - (id)initWithCoder:(id)aCoder { self = [self init]; @@ -78,25 +81,30 @@ CPParagraphStyleAttributeName = @"CPParagraphStyleAttributeName"; @end + @implementation CPParagraphStyle : CPObject { - CPArray _tabStops @accessors(property = tabStops); - CPTextAlignment _alignment @accessors(property = alignment); - unsigned _firstLineHeadIndent @accessors(property = firstLineHeadIndent); - unsigned _headIndent @accessors(property = headIndent); - unsigned _tailIndent @accessors(property = tailIndent); - unsigned _paragraphSpacing @accessors(property = paragraphSpacing); - unsigned _minimumLineHeight @accessors(property = minimumLineHeight); - unsigned _maximumLineHeight @accessors(property = maximumLineHeight); - unsigned _lineSpacing @accessors(property = lineSpacing); + CPArray _tabStops @accessors(property = tabStops); + CPTextAlignment _alignment @accessors(property = alignment); + unsigned _firstLineHeadIndent @accessors(property = firstLineHeadIndent); + unsigned _headIndent @accessors(property = headIndent); + unsigned _tailIndent @accessors(property = tailIndent); + unsigned _paragraphSpacing @accessors(property = paragraphSpacing); + unsigned _minimumLineHeight @accessors(property = minimumLineHeight); + unsigned _maximumLineHeight @accessors(property = maximumLineHeight); + unsigned _lineSpacing @accessors(property = lineSpacing); } + +#pragma mark - +#pragma mark Class methods + + (CPParagraphStyle)defaultParagraphStyle { - if (!_sharedDefaultParagraphStyle) + if (!_sharedDefaultParagraphStyle) _sharedDefaultParagraphStyle = [self new]; - return _sharedDefaultParagraphStyle; + return _sharedDefaultParagraphStyle; } + (CPArray)_defaultTabStops @@ -112,18 +120,13 @@ CPParagraphStyleAttributeName = @"CPParagraphStyleAttributeName"; _defaultTabStopArray.push([[CPTextTab alloc] initWithType:CPLeftTabStopType location:i * 28]); } } - return _defaultTabStopArray; -} -- (void)addTabStop:(CPTextTab)aStop -{ - _tabStops.push(aStop); + + return _defaultTabStopArray; } -- (void)_initWithDefaults -{ - _alignment = CPLeftTextAlignment; - _tabStops = [[[self class] _defaultTabStops] copy]; -} + +#pragma mark - +#pragma mark Init methods - (id)init { @@ -131,11 +134,7 @@ CPParagraphStyleAttributeName = @"CPParagraphStyleAttributeName"; return self; } -- (id)copy -{ - var other = [[self class] alloc]; - return [other initWithParagraphStyle:self]; -} + - (CPParagraphStyle)initWithParagraphStyle:(CPParagraphStyle)other { other._tabStops = [_tabStops copy]; @@ -151,6 +150,28 @@ CPParagraphStyleAttributeName = @"CPParagraphStyleAttributeName"; return self; } +- (void)_initWithDefaults +{ + _alignment = CPLeftTextAlignment; + _tabStops = [[[self class] _defaultTabStops] copy]; +} + +- (void)addTabStop:(CPTextTab)aStop +{ + _tabStops.push(aStop); +} + +- (id)copy +{ + var other = [[self class] alloc]; + + return [other initWithParagraphStyle:self]; +} + + +#pragma mark - +#pragma mark Code methods + - (id)initWithCoder:(id)aCoder { self = [self init]; diff --git a/AppKit/CPTextView/CPTextStorage.j b/AppKit/CPTextView/CPTextStorage.j index c57c059fd..6d209bf5d 100755 --- a/AppKit/CPTextView/CPTextStorage.j +++ b/AppKit/CPTextView/CPTextStorage.j @@ -27,7 +27,6 @@ @class CPLayoutManager; - CPTextStorageEditedAttributes = 1; CPTextStorageEditedCharacters = 2; diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index acb5c11f0..dc150ad08 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -24,12 +24,12 @@ */ @import "CPText.j" -@import "CPTextStorage.j" -@import "CPTextContainer.j" -@import "CPFontManager.j" -@import "CPLayoutManager.j" @import "CPPasteboard.j" @import "CPColorPanel.j" +@import "CPFontManager.j" +@import "CPTextStorage.j" +@import "CPTextContainer.j" +@import "CPLayoutManager.j" @class _CPRTFProducer; @class _CPRTFParser; @@ -57,22 +57,6 @@ _MidRange = function(a1) return Math.floor((CPMaxRange(a1) + a1.location) / 2); }; - -// FIXME: move to CPColor, and use attribut theme for the color -@implementation CPColor (CPTextViewExtensions) - -+ (CPColor)selectedTextBackgroundColor -{ - return [CPColor colorWithHexString:"99CCFF"]; -} -+ (CPColor)selectedTextBackgroundColorUnfocussed -{ - return [CPColor colorWithHexString:"CCCCCC"]; -} - -@end - - /* CPSelectionGranularity */ @@ -87,197 +71,6 @@ var kDelegateRespondsTo_textShouldBeginEditing kDelegateRespondsTo_textView_shouldChangeTextInRange_replacementString = 0x0008, kDelegateRespondsTo_textView_shouldChangeTypingAttributes_toAttributes = 0x0010; -@implementation CPText : CPView -{ - int _previousSelectionGranularity; -} - -- (void)changeFont:(id)sender -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)copy:(id)sender -{ - var selectedRange = [self selectedRange]; - - if (selectedRange.length < 1) - return; - - var pasteboard = [CPPasteboard generalPasteboard], - stringForPasting = [[self stringValue] substringWithRange:selectedRange]; - - [pasteboard declareTypes:[CPStringPboardType] owner:nil]; - - if ([self isRichText]) - { - // crude hack to make rich pasting possible in chrome and firefox. this requires a RTF roundtrip, unfortunately - var richData = [_CPRTFProducer produceRTF:[[self textStorage] attributedSubstringFromRange:selectedRange] documentAttributes:@{}]; - [pasteboard setString:richData forType:CPStringPboardType]; - } - else - [pasteboard setString:stringForPasting forType:CPStringPboardType]; - -} -- (void)paste:(id)sender -{ - var pasteboard = [CPPasteboard generalPasteboard], - // dataForPasting = [pasteboard dataForType:CPRichStringPboardType], - stringForPasting = [pasteboard stringForType:CPStringPboardType]; - - if ([stringForPasting hasPrefix:"{\\rtf1\\ansi"]) - stringForPasting = [[_CPRTFParser new] parseRTF:stringForPasting]; - - if (![self isRichText] && [stringForPasting isKindOfClass:[CPAttributedString class]]) - stringForPasting = stringForPasting._string; - - if (_previousSelectionGranularity > 0) - { - // FIXME: handle smart pasting - } - - if (stringForPasting) - [self insertText:stringForPasting]; -} - -- (void)copyFont:(id)sender -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)delete:(id)sender -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (CPFont)font:(CPFont)aFont -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return nil; -} - -- (BOOL)isHorizontallyResizable -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return NO; -} - -- (BOOL)isRichText -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return NO; -} - -- (BOOL)isRulerVisible -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return NO; -} - -- (BOOL)isVerticallyResizable -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return NO; -} - -- (CGSize)maxSize -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return CPMakeSize(0,0); -} - -- (CGSize)minSize -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return CPMakeSize(0,0); -} - -- (void)pasteFont:(id)sender -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)replaceCharactersInRange:(CPRange)aRange withString:(CPString)aString -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)scrollRangeToVisible:(CPRange)aRange -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)selectedAll:(id)sender -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (CPRange)selectedRange -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return CPMakeRange(CPNotFound, 0); -} - -- (void)setFont:(CPFont)aFont -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)setFont:(CPFont)aFont rang:(CPRange)aRange -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)setHorizontallyResizable:(BOOL)flag -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)setMaxSize:(CGSize)aSize -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)setMinSize:(CGSize)aSize -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)setString:(CPString)aString -{ - [self replaceCharactersInRange:CPMakeRange(0, [[self string] length]) withString:aString]; -} - -- (void)setUsesFontPanel:(BOOL)flag -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (void)setVerticallyResizable:(BOOL)flag -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (CPString)string -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return nil; -} - -- (void)underline:(id)sender -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); -} - -- (BOOL)usesFontPanel -{ - _CPRaiseInvalidAbstractInvocation(self, _cmd); - return NO; -} - -@end - - /*! @ingroup appkit @class CPTextView @@ -694,7 +487,7 @@ var kDelegateRespondsTo_textShouldBeginEditing - (void)insertText:(CPString)aString { var isAttributed = [aString isKindOfClass:CPAttributedString], - string = (isAttributed)?[aString string]:aString; + string = isAttributed ? [aString string]:aString; if (![self shouldChangeTextInRange:CPMakeRangeCopy(_selectionRange) replacementString:string]) return; diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index 2b01afc45..9a282d288 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -50,6 +50,7 @@ function _widthOfStringForFont(aString, aFont) { if (!_measuringContext) _measuringContext = CGBitmapGraphicsContextCreate(); + if (!_didTestCanvasSizingValid && CPFeatureIsCompatible(CPHTMLCanvasFeature)) { var teststring = "0123456879abcdefghiklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-()"; @@ -57,20 +58,24 @@ function _widthOfStringForFont(aString, aFont) _measuringContext.font = [aFont cssString]; _isCanvasSizingInvalid = [teststring sizeWithFont:aFont].width != _measuringContext.measureText(teststring).width; } + if (!CPFeatureIsCompatible(CPHTMLCanvasFeature) || _isCanvasSizingInvalid) // measuring with canvas is _much_ faster on chrome return [aString sizeWithFont:aFont]; + if (_measuringContextFont !== aFont) { _measuringContextFont = aFont; _measuringContext.font = [aFont cssString]; } + return _measuringContext.measureText(aString); } -var CPSystemTypesetterFactory = Nil; +var CPSystemTypesetterFactory = nil; @implementation CPTypesetter : CPObject { + } + (id)sharedSystemTypesetter @@ -118,9 +123,10 @@ var CPSystemTypesetterFactory = Nil; @end + var _sharedSimpleTypesetter = nil; -@implementation CPSimpleTypesetter:CPTypesetter +@implementation CPSimpleTypesetter : CPTypesetter { CPLayoutManager _layoutManager; CPTextContainer _currentTextContainer; diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index 88b5e8d46..1f6579659 100755 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -27,27 +27,29 @@ e.g. using zaach/jison on github @import @import @import "CPFontManager.j" -@import "CPText.j" @import "CPParagraphStyle.j" +@global CPFontAttributeName +@global CPForegroundColorAttributeName + var hexTable = []; // Hold the attributes of the current run @implementation _RTFAttribute : CPObject { - CPRange _range; - CPParagraphStyle paragraph; - CPColor fgColour; - CPColor bgColour; - CPColor ulColour; - CPString fontName; - unsigned fontSize; - BOOL bold; - BOOL italic; - BOOL underline; - BOOL strikethrough; - BOOL script; - BOOL _tabChanged; + CPRange _range; + CPParagraphStyle paragraph; + CPColor fgColour; + CPColor bgColour; + CPColor ulColour; + CPString fontName; + unsigned fontSize; + BOOL bold; + BOOL italic; + BOOL underline; + BOOL strikethrough; + BOOL script; + BOOL _tabChanged; } - (id)init @@ -94,7 +96,6 @@ var hexTable = []; if (font == nil) { - /* Last resort, default font. :-( */ font = [CPFont systemFontOfSize:fontSize]; } @@ -288,6 +289,7 @@ var kRgsymRtf = { _freename = ""; _parsingFontTable = NO; } + return self; } @@ -301,12 +303,14 @@ var kRgsymRtf = { case 1: console.log("skipped : " + sym[4]); - return ''; + return ''; + default: if (sym && sym[4]) return sym[4]; } } + - (BOOL)pushState { _states.push["group"]; @@ -319,112 +323,139 @@ var kRgsymRtf = { if (_curState > 0) _curState--; + return YES; } - (CPString)_parseSpec:(CPArray)sym parameter:(CPString)v { var ch = ''; + switch (sym[4]) { case "ipfnDestSkip": - _curState++; - return ''; + _curState++; + return ''; + case "ipfnHex": - ch = _rtf.charAt(++_currentParseIndex); - var hex = ''; - while (/[a-fA-F0-9\']/.test(ch)) - { - if (ch == "'") - { - _currentParseIndex++; - continue; - } - hex += (ch + ''); - ch = _rtf.charAt(++_currentParseIndex); - } - //ch = parseInt(ch, 16); - console.log("hex : " + hex); - _hexreturn = YES; - _currentParseIndex--; - if (_curState !== 0) - return ''; - else return hex; - break; + ch = _rtf.charAt(++_currentParseIndex); + + var hex = ''; + + while (/[a-fA-F0-9\']/.test(ch)) + { + if (ch == "'") + { + _currentParseIndex++; + continue; + } + + hex += (ch + ''); + ch = _rtf.charAt(++_currentParseIndex); + } + //ch = parseInt(ch, 16); + //console.log("hex : " + hex); + _hexreturn = YES; + _currentParseIndex--; + + if (_curState !== 0) + return ''; + else + return hex; + break; + case "codePage": ch = _rtf.charAt(++_currentParseIndex); + var code = ''; + while (/[0-9]/.test(ch)) { code += (ch + ''); ch = _rtf.charAt(++_currentParseIndex); } + _codePage = code; _currentParseIndex--; - break; + break; } + return ''; } - (void)_flushCurrentRun { var newOffset = 0; + if (_currentRun) { if ([_result length] == _currentRun._range.location) return; + _currentRun._range.length = [_result length] - _currentRun._range.location; newOffset = CPMaxRange(_currentRun._range); + var dict = [_currentRun dictionary]; + [_result setAttributes:dict range:_currentRun._range]; // flush previous run } + _currentRun = [_RTFAttribute new]; _currentRun._range = CPMakeRange(newOffset, 0); // open a new one } + - (CPString)_applyPropChange:sym parameter:param { - console.log("prop : " + sym[0] + " / param : " + param+ ' '); + //console.log("prop : " + sym[0] + " / param : " + param+ ' '); switch (sym[0]) { case "pard": [self _flushCurrentRun]; - break; + break; + case "b": // bold if (param === 0) { if (_currentRun && _currentRun.bold) [self _flushCurrentRun]; _currentRun.bold = NO - } else + } + else { if (_currentRun && !_currentRun.bold) [self _flushCurrentRun] _currentRun.bold = YES; } - break; + + break; + case "i": // italic if (param === 0) { if (_currentRun && _currentRun.italic) [self _flushCurrentRun]; _currentRun.italic = NO - } else + } + else { if (_currentRun && !_currentRun.italic) [self _flushCurrentRun] _currentRun.italic = YES; } - break; + + break; case "qc": // paragraph center [_currentRun.paragraph setAlignment:CPCenterTextAlignment]; - break; + break; + case "paperw": _paper.width = param; - break; + break; + case "paperh": _paper.height = param; - break; + break; } return ''; @@ -437,17 +468,19 @@ var kRgsymRtf = { { case "colortbl": _colorArray.push([CPColor blackColor]); - break; + break; + case "fonttbl": _parsingFontTable = YES; - break; + break; } + if (sym[4] == "destSkip") { console.log("Dest skip start : [" + sym[0] + "]"); _curState++; - } + return ''; } @@ -456,6 +489,7 @@ var kRgsymRtf = { if (kRgsymRtf[keyword] !== undefined) { var sym = kRgsymRtf[keyword]; + switch (sym[3]) { case kRTFParserType_prop: @@ -464,17 +498,21 @@ var kRgsymRtf = { param = sym[1]; } return [self _applyPropChange:sym parameter:param]; + case kRTFParserType_char: return [self _checkChar:sym parameter:param]; + case kRTFParserType_dest: return [self _changeDest:sym]; + case kRTFParserType_spec: return [self _parseSpec:sym parameter:param]; + default: return ''; - break; } - } else + } + else { switch (keyword) { @@ -482,50 +520,66 @@ var kRgsymRtf = { var oldColor = [_colorArray lastObject], green = [oldColor greenComponent], blue = [oldColor blueComponent]; + _colorArray.pop(); _colorArray.push([CPColor colorWithRed: parseInt(param) / 255 green:green blue:blue alpha:1.0]); - break; + break; + case "green": var oldColor = [_colorArray lastObject], red = [oldColor redComponent], blue = [oldColor blueComponent]; + _colorArray.pop(); _colorArray.push([CPColor colorWithRed: red green: parseInt(param) / 255 blue:blue alpha:1.0]); - break; + break; + case "blue": var oldColor = [_colorArray lastObject], green = [oldColor greenComponent], red = [oldColor redComponent]; + _colorArray.pop(); _colorArray.push([CPColor colorWithRed: red green:green blue:parseInt(param) / 255 alpha:1.0]); - break; + break; + case "cf": // change foreground color var fontIndex = parseInt(param) - 1; + if (_currentRun && fontIndex >= 0) _currentRun.fgColour = _colorArray[fontIndex]; - break; + + break; + case "f": // change font var fontIndex = parseInt(param); + if (_currentRun && fontIndex >= 0 && fontIndex < _fontArray.length) _currentRun.fontName = _fontArray[fontIndex]; - break; + break; + case "fs": // change font size _currentRun.fontSize = parseInt(param) / 2; - break; + break; + case "tx": // tabstop var location = parseInt(param) / 20; if (_currentRun) { [_currentRun addTab:location type:CPLeftTabStopType]; } - break; + + break; + default: console.log("skip : " + keyword + " param: " + param); } + if (_states.length > 0) _curState = 1; + return ''; } } @@ -537,16 +591,16 @@ var kRgsymRtf = { fNeg = false, keyword = '', param = ''; + _rtf = rtf; if (++_currentParseIndex >= len) return len; + ch = rtf.charAt(_currentParseIndex); if (!/[a-zA-Z]/.test(ch)) - { return [self _translateKeyword:ch parameter:nil fParameter:fParam]; - } while (/[a-zA-Z]/.test(ch)) { @@ -559,6 +613,7 @@ var kRgsymRtf = { fNeg = true; ch = rtf.charAt(++_currentParseIndex); } + fParam = true; while (/[0-9]/.test(ch)) @@ -566,6 +621,7 @@ var kRgsymRtf = { param += (ch + ''); ch = rtf.charAt(++_currentParseIndex); } + _currentParseIndex--; param = parseInt(param); @@ -574,6 +630,7 @@ var kRgsymRtf = { return [self _translateKeyword:keyword parameter:param fParameter:fParam]; } + - (void)_appendPlainString:(CPString) aString { [_result replaceCharactersInRange:CPMakeRange([_result length], 0) withString:aString]; @@ -587,6 +644,7 @@ var kRgsymRtf = { return ''; } _currentParseIndex = -1; + var len = rtf.length, tmp = '', ch = '', @@ -602,6 +660,7 @@ var kRgsymRtf = { [self _appendPlainString: String.fromCharCode(parseInt((hex), 16))]; hex = ''; } + switch (tmp) { case " ": @@ -613,17 +672,18 @@ var kRgsymRtf = { _freename += tmp; [self _appendPlainString:tmp]; } - break; + break; + case "{": if ([self pushState]) { console.log("push"); } - break; + break; + case "}": if ([self popState]) { - console.log("pop"); } if (_freename) @@ -637,17 +697,17 @@ var kRgsymRtf = { _freename = ""; } [self _flushCurrentRun] - break; + break; + case "\\": _freename = ''; ch = [self _parseKeyword:rtf length:len]; + if (!_hexreturn && ch.length == 0) - { lastchar = 1; - } else - { + else lastchar = 0; - } + if (_hexreturn) { if (ch.length > 0) @@ -655,7 +715,8 @@ var kRgsymRtf = { if (parseInt(ch, 16) & 0x80) { hex += ch.toUpperCase(); - } else + } + else { [self _appendPlainString: String.fromCharCode(parseInt((hex + ch), 16))]; hex = ''; @@ -664,42 +725,49 @@ var kRgsymRtf = { if (hex.length == 4) { var temp = parseInt(hex, 16); + if (hexTable && hexTable[hex.toUpperCase()] !== undefined) { temp = parseInt(hexTable[hex.toUpperCase()], 16); } + [self _appendPlainString: String.fromCharCode(temp)] hex = ''; } - } else + } + else { console.log("hex skipped"); } - _hexreturn = NO; - } else - if (ch !== undefined && _curState === 0) - { - [self _appendPlainString:ch]; - } - break; + _hexreturn = NO; + } + else if (ch !== undefined && _curState === 0) + { + [self _appendPlainString:ch]; + + } + + break; + case 0x0d: case 0x0a: case '\n': case '\r': - break; + break; + default: lastchar = 0; + if (_curState == 0) - { [self _appendPlainString:tmp]; - } else if (tmp !== ';') - { + else if (tmp !== ';') _freename += tmp; - } - break; + + break; } } + return _result; } diff --git a/AppKit/CPTextView/_CPRTFProducer.j b/AppKit/CPTextView/_CPRTFProducer.j index 3a4884cda..a86b4a7a4 100755 --- a/AppKit/CPTextView/_CPRTFProducer.j +++ b/AppKit/CPTextView/_CPRTFProducer.j @@ -1,12 +1,12 @@ /* RTFProducer.j - Serialize CPAttributedString to a RTF String + Serialize CPAttributedString to a RTF String Copyright (C) 2014 Daniel Boehringer This file is based on the RTFProducer from GNUStep (which i co-authored with Fred Kiefer in 1999) - + * 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 @@ -20,15 +20,23 @@ * 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 "CPParagraphStyle.j" @import "CPColor.j" @import "CPGraphics.j" -@import "CPText.j" @import "CPFontManager.j" +@global CPFontAttributeName +@global CPForegroundColorAttributeName +@global CPBackgroundColorAttributeName +@global CPUnderlineStyleAttributeName +@global CPSuperscriptAttributeName +@global CPBaselineOffsetAttributeName +@global CPAttachmentAttributeName +@global CPLigatureAttributeName +@global CPKernAttributeName var PAPERSIZE = @"PaperSize", LEFTMARGIN = @"LeftMargin", @@ -95,8 +103,8 @@ function _points2twips(a) { return (a) * 20.0; } keyArray = [fontDict allKeys]; keyArray = [keyArray sortedArrayUsingSelector:@selector(compare:)]; - fontEnum = [keyArray objectEnumerator]; + while ((currFont = [fontEnum nextObject]) !== nil) { var fontFamily, @@ -118,6 +126,7 @@ function _points2twips(a) { return (a) * 20.0; } [fontDict objectForKey:currFont], fontFamily, currFont]; fontlistString += detail; } + return [CPString stringWithFormat:@"{\\fonttbl%@}\n", fontlistString]; } else @@ -139,14 +148,17 @@ function _points2twips(a) { return (a) * 20.0; } while ((next = [keyEnum nextObject]) != nil) { var cn = [colorDict objectForKey:next]; + [list insertObject:next atIndex:[cn intValue] - 1]; } result = [CPString stringWithString:@"{\\colortbl;"]; + for (i = 0; i < count; i++) { var color = [[list objectAtIndex:i] colorUsingColorSpaceName:CPCalibratedRGBColorSpace]; + result += [CPString stringWithFormat: @"\\red%d\\green%d\\blue%d;", ([color redComponent] * 255), @@ -155,6 +167,7 @@ function _points2twips(a) { return (a) * 20.0; } } result += @"}\n"; + return result; } else @@ -173,45 +186,55 @@ function _points2twips(a) { return (a) * 20.0; } result = [CPString string]; val = [docDict objectForKey:PAPERSIZE]; + if (val != nil) { var size = [val sizeValue]; + detail = [CPString stringWithFormat:@"\\paperw%d \\paperh%d", _points2twips(size.width), _points2twips(size.height)]; + result += detail; } num = [docDict objectForKey:LEFTMARGIN]; + if (num != nil) { var f = [num floatValue]; - detail = [CPString stringWithFormat:@"\\margl%d", - _points2twips(f)]; + + detail = [CPString stringWithFormat:@"\\margl%d", _points2twips(f)]; result+= detail; } + num = [docDict objectForKey:RIGHTMARGIN]; + if (num != nil) { var f = [num floatValue]; - detail = [CPString stringWithFormat:@"\\margr%d", - _points2twips(f)]; + + detail = [CPString stringWithFormat:@"\\margr%d", _points2twips(f)]; result += detail; } + num = [docDict objectForKey:TOPMARGIN]; + if (num != nil) { var f = [num floatValue]; - detail = [CPString stringWithFormat:@"\\margt%d", - _points2twips(f)]; + + detail = [CPString stringWithFormat:@"\\margt%d", _points2twips(f)]; result += detail; } + num = [docDict objectForKey:BUTTOMMARGIN]; + if (num != nil) { var f = [num floatValue]; - detail = [CPString stringWithFormat:@"\\margb%d", - _points2twips(f)]; + + detail = [CPString stringWithFormat:@"\\margb%d", _points2twips(f)]; result += detail; } @@ -263,9 +286,9 @@ function _points2twips(a) { return (a) * 20.0; } { cn = [colorDict count] + 1; - [colorDict setObject:[CPNumber numberWithInt:cn] - forKey:color]; + [colorDict setObject:[CPNumber numberWithInt:cn] forKey:color]; } + var cn = [num intValue]; return cn + 1; @@ -283,52 +306,56 @@ function _points2twips(a) { return (a) * 20.0; } { case CPRightTextAlignment: headerString += @"\\qr"; - break; + break; + case CPCenterTextAlignment: headerString += @"\\qc"; - break; + break; + case CPLeftTextAlignment: headerString += @"\\ql"; - break; + break; + case CPJustifiedTextAlignment: headerString += @"\\qj"; - break; + break; + default: headerString += @"\\ql"; - break; + break; } // write first line indent and left indent var twips = _points2twips([paraStyle firstLineHeadIndent]); + if (twips != 0.0) - { headerString += [CPString stringWithFormat:@"\\fi%d", twips]; - } + twips = _points2twips([paraStyle headIndent]); + if (twips != 0.0) - { headerString += [CPString stringWithFormat:@"\\li%d", twips]; - } + twips = _points2twips([paraStyle tailIndent]); + if (twips != 0.0) - { headerString += [CPString stringWithFormat:@"\\ri%d", twips]; - } + twips = _points2twips([paraStyle paragraphSpacing]); + if (twips != 0.0) - { headerString += [CPString stringWithFormat:@"\\sa%d", twips]; - } + twips = _points2twips([paraStyle minimumLineHeight]); + if (twips != 0.0) - { headerString += [CPString stringWithFormat:@"\\sl%d", twips]; - } + twips = _points2twips([paraStyle maximumLineHeight]); + if (twips != 0.0) - { headerString += [CPString stringWithFormat:@"\\sl-%d", twips]; - } + // tabs if (1) { @@ -383,11 +410,12 @@ function _points2twips(a) { return (a) * 20.0; } * analyze attributes of current run * * FIXME: All the character attributes should be output relative to the font - * attributes of the paragraph. So if the paragraph has underline on it should - * still be possible to switch it off for some characters, which currently is + * attributes of the paragraph. So if the paragraph has underline on it should + * still be possible to switch it off for some characters, which currently is * not possible. */ attribEnum = [attributes keyEnumerator]; + while ((currAttrib = [attribEnum nextObject]) != nil) { if ([currAttrib isEqualToString:CPFontAttributeName]) @@ -406,16 +434,14 @@ function _points2twips(a) { return (a) * 20.0; } /* * font name */ - if (currentFont == nil || - ![fontName isEqualToString:[currentFont familyName]]) + if (currentFont == nil || ![fontName isEqualToString:[currentFont familyName]]) { headerString += [self fontToken:fontName]; } /* * font size */ - if (currentFont == nil || - [font size] != [currentFont size]) + if (currentFont == nil || [font size] != [currentFont size]) { var points = [font size] * 2, pString; @@ -443,6 +469,7 @@ function _points2twips(a) { return (a) * 20.0; } else if ([currAttrib isEqualToString:CPForegroundColorAttributeName]) { var color = [attributes objectForKey:CPForegroundColorAttributeName]; + if (![color isEqual:fgColor]) { headerString += [CPString stringWithFormat:@"\\cf%d", [self numberForColor:color]]; @@ -452,6 +479,7 @@ function _points2twips(a) { return (a) * 20.0; } else if ([currAttrib isEqualToString:CPBackgroundColorAttributeName]) { var color = [attributes objectForKey:CPBackgroundColorAttributeName]; + if (![color isEqual:bgColor]) { headerString += [CPString stringWithFormat:@"\\cb%d", [self numberForColor:color]]; @@ -545,9 +573,8 @@ function _points2twips(a) { return (a) * 20.0; } var string = [text string], result = "", loc = 0, - length = [string length]; - - var currRange = CPMakeRange(loc, 0), + length = [string length], + currRange = CPMakeRange(loc, 0), completeRange = CPMakeRange(0, length), first = YES; @@ -566,9 +593,11 @@ function _points2twips(a) { return (a) * 20.0; } runString = [self runStringForString:substring attributes:attributes paragraphStart:YES]; + result += runString; first = NO; } + return result; } From 6b059d94ba156fe164cc1bd6defd3b0acf1474dd Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 3 Jun 2014 21:15:21 -0700 Subject: [PATCH 273/278] Fixed: reduce size of the test of CPTextView --- Tests/Manual/CPTextView/AppController.j | 140 ++++++++++++------------ 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/Tests/Manual/CPTextView/AppController.j b/Tests/Manual/CPTextView/AppController.j index 0994a618e..3f6baa92b 100755 --- a/Tests/Manual/CPTextView/AppController.j +++ b/Tests/Manual/CPTextView/AppController.j @@ -1,10 +1,10 @@ /* * AppController.j * - * Manual test application for the cappuccino text system + * Manual test application for the cappuccino text system * Copyright (C) 2014 Daniel Boehringer */ - + @import @import @import @@ -21,82 +21,82 @@ var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], contentView = [theWindow contentView]; - + [contentView setBackgroundColor:[CPColor colorWithWhite:0.95 alpha:1.0]]; _textView = [[CPTextView alloc] initWithFrame:CGRectMake(0,0,500,500)]; - _textView2 = [[CPTextView alloc] initWithFrame:CGRectMake(0,0,500,500)]; - _textView2._isRichText = NO; - [_textView setBackgroundColor:[CPColor whiteColor]]; - [_textView2 setBackgroundColor:[CPColor whiteColor]]; - + // _textView2 = [[CPTextView alloc] initWithFrame:CGRectMake(0,0,500,500)]; + // _textView2._isRichText = NO; + // [_textView setBackgroundColor:[CPColor whiteColor]]; + // [_textView2 setBackgroundColor:[CPColor whiteColor]]; + // var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(20, 20,520,510)]; - var scrollView2 = [[CPScrollView alloc] initWithFrame:CGRectMake(560, 20,520,510)]; - // [scrollView setAutohidesScrollers:YES]; - [scrollView setDocumentView:_textView]; - [scrollView2 setDocumentView:_textView2]; - + // var scrollView2 = [[CPScrollView alloc] initWithFrame:CGRectMake(560, 20,520,510)]; + // // [scrollView setAutohidesScrollers:YES]; + [scrollView setDocumentView:_textView]; + // [scrollView2 setDocumentView:_textView2]; + // [contentView addSubview: scrollView]; - [contentView addSubview: scrollView2]; - - [_textView setDelegate:self]; - - /* build our menu */ - var mainMenu = [CPApp mainMenu]; - - while ([mainMenu numberOfItems] > 0) - [mainMenu removeItemAtIndex:0]; - - var item = [mainMenu insertItemWithTitle:@"Edit" action:nil keyEquivalent:nil atIndex:0], - editMenu = [[CPMenu alloc] initWithTitle:@"Edit Menu"]; - - [_textView2 insertText:"RTF goes here"]; - - [editMenu addItemWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; - [editMenu addItemWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; - [editMenu addItemWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; - [editMenu addItemWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; - [editMenu addItemWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; - [editMenu addItemWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; - [editMenu addItemWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; - - [mainMenu setSubmenu:editMenu forItem:item]; - - item = [mainMenu insertItemWithTitle:@"Font" action:@selector(orderFrontFontPanel:) keyEquivalent:nil atIndex:1]; - item = [mainMenu insertItemWithTitle:@"RTFRoundtrip" action:@selector(makeRTF:) keyEquivalent:nil atIndex:1]; - - var centeredParagraph=[CPParagraphStyle new]; - [centeredParagraph setAlignment: CPCenterTextAlignment]; - [_textView insertText:[[CPAttributedString alloc] initWithString:@"Fusce\n" - attributes:[CPDictionary dictionaryWithObjects:[centeredParagraph, [CPFont boldFontWithName:"Arial" size:18], [CPColor redColor]] - forKeys:[CPParagraphStyleAttributeName, CPFontAttributeName, CPForegroundColorAttributeName]]]]; - - [_textView insertText: [[CPAttributedString alloc] initWithString:@"lectus neque cr as eget lectus neque cr as eget lectus cr as eget lectus" - attributes:[CPDictionary dictionaryWithObjects:[ [CPFont fontWithName:"Arial" size:12]] forKeys: [CPFontAttributeName]]]]; - - [_textView insertText:[[CPAttributedString alloc] initWithString:@" proin, this is text in boldface " - attributes:[CPDictionary dictionaryWithObjects:[ [CPFont boldFontWithName:"Arial" size:12]] forKeys: [CPFontAttributeName]]]]; - [_textView insertText:[[CPAttributedString alloc] initWithString:@"111111 neque cr as eget lectus neque cr as eget lectus cr as eget lectus" - attributes:[CPDictionary dictionaryWithObjects:[ [CPFont fontWithName:"Arial" size:12.0]] forKeys: [CPFontAttributeName]]]]; - + // [contentView addSubview: scrollView2]; + // + // [_textView setDelegate:self]; + // + // /* build our menu */ + // var mainMenu = [CPApp mainMenu]; + // + // while ([mainMenu numberOfItems] > 0) + // [mainMenu removeItemAtIndex:0]; + // + // var item = [mainMenu insertItemWithTitle:@"Edit" action:nil keyEquivalent:nil atIndex:0], + // editMenu = [[CPMenu alloc] initWithTitle:@"Edit Menu"]; + // + // [_textView2 insertText:"RTF goes here"]; + // + // [editMenu addItemWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; + // [editMenu addItemWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; + // [editMenu addItemWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; + // [editMenu addItemWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; + // [editMenu addItemWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; + // [editMenu addItemWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; + // [editMenu addItemWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; + // + // [mainMenu setSubmenu:editMenu forItem:item]; + // + // item = [mainMenu insertItemWithTitle:@"Font" action:@selector(orderFrontFontPanel:) keyEquivalent:nil atIndex:1]; + // item = [mainMenu insertItemWithTitle:@"RTFRoundtrip" action:@selector(makeRTF:) keyEquivalent:nil atIndex:1]; + // + // var centeredParagraph=[CPParagraphStyle new]; + // [centeredParagraph setAlignment: CPCenterTextAlignment]; + // [_textView insertText:[[CPAttributedString alloc] initWithString:@"Fusce\n" + // attributes:[CPDictionary dictionaryWithObjects:[centeredParagraph, [CPFont boldFontWithName:"Arial" size:18], [CPColor redColor]] + // forKeys:[CPParagraphStyleAttributeName, CPFontAttributeName, CPForegroundColorAttributeName]]]]; + // + // [_textView insertText: [[CPAttributedString alloc] initWithString:@"lectus neque cr as eget lectus neque cr as eget lectus cr as eget lectus" + // attributes:[CPDictionary dictionaryWithObjects:[ [CPFont fontWithName:"Arial" size:12]] forKeys: [CPFontAttributeName]]]]; + // + // [_textView insertText:[[CPAttributedString alloc] initWithString:@" proin, this is text in boldface " + // attributes:[CPDictionary dictionaryWithObjects:[ [CPFont boldFontWithName:"Arial" size:12]] forKeys: [CPFontAttributeName]]]]; + // [_textView insertText:[[CPAttributedString alloc] initWithString:@"111111 neque cr as eget lectus neque cr as eget lectus cr as eget lectus" + // attributes:[CPDictionary dictionaryWithObjects:[ [CPFont fontWithName:"Arial" size:12.0]] forKeys: [CPFontAttributeName]]]]; + // [theWindow orderFront:self]; [CPMenu setMenuBarVisible:YES]; } -//-> CPApplication (?) -- (void)orderFrontFontPanel:sender -{ - [[CPFontManager sharedFontManager] orderFrontFontPanel:self]; -} - -- (void) makeRTF:sender -{ - [_textView2 setString: [_CPRTFProducer produceRTF:[_textView textStorage] documentAttributes: @{}] ]; - var tc = [_CPRTFParser new]; - var mystr=[tc parseRTF:[_textView2 stringValue]]; - [_textView selectAll: self]; - [_textView insertText: mystr]; - -} +// //-> CPApplication (?) +// - (void)orderFrontFontPanel:sender +// { +// [[CPFontManager sharedFontManager] orderFrontFontPanel:self]; +// } +// +// - (void) makeRTF:sender +// { +// [_textView2 setString: [_CPRTFProducer produceRTF:[_textView textStorage] documentAttributes: @{}] ]; +// var tc = [_CPRTFParser new]; +// var mystr=[tc parseRTF:[_textView2 stringValue]]; +// [_textView selectAll: self]; +// [_textView insertText: mystr]; +// +// } @end From aad875e11321beb51f0e8669ab03f0c790fe3d72 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 4 Jun 2014 18:34:46 +0200 Subject: [PATCH 274/278] make the plain look as white as in cocoa --- AppKit/CPTextView/CPTextView.j | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index dc150ad08..8ce0692a5 100755 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -174,6 +174,8 @@ var kDelegateRespondsTo_textShouldBeginEditing _textColor = [CPColor blackColor]; _font = [CPFont systemFontOfSize:12.0]; [self setFont:_font]; + [self setBackgroundColor:[CPColor whiteColor]]; + _typingAttributes = [[CPDictionary alloc] initWithObjects:[_font, _textColor] forKeys:[CPFontAttributeName, CPForegroundColorAttributeName]]; From 084071928958fd636d9838545e7792486d8b8939 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 4 Jun 2014 15:00:12 -0700 Subject: [PATCH 275/278] Added: added CPTextViewCibTest --- .../Manual/CPTextViewCibTest/AppController.j | 34 ++ Tests/Manual/CPTextViewCibTest/Info.plist | 14 + Tests/Manual/CPTextViewCibTest/Jakefile | 184 ++++++++++ .../CPTextViewCibTest/Resources/MainMenu.cib | 1 + .../CPTextViewCibTest/Resources/MainMenu.xib | 327 ++++++++++++++++++ .../Manual/CPTextViewCibTest/index-debug.html | 191 ++++++++++ Tests/Manual/CPTextViewCibTest/index.html | 161 +++++++++ Tests/Manual/CPTextViewCibTest/main.j | 18 + 8 files changed, 930 insertions(+) create mode 100644 Tests/Manual/CPTextViewCibTest/AppController.j create mode 100644 Tests/Manual/CPTextViewCibTest/Info.plist create mode 100644 Tests/Manual/CPTextViewCibTest/Jakefile create mode 100644 Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPTextViewCibTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPTextViewCibTest/index-debug.html create mode 100644 Tests/Manual/CPTextViewCibTest/index.html create mode 100644 Tests/Manual/CPTextViewCibTest/main.j diff --git a/Tests/Manual/CPTextViewCibTest/AppController.j b/Tests/Manual/CPTextViewCibTest/AppController.j new file mode 100644 index 000000000..82b6d6ec8 --- /dev/null +++ b/Tests/Manual/CPTextViewCibTest/AppController.j @@ -0,0 +1,34 @@ +/* + * AppController.j + * CPTextViewCibTest + * + * Created by You on June 4, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + @outlet CPTextView textView; +} + +- (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 setFullPlatformWindow:YES]; +} + +@end diff --git a/Tests/Manual/CPTextViewCibTest/Info.plist b/Tests/Manual/CPTextViewCibTest/Info.plist new file mode 100644 index 000000000..f24e33a9a --- /dev/null +++ b/Tests/Manual/CPTextViewCibTest/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPTextViewCibTest + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPTextViewCibTest/Jakefile b/Tests/Manual/CPTextViewCibTest/Jakefile new file mode 100644 index 000000000..eb85f3135 --- /dev/null +++ b/Tests/Manual/CPTextViewCibTest/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPTextViewCibTest + * + * Created by You on June 4, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CPTextViewCibTest"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPTextViewCibTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPTextViewCibTest"); + task.setIdentifier("com.yourcompany.CPTextViewCibTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPTextViewCibTest"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPTextViewCibTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPTextViewCibTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (ENV["CONFIGURATION"] === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib b/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib new file mode 100644 index 000000000..2aa794150 --- /dev/null +++ b/Tests/Manual/CPTextViewCibTest/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;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;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;2;38E;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;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;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;2;52E;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;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;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;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;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;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;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;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;57E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;90E;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;2;91E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;11E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;130E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;131E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;129E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;122E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;133E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;128E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;130E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;168E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;169E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;170E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;171E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;57E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;171E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;174E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;179E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;181E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;182E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;63E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;183E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;184E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;188E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;190E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;191E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;192E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;194E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;73E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;195E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;196E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;197E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;199E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;200E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;202E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;204E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;207E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;208E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;209E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;211E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;84E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;211E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;213E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;214E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;215E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;216E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;217E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;218E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;219E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;220E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;221E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;222E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;223E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;224E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;227E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;91E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;227E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;229E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;231E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;232E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;233E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;234E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;235E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;235E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;237E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;238E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;239E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;241E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;222E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;223E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;243E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;214E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;215E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;244E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;247E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;249E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;251E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;252E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;253E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;254E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;255E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;260E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;118E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;261E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;263E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;264E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;266E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;121E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;267E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;268E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;269E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;270E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;271E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;219E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;171E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;124E;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;123E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;272E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;273E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;273E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;274E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;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;124E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;272E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;276E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;277E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;124E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;278E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;279E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;275E;K;6;$afontD;K;6;CP$UIDd;3;281E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;272E;K;11;$aalignmentD;K;6;CP$UIDd;3;272E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;282E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;283E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;272E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;284E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;272E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;124E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;272E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;285E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;286E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;124E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;278E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;287E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;288E;K;6;$afontD;K;6;CP$UIDd;3;289E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;11;$aalignmentD;K;6;CP$UIDd;3;290E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;176E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;177E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;291E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;176E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;176E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;176E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;293E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;290E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;294E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;E;E;S;8;delegateS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;20;takeDoubleValueFrom:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;69E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;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;60E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;65E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;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;82E;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;2;79E;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;2;83E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;96E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;86E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;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;93E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;95E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;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;98E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;116E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;113E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;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;3;120E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;E;E;S;6;normalS;22;{{194, 196}, {92, 21}}S;18;{{0, 0}, {92, 21}}d;2;45S;6;sliderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;295E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;296E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;178E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;178E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;178E;E;d;2;50d;2;68d;3;100S;23;{{188, 143}, {104, 29}}S;19;{{0, 0}, {104, 29}}S;9;textfieldS;28;bezeled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;280E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;297E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;298E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;178E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;178E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;176E;E;d;1;4d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;292E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;299E;E;S;13;AppControllerS;9;Helveticad;2;12S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.xib b/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.xib new file mode 100644 index 000000000..68fbbc97f --- /dev/null +++ b/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.xib @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPTextViewCibTest/index-debug.html b/Tests/Manual/CPTextViewCibTest/index-debug.html new file mode 100644 index 000000000..ed8c41c09 --- /dev/null +++ b/Tests/Manual/CPTextViewCibTest/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPTextViewCibTest + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextViewCibTest/index.html b/Tests/Manual/CPTextViewCibTest/index.html new file mode 100644 index 000000000..9dd3013c4 --- /dev/null +++ b/Tests/Manual/CPTextViewCibTest/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPTextViewCibTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextViewCibTest/main.j b/Tests/Manual/CPTextViewCibTest/main.j new file mode 100644 index 000000000..a9d2a4c48 --- /dev/null +++ b/Tests/Manual/CPTextViewCibTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPTextViewCibTest + * + * Created by You on June 4, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 026e28114e75de8fbf944f9a328d680be8f88e33 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 4 Jun 2014 16:29:45 -0700 Subject: [PATCH 276/278] Added : added default NSTextView for nib2cib --- Tools/nib2cib/NSAppKit.j | 1 + Tools/nib2cib/NSTextView.j | 62 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 Tools/nib2cib/NSTextView.j diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index 8dbc498ee..24dd6b0e1 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -73,6 +73,7 @@ @import "NSTabView.j" @import "NSTabViewItem.j" @import "NSTextField.j" +@import "NSTextView.j" @import "NSTokenField.j" @import "NSToolbar.j" @import "NSToolbarFlexibleSpaceItem.j" diff --git a/Tools/nib2cib/NSTextView.j b/Tools/nib2cib/NSTextView.j new file mode 100644 index 000000000..346589c07 --- /dev/null +++ b/Tools/nib2cib/NSTextView.j @@ -0,0 +1,62 @@ +/* + * NSTextView.j + * nib2cib + * + * Created by Alexendre Wilhelm. + * Copyright 2014 The Cappuccino Foundation. + * + * 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 + +@class Nib2Cib + +@implementation CPTextView (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + if (self = [super NS_initWithCoder:aCoder]) + { + + } + + return self; +} + +@end + +@implementation NSTextView : CPTextView +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [self NS_initWithCoder:aCoder]; + + if (self) + { + + } + + return self; +} + +- (Class)classForKeyedArchiver +{ + return [CPTextView class]; +} + +@end \ No newline at end of file From a41c0a05195bb5a943042ad3c408604ed701394a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 4 Jun 2014 16:30:05 -0700 Subject: [PATCH 277/278] Fixed: Update test CPTextViewCibTest --- .../CPTextViewCibTest/Resources/MainMenu.cib | 2 +- .../CPTextViewCibTest/Resources/MainMenu.xib | 287 +----------------- 2 files changed, 12 insertions(+), 277 deletions(-) diff --git a/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib b/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib index 2aa794150..66262c368 100644 --- a/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib +++ b/Tests/Manual/CPTextViewCibTest/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;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;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;2;38E;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;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;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;2;52E;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;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;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;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;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;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;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;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;57E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;90E;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;2;91E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;11E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;130E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;131E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;129E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;132E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;122E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;133E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;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;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;128E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;130E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;168E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;169E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;170E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;171E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;57E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;171E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;174E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;179E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;181E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;182E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;63E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;183E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;184E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;188E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;190E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;191E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;192E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;194E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;73E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;195E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;196E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;197E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;199E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;200E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;202E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;204E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;207E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;208E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;209E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;211E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;84E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;211E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;213E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;214E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;215E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;216E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;217E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;218E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;219E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;220E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;221E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;222E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;223E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;224E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;227E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;91E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;227E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;229E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;231E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;232E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;233E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;234E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;235E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;235E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;237E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;238E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;239E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;241E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;222E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;223E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;243E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;214E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;215E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;244E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;247E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;249E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;251E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;252E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;253E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;254E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;255E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;176E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;177E;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;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;260E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;118E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;261E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;263E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;264E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;266E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;173E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;121E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;267E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;268E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;269E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;270E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;271E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;219E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;171E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;124E;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;123E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;272E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;273E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;273E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;274E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;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;124E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;272E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;276E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;277E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;124E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;278E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;279E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;275E;K;6;$afontD;K;6;CP$UIDd;3;281E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;272E;K;11;$aalignmentD;K;6;CP$UIDd;3;272E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;282E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;283E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;272E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;284E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;272E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;124E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;272E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;285E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;286E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;124E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;278E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;287E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;288E;K;6;$afontD;K;6;CP$UIDd;3;289E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;11;$aalignmentD;K;6;CP$UIDd;3;290E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;176E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;177E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;291E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;176E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;176E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;176E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;293E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;290E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;294E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;E;E;S;8;delegateS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;20;takeDoubleValueFrom:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;69E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;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;60E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;65E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;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;82E;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;2;79E;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;2;83E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;96E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;86E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;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;93E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;95E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;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;98E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;116E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;113E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;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;3;120E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;E;E;S;6;normalS;22;{{194, 196}, {92, 21}}S;18;{{0, 0}, {92, 21}}d;2;45S;6;sliderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;295E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;296E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;178E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;178E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;178E;E;d;2;50d;2;68d;3;100S;23;{{188, 143}, {104, 29}}S;19;{{0, 0}, {104, 29}}S;9;textfieldS;28;bezeled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;280E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;297E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;298E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;178E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;178E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;176E;E;d;1;4d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;292E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;299E;E;S;13;AppControllerS;9;Helveticad;2;12S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;E;E;E;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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;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;2;17E;D;K;6;CP$UIDd;2;19E;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;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;19E;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;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;11E;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;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;32E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;33E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;35E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;32E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;36E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;37E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;38E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;39E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;40E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;41E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;42E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;21E;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;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;43E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;44E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;44E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;45E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;47E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;48E;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;21E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;43E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;49E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;51E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;21E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;52E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;53E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;47E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;48E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;25E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;30E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;29E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;54E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;54E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;54E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;54E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;55E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;48E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;48E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;56E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;57E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;43E;E;D;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;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;43E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;58E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;60E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;61E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;47E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;48E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;27E;E;D;K;10;$classnameS;10;CPTextViewK;8;$classesA;S;10;CPTextViewS;6;CPTextS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;43E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;59E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;61E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;46E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;2;64E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;47E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;48E;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;43E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;65E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;66E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;52E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;68E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;47E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;48E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;43E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;43E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;48E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;72E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;43E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;73E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;74E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;52E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;68E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;47E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;48E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;43E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;75E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;43E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;55E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;72E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;76E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;S;6;normalS;6;{1, 1}F;S;24;{{154, 101}, {240, 135}}S;20;{{0, 0}, {240, 135}}D;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;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;56E;E;E;d;1;8S;10;scrollviewd;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;77E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;77E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;47E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;48E;E;d;1;2S;20;{{1, 1}, {238, 133}}S;20;{{0, 0}, {238, 133}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;E;E;d;2;18D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;62E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;78E;E;S;6;vfokrtS;23;{{-100, 220}, {87, 15}}S;18;{{0, 0}, {87, 15}}d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:d;1;4d;1;1S;21;{{223, 1}, {15, 133}}S;19;{{0, 0}, {15, 133}}S;27;_verticalScrollerDidScroll:S;13;AppControllerS;16;{{0, 0}, {0, 0}}D;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;2;72E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;72E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.xib b/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.xib index 68fbbc97f..8a265d536 100644 --- a/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.xib +++ b/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.xib @@ -12,271 +12,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -286,32 +21,32 @@ - - + + - - + + - - + + - + - + - From 0b2b29b7cfba704ec57871f7e2cb2e61c3d9b386 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 12 Jul 2014 14:09:59 +0200 Subject: [PATCH 278/278] removed unit test --- Tests/AppKit/CPTextViewTest.j | 83 ----------------------------------- 1 file changed, 83 deletions(-) delete mode 100644 Tests/AppKit/CPTextViewTest.j diff --git a/Tests/AppKit/CPTextViewTest.j b/Tests/AppKit/CPTextViewTest.j deleted file mode 100644 index 6eccc7301..000000000 --- a/Tests/AppKit/CPTextViewTest.j +++ /dev/null @@ -1,83 +0,0 @@ -@import - -@implementation CPTextViewTest : OJTestCase -{ - CPTextView _textView; -} - -- (void)setUp -{ - _textView = [[CPTextView alloc] initWithFrame:CGRectMake(0,0,500,500)]; - [_textView insertText:"Fusce\nlectus neque cr as eget lectus neque cr as eget lectus cr as eget lectus"]; -} - -- (void)testMoveToEndOfDocument -{ - [_textView setSelectedRange:CPMakeRange(0, 0)]; - [_textView moveToEndOfDocument:self]; - var range = [_textView selectedRange]; - [self assert:range.location equals:[[_textView layoutManager] numberOfCharacters]]; - [self assert:range.length equals:0]; - -} -- (void)testMoveToBeginningOfDocument -{ - [_textView setSelectedRange:CPMakeRange(1, 0)]; - [_textView moveToBeginningOfDocument:self]; - var range = [_textView selectedRange]; - [self assert:range.location equals:0]; - [self assert:range.length equals:0]; -} -- (void)testSelectAll -{ - [_textView setSelectedRange:CPMakeRange(1, 0)]; - [_textView selectAll:self]; - var range = [_textView selectedRange]; - [self assert:range.location equals:0]; - [self assert:range.length equals:[[_textView layoutManager] numberOfCharacters]]; -} -- (void)testMoveToEndOfParagraph -{ - [_textView setSelectedRange:CPMakeRange(1, 0)]; - [_textView moveToEndOfParagraph:self]; - var range = [_textView selectedRange]; - [self assert:range.location equals:5]; - [self assert:range.length equals:0]; -} -- (void)testMoveWordForward -{ - [_textView setSelectedRange:CPMakeRange(19, 0)]; // beginning of "cr" - [_textView moveWordForward:self]; - var range = [_textView selectedRange]; - [self assert:range.location equals:21]; // should be at the end of "cr" - [_textView moveWordForward:self]; - range = [_textView selectedRange]; - [self assert:range.location equals:28]; // should be at the end of "as" -} -- (void)testMoveWordBackward -{ - [_textView setSelectedRange:CPMakeRange(19, 0)]; // beginning of "cr" - [_textView moveWordBackward:self]; - var range = [_textView selectedRange]; - [self assert:range.location equals:13]; // should be at the beginning of "neque" -} -- (void)testMoveWordAndExtend -{ - [_textView setSelectedRange:CPMakeRange(19, 0)]; // beginning of "cr" - [_textView moveRight:self]; // middle of "cr" - [_textView moveWordBackwardAndModifySelection:self]; - var range = [_textView selectedRange]; - [self assert:range.location equals:19]; // "c" of "cr" should be selected - [self assert:range.length equals:1]; -} - -- (void)testCutAndPasteAreDuals -{ - [_textView setSelectedRange:CPMakeRange(19, 2)]; // select "cr" - [_textView cut:self]; - [_textView paste:self]; - var oldString = [_textView stringValue]; - [self assert:[_textView stringValue] equals:oldString]; -} - -@end