diff --git a/.gitignore b/.gitignore index 9d53e1758..11a5e1abf 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ xcuserdata/ Tests/Manual/**/*.xcodeproj *.sublime-project *.sublime-workspace +*.tm_properties diff --git a/AppKit/CPAlert.j b/AppKit/CPAlert.j index cbd40cfe6..2dec01211 100644 --- a/AppKit/CPAlert.j +++ b/AppKit/CPAlert.j @@ -44,6 +44,7 @@ var CPAlertDelegate_alertShowHelp_ = 1 << 0, CPAlertDelegate_alertDidEnd_returnCode_ = 1 << 1; +@typedef CPAlertStyle /* @global @group CPAlertStyle @@ -70,6 +71,54 @@ var bottomHeight = 71; @end + +@implementation _CPAlertThemeView : CPView + ++ (CPString)defaultThemeClass +{ + return @"alert"; +} + ++ (CPDictionary)themeAttributes +{ + return @{ + @"size": CGSizeMake(400.0, 110.0), + @"content-inset": CGInsetMake(15, 15, 15, 50), + @"informative-offset": 6, + @"button-offset": 10, + @"message-text-alignment": CPJustifiedTextAlignment, + @"message-text-color": [CPColor blackColor], + @"message-text-font": [CPFont boldSystemFontOfSize:13.0], + @"message-text-shadow-color": [CPNull null], + @"message-text-shadow-offset": CGSizeMakeZero(), + @"informative-text-alignment": CPJustifiedTextAlignment, + @"informative-text-color": [CPColor blackColor], + @"informative-text-font": [CPFont systemFontOfSize:12.0], + @"informative-text-shadow-color": [CPNull null], + @"informative-text-shadow-offset": CGSizeMakeZero(), + @"image-offset": CGPointMake(15, 12), + @"information-image": [CPNull null], + @"warning-image": [CPNull null], + @"error-image": [CPNull null], + @"help-image": [CPNull null], + @"help-image-left-offset": 15, + @"help-image-pressed": [CPNull null], + @"suppression-button-y-offset": 0.0, + @"suppression-button-x-offset": 0.0, + @"default-elements-margin": 3.0, + @"suppression-button-text-color": [CPColor blackColor], + @"suppression-button-text-font": [CPFont systemFontOfSize:12.0], + @"suppression-button-text-shadow-color": [CPNull null], + @"suppression-button-text-shadow-offset": 0.0, + @"modal-window-button-margin-y": 0.0, + @"modal-window-button-margin-x": 0.0, + @"standard-window-button-margin-y": 0.0, + @"standard-window-button-margin-x": 0.0, + }; +} + +@end + /*! @ingroup appkit @@ -813,51 +862,3 @@ var bottomHeight = 71; } @end - - -@implementation _CPAlertThemeView : CPView - -+ (CPString)defaultThemeClass -{ - return @"alert"; -} - -+ (CPDictionary)themeAttributes -{ - return @{ - @"size": CGSizeMake(400.0, 110.0), - @"content-inset": CGInsetMake(15, 15, 15, 50), - @"informative-offset": 6, - @"button-offset": 10, - @"message-text-alignment": CPJustifiedTextAlignment, - @"message-text-color": [CPColor blackColor], - @"message-text-font": [CPFont boldSystemFontOfSize:13.0], - @"message-text-shadow-color": [CPNull null], - @"message-text-shadow-offset": CGSizeMakeZero(), - @"informative-text-alignment": CPJustifiedTextAlignment, - @"informative-text-color": [CPColor blackColor], - @"informative-text-font": [CPFont systemFontOfSize:12.0], - @"informative-text-shadow-color": [CPNull null], - @"informative-text-shadow-offset": CGSizeMakeZero(), - @"image-offset": CGPointMake(15, 12), - @"information-image": [CPNull null], - @"warning-image": [CPNull null], - @"error-image": [CPNull null], - @"help-image": [CPNull null], - @"help-image-left-offset": 15, - @"help-image-pressed": [CPNull null], - @"suppression-button-y-offset": 0.0, - @"suppression-button-x-offset": 0.0, - @"default-elements-margin": 3.0, - @"suppression-button-text-color": [CPColor blackColor], - @"suppression-button-text-font": [CPFont systemFontOfSize:12.0], - @"suppression-button-text-shadow-color": [CPNull null], - @"suppression-button-text-shadow-offset": 0.0, - @"modal-window-button-margin-y": 0.0, - @"modal-window-button-margin-x": 0.0, - @"standard-window-button-margin-y": 0.0, - @"standard-window-button-margin-x": 0.0, - }; -} - -@end diff --git a/AppKit/CPAnimation.j b/AppKit/CPAnimation.j index 903cf3c2e..bef308b74 100644 --- a/AppKit/CPAnimation.j +++ b/AppKit/CPAnimation.j @@ -42,25 +42,10 @@ var CPAnimationDelegate_animationShouldStart_ = 1 << 1, CPAnimationDelegate_animationDidEnd_ = 1 << 3, CPAnimationDelegate_animationDidStop_ = 1 << 4; -/* - @global - @group CPAnimationCurve -*/ +@typedef CPAnimationCurve CPAnimationEaseInOut = 0; -/* - @global - @group CPAnimationCurve -*/ CPAnimationEaseIn = 1; -/* - @global - @group CPAnimationCurve -*/ CPAnimationEaseOut = 2; -/* - @global - @group CPAnimationCurve -*/ CPAnimationLinear = 3; ACTUAL_FRAME_RATE = 0; diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index f3783c75a..27f0e3367 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -37,6 +37,8 @@ @import "CPWindowController.j" @import "_CPPopoverWindow.j" +@typedef CPModalSession + var CPMainCibFile = @"CPMainCibFile", CPMainCibFileHumanFriendly = @"Main cib file base name", CPEventModifierFlags = 0; @@ -986,7 +988,9 @@ var CPMainCibFile = @"CPMainCibFile", return; } - [aSheet._windowView _enableSheet:YES inWindow:aWindow]; + if (![aWindow attachedSheet]) + [aSheet._windowView _enableSheet:YES inWindow:aWindow]; + [aWindow _attachSheet:aSheet modalDelegate:aModalDelegate didEndSelector:didEndSelector contextInfo:contextInfo]; } diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 0b25334d9..67e2f681e 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -23,7 +23,7 @@ */ @import - +@import @import "CPObjectController.j" @import "CPKeyValueBinding.j" diff --git a/AppKit/CPBox.j b/AppKit/CPBox.j index dc10564ff..29d0b3a08 100644 --- a/AppKit/CPBox.j +++ b/AppKit/CPBox.j @@ -24,6 +24,7 @@ @import "CPView.j" // CPBoxType +@typedef CPBoxType CPBoxPrimary = 0; CPBoxSecondary = 1; CPBoxSeparator = 2; @@ -31,12 +32,14 @@ CPBoxOldStyle = 3; CPBoxCustom = 4; // CPBorderType +@typedef CPBorderType CPNoBorder = 0; CPLineBorder = 1; CPBezelBorder = 2; CPGrooveBorder = 3; // CPTitlePosition +@typedef CPTitlePosition CPNoTitle = 0; CPAboveTop = 1; CPAtTop = 2; diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 8365d76c7..26c17edaa 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -29,8 +29,7 @@ @import "CPWindow_Constants.j" /* @group CPBezelStyle */ - - // IB style +@typedef CPBezelStyle CPRoundedBezelStyle = 1; // Push CPRegularSquareBezelStyle = 2; // Bevel CPThickSquareBezelStyle = 3; @@ -49,6 +48,7 @@ CPHUDBezelStyle = -1; /* @group CPButtonType */ +@typedef CPButtonType CPMomentaryLightButton = 0; CPPushOnPushOffButton = 1; CPToggleButton = 2; diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index c524a2fcb..47f869597 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -133,7 +133,11 @@ - (void)setButtons:(CPArray)buttons { for (var i = [_buttons count] - 1; i >= 0; i--) + { + [_buttons[i] removeFromSuperview]; [_buttons[i] removeObserver:self forKeyPath:@"hidden"]; + } + _buttons = [CPArray arrayWithArray:buttons]; @@ -230,10 +234,11 @@ { var button = buttonsNotHidden[count]; - [button removeFromSuperview]; - if ([button isHidden]) + { + [button removeFromSuperview]; [buttonsNotHidden removeObject:button]; + } } var currentButtonOffset = _resizeControlIsLeftAligned ? CGRectGetMaxX([self bounds]) + 1 : -1, diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 2da7f07d9..943c05a30 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -32,6 +32,7 @@ @import "CPPasteboard.j" @import "CPView.j" +@class _CPCollectionViewDropIndicator var CPCollectionViewDelegate_collectionView_acceptDrop_index_dropOperation_ = 1 << 0, CPCollectionViewDelegate_collectionView_canDragItemsAtIndexes_withEvent_ = 1 << 1, diff --git a/AppKit/CPColorPanel.j b/AppKit/CPColorPanel.j index af6bf3e1d..7d847a30f 100644 --- a/AppKit/CPColorPanel.j +++ b/AppKit/CPColorPanel.j @@ -27,6 +27,9 @@ @import "CPView.j" @class CPSlider +@class _CPColorPanelToolbar +@class _CPColorPanelSwatches +@class _CPColorPanelPreview @global CPApp diff --git a/AppKit/CPColorPicker.j b/AppKit/CPColorPicker.j index 14aed7793..ea3afcd88 100644 --- a/AppKit/CPColorPicker.j +++ b/AppKit/CPColorPicker.j @@ -25,6 +25,8 @@ @import "CPView.j" @class CPSlider +@class CPColorPanel +@class __CPColorWheel @global CPColorPickerViewWidth @global CPColorPickerViewHeight diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 6b783b426..6787948e3 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -61,17 +61,19 @@ var CPComboBoxTextSubview = @"text", @implementation CPComboBox : CPTextField { - CPArray _items; - _CPPopUpList _listDelegate; - CPComboBoxDataSource _dataSource; - BOOL _usesDataSource; - BOOL _completes; - BOOL _canComplete; - int _numberOfVisibleItems; - BOOL _forceSelection; - BOOL _hasVerticalScroller; - CPString _selectedStringValue; - BOOL _popUpButtonCausedResign; + CPArray _items; + _CPPopUpList _listDelegate; + id _dataSource; + BOOL _usesDataSource; + BOOL _completes; + BOOL _canComplete; + int _numberOfVisibleItems; + BOOL _forceSelection; + BOOL _hasVerticalScroller; + CPString _selectedStringValue; + CGSize _intercellSpacing; + float _itemHeight; + BOOL _popUpButtonCausedResign; } + (CPString)defaultThemeClass @@ -140,7 +142,9 @@ var CPComboBoxTextSubview = @"text", return; _hasVerticalScroller = flag; - [[_listDelegate scrollView] setHasVerticalScroller:flag]; + + if (_listDelegate) + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; } - (CGSize)intercellSpacing @@ -150,7 +154,13 @@ var CPComboBoxTextSubview = @"text", - (void)setIntercellSpacing:(CGSize)aSize { - [[_listDelegate tableView] setIntercellSpacing:aSize]; + if (_intercellSpacing && CGSizeEqualToSize(aSize, _intercellSpacing)) + return; + + _intercellSpacing = aSize; + + if (_listDelegate) + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; } - (BOOL)isButtonBordered @@ -173,10 +183,18 @@ var CPComboBoxTextSubview = @"text", - (void)setItemHeight:(float)itemHeight { - [[_listDelegate tableView] setRowHeight:itemHeight]; + if (itemHeight === _itemHeight) + return; - // FIXME: This shouldn't be necessary, but CPTableView does not tile after setRowHeight - [[_listDelegate tableView] reloadData]; + _itemHeight = itemHeight; + + if (_listDelegate) + { + [[_listDelegate tableView] setRowHeight:_itemHeight]; + + // FIXME: This shouldn't be necessary, but CPTableView does not tile after setRowHeight + [[_listDelegate tableView] reloadData]; + } } - (int)numberOfVisibleItems @@ -451,6 +469,9 @@ var CPComboBoxTextSubview = @"text", // Apply our text style to the list [_listDelegate setFont:[self font]]; [_listDelegate setAlignment:[self alignment]]; + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; + [[_listDelegate tableView] setRowHeight:_itemHeight]; } - (int)indexOfItemWithObjectValue:(id)anObject @@ -842,13 +863,17 @@ var CPComboBoxTextSubview = @"text", - (void)setFont:(CPFont)aFont { [super setFont:aFont]; - [_listDelegate setFont:aFont]; + + if (_listDelegate) + [_listDelegate setFont:aFont]; } - (void)setAlignment:(CPTextAlignment)alignment { [super setAlignment:alignment]; - [_listDelegate setAlignment:alignment]; + + if (_listDelegate) + [_listDelegate setAlignment:alignment]; } #pragma mark Pop Up Button Layout diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index c471c1408..623249cd2 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -78,6 +78,8 @@ CPInputOnInputEventFeature = 30; CPFileAPIFeature = 31; +CPAltEnterTextAreaFeature = 32; + /* @@ -100,6 +102,7 @@ var USER_AGENT = "", // default these features to true PLATFORM_FEATURES[CPInputTypeCanBeChangedFeature] = YES; PLATFORM_FEATURES[CPInputSetFontOutsideOfDOM] = YES; +PLATFORM_FEATURES[CPAltEnterTextAreaFeature] = YES; if (typeof window !== "undefined" && typeof window.navigator !== "undefined") USER_AGENT = window.navigator.userAgent; @@ -208,6 +211,7 @@ else if (USER_AGENT.indexOf("Gecko") !== -1) // Must follow KHTML check. // Some day this might be fixed and should be version prefixed. No known fixed version yet. PLATFORM_FEATURES[CPInput1PxLeftPadding] = YES; + PLATFORM_FEATURES[CPAltEnterTextAreaFeature] = NO; // This was supposed to be added in Firefox 22, but when testing with the latest beta as of 2013-06-14 // it does not seem to work. It seems to exhibit the CPJavaScriptPasteRequiresEditableTarget problem, // and in addition doesn't seem to work with our native copy code either. diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index e562176f2..5a19d7fdb 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -52,16 +52,20 @@ @global CPTabTextMovement @global CPOtherTextMovement +@typedef CPTextAlignment + CPLeftTextAlignment = 0; CPRightTextAlignment = 1; CPCenterTextAlignment = 2; CPJustifiedTextAlignment = 3; CPNaturalTextAlignment = 4; +@typedef CPControlSize CPRegularControlSize = 0; CPSmallControlSize = 1; CPMiniControlSize = 2; +@typedef CPLineBreakMode CPLineBreakByWordWrapping = 0; CPLineBreakByCharWrapping = 1; CPLineBreakByClipping = 2; @@ -69,11 +73,13 @@ CPLineBreakByTruncatingHead = 3; CPLineBreakByTruncatingTail = 4; CPLineBreakByTruncatingMiddle = 5; +@typedef CPVerticalTextAlignment CPTopVerticalTextAlignment = 1; CPCenterVerticalTextAlignment = 2; CPBottomVerticalTextAlignment = 3; // Deprecated for use with images, use the CPImageScale constants +@typedef CPImageScaling CPScaleProportionally = 0; CPScaleToFit = 1; CPScaleNone = 2; @@ -83,6 +89,7 @@ CPImageScaleAxesIndependently = 1; CPImageScaleNone = 2; CPImageScaleProportionallyUpOrDown = 3; +@typedef CPCellImagePosition CPNoImage = 0; CPImageOnly = 1; CPImageLeft = 2; @@ -270,10 +277,20 @@ var CPControlBlackColor = [CPColor blackColor]; maxSize = [self currentValueForThemeAttribute:@"max-size"]; if (minSize.width > 0) + { frameSize.width = MAX(minSize.width, frameSize.width); + if (maxSize.width > 0) + frameSize.width = MIN(maxSize.width, frameSize.width); + } + if (minSize.height > 0) - frameSize.height = minSize.height; + { + frameSize.height = MAX(minSize.height, frameSize.height); + + if (maxSize.height > 0) + frameSize.height = MIN(maxSize.height, frameSize.height); + } [self setFrameSize:frameSize]; } diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index 8ebd1ee8c..2d2e51348 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -29,6 +29,9 @@ @import @class CPDatePicker +@class _CPDatePickerMonthView +@class _CPDatePickerHeaderView +@class _CPDatePickerBox @global CPApp @global CPSingleDateMode @@ -63,7 +66,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" _CPDatePickerMonthView _monthView; _CPDatePickerHeaderView _headerView; _CPDatePickerClock _datePickerClock; - CPBox _box; + _CPDatePickerBox _box; CPDatePicker _datePicker; CPInteger _startSelectionIndex; CPInteger _currentSelectionIndex; @@ -97,7 +100,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" sizeCalendar = [_datePicker valueForThemeAttribute:@"size-calendar"], sizeClock = [_datePicker valueForThemeAttribute:@"size-clock"]; - _box = [[_DatePickerBox alloc] initWithFrame:CGRectMake(0, 0, sizeCalendar.width, sizeHeader.height + sizeCalendar.height)]; + _box = [[_CPDatePickerBox alloc] initWithFrame:CGRectMake(0, 0, sizeCalendar.width, sizeHeader.height + sizeCalendar.height)]; [_box setDatePicker:_datePicker]; _headerView = [[_CPDatePickerHeaderView alloc] initWithFrame:CGRectMake(0, 0, sizeHeader.width, sizeHeader.height) datePicker:_datePicker delegate:self]; @@ -1266,7 +1269,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" @end -@implementation _DatePickerBox : CPView +@implementation _CPDatePickerBox : CPView { CPDatePicker _datePicker @accessors(property=datePicker); } diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 39935b536..2f9b42b41 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -31,6 +31,10 @@ @import @class CPDatePicker +@class _CPDatePickerElementTextField +@class _CPDatePickerElementView +@class _CPDatePickerMonthView +@class _CPDatePickerHeaderView @global CPSingleDateMode @global CPRangeDateMode @@ -334,10 +338,11 @@ var CPZeroKeyCode = 48, if ([anEvent keyCode] == CPReturnKeyCode) { [_currentTextField _endEditing]; - return YES; + + return [super performKeyEquivalent:anEvent]; } - return NO; + return [super performKeyEquivalent:anEvent]; } /*! KeyDown event @@ -1771,6 +1776,7 @@ var CPMonthDateType = 0, - (void)makeSelectable { [self setThemeState:CPThemeStateSelected]; + [_datePicker setThemeState:CPThemeStateEditing]; } /*! Unsert the theme CPThemeStateSelected @@ -1779,6 +1785,7 @@ var CPMonthDateType = 0, { _firstEvent = YES; [self unsetThemeState:CPThemeStateSelected]; + [_datePicker unsetThemeState:CPThemeStateEditing]; } @@ -1847,4 +1854,4 @@ var CPMonthDateType = 0, return CGRectMakeCopy(bounds); } -@end \ No newline at end of file +@end diff --git a/AppKit/CPDragServer_Constants.j b/AppKit/CPDragServer_Constants.j index 38ade5c31..7a347d3d4 100644 --- a/AppKit/CPDragServer_Constants.j +++ b/AppKit/CPDragServer_Constants.j @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@typedef CPDragOperation CPDragOperationNone = 0; CPDragOperationCopy = 1 << 1; CPDragOperationLink = 1 << 1; diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index aab6749dc..35bde5887 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -30,12 +30,17 @@ @import "CGGeometry.j" @class CPTextField +@class CPWindow @global CPApp @global CPNewlineCharacter @global CPCarriageReturnCharacter @global CPEnterCharacter +@typedef DOMEvent +@typedef CPEventType + + var _CPEventPeriodicEventPeriod = 0, _CPEventPeriodicEventTimer = nil, _CPEventUpperCaseRegex = new RegExp("[A-Z]"), diff --git a/AppKit/CPImageView.j b/AppKit/CPImageView.j index 1c4ef8dbc..6c041fdea 100644 --- a/AppKit/CPImageView.j +++ b/AppKit/CPImageView.j @@ -29,6 +29,7 @@ @global CPImagesPboardType @global appkit_tag_dom_elements +@typedef CPImageAlignment CPImageAlignCenter = 0; CPImageAlignTop = 1; CPImageAlignTopLeft = 2; diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 1913a4436..662280d16 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -35,6 +35,7 @@ var exposedBindingsMap = @{}, bindingsMap = @{}; +@typedef CPBindingOperationKind var CPBindingOperationAnd = 0, CPBindingOperationOr = 1; diff --git a/AppKit/CPLevelIndicator.j b/AppKit/CPLevelIndicator.j index 07ce720c3..c4e6422ee 100644 --- a/AppKit/CPLevelIndicator.j +++ b/AppKit/CPLevelIndicator.j @@ -25,11 +25,13 @@ @global CPApp +@typedef CPTickMarkPosition CPTickMarkBelow = 0; CPTickMarkAbove = 1; CPTickMarkLeft = CPTickMarkAbove; CPTickMarkRight = CPTickMarkBelow; +@typedef CPLevelIndicatorStyle CPRelevancyLevelIndicatorStyle = 0; CPContinuousCapacityLevelIndicatorStyle = 1; CPDiscreteCapacityLevelIndicatorStyle = 2; diff --git a/AppKit/CPMenu/_CPMenuBarWindow.j b/AppKit/CPMenu/_CPMenuBarWindow.j index 2c6c2bcaa..db9077b06 100644 --- a/AppKit/CPMenu/_CPMenuBarWindow.j +++ b/AppKit/CPMenu/_CPMenuBarWindow.j @@ -24,6 +24,7 @@ @import "_CPMenuManager.j" @class _CPMenuView +@class CPMenu @global CPMenuDidAddItemNotification @global CPMenuDidChangeItemNotification diff --git a/AppKit/CPMenu/_CPMenuWindow.j b/AppKit/CPMenu/_CPMenuWindow.j index ddf53a7dd..681ee5af6 100644 --- a/AppKit/CPMenu/_CPMenuWindow.j +++ b/AppKit/CPMenu/_CPMenuWindow.j @@ -25,6 +25,8 @@ @import "CPWindow.j" @import "_CPMenuManager.j" +@class _CPMenuView + var _CPMenuWindowPool = [], _CPMenuWindowPoolCapacity = 5, @@ -410,7 +412,7 @@ _CPMenuWindowAttachedMenuBackgroundStyle = 2; { // Don't return indexes of items that aren't visible. if (!CGRectContainsPoint([_menuClipView bounds], [_menuClipView convertPoint:aPoint fromView:nil])) - return NO; + return CPNotFound; return [_menuView itemIndexAtPoint:[_menuView convertPoint:aPoint fromView:nil]]; } diff --git a/AppKit/CPMenuItem/_CPMenuItemMenuBarView.j b/AppKit/CPMenuItem/_CPMenuItemMenuBarView.j index 265b78867..e6b209f7b 100644 --- a/AppKit/CPMenuItem/_CPMenuItemMenuBarView.j +++ b/AppKit/CPMenuItem/_CPMenuItemMenuBarView.j @@ -25,6 +25,7 @@ @class _CPMenuBarWindow @class _CPMenuView +@class CPMenuItem @implementation _CPMenuItemMenuBarView : CPView { diff --git a/AppKit/CPMenuItem/_CPMenuItemStandardView.j b/AppKit/CPMenuItem/_CPMenuItemStandardView.j index 2fc534b24..f7112befb 100644 --- a/AppKit/CPMenuItem/_CPMenuItemStandardView.j +++ b/AppKit/CPMenuItem/_CPMenuItemStandardView.j @@ -24,6 +24,9 @@ @import "CPImageView.j" @import "_CPImageAndTextView.j" +@class CPMenuItem + + @implementation _CPMenuItemStandardView : CPView { CPMenuItem _menuItem @accessors(property=menuItem); diff --git a/AppKit/CPMenuItem/_CPMenuItemView.j b/AppKit/CPMenuItem/_CPMenuItemView.j index 7156db2ed..8d6b8b2cf 100644 --- a/AppKit/CPMenuItem/_CPMenuItemView.j +++ b/AppKit/CPMenuItem/_CPMenuItemView.j @@ -26,6 +26,7 @@ @import "_CPMenuItemStandardView.j" @import "_CPMenuItemMenuBarView.j" +@class CPMenuItem @global CPApp /* diff --git a/AppKit/CPPasteboard.j b/AppKit/CPPasteboard.j index e93d1ddfa..b8e0139f0 100644 --- a/AppKit/CPPasteboard.j +++ b/AppKit/CPPasteboard.j @@ -26,6 +26,7 @@ @import @import +@class CPWebScriptObject CPGeneralPboard = @"CPGeneralPboard"; CPFontPboard = @"CPFontPboard"; @@ -66,7 +67,7 @@ var CPPasteboards = nil, unsigned _changeCount; CPString _stateUID; - WebScriptObject _nativePasteboard; + CPWebScriptObject _nativePasteboard; } /* diff --git a/AppKit/CPProgressIndicator.j b/AppKit/CPProgressIndicator.j index e0ea06ab4..3732c229b 100644 --- a/AppKit/CPProgressIndicator.j +++ b/AppKit/CPProgressIndicator.j @@ -26,6 +26,7 @@ @import "CPWindow_Constants.j" +@typedef CPProgressIndicatorStyle /* @global @group CPProgressIndicatorStyle diff --git a/AppKit/CPRadio.j b/AppKit/CPRadio.j index 8cf37cc3d..bb845aef3 100644 --- a/AppKit/CPRadio.j +++ b/AppKit/CPRadio.j @@ -25,6 +25,8 @@ @import "CPButton.j" +@class CPRadioGroup + @global CPApp diff --git a/AppKit/CPResponder.j b/AppKit/CPResponder.j index 08e3db3ac..eddf8b628 100644 --- a/AppKit/CPResponder.j +++ b/AppKit/CPResponder.j @@ -26,6 +26,7 @@ @import "CPEvent.j" @class CPKeyBinding +@class CPMenu CPDeleteKeyCode = 8; CPTabKeyCode = 9; diff --git a/AppKit/CPRuleEditor/CPRuleEditor.j b/AppKit/CPRuleEditor/CPRuleEditor.j index a02b8efe7..404c5546e 100644 --- a/AppKit/CPRuleEditor/CPRuleEditor.j +++ b/AppKit/CPRuleEditor/CPRuleEditor.j @@ -2207,7 +2207,7 @@ TODO: implement indexOfDropLine = FLOOR(y / _sliceHeight), numberOfRows = [self numberOfRows]; - if (indexOfDropLine < 0 || indexOfDropLine > numberOfRows || (indexOfDropLine >= [_draggingRows firstIndex] && indexOfDropLine <= [_draggingRows lastIndex] + 1)) + if (indexOfDropLine <= 0 || indexOfDropLine > numberOfRows || (indexOfDropLine >= [_draggingRows firstIndex] && indexOfDropLine <= [_draggingRows lastIndex] + 1)) { if (_subviewIndexOfDropLine !== CPNotFound && indexOfDropLine !== _subviewIndexOfDropLine) [self _clearDropLine]; diff --git a/AppKit/CPRuleEditor/CPRuleEditor_Constants.j b/AppKit/CPRuleEditor/CPRuleEditor_Constants.j index d68b6f48a..0870aedeb 100644 --- a/AppKit/CPRuleEditor/CPRuleEditor_Constants.j +++ b/AppKit/CPRuleEditor/CPRuleEditor_Constants.j @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + CPRuleEditorPredicateLeftExpression = "CPRuleEditorPredicateLeftExpression"; CPRuleEditorPredicateRightExpression = "CPRuleEditorPredicateRightExpression"; CPRuleEditorPredicateComparisonModifier = "CPRuleEditorPredicateComparisonModifier"; @@ -36,5 +37,6 @@ CPRuleEditorNestingModeList = 1; // Allows a single list, with no nes CPRuleEditorNestingModeCompound = 2; // Unlimited nesting and compound rows; this is the default CPRuleEditorNestingModeSimple = 3; // One compound row at the top with subrows beneath it, and no further nesting allowed +@typedef CPRuleEditorRowType CPRuleEditorRowTypeSimple = 0; CPRuleEditorRowTypeCompound = 1; diff --git a/AppKit/CPRuleEditor/_CPPredicateEditorTree.j b/AppKit/CPRuleEditor/_CPPredicateEditorTree.j index f0d47086f..8cb807a84 100644 --- a/AppKit/CPRuleEditor/_CPPredicateEditorTree.j +++ b/AppKit/CPRuleEditor/_CPPredicateEditorTree.j @@ -20,6 +20,8 @@ @import @import +@class CPPredicateEditorRowTemplate + @implementation _CPPredicateEditorTree : CPObject { CPPredicateEditorRowTemplate template @accessors; diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j index 39a6a1d47..2cec0efae 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j @@ -19,6 +19,8 @@ @import "CPView.j" +@class CPRuleEditor + @implementation _CPRuleEditorViewSlice : CPView { CPRuleEditor _ruleEditor; diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j index 30470d5c6..80509dd16 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j @@ -122,8 +122,8 @@ { var title = [[itemsArray objectAtIndex:index] title], font = [_ruleEditor font], - width = [title sizeWithFont:font].width + 20, - rect = CGRectMake(0, 0, (width - width % 40) + 80, [_ruleEditor rowHeight]), + width = [title sizeWithFont:font].width + 35, // 35 for right arrows + margins + rect = CGRectMake(0, 0, width, [_ruleEditor rowHeight]), popup = [[CPPopUpButton alloc] initWithFrame:rect]; [popup setValue:font forThemeAttribute:@"font"]; @@ -315,8 +315,14 @@ { [ruleView setControlSize:CPSmallControlSize]; + var minSize = [ruleView currentValueForThemeAttribute:@"min-size"], + frame = [ruleView frame]; + + // Force controls to their minimum size + frame.size.height = minSize.height; + [ruleView setFrame:frame]; + [_ruleOptionViews addObject:ruleView]; - var frame = [ruleView frame]; [_ruleOptionInitialViewFrames addObject:frame]; [_ruleOptionFrames addObject:frame]; diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index efb3f5b2e..f293b34dd 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -33,6 +33,7 @@ @global CPApp // CPScroller Constants +@typedef CPScrollerPart CPScrollerNoPart = 0; CPScrollerDecrementPage = 1; CPScrollerKnob = 2; @@ -44,6 +45,7 @@ CPScrollerKnobSlot = 6; CPScrollerIncrementArrow = 0; CPScrollerDecrementArrow = 1; +@typedef CPUsableScrollerParts CPNoScrollerParts = 0; CPOnlyScrollerArrows = 1; CPAllScrollerParts = 2; diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index e95993152..e58d97ef1 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -28,6 +28,7 @@ @global CPApp +@typedef CPSegmentSwitchTracking CPSegmentSwitchTrackingSelectOne = 0; CPSegmentSwitchTrackingSelectAny = 1; CPSegmentSwitchTrackingMomentary = 2; diff --git a/AppKit/CPShadowView.j b/AppKit/CPShadowView.j index 5fcc5c26c..c6c223705 100644 --- a/AppKit/CPShadowView.j +++ b/AppKit/CPShadowView.j @@ -26,7 +26,7 @@ @import "CPImage.j" @import "CPView.j" - +@typedef CPShadowWeight CPLightShadow = 0; CPHeavyShadow = 1; diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 75f1d1ad5..ec145d802 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -25,6 +25,7 @@ @import "CPTabViewItem.j" @import "CPView.j" +@typedef CPTabViewType CPTopTabsBezelBorder = 0; //CPLeftTabsBezelBorder = 1; CPBottomTabsBezelBorder = 2; diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j index 6c073b1d0..671d5bc78 100644 --- a/AppKit/CPTabViewItem.j +++ b/AppKit/CPTabViewItem.j @@ -23,7 +23,7 @@ @import @import "CPView.j" - +@class CPTabView /* The tab is currently selected. diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 951cf45e4..e0f944a8e 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -31,6 +31,7 @@ @global CPTableViewColumnDidResizeNotification @class _CPTableColumnHeaderView +@class CPTableView CPTableColumnNoResizing = 0; CPTableColumnAutoresizingMask = 1 << 0; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 48157b537..e0961f6fa 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -42,6 +42,7 @@ @class CPTableHeaderView @class CPClipView @class CPButton +@class _CPDropOperationDrawingView @global CPApp @@ -170,7 +171,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; @implementation _CPTableDrawView : CPView { - CPTableView _tableView; + id _tableView; } - (id)initWithTableView:(CPTableView)aTableView diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 5f11f1d6e..dd41b0591 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -41,15 +41,17 @@ var CPTextFieldDelegate_control_didFailToFormatString_errorDescription_ = 1 << 1; +@typedef CPTextFieldBezelStyle CPTextFieldSquareBezel = 0; /*! A textfield bezel with squared corners. */ CPTextFieldRoundedBezel = 1; /*! A textfield bezel with rounded corners. */ CPTextFieldDidFocusNotification = @"CPTextFieldDidFocusNotification"; CPTextFieldDidBlurNotification = @"CPTextFieldDidBlurNotification"; -var CPTextFieldDOMInputElement = nil, - CPTextFieldDOMPasswordInputElement = nil, +var CPTextFieldDOMCurrentElement = nil, + CPTextFieldDOMTextAreaElement = nil, CPTextFieldDOMStandardInputElement = nil, + CPTextFieldDOMPasswordInputElement = nil, CPTextFieldInputOwner = nil, CPTextFieldTextDidChangeValue = nil, CPTextFieldInputResigning = NO, @@ -142,6 +144,9 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // NS-style Display Properties CPTextFieldBezelStyle _bezelStyle; BOOL _isBordered; + BOOL _usesSingleLineMode; + BOOL _wraps; + BOOL _scrolls; } + (Class)_binderClassForBinding:(CPString)aBinding @@ -240,101 +245,112 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _sizeToControlSize]; } -#pragma mark - +#pragma mark - #if PLATFORM(DOM) - (DOMElement)_inputElement { - if (!CPTextFieldDOMInputElement) + if (!CPTextFieldDOMTextAreaElement) { - CPTextFieldDOMInputElement = document.createElement("input"); - CPTextFieldDOMInputElement.style.position = "absolute"; - CPTextFieldDOMInputElement.style.border = "0px"; - CPTextFieldDOMInputElement.style.padding = "0px"; - CPTextFieldDOMInputElement.style.margin = "0px"; - CPTextFieldDOMInputElement.style.whiteSpace = "pre"; - CPTextFieldDOMInputElement.style.background = "transparent"; - CPTextFieldDOMInputElement.style.outline = "none"; + CPTextFieldDOMTextAreaElement = document.createElement("textarea"); + CPTextFieldDOMTextAreaElement.style.position = "absolute"; + CPTextFieldDOMTextAreaElement.style.border = "0px"; + CPTextFieldDOMTextAreaElement.style.padding = "0px"; + CPTextFieldDOMTextAreaElement.style.margin = "0px"; + CPTextFieldDOMTextAreaElement.style.background = "transparent"; + CPTextFieldDOMTextAreaElement.style.outline = "none"; + CPTextFieldDOMTextAreaElement.style.resize = "none"; + CPTextFieldDOMTextAreaElement.style.overflow = "hidden"; + CPTextFieldDOMTextAreaElement.spellcheck = NO; + } + if (!CPTextFieldDOMStandardInputElement) + { + CPTextFieldDOMStandardInputElement = document.createElement("input"); + CPTextFieldDOMStandardInputElement.style.position = "absolute"; + CPTextFieldDOMStandardInputElement.style.border = "0px"; + CPTextFieldDOMStandardInputElement.style.padding = "0px"; + CPTextFieldDOMStandardInputElement.style.margin = "0px"; + CPTextFieldDOMStandardInputElement.style.whiteSpace = "pre"; + CPTextFieldDOMStandardInputElement.style.background = "transparent"; + CPTextFieldDOMStandardInputElement.style.outline = "none"; + CPTextFieldDOMStandardInputElement.spellcheck = NO; + } + + if (!CPTextFieldDOMPasswordInputElement) + { + CPTextFieldDOMPasswordInputElement = document.createElement("input"); + CPTextFieldDOMPasswordInputElement.style.position = "absolute"; + CPTextFieldDOMPasswordInputElement.style.border = "0px"; + CPTextFieldDOMPasswordInputElement.style.padding = "0px"; + CPTextFieldDOMPasswordInputElement.style.margin = "0px"; + CPTextFieldDOMPasswordInputElement.style.whiteSpace = "pre"; + CPTextFieldDOMPasswordInputElement.style.background = "transparent"; + CPTextFieldDOMPasswordInputElement.style.outline = "none"; + CPTextFieldDOMPasswordInputElement.type = "password"; + CPTextFieldDOMPasswordInputElement.spellcheck = NO; + } + + if (!CPTextFieldBlurHandler) + { CPTextFieldBlurHandler = function(anEvent) { return CPTextFieldBlurFunction( anEvent, CPTextFieldInputOwner, CPTextFieldInputOwner ? CPTextFieldInputOwner._DOMElement : nil, - CPTextFieldDOMInputElement, + CPTextFieldDOMCurrentElement, CPTextFieldInputResigning, @ref(CPTextFieldInputDidBlur)); }; + } - if (CPFeatureIsCompatible(CPInputOnInputEventFeature)) + if (!CPTextFieldInputFunction) + { + if (!CPFeatureIsCompatible(CPInputOnInputEventFeature)) + return; + + CPTextFieldInputFunction = function(anEvent) { - CPTextFieldInputFunction = function(anEvent) - { - if (!CPTextFieldInputOwner) - return; + if (!CPTextFieldInputOwner) + return; - var cappEvent = [CPEvent keyEventWithType:CPKeyUp - location:CGPointMakeZero() - modifierFlags:0 - timestamp:[CPEvent currentTimestamp] - windowNumber:[[CPApp keyWindow] windowNumber] - context:nil - characters:nil - charactersIgnoringModifiers:nil - isARepeat:NO - keyCode:nil]; + var cappEvent = [CPEvent keyEventWithType:CPKeyUp + location:CGPointMakeZero() + modifierFlags:0 + timestamp:[CPEvent currentTimestamp] + windowNumber:[[CPApp keyWindow] windowNumber] + context:nil + characters:nil + charactersIgnoringModifiers:nil + isARepeat:NO + keyCode:nil]; - [CPTextFieldInputOwner keyUp:cappEvent]; + [CPTextFieldInputOwner keyUp:cappEvent]; - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - } - - CPTextFieldDOMInputElement.oninput = CPTextFieldInputFunction; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; } - // FIXME make this not onblur - CPTextFieldDOMInputElement.onblur = CPTextFieldBlurHandler; + CPTextFieldDOMPasswordInputElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; - CPTextFieldDOMStandardInputElement = CPTextFieldDOMInputElement; + CPTextFieldDOMStandardInputElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; + + CPTextFieldDOMTextAreaElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMTextAreaElement.onblur = CPTextFieldBlurHandler; } - if (CPFeatureIsCompatible(CPInputTypeCanBeChangedFeature)) - { - if ([self isSecure]) - CPTextFieldDOMInputElement.type = "password"; - else - CPTextFieldDOMInputElement.type = "text"; - - return CPTextFieldDOMInputElement; - } if ([self isSecure]) - { - if (!CPTextFieldDOMPasswordInputElement) - { - CPTextFieldDOMPasswordInputElement = document.createElement("input"); - CPTextFieldDOMPasswordInputElement.style.position = "absolute"; - CPTextFieldDOMPasswordInputElement.style.border = "0px"; - CPTextFieldDOMPasswordInputElement.style.padding = "0px"; - CPTextFieldDOMPasswordInputElement.style.margin = "0px"; - CPTextFieldDOMPasswordInputElement.style.whiteSpace = "pre"; - CPTextFieldDOMPasswordInputElement.style.background = "transparent"; - CPTextFieldDOMPasswordInputElement.style.outline = "none"; - CPTextFieldDOMPasswordInputElement.type = "password"; - - CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; - } - - CPTextFieldDOMInputElement = CPTextFieldDOMPasswordInputElement; - } + CPTextFieldDOMCurrentElement = CPTextFieldDOMPasswordInputElement; + else if (_usesSingleLineMode) + CPTextFieldDOMCurrentElement = CPTextFieldDOMStandardInputElement; else - { - CPTextFieldDOMInputElement = CPTextFieldDOMStandardInputElement; - } + CPTextFieldDOMCurrentElement = CPTextFieldDOMTextAreaElement; - return CPTextFieldDOMInputElement; + return CPTextFieldDOMCurrentElement; } #endif @@ -350,8 +366,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); _sendActionOn = CPKeyUpMask | CPKeyDownMask; [self setValue:CPLeftTextAlignment forThemeAttribute:@"alignment"]; - - [self _updateCursor]; } return self; @@ -373,8 +387,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if (shouldBeEditable) _isSelectable = YES; - [self _updateCursor]; - if (_isEditable) [self setThemeState:CPThemeStateEditable]; else @@ -405,7 +417,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setEnabled:(BOOL)shouldBeEnabled { [super setEnabled:shouldBeEnabled]; - [self _updateCursor]; // We only allow first responder status if the field is enabled. if (!shouldBeEnabled && [[self window] firstResponder] === self) @@ -419,8 +430,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setSelectable:(BOOL)aFlag { _isSelectable = aFlag; - - [self _updateCursor]; } /*! @@ -560,6 +569,24 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); return _textFieldBackgroundColor; } +/*! @ignore */ +- (void)_setUsesSingleLineMode:(BOOL)aFlag +{ + _usesSingleLineMode = aFlag; +} + +/*! @ignore */ +- (void)_setWraps:(BOOL)aFlag +{ + _wraps = aFlag; +} + +/*! @ignore */ +- (void)_setScrolls:(BOOL)aFlag +{ + _scrolls = aFlag; +} + /*! @ignore */ - (BOOL)acceptsFirstResponder { @@ -615,28 +642,10 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _setCSSStyleForInputElement]; - var element = [self _inputElement], - font = [self currentValueForThemeAttribute:@"font"], - contentRect = [self contentRectForBounds:[self bounds]], - left = CGRectGetMinX(contentRect); - + var element = [self _inputElement]; element.value = _stringValue; - - // 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)) - left -= 1; - - element.style.left = left + "px"; - element.style.width = CGRectGetWidth(contentRect) + "px"; - element.style.verticalAlign = "top"; - element.style.cursor = "auto"; - _DOMElement.appendChild(element); - // The font change above doesn't work for some browsers if the element isn't already appendChild'ed. - if (!CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) - element.style.font = [font cssString]; - CPTextFieldInputIsActive = YES; if (document.attachEvent) @@ -680,37 +689,18 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); */ - (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"]; - 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]; + var element = [self _inputElement], + font = [self currentValueForThemeAttribute:@"font"], + lineHeight = [font defaultLineHeightForFont], + contentRect = [self contentRectForBounds:[self bounds]], + verticalAlign = [self currentValueForThemeAttribute:"vertical-alignment"], + left = CGRectGetMinX(contentRect); - 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"; - } + // 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)) + left -= 1; switch (verticalAlign) { @@ -731,12 +721,41 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); break; } - element.style.top = topPoint; - element.style.height = ROUND(lineHeight) + "px"; - element.style.lineHeight = ROUND(lineHeight) + "px"; + 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]; + + switch ([self alignment]) + { + case CPCenterTextAlignment: + element.style.textAlign = "center"; + break; + + case CPRightTextAlignment: + element.style.textAlign = "right"; + break; + + default: + element.style.textAlign = "left"; + } + + var isTextArea = element.nodeName.toUpperCase() == "TEXTAREA"; + + element.style.zIndex = 1000; + element.style.top = topPoint; + element.style.lineHeight = ROUND(lineHeight) + "px"; + element.style.height = isTextArea ? CGRectGetHeight(contentRect) + "px" : ROUND(lineHeight) + "px";; + element.style.width = CGRectGetWidth(contentRect) + "px"; + element.style.left = left + "px"; + element.style.verticalAlign = "top"; + element.style.cursor = "auto"; + element.style.font = [font cssString]; + + if (isTextArea) + element.style.whiteSpace = _wraps ? "pre" : "nowrap"; #endif - } /*! @ignore */ @@ -930,6 +949,12 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:self userInfo:nil]]; } +- (void)mouseMoved:(CPEvent)anEvent +{ + [super mouseMoved:anEvent]; + [self _updateCursorForEvent:anEvent]; +} + - (void)mouseDown:(CPEvent)anEvent { // Don't track! (ever?) @@ -1100,7 +1125,11 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); range = [self selectedRange], element = [self _inputElement]; - element.value = [element.value stringByReplacingCharactersInRange:[self selectedRange] withString:aCharacter]; + // we don't need to do this in case of textarea + // or we will end up with 2 carriage returns + if (aCharacter != CPNewlineCharacter || element.nodeName.toUpperCase() != "TEXTAREA" || !CPFeatureIsCompatible(CPAltEnterTextAreaFeature)) + element.value = [element.value stringByReplacingCharactersInRange:[self selectedRange] withString:aCharacter]; + [self _setStringValue:element.value]; // NOTE: _stringValue is now the current input element value @@ -1140,9 +1169,14 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [super textDidChange:note]; } -- (void)_updateCursor +- (void)_updateCursorForEvent:(CPEvent)anEvent { - if ([self isEnabled] && ([self isSelectable] || [self isEditable])) + var frame = CGRectMakeCopy([self frame]), + contentInset = [self currentValueForThemeAttribute:@"content-inset"]; + + frame = [[self superview] convertRectToBase:CGRectInsetByInset(frame, contentInset)]; + + if ([self isEnabled] && ([self isSelectable] || [self isEditable]) && CGRectContainsPoint(frame, [anEvent locationInWindow])) { #if PLATFORM(DOM) self._DOMElement.style.cursor = "text"; @@ -1940,7 +1974,11 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", CPTextFieldLineBreakModeKey = "CPTextFieldLineBreakModeKey", CPTextFieldAlignmentKey = "CPTextFieldAlignmentKey", CPTextFieldBackgroundColorKey = "CPTextFieldBackgroundColorKey", - CPTextFieldPlaceholderStringKey = "CPTextFieldPlaceholderStringKey"; + CPTextFieldPlaceholderStringKey = "CPTextFieldPlaceholderStringKey", + CPTextFieldUsesSingleLineMode = "CPTextFieldUsesSingleLineMode", + CPTextFieldWraps = "CPTextFieldWraps", + CPTextFieldScrolls = "CPTextFieldScrolls"; + @implementation CPTextField (CPCoding) @@ -1967,7 +2005,9 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [self setPlaceholderString:[aCoder decodeObjectForKey:CPTextFieldPlaceholderStringKey]]; - [self _updateCursor]; + [self _setUsesSingleLineMode:[aCoder decodeBoolForKey:CPTextFieldUsesSingleLineMode]]; + [self _setWraps:[aCoder decodeBoolForKey:CPTextFieldWraps]]; + [self _setScrolls:[aCoder decodeBoolForKey:CPTextFieldScrolls]]; } return self; @@ -1992,6 +2032,10 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [aCoder encodeInt:[self alignment] forKey:CPTextFieldAlignmentKey]; [aCoder encodeObject:_placeholderString forKey:CPTextFieldPlaceholderStringKey]; + + [aCoder encodeBool:_usesSingleLineMode forKey:CPTextFieldUsesSingleLineMode]; + [aCoder encodeBool:_wraps forKey:CPTextFieldWraps]; + [aCoder encodeBool:_scrolls forKey:CPTextFieldScrolls]; } @end @@ -2022,6 +2066,23 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [_source setObjectValue:aValue]; } +- (void)reverseSetValueFor:(CPString)aBinding +{ + var destination = [_info objectForKey:CPObservedObjectKey], + keyPath = [_info objectForKey:CPObservedKeyPathKey], + options = [_info objectForKey:CPOptionsKey], + newValue = [self valueForBinding:aBinding], + value = [destination valueForKeyPath:keyPath]; + + if (CPIsControllerMarker(value) && newValue === nil) return; + + newValue = [self reverseTransformValue:newValue withOptions:options]; + + [self suppressSpecificNotificationFromObject:destination keyPath:keyPath]; + [destination setValue:newValue forKeyPath:keyPath]; + [self unsuppressSpecificNotificationFromObject:destination keyPath:keyPath]; +} + @end @implementation _CPTextFieldPatternValueBinder : CPValueWithPatternBinding diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index f87c3a2a2..426c462ca 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -26,6 +26,7 @@ @import @class CPView +@class _CPThemeAttribute var CPThemesByName = { }, CPThemeDefaultTheme = nil, diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index cc4b96765..705435aae 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -33,6 +33,9 @@ @import "CPTextField.j" @import "CPWindow_Constants.j" +@class _CPTokenFieldTokenCloseButton +@class _CPTokenFieldTokenDisclosureButton + @global CPApp @global CPTextFieldDidFocusNotification @global CPTextFieldDidBlurNotification diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 3cc711518..49c78924e 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -37,6 +37,8 @@ var CPToolbarDelegate_toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar_ CPToolbarDelegate_toolbarSelectableItemIdentifiers_ = 1 << 4, CPToolbarDelegate_toolbarWillAddItem_ = 1 << 5; + +@typedef CPToolbarDisplayMode /* @global @group CPToolbarDisplayMode @@ -58,7 +60,7 @@ CPToolbarDisplayModeIconOnly = 2; */ CPToolbarDisplayModeLabelOnly = 3; - +@typedef CPToolbarSizeMode CPToolbarSizeModeDefault = 0; CPToolbarSizeModeRegular = 1; CPToolbarSizeModeSmall = 2; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 1a600667c..70068d668 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -40,9 +40,12 @@ @class CPMenu @class CPClipView @class CPScrollView +@class CALayer @global appkit_tag_dom_elements +@typedef _CPViewFullScreenModeState + #if PLATFORM(DOM) if (typeof(appkit_tag_dom_elements) !== "undefined" && appkit_tag_dom_elements) diff --git a/AppKit/CPViewController.j b/AppKit/CPViewController.j index 2ea3a05de..0c9bec99e 100644 --- a/AppKit/CPViewController.j +++ b/AppKit/CPViewController.j @@ -210,6 +210,7 @@ var CPViewControllerCachedCibs; [cibOwner viewControllerDidLoadCib:self]; _isLoading = NO; + _isLazy = NO; [self _viewDidLoad]; } else if (_isLazy) diff --git a/AppKit/CPWebView.j b/AppKit/CPWebView.j index 98cc59caa..fe344027e 100644 --- a/AppKit/CPWebView.j +++ b/AppKit/CPWebView.j @@ -23,6 +23,7 @@ @import "CPView.j" @import "CPScrollView.j" +@class CPWebScriptObject // FIXME: implement these where possible: /* @@ -93,7 +94,7 @@ CPWebViewAppKitScrollMaxPollCount = 3; CPScrollView _scrollView; CPView _frameView; - IFrame _iframe; + DOMElement _iframe; CPString _mainFrameURL; CPArray _backwardStack; CPArray _forwardStack; diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index f770fc642..e2836fe32 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -50,9 +50,15 @@ @class CPMenu @class CPProgressIndicator +@class CPToolbar +@class CPWindowController +@class _CPWindowFrameAnimation @global CPApp +@typedef _CPWindowFullPlatformWindowSession + + @protocol CPWindowDelegate @optional @@ -1846,6 +1852,12 @@ CPTexturedBackgroundWindowMask if (_leftMouseDownView !== _firstResponder && [_leftMouseDownView acceptsFirstResponder]) [self makeFirstResponder:_leftMouseDownView]; + var keyWindow = [CPApp keyWindow]; + + // This is only when we move from a platform to another one + if ([keyWindow platformWindow] != [self platformWindow]) + [self makeKeyAndOrderFront:self]; + [CPApp activateIgnoringOtherApps:YES]; var theWindow = [anEvent window], @@ -2477,7 +2489,7 @@ CPTexturedBackgroundWindowMask if (currentWindow === self || currentWindow === menuWindow) continue; - if ([currentWindow isVisible] && [currentWindow canBecomeKeyWindow]) + if ([currentWindow isVisible] && [currentWindow canBecomeKeyWindow] && [currentWindow platformWindow] == [keyWindow platformWindow]) { [currentWindow makeKeyWindow]; break; @@ -2679,6 +2691,23 @@ CPTexturedBackgroundWindowMask [attachedSheet setFrame:sheetFrame display:YES animate:NO]; } +- (void)_previousSheetIsClosedNotification:(CPNotification)aNotification +{ + [[CPNotificationCenter defaultCenter] removeObserver:self name:CPWindowDidEndSheetNotification object:self]; + + var sheet = _sheetContext[@"nextSheet"], + modalDelegate =_sheetContext[@"nextModalDelegate"], + endSelector = _sheetContext[@"nextEndSelector"], + contextInfo = _sheetContext[@"nextContextInfo"]; + + // Needed, because when the notification CPWindowDidEndSheetNotification is sent, the sheetContext is not up to date... + setTimeout(function() + { + [sheet._windowView _enableSheet:YES inWindow:self]; + [self _attachSheet:sheet modalDelegate:modalDelegate didEndSelector:endSelector contextInfo:contextInfo]; + }, 0) +} + /* Starting point for sheet session, called from CPApplication beginSheet: */ @@ -2687,9 +2716,24 @@ CPTexturedBackgroundWindowMask { if (_sheetContext) { - [CPException raise:CPInternalInconsistencyException - reason:@"The target window of beginSheet: already has a sheet, did you forget orderOut: ?"]; - return; + // Here we wait till the current sheet is closed + if (_sheetContext[@"isClosing"]) + { + // Here we save the next sheet to open + _sheetContext[@"nextSheet"] = aSheet; + _sheetContext[@"nextModalDelegate"] = aModalDelegate; + _sheetContext[@"nextEndSelector"] = didEndSelector; + _sheetContext[@"nextContextInfo"] = contextInfo; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_previousSheetIsClosedNotification:) name:CPWindowDidEndSheetNotification object:self]; + return; + } + else + { + [CPException raise:CPInternalInconsistencyException + reason:@"The target window of beginSheet: already has a sheet, did you forget orderOut: ?"]; + return; + } } _sheetContext = { @@ -2741,7 +2785,12 @@ CPTexturedBackgroundWindowMask */ - (void)_detachSheetWindow { + if (_sheetContext["isClosing"]) + return; + _sheetContext["isAttached"] = NO; + _sheetContext["isClosing"] = YES; + _sheetContext["opened"] = NO; // A timer seems to be necessary for the animation to work correctly. // It would be ideal to block here and spin the event loop, until attach is complete. @@ -2874,12 +2923,6 @@ CPTexturedBackgroundWindowMask return; } - if (_sheetContext["isClosing"]) - return; - - _sheetContext["opened"] = NO; - _sheetContext["isClosing"] = YES; - // The parent window can be orderedOut to disable the sheet animate out, as in Cocoa if ([self isVisible]) { diff --git a/AppKit/CPWindow/CPWindow_Constants.j b/AppKit/CPWindow/CPWindow_Constants.j index a9a2c3327..0caf4de78 100644 --- a/AppKit/CPWindow/CPWindow_Constants.j +++ b/AppKit/CPWindow/CPWindow_Constants.j @@ -81,6 +81,7 @@ CPWindowMinYMargin = 8; CPWindowHeightSizable = 16; CPWindowMaxYMargin = 32; +@typedef CPWindowLevel CPBackgroundWindowLevel = -1; /* Default level for windows @@ -143,6 +144,7 @@ CPDraggingWindowLevel = 500; */ CPScreenSaverWindowLevel = 1000; +@typedef CPWindowOrderingMode /* The receiver is placed directly in front of the window specified. @global diff --git a/AppKit/CoreGraphics/CGAffineTransform.j b/AppKit/CoreGraphics/CGAffineTransform.j index b73f26f07..0cfb36bcf 100644 --- a/AppKit/CoreGraphics/CGAffineTransform.j +++ b/AppKit/CoreGraphics/CGAffineTransform.j @@ -22,6 +22,8 @@ @import "CGGeometry.j" +@typedef CGAffineTransform + function CGAffineTransformMake(a, b, c, d, tx, ty) { diff --git a/AppKit/CoreGraphics/CGColorSpace.j b/AppKit/CoreGraphics/CGColorSpace.j index 9502a0703..e5d7673e8 100644 --- a/AppKit/CoreGraphics/CGColorSpace.j +++ b/AppKit/CoreGraphics/CGColorSpace.j @@ -20,6 +20,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@typedef CGColorSpace + kCGColorSpaceModelUnknown = -1; kCGColorSpaceModelMonochrome = 0; kCGColorSpaceModelRGB = 1; diff --git a/AppKit/CoreGraphics/CGContext.j b/AppKit/CoreGraphics/CGContext.j index c0b43eabd..a00199586 100644 --- a/AppKit/CoreGraphics/CGContext.j +++ b/AppKit/CoreGraphics/CGContext.j @@ -25,6 +25,7 @@ @import "CGGeometry.j" @import "CGPath.j" +@typedef CGContext kCGLineCapButt = 0; kCGLineCapRound = 1; diff --git a/AppKit/CoreGraphics/CGGradient.j b/AppKit/CoreGraphics/CGGradient.j index 3681c086e..aea212219 100644 --- a/AppKit/CoreGraphics/CGGradient.j +++ b/AppKit/CoreGraphics/CGGradient.j @@ -23,6 +23,7 @@ @import "CGColor.j" @import "CGColorSpace.j" +@typedef CGGradient kCGGradientDrawsBeforeStartLocation = 1 << 0; kCGGradientDrawsAfterEndLocation = 1 << 1; diff --git a/AppKit/CoreGraphics/CGPath.j b/AppKit/CoreGraphics/CGPath.j index 45c5d9062..b7cea5164 100644 --- a/AppKit/CoreGraphics/CGPath.j +++ b/AppKit/CoreGraphics/CGPath.j @@ -23,6 +23,7 @@ @import "CGAffineTransform.j" @import "CGGeometry.j" +@typedef CGPath kCGPathElementMoveToPoint = 0; kCGPathElementAddLineToPoint = 1; @@ -629,4 +630,4 @@ function CGPathContainsPoint(aPath, aTransform, point, eoFill) /*! @} -*/ \ No newline at end of file +*/ diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index 628293117..3e2ff2817 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -27,9 +27,12 @@ @class CPMenu @class CPPlatformPasteboard +@class CPWindow @global CPApp +@typedef DOMWindow + var PrimaryPlatformWindow = NULL; @implementation CPPlatformWindow : CPObject diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 31b1810ef..eeba3a894 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1143,7 +1143,7 @@ var PreventScroll = true; _mouseDownIsRightClick = button == 2 || (CPBrowserIsOperatingSystem(CPMacOperatingSystem) && button == 0 && modifierFlags & CPControlKeyMask); - if (sourceElement.tagName === "INPUT" && sourceElement != _DOMFocusElement) + if ((sourceElement.tagName === "INPUT" || sourceElement.tagName === "TEXTAREA") && sourceElement != _DOMFocusElement) { if ([CPPlatform supportsDragAndDrop]) { diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 3cc69832c..4bac4681a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1258,6 +1258,19 @@ var themedButtonValues = nil, ["textfield-bezel-square-disabled-8.png", 6.0, 6.0] ]), + bezelFocusedColor = PatternColor( + [ + ["textfield-bezel-square-focused-0.png", 6.0, 6.0], + ["textfield-bezel-square-focused-1.png", 1.0, 6.0], + ["textfield-bezel-square-focused-2.png", 6.0, 6.0], + ["textfield-bezel-square-focused-3.png", 6.0, 1.0], + ["textfield-bezel-square-focused-4.png", 1.0, 1.0], + ["textfield-bezel-square-focused-5.png", 6.0, 1.0], + ["textfield-bezel-square-focused-6.png", 6.0, 6.0], + ["textfield-bezel-square-focused-7.png", 1.0, 6.0], + ["textfield-bezel-square-focused-8.png", 6.0, 6.0] + ]), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -1268,6 +1281,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], @@ -1275,8 +1289,10 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -1301,10 +1317,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 3.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -1313,10 +1331,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", 2.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], @@ -1820,8 +1840,8 @@ var themedButtonValues = nil, // 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, 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, 27.0, 7.0, 8.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index c669539b5..86a43e46f 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -374,7 +374,7 @@ var themedButtonValues = nil, [@"font", [CPFont boldSystemFontOfSize:11.0]], [@"min-size", CGSizeMake(32.0, 20.0), CPThemeStateControlSizeSmall], - [@"max-size", CGSizeMake(1.0, 20.0), CPThemeStateControlSizeSmall], + [@"max-size", CGSizeMake(-1.0, 20.0), CPThemeStateControlSizeSmall], [@"nib2cib-adjustment-frame", CGRectMake(3.0, 4.0, -6.0, 0.0), CPThemeStateControlSizeSmall], // CPThemeStateControlSizeMini @@ -386,7 +386,7 @@ var themedButtonValues = nil, [@"min-size", CGSizeMake(32.0, 16.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 16.0), CPThemeStateControlSizeMini], - [@"nib2cib-adjustment-frame", CGRectMake(1.0, 10.0, -3.0, 0.0), CPThemeStateControlSizeMini] + [@"nib2cib-adjustment-frame", CGRectMake(1.0, 10.0, -3.0, 0.0), CPThemeStateControlSizeMini] ]; [self registerThemeValues:themeValues forView:button]; @@ -824,6 +824,14 @@ var themedButtonValues = nil, height: 4.0 }), + bezelFocusedColor = PatternColor( + "textfield-bezel-square-focused{position}.png", + { + positions: "#", + width: 9.0, + height: 9.0 + }), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -835,14 +843,17 @@ var themedButtonValues = nil, [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.5], CPThemeStateDisabled], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 6.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(3.0, 0.0, 3.0, 0.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0, 0.0, -3.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -859,6 +870,7 @@ var themedButtonValues = nil, [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], [@"date-hour-margin", 7.0], [@"stepper-margin", 5.0], + [@"stepper-margin", 2.0, CPThemeStateEditing], [@"min-size", CGSizeMake(0, 29.0)], [@"max-size", CGSizeMake(-1.0, 29.0)], @@ -867,10 +879,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(2.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 0.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -879,10 +893,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(1.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", -1.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], @@ -1312,9 +1328,9 @@ var themedButtonValues = nil, [@"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), [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, 30.0, 7.0, 10.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], + [@"content-inset", CGInsetMake(9.0, 30.0, 7.0, 10.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(9.0, 28.0, 7.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], diff --git a/AppKit/_CPImageAndTextView.j b/AppKit/_CPImageAndTextView.j index 63b9d60b6..1a02755f5 100644 --- a/AppKit/_CPImageAndTextView.j +++ b/AppKit/_CPImageAndTextView.j @@ -71,7 +71,7 @@ var _CPimageAndTextViewFrameSizeChangedFlag = 1 << 0, #if PLATFORM(DOM) DOMElement _DOMImageElement; - DOMELement _DOMTextElement; + DOMElement _DOMTextElement; DOMElement _DOMTextShadowElement; #endif } diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index f69f68f0a..3dd357132 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -65,6 +65,113 @@ var ListMinimumItems = 3; var ListColumnIdentifier = @"1"; +@implementation _CPPopUpPanel : CPPanel + +- (id)initWithContentRect:(CGRect)aContentRect styleMask:(unsigned)aStyleMask +{ + if (self = [super initWithContentRect:aContentRect styleMask:aStyleMask]) + _constrainsToUsableScreen = NO; + + [self _trapNextMouseDown]; + + 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]; + + if (type === CPLeftMouseDown || type === CPRightMouseDown) + [[self delegate] setListWasClicked:YES]; + + return [super sendEvent:anEvent]; +} + +- (void)orderFront:(id)sender +{ + [self _trapNextMouseDown]; + [super orderFront:sender]; +} + +- (void)_mouseWasClicked:(CPEvent)anEvent +{ + var mouseWindow = [anEvent window], + rect = [[[self delegate] dataSource] bounds], + point = [[[self delegate] dataSource] convertPoint:[anEvent locationInWindow] fromView:nil]; + + if (mouseWindow != self && !CGRectContainsPoint(rect, point)) + [[self delegate] close]; + else + [self _trapNextMouseDown]; +} + +- (void)_trapNextMouseDown +{ + // Don't dequeue the event so clicks in controls will work + [CPApp setTarget:self selector:@selector(_mouseWasClicked:) forNextEventMatchingMask:CPLeftMouseDownMask untilDate:nil inMode:CPDefaultRunLoopMode dequeue:NO]; +} + +@end + +@implementation _CPPopUpTableView : CPTableView +{ + BOOL _acceptFirstResponder; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + if (self = [super initWithFrame:aFrame]) + { + // We want the autocomplete to remain first responder until we are clicked. + _acceptFirstResponder = NO; + } + + return self; +} + +- (void)trackMouse:(CPEvent)anEvent +{ + if (![self isEnabled]) + return; + + [[self delegate] setItemWasClicked:YES]; + + // CPTableView will not track the click if it is not first responder + _acceptFirstResponder = YES; + [[self window] makeFirstResponder:self]; + [super trackMouse:anEvent]; +} + +- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp +{ + _acceptFirstResponder = NO; + [super stopTracking:lastPoint at:aPoint mouseIsUp:mouseIsUp]; +} + +- (BOOL)acceptsFirstResponder +{ + return _acceptFirstResponder; +} + +/*! + Return the column used for the list. +*/ +- (CPTableColumn)listColumn +{ + return _tableColumns[0]; +} + +@end + /*! This class is a controller for a panel that can pop up and display a scrollable list of items in a CPTableView. It is used by CPComboBox to display the list of choices. @@ -229,7 +336,7 @@ var ListColumnIdentifier = @"1"; [self listWillPopUp]; - [_panel orderFront:nil]; + [[aView window] addChildWindow:_panel ordered:CPWindowAbove]; } #pragma mark Setting Display Attributes @@ -800,110 +907,3 @@ var _CPPopUpListDataSourceKey = @"_CPPopUpListDataSourceKey", } @end - -@implementation _CPPopUpTableView : CPTableView -{ - BOOL _acceptFirstResponder; -} - -- (id)initWithFrame:(CGRect)aFrame -{ - if (self = [super initWithFrame:aFrame]) - { - // We want the autocomplete to remain first responder until we are clicked. - _acceptFirstResponder = NO; - } - - return self; -} - -- (void)trackMouse:(CPEvent)anEvent -{ - if (![self isEnabled]) - return; - - [[self delegate] setItemWasClicked:YES]; - - // CPTableView will not track the click if it is not first responder - _acceptFirstResponder = YES; - [[self window] makeFirstResponder:self]; - [super trackMouse:anEvent]; -} - -- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp -{ - _acceptFirstResponder = NO; - [super stopTracking:lastPoint at:aPoint mouseIsUp:mouseIsUp]; -} - -- (BOOL)acceptsFirstResponder -{ - return _acceptFirstResponder; -} - -/*! - Return the column used for the list. -*/ -- (CPTableColumn)listColumn -{ - return _tableColumns[0]; -} - -@end - -@implementation _CPPopUpPanel : CPPanel - -- (id)initWithContentRect:(CGRect)aContentRect styleMask:(unsigned)aStyleMask -{ - if (self = [super initWithContentRect:aContentRect styleMask:aStyleMask]) - _constrainsToUsableScreen = NO; - - [self _trapNextMouseDown]; - - 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]; - - if (type === CPLeftMouseDown || type === CPRightMouseDown) - [[self delegate] setListWasClicked:YES]; - - return [super sendEvent:anEvent]; -} - -- (void)orderFront:(id)sender -{ - [self _trapNextMouseDown]; - [super orderFront:sender]; -} - -- (void)_mouseWasClicked:(CPEvent)anEvent -{ - var mouseWindow = [anEvent window], - rect = [[[self delegate] dataSource] bounds], - point = [[[self delegate] dataSource] convertPoint:[anEvent locationInWindow] fromView:nil]; - - if (mouseWindow != self && !CGRectContainsPoint(rect, point)) - [[self delegate] close]; - else - [self _trapNextMouseDown]; -} - -- (void)_trapNextMouseDown -{ - // Don't dequeue the event so clicks in controls will work - [CPApp setTarget:self selector:@selector(_mouseWasClicked:) forNextEventMatchingMask:CPLeftMouseDownMask untilDate:nil inMode:CPDefaultRunLoopMode dequeue:NO]; -} - -@end diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 818ae6d60..ce2a7898b 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -207,7 +207,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return; var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; - [self setFrameOrigin:point]; } } @@ -362,7 +361,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self setFrameOrigin:point]; [_windowView showCursor]; [_windowView setNeedsDisplay:YES]; - [self makeKeyAndOrderFront:nil]; if (positioningView !== _targetView) { @@ -371,6 +369,8 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } + [self makeKeyAndOrderFront:nil]; + /* If _targetView's window is not a full platform window, add us as a child, because when we close we are detached from diff --git a/AppKit/_CPToolbarItem.j b/AppKit/_CPToolbarItem.j index 5d5600b47..387805535 100644 --- a/AppKit/_CPToolbarItem.j +++ b/AppKit/_CPToolbarItem.j @@ -26,6 +26,7 @@ @import "CPImage.j" @import "CPView.j" +@class CPToolbar @global CPApp CPToolbarItemVisibilityPriorityStandard = 0; diff --git a/Foundation/CPDateFormatter.j b/Foundation/CPDateFormatter.j index 9f1badc65..59a48019d 100644 --- a/Foundation/CPDateFormatter.j +++ b/Foundation/CPDateFormatter.j @@ -28,16 +28,19 @@ @import "CPLocale.j" @class CPNull +@class CPDictionary @global CPLocaleLanguageCode @global CPLocaleCountryCode +@typedef CPDateFormatterStyle CPDateFormatterNoStyle = 0; CPDateFormatterShortStyle = 1; CPDateFormatterMediumStyle = 2; CPDateFormatterLongStyle = 3; CPDateFormatterFullStyle = 4; +@typedef CPDateFormatterBehavior CPDateFormatterBehaviorDefault = 0; CPDateFormatterBehavior10_0 = 1000; CPDateFormatterBehavior10_4 = 1040; diff --git a/Foundation/CPDecimal.j b/Foundation/CPDecimal.j index 15d2f817d..72fbe89cc 100644 --- a/Foundation/CPDecimal.j +++ b/Foundation/CPDecimal.j @@ -52,6 +52,8 @@ @import "CPArray.j" @import "CPNumber.j" +@typedef CPDecimal + // Decimal size limits CPDecimalMaxDigits = 38; CPDecimalMaxExponent = 127; @@ -68,6 +70,7 @@ CPCalculationUnderflow = 3; CPCalculationDivideByZero = 4; //CPRoundingMode Enum +@typedef CPRoundingMode CPRoundPlain = 1; CPRoundDown = 2; CPRoundUp = 3; diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index b95792f78..9c673be0c 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -31,38 +31,6 @@ var CPDictionaryShowNilDeprecationMessage = YES, CPDictionaryMaxDescriptionRecursion = 10; -/* @ignore */ -@implementation _CPDictionaryValueEnumerator : CPEnumerator -{ - CPEnumerator _keyEnumerator; - CPDictionary _dictionary; -} - -- (id)initWithDictionary:(CPDictionary)aDictionary -{ - self = [super init]; - - if (self) - { - _keyEnumerator = [aDictionary keyEnumerator]; - _dictionary = aDictionary; - } - - return self; -} - -- (id)nextObject -{ - var key = [_keyEnumerator nextObject]; - - if (key === nil) - return nil; - - return [_dictionary objectForKey:key]; -} - -@end - /*! @class CPDictionary @ingroup foundation @@ -801,6 +769,40 @@ var CPDictionaryShowNilDeprecationMessage = YES, @end + +/* @ignore */ +@implementation _CPDictionaryValueEnumerator : CPEnumerator +{ + CPEnumerator _keyEnumerator; + CPDictionary _dictionary; +} + +- (id)initWithDictionary:(CPDictionary)aDictionary +{ + self = [super init]; + + if (self) + { + _keyEnumerator = [aDictionary keyEnumerator]; + _dictionary = aDictionary; + } + + return self; +} + +- (id)nextObject +{ + var key = [_keyEnumerator nextObject]; + + if (key === nil) + return nil; + + return [_dictionary objectForKey:key]; +} + +@end + + /*! @class CPMutableDictionary @ingroup compatibility diff --git a/Foundation/CPGeometry.j b/Foundation/CPGeometry.j index 93a3a2b05..f8ef04a4c 100644 --- a/Foundation/CPGeometry.j +++ b/Foundation/CPGeometry.j @@ -22,6 +22,7 @@ @import "_CGGeometry.j" +@typedef CPRectEdge CPMinXEdge = 0; CPMinYEdge = 1; CPMaxXEdge = 2; diff --git a/Foundation/CPJSONPConnection.j b/Foundation/CPJSONPConnection.j index 0330cb223..374395784 100644 --- a/Foundation/CPJSONPConnection.j +++ b/Foundation/CPJSONPConnection.j @@ -23,6 +23,7 @@ @import "CPException.j" @import "CPObject.j" @import "CPRunLoop.j" +@import "CPURLRequest.j" CPJSONPConnectionCallbacks = {}; diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j index 99ab18183..f06c22b0a 100644 --- a/Foundation/CPNotificationCenter.j +++ b/Foundation/CPNotificationCenter.j @@ -27,6 +27,8 @@ @import "CPNull.j" @import "CPSet.j" +@class _CPNotificationRegistry + var CPNotificationDefaultCenter = nil; /*! @@ -68,7 +70,8 @@ var CPNotificationDefaultCenter = nil; _namedRegistries = @{}; _unnamedRegistry = [[_CPNotificationRegistry alloc] init]; } - return self; + + return self; } /*! @@ -81,9 +84,36 @@ var CPNotificationDefaultCenter = nil; */ - (void)addObserver:(id)anObserver selector:(SEL)aSelector name:(CPString)aNotificationName object:(id)anObject { - var registry, + var registry = [self _registryForNotificationName:aNotificationName], observer = [[_CPNotificationObserver alloc] initWithObserver:anObserver selector:aSelector]; + [registry addObserver:observer object:anObject]; +} + +/*! + Adds an entry to the receiver’s dispatch table with a block, and optional criteria: notification name and sender. + @param aNotificationName the name of the notification the observer wants to watch + @param anObject the object in the notification the observer wants to watch + @param queue is ignored for the moment + @param block the block to be executed when the notification is received. +*/ +- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(id)queue usingBlock:(Function)block +{ + var registry = [self _registryForNotificationName:aNotificationName], + observer = [[_CPNotificationObserver alloc] initWithBlock:block]; + + [registry addObserver:observer object:anObject]; + + return observer; +} + +/*! + @ignore +*/ +- (_CPNotificationRegistry)_registryForNotificationName:(CPString)aNotificationName +{ + var registry; + if (aNotificationName == nil) registry = _unnamedRegistry; else if (!(registry = [_namedRegistries objectForKey:aNotificationName])) @@ -92,7 +122,7 @@ var CPNotificationDefaultCenter = nil; [_namedRegistries setObject:registry forKey:aNotificationName]; } - [registry addObserver:observer object:anObject]; + return registry; } /*! @@ -233,7 +263,8 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ observersEnumerator = [observers objectEnumerator]; while ((observer = [observersEnumerator nextObject]) !== nil) - if ([observer observer] == anObserver) + if ([observer observer] == anObserver || + ([observer block] && [anObserver respondsToSelector:@selector(block)] && [observer block] == [anObserver block])) [observers removeObject:observer]; if (![observers count]) @@ -248,7 +279,8 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ observersEnumerator = [observers objectEnumerator]; while ((observer = [observersEnumerator nextObject]) !== nil) - if ([observer observer] == anObserver) + if ([observer observer] == anObserver || + ([observer block] && [anObserver respondsToSelector:@selector(block)] && [observer block] == [anObserver block])) [observers removeObject:observer]; if (![observers count]) @@ -312,8 +344,9 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ /* @ignore */ @implementation _CPNotificationObserver : CPObject { - id _observer; - SEL _selector; + id _observer; + Function _block; + SEL _selector; } - (id)initWithObserver:(id)anObserver selector:(SEL)aSelector @@ -327,13 +360,34 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ return self; } +- (id)initWithBlock:(Function)aBlock +{ + if (self) + { + _block = aBlock; + } + + return self; +} + - (id)observer { return _observer; } +- (id)block +{ + return _block; +} + - (void)postNotification:(CPNotification)aNotification { + if (_block) + { + _block(aNotification); + return; + } + [_observer performSelector:_selector withObject:aNotification]; } diff --git a/Foundation/CPNumberFormatter.j b/Foundation/CPNumberFormatter.j index f59dca490..52737fc1c 100644 --- a/Foundation/CPNumberFormatter.j +++ b/Foundation/CPNumberFormatter.j @@ -24,7 +24,7 @@ @import "CPFormatter.j" @import "CPDecimalNumber.j" - +@typedef CPNumberFormatterStyle CPNumberFormatterNoStyle = 0; CPNumberFormatterDecimalStyle = 1; CPNumberFormatterCurrencyStyle = 2; @@ -32,6 +32,7 @@ CPNumberFormatterPercentStyle = 3; CPNumberFormatterScientificStyle = 4; CPNumberFormatterSpellOutStyle = 5; +@typedef CPNumberFormatterRoundingMode CPNumberFormatterRoundCeiling = CPRoundUp; CPNumberFormatterRoundFloor = CPRoundDown; CPNumberFormatterRoundDown = CPRoundDown; diff --git a/Foundation/CPObject.j b/Foundation/CPObject.j index 912aafa09..f5aea7aa6 100644 --- a/Foundation/CPObject.j +++ b/Foundation/CPObject.j @@ -62,6 +62,8 @@ CPLog(@"Got some class: %@", inst); @todo document KVC usage. */ +@import "_CPTypeDefinitions.j" + @class CPString @class CPException @@ -104,7 +106,7 @@ CPLog(@"Got some class: %@", inst); @implementation CPObject { - Class isa; + id isa; } + (void)load diff --git a/Foundation/CPPredicate/CPComparisonPredicate.j b/Foundation/CPPredicate/CPComparisonPredicate.j index f2cfb3172..338a4e7f3 100644 --- a/Foundation/CPPredicate/CPComparisonPredicate.j +++ b/Foundation/CPPredicate/CPComparisonPredicate.j @@ -32,8 +32,8 @@ @import "_CPPredicate.j" -var CPComparisonPredicateModifier, - CPPredicateOperatorType; +@typedef CPComparisonPredicateModifier +@typedef CPPredicateOperatorType /*! @ingroup foundation diff --git a/Foundation/CPPredicate/CPCompoundPredicate.j b/Foundation/CPPredicate/CPCompoundPredicate.j index e36ceb0d0..a38f3b065 100644 --- a/Foundation/CPPredicate/CPCompoundPredicate.j +++ b/Foundation/CPPredicate/CPCompoundPredicate.j @@ -26,7 +26,7 @@ @import "CPArray.j" @import "_CPPredicate.j" -var CPCompoundPredicateType; +@typedef CPCompoundPredicateType /*! @class CPCompoundPredicate diff --git a/Foundation/CPRange.j b/Foundation/CPRange.j index c9f9c7c2a..58dd550bc 100755 --- a/Foundation/CPRange.j +++ b/Foundation/CPRange.j @@ -25,6 +25,8 @@ @{ */ +@typedef CPRange + /*! Makes a CPRange. @param location the location for new range diff --git a/Foundation/CPTimeZone.j b/Foundation/CPTimeZone.j index 3d294c25f..4b4ba6c1b 100644 --- a/Foundation/CPTimeZone.j +++ b/Foundation/CPTimeZone.j @@ -24,6 +24,8 @@ @import "CPDate.j" @import "CPLocale.j" +@class CPData + CPTimeZoneNameStyleStandard = 0; CPTimeZoneNameStyleShortStandard = 1; CPTimeZoneNameStyleDaylightSaving = 2; diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index 420ce8402..88a1afbf8 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -26,6 +26,8 @@ @import "CPURLRequest.j" @import "CPURLResponse.j" +@typedef HTTPRequest + var CPURLConnectionDelegate = nil; /*! diff --git a/Foundation/CPUndoManager.j b/Foundation/CPUndoManager.j index af2111170..d4ad4914e 100644 --- a/Foundation/CPUndoManager.j +++ b/Foundation/CPUndoManager.j @@ -50,7 +50,7 @@ var _CPUndoGroupingPool = [], /* @ignore */ @implementation _CPUndoGrouping : CPObject { - _CPUndoGrouping _parent; + id _parent; CPMutableArray _invocations; CPString _actionName; } diff --git a/Foundation/CPUserSessionManager.j b/Foundation/CPUserSessionManager.j index b1cbd23cb..523a65e19 100644 --- a/Foundation/CPUserSessionManager.j +++ b/Foundation/CPUserSessionManager.j @@ -24,6 +24,7 @@ @import "CPObject.j" @import "CPString.j" +@typedef CPUserSessionStatus CPUserSessionUndeterminedStatus = 0; CPUserSessionLoggedInStatus = 1; CPUserSessionLoggedOutStatus = 2; diff --git a/Foundation/_CGGeometry.j b/Foundation/_CGGeometry.j index 4861ce8fd..d0482aa71 100644 --- a/Foundation/_CGGeometry.j +++ b/Foundation/_CGGeometry.j @@ -26,6 +26,12 @@ CGGeometry is not a part of Foundation. The reason _CGGeometry.j exists, and is */ +@typedef CGPoint +@typedef CGSize +@typedef CGRect +@typedef CGInset + + function CGPointMake(x, y) { return { x:x, y:y }; diff --git a/Foundation/_CPTypeDefinitions.j b/Foundation/_CPTypeDefinitions.j new file mode 100644 index 000000000..7aa874fe1 --- /dev/null +++ b/Foundation/_CPTypeDefinitions.j @@ -0,0 +1,30 @@ +/* + * _CPTypeDefintions.j + * Foundation + * + * Created by Antoine Mercadal. + * Copyright 2014, Antoine Mercadal. + * + * 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 + */ + +@typedef Class +@typedef CPInteger +@typedef CPUInteger +@typedef DOMElement +@typedef JSObject +@typedef CPMethodSignature +@typedef CPPropertyListFormat +@typedef CPTimeInterval diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index cf5504a3f..9dbf5ebd9 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -68,6 +68,8 @@ with (window) // runs the objj repl or file provided in args exports.run = function(args) { + var multipleFiles = false; + if (args) { // we expect args to be in the format: @@ -79,27 +81,82 @@ exports.run = function(args) // copy the args since we're going to modify them var argv = args.slice(1); - if (argv[0] === "--version") + if (argv[0] === "--version" || argv[0] === "-v") { print(exports.fullVersionString()); return; } - while (argv.length && argv[0].indexOf('-I') === 0) - OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().substr(2).split(':')); + if (argv[0] === "--help" || argv[0] === "-h") + { + print("Usage (objj): " + args[0] + " [options] [--] files..."); + print(" -v, --version print the current version of objj"); + print(" -I, --objj-include-paths include a specific framework paths") + print(" -h, --help print this help"); + print(" -m, --multifiles launch objj on several files") + return; + } + + while (argv.length && argv[0].indexOf('-') === 0) + { + switch (argv[0]) + { + case "-I": + argv.shift(); + OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().split(":")); + break; + + case "-m": + argv.shift(); + multipleFiles = true; + break + } + } } if (argv && argv.length > 0) { - var arg0 = argv.shift(); - var mainFilePath = FILE.canonical(arg0); + var endCommand = false; - exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + while (argv.length > 0) + { + var arg0 = argv.shift(); + var mainFilePath = FILE.canonical(arg0); - if (typeof main === "function") - main([arg0].concat(argv)); + if (multipleFiles) + { + // This is needed to process every files passed in args + // Otherwise it would stop when an error is raised or we would like to objj the other given files + try + { + exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + } + catch(e) + { + print("\n" + e); + } + } + else + { + exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + } - require("browser/timeout").serviceTimeouts(); + if (typeof main === "function") + { + main([arg0].concat(argv)); + endCommand = true; + } + + require("browser/timeout").serviceTimeouts(); + + if (!multipleFiles || endCommand) + break; + + ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); + ObjectiveJ.StaticResource.resetRootResources(); + ObjectiveJ.FileExecutable.resetFileExecutables(); + objj_resetRegisterClasses(); + } } else { diff --git a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js index a31c5d781..e71b9129f 100644 --- a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js +++ b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js @@ -35,7 +35,12 @@ function BundleTask(aName, anApplication) { Task.apply(this, arguments); - this.setEnvironments([environment.Browser, environment.CommonJS]); + var ignoreCommonJS = system.env["CAPP_IGNORE_COMMONJS_ENV"]; + + if (ignoreCommonJS && ignoreCommonJS.toLowerCase() == "no" || ignoreCommonJS == "1") + this.setEnvironments([environment.Browser]); + else + this.setEnvironments([environment.Browser, environment.CommonJS]); this._author = null; this._email = null; diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index 08b231ebe..79646a0e6 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -353,6 +353,11 @@ ProtocolDef.prototype.getClassMethod = function(name) { return null; } +var TypeDef = function(name) +{ + this.name = name; +} + // methodDef = {"types": types, "name": selector} var MethodDef = function(name, types) { @@ -369,7 +374,7 @@ var wordPrefixOperators = exports.acorn.makePredicate("delete in instanceof new var isLogicalBinary = exports.acorn.makePredicate("LogicalExpression BinaryExpression"); var isInInstanceof = exports.acorn.makePredicate("in instanceof"); -var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags, /*unsigned*/ pass, /* Dictionary */ classDefs, /* Dictionary */ protocolDefs) +var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags, /*unsigned*/ pass, /* Dictionary */ classDefs, /* Dictionary */ protocolDefs, /* Dictionary */ typeDefs) { this.source = aString; this.URL = new CFURL(aURL); @@ -399,6 +404,7 @@ var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned* this.flags = flags | ObjJAcornCompiler.Flags.IncludeDebugSymbols; this.classDefs = classDefs ? classDefs : Object.create(null); this.protocolDefs = protocolDefs ? protocolDefs : Object.create(null); + this.typeDefs = typeDefs ? typeDefs : Object.create(null); this.lastPos = 0; if (currentCompilerFlags & ObjJAcornCompiler.Flags.Generate) this.generate = true; @@ -415,9 +421,9 @@ exports.ObjJAcornCompiler.compileToExecutable = function(/*String*/ aString, /*C return new ObjJAcornCompiler(aString, aURL, flags, 2).executable(); } -exports.ObjJAcornCompiler.compileToIMBuffer = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags, classDefs, protocolDefs) +exports.ObjJAcornCompiler.compileToIMBuffer = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags, classDefs, protocolDefs, typeDefs) { - return new ObjJAcornCompiler(aString, aURL, flags, 2, classDefs, protocolDefs).IMBuffer(); + return new ObjJAcornCompiler(aString, aURL, flags, 2, classDefs, protocolDefs, typeDefs).IMBuffer(); } exports.ObjJAcornCompiler.compileFileDependencies = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags) @@ -581,6 +587,31 @@ ObjJAcornCompiler.prototype.getProtocolDef = function(/* String */ aProtocolName // protocolDef = {"name": protocolName, "protocols": Object.create(null), "required": Object.create(null), "optional": Object.create(null)}; } +ObjJAcornCompiler.prototype.getTypeDef = function(/* String */ aTypeDefName) +{ + if (!aTypeDefName) + return null; + + var t = this.typeDefs[aTypeDefName]; + + if (t) + return t; + + if (typeof objj_getTypeDef === 'function') + { + var aTypeDef = objj_getTypeDef(aTypeDefName); + if (aTypeDef) + { + var typeDefName = typeDef_getName(aTypeDef) + t = new TypeDef(typeDefName); + this.typeDefs[typeDefName] = t; + return t; + } + } + + return null; +} + ObjJAcornCompiler.methodDefsFromMethodList = function(/* Array */ methodList) { var methodSize = methodList.length, @@ -1643,6 +1674,9 @@ ClassDeclarationStatement: function(node, st, c) { compiler.cmBuffer = new StringBuffer(); compiler.classBodyBuffer = new StringBuffer(); // TODO: Check if this is needed + if (compiler.getTypeDef(className)) + throw compiler.error_message(className + " is already declared as a type", node.classname); + if (!generate) saveJSBuffer.concat(compiler.source.substring(compiler.lastPos, node.start)); // First we declare the class @@ -1715,12 +1749,19 @@ ClassDeclarationStatement: function(node, st, c) { { var ivarDecl = node.ivardeclarations[i], ivarType = ivarDecl.ivartype ? ivarDecl.ivartype.name : null, + ivarTypeIsClass = ivarDecl.ivartype ? ivarDecl.ivartype.typeisclass : false, ivarName = ivarDecl.id.name, ivar = {"type": ivarType, "name": ivarName}, accessors = ivarDecl.accessors; if (ivars[ivarName]) - throw compiler.error_message("Instance variable '" + ivarName + "'is already declared for class " + className, ivarDecl.id); + throw compiler.error_message("Instance variable '" + ivarName + "' is already declared for class " + className, ivarDecl.id); + + var isTypeDefined = !ivarTypeIsClass || typeof global[ivarType] !== "undefined" || typeof window[ivarType] !== "undefined" + || compiler.getClassDef(ivarType) || compiler.getTypeDef(ivarType) || ivarType == classDef.name; + + if (!isTypeDefined) + compiler.addWarning(createMessage("Unknown type '" + ivarType + "' for ivar '" + ivarName + "'", ivarDecl.id, compiler.source)); if (firstIvarDeclaration) { @@ -1824,7 +1865,7 @@ ClassDeclarationStatement: function(node, st, c) { // Remove all @accessors or we will get a recursive loop in infinity var b = getterSetterBuffer.toString().replace(/@accessors(\(.*\))?/g, ""); - var imBuffer = ObjJAcornCompiler.compileToIMBuffer(b, "Accessors", compiler.flags, compiler.classDefs, compiler.protocolDefs); + var imBuffer = ObjJAcornCompiler.compileToIMBuffer(b, "Accessors", compiler.flags, compiler.classDefs, compiler.protocolDefs, compiler.typeDefs); // Add the accessors methods first to instance method buffer. // This will allow manually added set and get methods to override the compiler generated @@ -2371,6 +2412,10 @@ ClassStatement: function(node, st, c) { compiler.jsBuffer.concat("//"); } var className = node.id.name; + + if (compiler.getTypeDef(className)) + throw compiler.error_message(className + " is already declared as a type", node.id); + if (!compiler.getClassDef(className)) { classDef = new ClassDef(false, className); compiler.classDefs[className] = classDef; @@ -2393,5 +2438,42 @@ PreprocessStatement: function(node, st, c) { compiler.lastPos = node.start; compiler.jsBuffer.concat("//"); } +}, +TypeDefStatement: function(node, st, c) { + + var compiler = st.compiler, + generate = compiler.generate, + buffer = compiler.jsBuffer, + typeDefName = node.typedefname.name, + typeDef = compiler.getTypeDef(typeDefName), + typeDefScope = new Scope(st); + + if (typeDef) + throw compiler.error_message("Duplicate type definition " + typeDefName, node.typedefname); + + if (compiler.getClassDef(typeDefName)) + throw compiler.error_message(typeDefName + " is already declared as class", node.typedefname); + + compiler.imBuffer = new StringBuffer(); + compiler.cmBuffer = new StringBuffer(); + + if (!generate) + buffer.concat(compiler.source.substring(compiler.lastPos, node.start)); + + buffer.concat("{var the_typedef = objj_allocateTypeDef(\"" + typeDefName + "\");"); + + typeDef = new TypeDef(typeDefName); + compiler.typeDefs[typeDefName] = typeDef; + typeDefScope.typeDef = typeDef; + + buffer.concat("\nobjj_registerTypeDef(the_typedef);\n"); + + buffer.concat("}"); + + compiler.jsBuffer = buffer; + + // Skip the "@end" + if (!generate) + compiler.lastPos = node.end; } }); diff --git a/Objective-J/OldBrowserCompatibility.js b/Objective-J/OldBrowserCompatibility.js index 0086388ff..cd3d30517 100644 --- a/Objective-J/OldBrowserCompatibility.js +++ b/Objective-J/OldBrowserCompatibility.js @@ -37,7 +37,7 @@ if (!Object.create) // This is for IE8 support. It doesn't have the Object.keys function. if (!Object.keys) { - Object.keys = (function () + Object.keys = (function() { var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), diff --git a/Objective-J/Runtime.js b/Objective-J/Runtime.js index 75a43bf78..e352cf3e1 100644 --- a/Objective-J/Runtime.js +++ b/Objective-J/Runtime.js @@ -100,6 +100,11 @@ GLOBAL(objj_object) = function() this._UID = -1; } +GLOBAL(objj_typeDef) = function(/*String*/ aName) +{ + this.name = aName; +} + // Working with Classes GLOBAL(class_getName) = function(/*Class*/ aClass) @@ -440,6 +445,26 @@ GLOBAL(protocol_addProtocol) = function(/*Protocol*/ proto, /*Protocol*/ additio (proto.protocol_list || (proto.protocol_list = [])).push(addition); } + +var REGISTERED_TYPEDEFS = Object.create(null); + +GLOBAL(objj_allocateTypeDef) = function(/*String*/ aName) +{ + var typeDef = new objj_typeDef(aName); + + return typeDef; +} + +GLOBAL(objj_registerTypeDef) = function(/*TypeDef*/ typeDef) +{ + REGISTERED_TYPEDEFS[typeDef.name] = typeDef; +} + +GLOBAL(typeDef_getName) = function(/*TypeDef*/ typeDef) +{ + return typeDef.name; +} + var _class_initialize = function(/*Class*/ aClass) { var meta = GETMETA(aClass); @@ -619,6 +644,7 @@ GLOBAL(objj_resetRegisterClasses) = function() REGISTERED_CLASSES = Object.create(null); REGISTERED_PROTOCOLS = Object.create(null); + REGISTERED_TYPEDEFS = Object.create(null); resetBundle(); } @@ -751,6 +777,13 @@ GLOBAL(objj_getProtocol) = function(/*String*/ aName) return REGISTERED_PROTOCOLS[aName]; } +// Working with typeDef + +GLOBAL(objj_getTypeDef) = function(/*String*/ aName) +{ + return REGISTERED_TYPEDEFS[aName]; +} + // Working with Instance Variables GLOBAL(ivar_getName) = function(anIvar) diff --git a/Objective-J/acorn.js b/Objective-J/acorn.js index f12994057..594111ee0 100644 --- a/Objective-J/acorn.js +++ b/Objective-J/acorn.js @@ -375,12 +375,15 @@ if (typeof exports != "undefined" && !exports.acorn) { var _ref = {keyword: "ref"}, _deref = {keyword: "deref"}; var _protocol = {keyword: "protocol"}, _optional = {keyword: "optional"}, _required = {keyword: "required"}; var _interface = {keyword: "interface"}; + var _typedef = {keyword: "typedef"}; // Objective-J keywords var _filename = {keyword: "filename"}, _unsigned = {keyword: "unsigned", okAsIdent: true}, _signed = {keyword: "signed", okAsIdent: true}; var _byte = {keyword: "byte", okAsIdent: true}, _char = {keyword: "char", okAsIdent: true}, _short = {keyword: "short", okAsIdent: true}; var _int = {keyword: "int", okAsIdent: true}, _long = {keyword: "long", okAsIdent: true}, _id = {keyword: "id", okAsIdent: true}; + var _boolean = {keyword: "BOOL", okAsIdent: true}, _SEL = {keyword: "SEL", okAsIdent: true}, _float = {keyword: "float", okAsIdent: true}; + var _double = {keyword: "double", okAsIdent: true}; var _preprocess = {keyword: "#"}; // Preprocessor keywords @@ -415,14 +418,15 @@ if (typeof exports != "undefined" && !exports.acorn) { // Map Objective-J keyword names to token types. var keywordTypesObjJ = {"IBAction": _action, "IBOutlet": _outlet, "unsigned": _unsigned, "signed": _signed, "byte": _byte, "char": _char, - "short": _short, "int": _int, "long": _long, "id": _id }; + "short": _short, "int": _int, "long": _long, "id": _id, "float": _float, "BOOL": _boolean, "SEL": _SEL, + "double": _double}; // Map Objective-J "@" keyword names to token types. var objJAtKeywordTypes = {"implementation": _implementation, "outlet": _outlet, "accessors": _accessors, "end": _end, "import": _import, "action": _action, "selector": _selector, "class": _class, "global": _global, "ref": _ref, "deref": _deref, "protocol": _protocol, "optional": _optional, "required": _required, - "interface": _interface}; + "interface": _interface, "typedef": _typedef}; // Map Preprocessor keyword names to token types. @@ -547,7 +551,7 @@ if (typeof exports != "undefined" && !exports.acorn) { // The Objective-J keywords. - var isKeywordObjJ = makePredicate("IBAction IBOutlet byte char short int long unsigned signed id"); + var isKeywordObjJ = makePredicate("IBAction IBOutlet byte char short int long float unsigned signed id BOOL SEL double"); // The preprocessor keywords. @@ -662,6 +666,7 @@ var preprocessTokens = [_preIf, _preIfdef, _preIfndef, _preElse, _preElseIf, _pr } } } + tokVal = val; lastTokCommentsAfter = tokCommentsAfter; lastTokSpacesAfter = tokSpacesAfter; @@ -2277,6 +2282,15 @@ var preIfLevel = 0; } break; + // This is a Objective-J statement + case _typedef: + if (options.objj) { + next(); + node.typedefname = parseIdent(true); + return finishNode(node, "TypeDefStatement"); + } + break; + } // The indentation is one step to the right here to make sure it @@ -2317,6 +2331,7 @@ var preIfLevel = 0; if (outlet) decl.outlet = outlet; decl.ivartype = type; + // print("keyword: " + type.name + " is class " + type.typeisclass) decl.id = parseIdent(); if (strict && isStrictBadIdWord(decl.id.name)) raise(decl.id.start, "Binding " + decl.id.name + " in strict mode"); @@ -3021,6 +3036,7 @@ var preIfLevel = 0; node.typeisclass = true; next(); } else { + node.typeisclass = false; node.name = tokType.keyword; // Do nothing more if it is 'void' if (!eat(_void)) { @@ -3043,32 +3059,36 @@ var preIfLevel = 0; } else { // Now check if it is some basic type or an approved combination of basic types var nextKeyWord; - if (eat(_signed) || eat(_unsigned)) - nextKeyWord = tokType.keyword || true; - if (eat(_char) || eat(_byte) || eat(_short)) { - if (nextKeyWord) - node.name += " " + nextKeyWord; - nextKeyWord = tokType.keyword || true; - } else { - if (eat(_int)) { - if (nextKeyWord) - node.name += " " + nextKeyWord; - nextKeyWord = tokType.keyword || true; - } - if (eat(_long)) { - if (nextKeyWord) - node.name += " " + nextKeyWord; - nextKeyWord = tokType.keyword || true; - if (eat(_long)) { - node.name += " " + nextKeyWord; - } - } - } - if (!nextKeyWord) { - // It must be a class name if it was not a basic type. // FIXME: This is not true - node.name = (!options.forbidReserved && tokType.keyword) || unexpected(); - node.typeisclass = true; - next(); + if (eat(_float) || eat(_boolean) || eat(_SEL) || eat(_double)) + nextKeyWord = tokType.keyword; + else { + if (eat(_signed) || eat(_unsigned)) + nextKeyWord = tokType.keyword || true; + if (eat(_char) || eat(_byte) || eat(_short)) { + if (nextKeyWord) + node.name += " " + nextKeyWord; + nextKeyWord = tokType.keyword || true; + } else { + if (eat(_int)) { + if (nextKeyWord) + node.name += " " + nextKeyWord; + nextKeyWord = tokType.keyword || true; + } + if (eat(_long)) { + if (nextKeyWord) + node.name += " " + nextKeyWord; + nextKeyWord = tokType.keyword || true; + if (eat(_long)) { + node.name += " " + nextKeyWord; + } + } + } + if (!nextKeyWord) { + // It must be a class name if it was not a basic type. // FIXME: This is not true + node.name = (!options.forbidReserved && tokType.keyword) || unexpected(); + node.typeisclass = true; + next(); + } } } } diff --git a/Objective-J/acornwalk.js b/Objective-J/acornwalk.js index 87753e3f4..8d5666529 100644 --- a/Objective-J/acornwalk.js +++ b/Objective-J/acornwalk.js @@ -221,6 +221,8 @@ if (!exports.acorn) { } } + exports.TypeDefStatement = ignore; + exports.MethodDeclarationStatement = function(node, st, c) { var body = node.body; if (body) diff --git a/Objective-J/json2.js b/Objective-J/json2.js index 8ba599eed..0252d58bf 100644 --- a/Objective-J/json2.js +++ b/Objective-J/json2.js @@ -161,7 +161,7 @@ if (!this.JSON) { JSON = {}; } -(function () { +(function() { function f(n) { // Format integers to have at least two digits. diff --git a/README.markdown b/README.markdown index b5a13beaa..ed87b834d 100644 --- a/README.markdown +++ b/README.markdown @@ -33,7 +33,7 @@ Getting Started --------------- To get started, download and install the current release version of Cappuccino: - $ curl https://raw.github.com/cappuccino/cappuccino/v0.9.7/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh + $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/v0.9.7-1/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh If you'd just like to get started using Cappuccino for your web apps, you are done. diff --git a/Tests/AppKit/CPArrayControllerTest.j b/Tests/AppKit/CPArrayControllerTest.j index 3365cfdcf..35b8e3388 100644 --- a/Tests/AppKit/CPArrayControllerTest.j +++ b/Tests/AppKit/CPArrayControllerTest.j @@ -3,6 +3,9 @@ @import @import +@class Department +@class Employee + @implementation CPArrayControllerTest : OJTestCase { CPArrayController _arrayController @accessors(property=arrayController); diff --git a/Tests/AppKit/CPBrowserTest.j b/Tests/AppKit/CPBrowserTest.j index 420dfb279..bc29049bb 100644 --- a/Tests/AppKit/CPBrowserTest.j +++ b/Tests/AppKit/CPBrowserTest.j @@ -1,5 +1,8 @@ @import +@class CPBrowserDelegate + + @implementation CPBrowserTest : OJTestCase { CPBrowser browser; diff --git a/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j b/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j index d9c0e06d1..d1bb9af84 100644 --- a/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j +++ b/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j @@ -1,6 +1,8 @@ @import +@class Track + /*! Bindings tests exercising the functionality seen in the Cocoa example "SimpleBindingsAdoption". */ diff --git a/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j b/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j index e60c456db..5757c368d 100644 --- a/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j +++ b/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j @@ -1,5 +1,7 @@ var CPMenuValidatedUserInterfaceItemTestValidatedItems = []; +@class MenuTarget + @implementation CPMenuValidatedUserInterfaceItemTest : OJTestCase { CPMenu _menu @accessors(property=menu); @@ -83,4 +85,4 @@ var CPMenuValidatedUserInterfaceItemTestValidatedItems = []; } -@end \ No newline at end of file +@end diff --git a/Tests/AppKit/CPOutlineViewTest.j b/Tests/AppKit/CPOutlineViewTest.j index 65219ea41..129c6965b 100644 --- a/Tests/AppKit/CPOutlineViewTest.j +++ b/Tests/AppKit/CPOutlineViewTest.j @@ -1,5 +1,8 @@ @import +@class TestOutlineDataSource + + @implementation CPOutlineViewTest : OJTestCase { CPOutlineView outlineView; diff --git a/Tests/AppKit/CPTokenFieldTest.j b/Tests/AppKit/CPTokenFieldTest.j index 6c8320eeb..cd65113ad 100644 --- a/Tests/AppKit/CPTokenFieldTest.j +++ b/Tests/AppKit/CPTokenFieldTest.j @@ -1,5 +1,7 @@ @import +@class TestDelegateTokenField + [CPApplication sharedApplication]; @implementation CPTokenFieldTest : OJTestCase diff --git a/Tests/Foundation/CPKVCArrayTest.j b/Tests/Foundation/CPKVCArrayTest.j index 12e5edd52..6948d4177 100644 --- a/Tests/Foundation/CPKVCArrayTest.j +++ b/Tests/Foundation/CPKVCArrayTest.j @@ -1,5 +1,8 @@ var COUNTER; +@class TestObject +@class ImplementedTestObject + @implementation CPKVCArrayTest : OJTestCase { TestObject _object @accessors(property=object); diff --git a/Tests/Foundation/CPKVOTest.j b/Tests/Foundation/CPKVOTest.j index 1fa905abd..631e2ac80 100644 --- a/Tests/Foundation/CPKVOTest.j +++ b/Tests/Foundation/CPKVOTest.j @@ -1,6 +1,9 @@ @import @import +@class CarTester +@class ToManyTester + @implementation CPKVOTest : OJTestCase { BOOL _sawInitialObservation; diff --git a/Tests/Foundation/CPKeyValueCodingTest.j b/Tests/Foundation/CPKeyValueCodingTest.j index ac57d9f02..ccf560401 100644 --- a/Tests/Foundation/CPKeyValueCodingTest.j +++ b/Tests/Foundation/CPKeyValueCodingTest.j @@ -22,6 +22,9 @@ @import +@class Department2 +@class Employee2 + var accessIVARS = YES; @implementation KVCTestClass : CPObject diff --git a/Tests/Foundation/CPNotificationCenterTest.j b/Tests/Foundation/CPNotificationCenterTest.j index b1f3b8bf5..47aab1e0f 100644 --- a/Tests/Foundation/CPNotificationCenterTest.j +++ b/Tests/Foundation/CPNotificationCenterTest.j @@ -52,6 +52,51 @@ var TestNotification = @"TestNotification"; [self assert:8 equals:notificationCount message:@"observer should not be notified"]; } +- (void)testNotifyWithBlocks +{ + var center = [CPNotificationCenter defaultCenter]; + + notificationCount = 0; + + var notificationBlock = function(notification){ + notificationCount += 1; + }; + + var observer2 = [center addObserverForName:TestNotification object:2 queue:nil usingBlock:notificationBlock], + observer25 = [center addObserverForName:TestNotification object:25 queue:nil usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:self]; + [self assert:0 equals:notificationCount message:@"observer should only be notified for object '2'"]; + + [center postNotificationName:TestNotification object:2]; + [self assert:1 equals:notificationCount message:@"observer should be notified for object '2'"]; + + var observerNil = [center addObserverForName:TestNotification object:nil queue:nil usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:2]; + [self assert:3 equals:notificationCount message:@"observer should be notified for object '2' and for any object"]; + + [center removeObserver:observer2 name:TestNotification object:2]; + [center postNotificationName:TestNotification object:2]; + [self assert:4 equals:notificationCount message:@"observer should be notified only for any object"]; + + // At this point we have TestNofication:nil observer and a TestNotification:25 observer. + observer2 = [center addObserverForName:nil object:2 queue:nil usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:2]; + [self assert:6 equals:notificationCount message:@"observer should be notified for TestNofication and for object '2' (TestNotification)"]; + [center postNotificationName:@"RandomNotification" object:2]; + [self assert:7 equals:notificationCount message:@"observer should be notified for object '2' (RandomNotification)"]; + + [center removeObserver:observer2]; + [center removeObserver:observer25]; + [center removeObserver:observerNil]; + [center postNotificationName:TestNotification object:nil]; + [center postNotificationName:TestNotification object:2]; + [center postNotificationName:TestNotification object:25]; + [self assert:7 equals:notificationCount message:@"observer should not be notified"]; +} + - (void)testAddObserversDuringNotification { var center = [CPNotificationCenter defaultCenter]; diff --git a/Tests/Manual/AttachedSheet2/SheetWindowController.j b/Tests/Manual/AttachedSheet2/SheetWindowController.j index 096beec68..41866b38f 100644 --- a/Tests/Manual/AttachedSheet2/SheetWindowController.j +++ b/Tests/Manual/AttachedSheet2/SheetWindowController.j @@ -399,9 +399,6 @@ _returnCode = 77; [CPApp endSheet:[self window] returnCode:_returnCode]; - - if (orderOutAfter) - [[self window] orderOut:nil]; } // @@ -519,7 +516,15 @@ // test sheet chaining. it should be possible to start another sheet from didEndSheet, // but only if we orderOut: the sheet before we called endSheet: This is how cocoa works too. if (returnCode == 77) + { + var orderOutAfter = [_orderOutAfterCheckbox state]; + + if (orderOutAfter) + [[self window] orderOut:self]; + [self runSheetForWindow:parentWindow]; + } + //[self runAlertSheet:parentWindow]; } diff --git a/Tests/Manual/CPTextFieldMultiline/AppController.j b/Tests/Manual/CPTextFieldMultiline/AppController.j new file mode 100644 index 000000000..db6ef8162 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/AppController.j @@ -0,0 +1,46 @@ +/* + * AppController.j + * CPTextFielMultine + * + * Created by You on November 12, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPTextField field1; + @outlet CPTextField field2; + @outlet CPTextField field3; + @outlet CPWindow theWindow; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var s = [field1 frameSize]; + s.height = 83; + [field1 setFrameSize:s] + + var s = [field2 frameSize]; + s.height = 83; + [field2 setFrameSize:s] + + var s = [field3 frameSize]; + s.height = 83; + [field3 setFrameSize:s] +} + +- (void)awakeFromCib +{ + [theWindow setFullPlatformWindow:YES]; +} + +- (IBAction)actionSent:(id)aSender +{ + CPLog.debug("action sent from " + aSender); +} + +@end diff --git a/Tests/Manual/CPTextFieldMultiline/Info.plist b/Tests/Manual/CPTextFieldMultiline/Info.plist new file mode 100644 index 000000000..4e6a94074 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPTextFieldMultiline + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPTextFieldMultiline/Jakefile b/Tests/Manual/CPTextFieldMultiline/Jakefile new file mode 100644 index 000000000..6d39494ac --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPTextFielMultine + * + * Created by You on November 12, 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 = "CPTextFielMultine"; + +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", "CPTextFielMultine.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPTextFielMultine"); + task.setIdentifier("com.yourcompany.CPTextFielMultine"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPTextFielMultine"); + 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, "CPTextFielMultine.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPTextFielMultine.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/CPTextFieldMultiline/Resources/MainMenu.cib b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib new file mode 100644 index 000000000..9affdf898 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib @@ -0,0 +1,3 @@ +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;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;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;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;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;82E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;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;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;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;3;160E;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;166E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;1;0E;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;170E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;1;0E;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;1;0E;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;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;1;0E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;1;0E;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;3;198E;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;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;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;84E;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;84E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;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;3;114E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;103E;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;2;84E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;205E;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;206E;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;159E;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;159E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;207E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;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;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;194E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;209E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;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;188E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;211E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;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;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;166E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;213E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;214E;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;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;158E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;193E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;168E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;182E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;174E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;152E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;158E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;193E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;163E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;168E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;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;33E;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;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;174E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;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;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;204E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;203E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;202E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;201E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;200E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;205E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;267E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;268E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;87E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;270E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;273E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;279E;K;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;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;K;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;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;281E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;282E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;93E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;93E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;282E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;283E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;285E;K;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;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;286E;K;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;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;288E;K;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;289E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;290E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;100E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;290E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;292E;K;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;293E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;294E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;103E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;296E;K;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;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;298E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;300E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;302E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;304E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;K;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;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;306E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;310E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;114E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;310E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;313E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;315E;K;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;316E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;318E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;319E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;320E;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;321E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;324E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;325E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;326E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;326E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;327E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;332E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;334E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;334E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;K;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;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;338E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;338E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;339E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;340E;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;324E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;325E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;321E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;342E;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;313E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;136E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;136E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;343E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;346E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;350E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;352E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;353E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;142E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;142E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;353E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;354E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;355E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;356E;K;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;142E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;148E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;148E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;360E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;361E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;148E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;363E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;364E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;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;148E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;151E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;366E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;367E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;368E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;369E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;370E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;318E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;270E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;154E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;372E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;372E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;373E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;374E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;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;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;376E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;384E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;387E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;391E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;393E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;394E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;398E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;399E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;402E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;404E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;405E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;406E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;17;CPSecureTextFieldK;8;$classesA;S;17;CPSecureTextFieldS;11;CPTextFieldS;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;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;407E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;412E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;414E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;415E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;417E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;418E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;420E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;421E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;422E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;423E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;424E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;427E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;428E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;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;173E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;429E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;430E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;431E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;432E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;433E;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;277E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;277E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;434E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;275E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;435E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;436E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;437E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;427E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;438E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;439E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;440E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;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;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;441E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;443E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;277E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;275E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;444E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;445E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;446E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;447E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;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;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;448E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;449E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;450E;K;11;$aalignmentD;K;6;CP$UIDd;3;371E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;451E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;371E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;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;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;453E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;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;184E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;454E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;455E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;456E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;457E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;458E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;371E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;371E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;371E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;461E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;462E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;463E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;460E;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;456E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;464E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;465E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;466E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;469E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;470E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;398E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;472E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;473E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;474E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;475E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;476E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;477E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;405E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;480E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;481E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;482E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;483E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;484E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;485E;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;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;152E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;488E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;489E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;490E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;491E;E;E;S;8;delegateS;6;field1S;6;field2S;6;field3S;6;field5S;6;field6S;6;field7S;9;theWindowS;7;contentS;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;actionSent:S;28;value: selection.stringValueS;5;valueS;21;selection.stringValueD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;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;92E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;99E;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;91E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;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;94E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;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;3;101E;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;106E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;126E;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;119E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;116E;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;124E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;125E;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;129E;D;K;6;CP$UIDd;3;128E;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;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;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;140E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;146E;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;143E;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;149E;D;K;6;CP$UIDd;3;150E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, -73}, {865, 560}}S;21;{{0, 0}, {1440, 877}}d;1;0S;20;{{0, 0}, {865, 560}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;187E;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;E;E;S;6;normalS;6;{1, 1}S;21;{{20, 20}, {268, 17}}S;19;{{0, 0}, {268, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;1;4D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;382E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;492E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;493E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;277E;E;S;19;Scrolls, multi lineD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;494E;E;S;21;{{21, 45}, {268, 49}}S;19;{{0, 0}, {268, 49}}S;16;controlSizeSmallD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;497E;E;D;K;6;$classD;K;6;CP$UIDd;3;382E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;492E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;498E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;277E;E;S;124;Add a new line with alt+enter, if the line is bigger than the width of the field, it should continue, scrolling to the rightS;21;{{16, 99}, {276, 83}}S;19;{{0, 0}, {276, 83}}S;47;bezeled+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;499E;E;S;20;line 1 +line 2 +line 3S;22;{{20, 215}, {268, 83}}S;19;{{0, 0}, {268, 83}}S;5;LabelS;22;{{21, 193}, {268, 17}}S;20;String value bindingS;22;{{20, 320}, {269, 17}}S;19;{{0, 0}, {269, 17}}S;17;Secure text fieldS;22;{{16, 363}, {276, 22}}S;19;{{0, 0}, {276, 22}}S;6;Line 1S;22;{{20, 344}, {268, 14}}S;19;{{0, 0}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;500E;E;S;40;You should not be able to alt+enter hereS;22;{{21, 396}, {268, 17}}S;22;{{20, 421}, {268, 22}}S;19;{{0, 0}, {268, 22}}S;23;{{298, 320}, {114, 17}}S;19;{{0, 0}, {114, 17}}S;19;Standard text fieldS;23;{{293, 363}, {276, 22}}S;23;{{298, 421}, {268, 22}}S;23;{{298, 396}, {268, 17}}S;23;{{298, 345}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;501E;E;S;36;You should be able to alt+enter hereS;22;{{572, 320}, {73, 17}}S;18;{{0, 0}, {73, 17}}S;9;Combo boxS;23;{{568, 364}, {276, 26}}S;19;{{0, 0}, {276, 26}}S;8;comboboxS;63;bezeled+button-bordered+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;E;E;d;1;5S;23;{{572, 345}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;505E;E;S;21;{{21, 471}, {73, 17}}S;12;Search fieldS;22;{{21, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;506E;E;S;22;{{20, 518}, {268, 22}}S;11;searchfieldS;55;bezeled+controlSizeRegular+editable+placeholder+roundedd;3;254S;22;{{296, 471}, {67, 17}}S;18;{{0, 0}, {67, 17}}S;11;Token fieldS;23;{{292, 514}, {276, 22}}S;10;tokenfieldS;35;bezeled+controlSizeRegular+editableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{296, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;507E;E;S;23;{{572, 514}, {267, 29}}S;19;{{0, 0}, {267, 29}}D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;508E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;371E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;509E;E;D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;510E;E;S;22;{{572, 471}, {71, 17}}S;18;{{0, 0}, {71, 17}}S;11;Date pickerS;23;{{572, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;511E;E;S;23;{{298, 215}, {268, 83}}S;22;{{294, 99}, {276, 83}}S;22;{{298, 20}, {268, 17}}S;17;Wraps, multi lineS;22;{{299, 45}, {268, 49}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;512E;E;S;109;Can add a new line with alt+enter, if the line is bigger than the screen, it should automatically wrap aroundS;23;{{298, 193}, {268, 17}}S;22;{{572, 99}, {276, 83}}S;23;{{576, 215}, {268, 83}}S;22;{{576, 20}, {269, 17}}S;20;Scrolls, single lineS;22;{{577, 45}, {268, 49}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;513E;E;S;116;Cannot add a new line, if the line is bigger than the width of the field, it should continue, scrolling to the rightS;23;{{576, 193}, {268, 17}}S;13;AppControllerS;19;CPMutableDictionaryS;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;514E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;515E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;516E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;517E;E;S;29;.Helvetica Neue DeskInterfaced;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;324E;E;E;S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;519E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;520E;E;E;d;2;11D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;521E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;522E;E;E;S;6;Item 1S;6;Item 2S;6;Item 3D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;523E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;524E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;525E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;E;E;d;15;-62135510400000d;14;64092297600000D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;526E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;527E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;528E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;530E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;531E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;532E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;533E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;535E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;536E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;537E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;538E;E;f;12;0.8509804606D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;f;12;0.2027027011E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib new file mode 100644 index 000000000..66031528e --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib @@ -0,0 +1,3604 @@ + + + + 1050 + 14B23 + 6250 + 1343.16 + 755.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 6250 + + + NSComboBox + NSComboBoxCell + NSCustomObject + NSDatePicker + NSDatePickerCell + NSMenu + NSMenuItem + NSObjectController + NSSearchField + NSSearchFieldCell + NSSecureTextField + NSSecureTextFieldCell + NSTextField + NSTextFieldCell + NSTokenField + NSTokenFieldCell + NSView + NSWindowTemplate + + + 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 + + + + + + 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 + + + + + + + + + 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 + + + + + + + + + + + + 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 + + + 7 + 2 + {{335, 390}, {865, 560}} + 1946157056 + Window + NSWindow + + + + + 256 + + + + 268 + {{20, 375}, {268, 83}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + YES + 13 + 1044 + + bGluZSAxCmxpbmUgMgpsaW5lIDM + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + NO + 1 + + + + 268 + {{18, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + labelColor + + + + NO + 1 + + + + 268 + {{296, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272629760 + Label + + _NS:526 + + + + + NO + YES + 1 + + + + 268 + {{18, 117}, {272, 22}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 117}, {272, 22}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 523}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Scrolls, multi line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{297, 172}, {268, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + Line 1 + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{20, 172}, {268, 22}} + + + + _NS:9 + YES + + 342884416 + 272630848 + + + Line 1 + _NS:9 + + YES + + + + NSAllRomanInputSourcesLocaleIdentifier + + + NO + 1 + + + + 268 + {{298, 375}, {268, 83}} + + + + _NS:9 + YES + + -1805647871 + 272629760 + + + bGluZSAxCmxpbmUgMgpsaW5lIDM + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{296, 523}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Wraps, multi line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 223}, {273, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Secure text field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 223}, {118, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Standard text field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{19, 72}, {77, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Search field + + _NS:526 + + + + + NO + 1 + + + + 268 + + NSStringPboardType + + {{296, 21}, {268, 22}} + + + + _NS:9 + YES + + 341835776 + 0 + + Line 1 + _NS:9 + + YES + + + 6 + System + controlTextColor + + + + 0.0 + 0 + + NO + 1 + 2 + + + + 268 + {{294, 72}, {71, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Token field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{570, 223}, {77, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Combo box + + _NS:526 + + + + + NO + 1 + + + + 268 + {{572, 170}, {271, 26}} + + + + _NS:9 + YES + + 342884417 + 272630784 + + + _NS:9 + + YES + + + 5 + YES + + Item 1 + Item 2 + Item 3 + + + + + 274 + {13, 63} + + + _NS:29 + YES + NO + YES + tableViewAction: + + + + 0 + 10 + 10 + 3.4028234663852886e+38 + + 67108928 + 2048 + + + YES + 11 + 3100 + + + 6 + System + headerColor + + + + 6 + System + headerTextColor + + + + + 337641536 + 268437504 + Item 3 + + + + 6 + System + controlBackgroundColor + + + + + 3 + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 19 + tableViewAction: + -765427712 + + + + 1 + -1 + 0 + YES + 0 + 1 + + + NO + 1 + + + + 268 + {{20, 20}, {268, 22}} + + + + YES + _NS:9 + YES + + 342884416 + 268436544 + + + _NS:9 + + YES + 1 + + + + 0 + 0 + search + + _searchFieldSearch: + + 138690560 + 0 + + 400 + 75 + + + 0 + 0 + clear + + + cancel + + + + + _searchFieldCancel: + + 138690560 + 0 + + 400 + 75 + + 255 + BgAAAA + + NO + 1 + + + + 268 + {{572, 21}, {270, 27}} + + + _NS:9 + YES + + 71303168 + 0 + + -595929600 + + US/Pacific + + 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 + + + %Y-%m-%d %H:%M:%S %z + + + _NS:9 + + 0.0 + 224 + + + + NO + + + + 268 + {{570, 72}, {75, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Date picker + + _NS:526 + + + + + NO + 1 + + + + 268 + {{19, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Add a new line with alt+enter, if the line is bigger than the width of the field, it should continue, scrolling to the right + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 1 + + + + 268 + {{297, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Can add a new line with alt+enter, if the line is bigger than the screen, it should automatically wrap around + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 350}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 350}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 202}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 147}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 147}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 201}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{570, 201}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{294, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{570, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{576, 375}, {268, 83}} + + + + _NS:9 + YES + + -1804599231 + 272630848 + + + Line 1 + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{574, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{574, 523}, {273, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Scrolls, single line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{575, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Cannot add a new line, if the line is bigger than the width of the field, it should continue, scrolling to the right + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{574, 350}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + {865, 560} + + + + {{0, 0}, {1440, 877}} + {10000000000000, 10000000000000} + YES + + + AppController + + + YES + + + + YES + + + + YES + + + + YES + + + + YES + + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + clearRecentDocuments: + + + + 127 + + + + 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 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + theWindow + + + + 459 + + + + actionSent: + + + + 598 + + + + actionSent: + + + + 599 + + + + field5 + + + + 584 + + + + actionSent: + + + + 602 + + + + actionSent: + + + + 601 + + + + actionSent: + + + + 600 + + + + actionSent: + + + + 603 + + + + field6 + + + + 585 + + + + field7 + + + + 586 + + + + actionSent: + + + + 604 + + + + actionSent: + + + + 605 + + + + actionSent: + + + + 606 + + + + field1 + + + + 643 + + + + field2 + + + + 644 + + + + field3 + + + + 645 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 488 + + + + content + + + + 483 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 542 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 545 + + + + content + + + + 538 + + + + content + + + + 539 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 556 + + + + content + + + + 553 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 569 + + + + content + + + + 564 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + MainMenu + + + 19 + + + + + + + + 56 + + + + + + + + 103 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + 75 + + + + + 80 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 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 + + + + + + + + 111 + + + + + 57 + + + + + + + + + + + + 58 + + + + + 136 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 450 + + + + + 480 + + + 1 + + + 533 + + + 2 + + + 535 + + + 3 + + + 551 + + + 4 + + + 562 + + + 5 + + + 460 + + + + + + + + 461 + + + + + 517 + + + + + + + + 518 + + + + + 474 + + + + + + + + 475 + + + + + 527 + + + + + + + + 528 + + + + + 530 + + + + + + + + 531 + + + + + 548 + + + + + + + + 549 + + + + + 559 + + + + + + + + 560 + + + + + 519 + + + + + + + + 520 + + + + + 521 + + + + + + + + 522 + + + + + 462 + + + + + + + + 463 + + + + + 472 + + + + + + + + 473 + + + + + 523 + + + + + + + + 526 + + + + + 524 + + + + + + + + 525 + + + + + 546 + + + + + + + + 547 + + + + + 557 + + + + + + + + 558 + + + + + 589 + + + + + + + + 590 + + + + + 570 + + + + + + + + 571 + + + + + 572 + + + + + + + + 573 + + + + + 575 + + + + + + + + 576 + + + + + 578 + + + + + + + + 579 + + + + + 587 + + + + + + + + 588 + + + + + 591 + + + + + + + + 592 + + + + + 593 + + + + + + + + 594 + + + + + 615 + + + + + + + + 616 + + + + + 617 + + + + + + + + 618 + + + + + 619 + + + + + + + + 620 + + + + + 621 + + + + + + + + 622 + + + + + 623 + + + + + + + + 624 + + + + + 625 + + + + + + + + 626 + + + + + 627 + + + + + + + + 628 + + + + + 629 + + + + + + + + 630 + + + + + 631 + + + + + + + + 632 + + + + + 633 + + + + + + + + 634 + + + + + 635 + + + + + + + + 636 + + + + + 637 + + + + + + + + 638 + + + + + 639 + + + + + + + + 640 + + + + + 641 + + + + + + + + 642 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {357.5, 439} + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 645 + + + 0 + IBCocoaFramework + NO + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + {12, 12} + {10, 2} + + + diff --git a/Tests/Manual/CPTextFieldMultiline/index-debug.html b/Tests/Manual/CPTextFieldMultiline/index-debug.html new file mode 100644 index 000000000..7a4693877 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPTextFielMultine + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextFieldMultiline/index.html b/Tests/Manual/CPTextFieldMultiline/index.html new file mode 100644 index 000000000..cb15b05a5 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPTextFielMultine + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextFieldMultiline/main.j b/Tests/Manual/CPTextFieldMultiline/main.j new file mode 100644 index 000000000..48db81b12 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPTextFielMultine + * + * Created by You on November 12, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/CompilationTests/README.md b/Tests/Manual/CompilationTests/README.md new file mode 100644 index 000000000..c852088b8 --- /dev/null +++ b/Tests/Manual/CompilationTests/README.md @@ -0,0 +1,46 @@ +## Run tests + +./run.py + + +## Create a test case + +create a `.j` file in `TestCases` folder: + +-First line MUST be: + + // Expected output: [OBJJ_STATUS_CODE] + + +Then after that add a block comment that contains: + + /* + START_EXPECTED + [CONSOLE_OUTPUT_OF_OBJJ] + END_EXPECTED + */ + + +Be sure to replace the file path by the token `[__PATH__]` After that, add the code you want to test. + +If your test doesn't expect any output, don't put any `START_EXPECTED` and `END_EXPECTED` + + +For instance: + + /* + START_EXPECTED + Error on line 10771 of file [unknown] + SyntaxError: + @typedef MyType + ^ + ERROR line 2 in file:[__PATH__]: Duplicate type definition MyType + END_EXPECTED + */ + @import + + @implementation MyCall : CPObject + { + CPString property1; + } + @end diff --git a/Tests/Manual/CompilationTests/TestCases/1.j b/Tests/Manual/CompilationTests/TestCases/1.j new file mode 100644 index 000000000..b2585522e --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/1.j @@ -0,0 +1,13 @@ +// Expected output: 0 + +/* +*/ + + +@import + +@implementation MyCall : CPObject +{ + CPString property1; +} +@end diff --git a/Tests/Manual/CompilationTests/TestCases/10.j b/Tests/Manual/CompilationTests/TestCases/10.j new file mode 100644 index 000000000..c614eeb4d --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/10.j @@ -0,0 +1,18 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10778 of file [unknown] +SyntaxError: +@typedef mytype + ^ +ERROR line 4 in file:[__PATH__]: mytype is already declared as class +END_EXPECTED +*/ + +@import + +@class mytype +@typedef mytype + diff --git a/Tests/Manual/CompilationTests/TestCases/2.j b/Tests/Manual/CompilationTests/TestCases/2.j new file mode 100644 index 000000000..af2c92cf1 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/2.j @@ -0,0 +1,20 @@ +// Expected output: 0 + +/* + +START_EXPECTED + MyType property1; + ^ +WARNING line 5 in file:[__PATH__]: Unknown type 'MyType' for ivar 'property1' +END_EXPECTED +*/ + + +@import + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/3.j b/Tests/Manual/CompilationTests/TestCases/3.j new file mode 100644 index 000000000..e00d77593 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/3.j @@ -0,0 +1,15 @@ +// Expected output: 0 + +/* +*/ + +@import + +@typedef MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/4.j b/Tests/Manual/CompilationTests/TestCases/4.j new file mode 100644 index 000000000..889ab3036 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/4.j @@ -0,0 +1,15 @@ +// Expected output: 0 + +/* +*/ + +@import + +@class MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/5.j b/Tests/Manual/CompilationTests/TestCases/5.j new file mode 100644 index 000000000..bcbf216ab --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/5.j @@ -0,0 +1,22 @@ +// Expected output: 0 + +/* + +START_EXPECTED + MyType property1; + ^ +WARNING line 7 in file:[__PATH__]: Unknown type 'MyType' for ivar 'property1' +END_EXPECTED + +*/ + +@import + +@global MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/6.j b/Tests/Manual/CompilationTests/TestCases/6.j new file mode 100644 index 000000000..37a7f86bf --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/6.j @@ -0,0 +1,16 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10775 of file [unknown] +SyntaxError: +@typedef MyType + ^ +ERROR line 2 in file:[__PATH__]: Duplicate type definition MyType +END_EXPECTED + +*/ + +@typedef MyType +@typedef MyType diff --git a/Tests/Manual/CompilationTests/TestCases/7.j b/Tests/Manual/CompilationTests/TestCases/7.j new file mode 100644 index 000000000..cdff5aeda --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/7.j @@ -0,0 +1,20 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10001 of file [unknown] +SyntaxError: +@implementation MyType : CPObject + ^ +ERROR line 5 in file:[__PATH__]: MyType is already declared as type +END_EXPECTED + +*/ + +@import + +@typedef MyType + +@implementation MyType : CPObject +@end diff --git a/Tests/Manual/CompilationTests/TestCases/8.j b/Tests/Manual/CompilationTests/TestCases/8.j new file mode 100644 index 000000000..393371331 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/8.j @@ -0,0 +1,20 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10778 of file [unknown] +SyntaxError: +@typedef MyType + ^ +ERROR line 6 in file:[__PATH__]: MyType is already declared as class +END_EXPECTED + +*/ + +@import + +@implementation MyType : CPObject +@end + +@typedef MyType diff --git a/Tests/Manual/CompilationTests/TestCases/9.j b/Tests/Manual/CompilationTests/TestCases/9.j new file mode 100644 index 000000000..0fd6c0678 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/9.j @@ -0,0 +1,22 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10014 of file [unknown] +SyntaxError: +@implementation MyType : CPObject + ^ +ERROR line 6 in file:[__PATH__]: Duplicate class MyType +END_EXPECTED + +*/ + +@import + +@implementation MyType : CPObject +@end + +@implementation MyType : CPObject +@end + diff --git a/Tests/Manual/CompilationTests/run.py b/Tests/Manual/CompilationTests/run.py new file mode 100755 index 000000000..e21eebaa3 --- /dev/null +++ b/Tests/Manual/CompilationTests/run.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import os +import commands +import re + +PATH = os.path.abspath(os.path.join(os.path.dirname(__file__))) + + +def get_tests_cases(): + ret = [] + for filename in os.listdir("TestCases"): + ret.append("TestCases/%s" % filename) + return ret + # return ["TestCases/2.j"] + +def get_expected_output(test_case): + f = open(test_case) + content = f.readlines(); + f.close() + + status = int(content[0].replace("// Expected output: ", "")) + + recording = False + output = [] + + for line in content: + if "END_EXPECTED" in line: + recording = False + break; + + if "START_EXPECTED" in line: + recording = True + continue + + if recording: + output.append(line) + + output = "".join(output); + output = output.replace("[__PATH__]", "%s/%s" % (PATH, test_case)) + output = cleanup_output(output) + + return (status, output) + + +def get_actual_output(test_case): + status, output = commands.getstatusoutput("objj %s" % test_case) + output = cleanup_output(output) + return (status, output) + + +def cleanup_output(output): + if not output: + return "" + output = output.replace(" ", "") + output = output.replace("\n", "") + output = output.replace("[0m", "") + return re.sub('[^\s!-~]', '', output) + + +if __name__ == "__main__": + + for test in get_tests_cases(): + + expected_status, expected_output = get_expected_output(test) + actual_status, actual_output = get_actual_output(test) + + print "########################################" + print "Testing %s" % test + errored = False + if expected_status != actual_status: + errored = True + print " Error in %s: Status code is different: expected %d, actual %d" % (test, expected_status, actual_status) + + if expected_output != actual_output: + errored = True + print " Error in %s. Outputs are different" % test + print " EXPECTED: %s" % expected_output + print " ACTUAL: %s" % actual_output + + if not errored: + print " OK" diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j index fe7fcc5de..820cad2f6 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j @@ -1,10 +1,10 @@ -@implementation Class +@implementation TestClass { } @end -@implementation Class (Accessors) +@implementation TestClass (Accessors) { Type ivar @accessors; } diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js index 9db2e1754..ae78cbb53 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js @@ -1,13 +1,14 @@ -var the_class=objj_allocateClassPair(Nil,"Class"),meta_class=the_class.isa; +var the_class=objj_allocateClassPair(Nil,"TestClass"),meta_class=the_class.isa; objj_registerClassPair(the_class); -var the_class=objj_getClass("Class"); +var the_class=objj_getClass("TestClass"); if(!the_class){ -throw new SyntaxError("*** Could not find definition for class \"Class\""); +throw new SyntaxError("*** Could not find definition for class \"TestClass\""); } var meta_class=the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar")]); -class_addMethods(the_class,[new objj_method(sel_getUid("ivar"),function $Class__ivar(_1,_2){ +class_addMethods(the_class,[new objj_method(sel_getUid("ivar"),function $TestClass__ivar(_1,_2){ return _1.ivar; -},["Type"]),new objj_method(sel_getUid("setIvar:"),function $Class__setIvar_(_3,_4,_5){ +},["Type"]),new objj_method(sel_getUid("setIvar:"),function $TestClass__setIvar_(_3,_4,_5){ _3.ivar=_5; -},["void","Type"])]); \ No newline at end of file +},["void","Type"])]); + diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j index 50d1fa504..603bc25e5 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j @@ -1,5 +1,5 @@ -@implementation Class +@implementation TestClass { Type ivar; CPArray array; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js index 7eba069a9..8cf16dc3b 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js @@ -1,5 +1,4 @@ - -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar"), new objj_ivar("array"), new objj_ivar("string"), new objj_ivar("integer")]); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j index 14fc4dd73..3aebab79d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j @@ -1,5 +1,4 @@ - -@implementation Class +@implementation TestClass { Type ivar; } diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js index 4c6f93642..165c23dc8 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js @@ -1,5 +1,5 @@ -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar")]); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j index f0e079126..6f4f77d3d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j @@ -1,5 +1,5 @@ -@implementation Class +@implementation TestClass { } @end diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js index c266954fc..75528fb97 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js @@ -1,5 +1,5 @@ -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; objj_registerClassPair(the_class); diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index b3e16e59e..000a05aa8 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -29,6 +29,15 @@ function cleanup() { status = OS.system(["flatten", "-f", "ToolsTestApp", "FlattenTestApp"].map(OS.enquote).join(" ") + " > /dev/null"); [self assert:0 equals:status message:"flatten failed"]; + + status = OS.system(["objj", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed"]; + + status = OS.system(["objj", "-m", "ToolsTestApp/AppController.j", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed with several files"]; + + status = OS.system(["objj", "-I", "ToolsTestApp/Frameworks", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed with options -I"]; } - (void)tearDown diff --git a/Tools/Editors/Vim/objj.vim b/Tools/Editors/Vim/objj.vim index e42d14c8a..a6d9d5028 100644 --- a/Tools/Editors/Vim/objj.vim +++ b/Tools/Editors/Vim/objj.vim @@ -68,6 +68,7 @@ syn match objjImported display contained "<[-_0-9a-zA-Z.\/]*>" syn match objjImport display "^\s*\(%:\|#\|@\)\s*import\>\s*["<]" contains=objjImported " Match the important ObjJ directives +syn match objjDirective "@typedef" syn match objjDirective "@interface\|@implementation\|@protocol\|@end" syn match objjScopeDecl "@public\|@protected\|@private\|@package" syn match objjScopeDecl "@required\|@optional" diff --git a/Tools/Jakefile b/Tools/Jakefile index d57ab7c6c..b0f0b52a8 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", "capp_lint", "dump_theme", "NativeHost", "XcodeCapp"], ["build"/*, "clean", "clobber"*/]); +subtasks(["fontinfo", "imagesize", "nib2cib", "capp", "capp_lint", "dump_theme", "XcodeCapp"], ["build", /*"clean", "clobber"*/]); subtasks(["fontinfo", "imagesize"], ["clean", "clobber"]); diff --git a/Tools/Scripts/ci-extra-nightlies.sh b/Tools/Scripts/ci-extra-nightlies.sh deleted file mode 100644 index b0726ab50..000000000 --- a/Tools/Scripts/ci-extra-nightlies.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -PACKAGE_BRANCH="nightly" jake push-packages -code=$? -if [ $code -ne 0 ]; then - echo "NIGHTLY BUILD PUSH FAILED ($code)" - exit $code -else - echo "NIGHTLY BUILD PUSH SUCCEEDED" -fi diff --git a/Tools/Scripts/ci.sh b/Tools/Scripts/ci.sh deleted file mode 100755 index 4cce6225e..000000000 --- a/Tools/Scripts/ci.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -project_home="$(dirname "$PWD")" -extras="$project_home/ci-extra.sh" - -export PATH="$HOME/narwhal/bin:$PATH" -export CAPP_AUTO_UPGRADE="yes" - -export CAPP_BUILD="$project_home/build_incremental" -time jake CommonJS test-only -code=$? -if [ $code -ne 0 ]; then - echo "INCREMENTAL BUILD FAILED ($code)" - exit $code -else - echo "INCREMENTAL BUILD SUCCEEDED" -fi - -export CAPP_BUILD="$project_home/build_clean" -rm -rf "$CAPP_BUILD" - -time jake CommonJS test-only -code=$? -if [ $code -ne 0 ]; then - echo "CLEAN BUILD FAILED ($code)" - exit $code -else - echo "CLEAN BUILD SUCCEEDED" -fi - -# run any additional ci commands not common to all branches (like nightly builds) -if [ -f "$extras" ]; then - source "$extras" -fi - -exit 0 diff --git a/Tools/Scripts/cruise_config.rb b/Tools/Scripts/cruise_config.rb deleted file mode 100644 index 17c14a20d..000000000 --- a/Tools/Scripts/cruise_config.rb +++ /dev/null @@ -1,6 +0,0 @@ -Project.configure do |project| - - project.email_notifier.emails = ['objjbuild@googlegroups.com'] - project.build_command = 'Tools/Scripts/ci.sh' - -end diff --git a/Tools/Scripts/githooks/pre-commit b/Tools/Scripts/githooks/pre-commit deleted file mode 100755 index e5f2f4587..000000000 --- a/Tools/Scripts/githooks/pre-commit +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -jake test-only diff --git a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj index dce859d69..3449e0637 100644 --- a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj +++ b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ E164FE181720F44B00263CE3 /* parser.j in Resources */ = {isa = PBXBuildFile; fileRef = E164FE171720F44B00263CE3 /* parser.j */; }; E164FE1A1720F49A00263CE3 /* Growl Registration Ticket.growlRegDict in Resources */ = {isa = PBXBuildFile; fileRef = E164FE191720F49A00263CE3 /* Growl Registration Ticket.growlRegDict */; }; E164FE1F1720F51E00263CE3 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E164FE1D1720F50100263CE3 /* CoreServices.framework */; }; - E164FE211720F55600263CE3 /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E164FDF61720EBD600263CE3 /* Growl.framework */; }; + E164FE211720F55600263CE3 /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E164FDF61720EBD600263CE3 /* Growl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E164FE2F1721A34900263CE3 /* icon-active.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2C1721A34900263CE3 /* icon-active.png */; }; E164FE301721A34900263CE3 /* icon-inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2D1721A34900263CE3 /* icon-inactive.png */; }; E164FE311721A34900263CE3 /* icon-working.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2E1721A34900263CE3 /* icon-working.png */; }; @@ -34,7 +34,7 @@ E171D25F173C168C00210893 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E171D25E173C168C00210893 /* Foundation.framework */; }; E171D262173C168C00210893 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E171D261173C168C00210893 /* main.m */; }; E171D26A173C1ADD00210893 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E164FE1D1720F50100263CE3 /* CoreServices.framework */; }; - E171D26C173C1C8300210893 /* xcc in CopyFiles */ = {isa = PBXBuildFile; fileRef = E171D25D173C168C00210893 /* xcc */; }; + E171D26C173C1C8300210893 /* xcc in CopyFiles */ = {isa = PBXBuildFile; fileRef = E171D25D173C168C00210893 /* xcc */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E17A822D172700B90095CD83 /* XcodeCapp.iconset in Resources */ = {isa = PBXBuildFile; fileRef = E17A822C172700B90095CD83 /* XcodeCapp.iconset */; }; E17B55411732F57700809FFB /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17B55401732F57700809FFB /* Quartz.framework */; }; E1A5594A172C5EE20088FB61 /* FindSourceFilesOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A55949172C5EE20088FB61 /* FindSourceFilesOperation.m */; }; @@ -389,7 +389,7 @@ E164FDC71720E77100263CE3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + LastUpgradeCheck = 0610; ORGANIZATIONNAME = "Cappuccino Project"; }; buildConfigurationList = E164FDCA1720E77100263CE3 /* Build configuration list for PBXProject "XcodeCapp" */; @@ -501,6 +501,7 @@ baseConfigurationReference = E164FDEF1720E7FA00263CE3 /* Debug.xcconfig */; buildSettings = { DSTROOT = /; + ONLY_ACTIVE_ARCH = YES; }; name = Debug; }; @@ -540,7 +541,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; @@ -576,7 +576,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 86aa8c3d7..4647a079f 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -138,21 +138,24 @@ AppController *SharedAppControllerInstance = nil; - (void)registerDefaultPreferences { NSDictionary *appDefaults = @{ - kDefaultLastEventId: [NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow], - kDefaultFirstLaunch: @YES, - kDefaultFirstLaunchVersion: @2.0, - kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], - kDefaultXCCReactToInodeMod: @YES, - kDefaultXCCReopenLastProject: @YES, - kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, - kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, - kDefaultXCCAutoShowNotificationOnErrors: @YES, - kDefaultXCCAutoShowNotificationOnCappLint: @YES, - kDefaultXCCProjectHistory: [NSArray new], - kDefaultMaxRecentProjects: @20, - kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], - kDefaultAutoOpenXcodeProject: @YES, - kDefaultUseSymlinkWhenCreatingProject: @YES + kDefaultLastEventId: [NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow], + kDefaultFirstLaunch: @YES, + kDefaultFirstLaunchVersion: @2.0, + kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], + kDefaultXCCReactToInodeMod: @YES, + kDefaultXCCReopenLastProject: @YES, + kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, + kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, + kDefaultXCCAutoShowNotificationOnErrors: @YES, + kDefaultXCCAutoShowNotificationOnCappLint: @YES, + kDefaultXCCProjectHistory: [NSArray new], + kDefaultMaxRecentProjects: @20, + kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], + kDefaultAutoOpenXcodeProject: @YES, + kDefaultUseSymlinkWhenCreatingProject: @YES, + kDefaultXCCUseDebugFrameworkWithObjj: @YES, + kDefaultXCCShouldProcessObjj: @YES, + kDefaultXCCPanelStyleUtility: @NO }; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; diff --git a/Tools/XcodeCapp/XcodeCapp/Info.plist b/Tools/XcodeCapp/XcodeCapp/Info.plist index 7f59ef93d..ddb9c5a21 100644 --- a/Tools/XcodeCapp/XcodeCapp/Info.plist +++ b/Tools/XcodeCapp/XcodeCapp/Info.plist @@ -21,11 +21,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.1 + 3.2 CFBundleSignature ???? CFBundleVersion - 3.1 + 3.2 LSApplicationCategoryType public.app-category.developer-tools LSUIElement diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 81e9b7cf6..f41ffbddf 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -45,7 +45,7 @@ NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath }; + NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath}; [center postNotificationName:XCCConversionDidStartNotification object:self userInfo:info]; DDLogVerbose(@"Conversion started: %@", self.sourcePath); @@ -74,7 +74,7 @@ self.xcc.parserPath, self.projectPath, self.sourcePath - ]; + ]; notificationTitle = @"Objective-J source processed"; } @@ -84,21 +84,21 @@ return; [self.xcc performSelectorOnMainThread:@selector(computeIgnoredPaths) withObject:nil waitUntilDone:NO]; - + notificationTitle = @"Parsed .xcodecapp-ignore"; notificationMessage = @"Ignored paths updated"; } // Run the task and get the response if needed NSInteger status = 0; - + if (arguments) { if (self.isCancelled) return; DDLogVerbose(@"Running processing task: %@", launchPath); - + NSDictionary *taskResult = [self.xcc runTaskWithLaunchPath:launchPath arguments:arguments returnType:kTaskReturnTypeAny]; @@ -120,7 +120,7 @@ notificationTitle = @"Error converting xib"; NSString *message = [NSString stringWithFormat:@"%@\n%@", self.sourcePath.lastPathComponent, response]; - + NSDictionary *info = @{ @"projectId":self.projectId, @@ -131,7 +131,7 @@ if (self.isCancelled) return; - + [center postNotificationName:XCCConversionDidGenerateErrorNotification object:self userInfo:info]; } else @@ -152,7 +152,7 @@ [self postErrorNotificationForPath:self.sourcePath line:0 message:response status:status]; } } - + if ([self.xcc shouldShowErrorNotification]) [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } @@ -160,14 +160,19 @@ { BOOL showFinalNotification = YES; - if ([self.xcc shouldProcessWithCappLint]) + // At this point, we should only detect warnings + if ([self.xcc shouldProcessWithObjjWarnings] && ![self.xcc isXibFile:self.sourcePath]) { - showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]]; - - if (!showFinalNotification) - [self.xcc showCappLintErrors]; + showFinalNotification = [self.xcc checkObjjWarningsForPath:[NSArray arrayWithObject:self.sourcePath]]; + [self.xcc showObjjWarnings]; } - + + if ([self.xcc shouldProcessWithCappLint] && ![self.xcc isXibFile:self.sourcePath]) + { + showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]] && showFinalNotification; + [self.xcc showCappLintWarnings]; + } + if (showFinalNotification) [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index a89476cd0..9e5d5b804 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -21,6 +21,8 @@ extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; +extern NSString * const kDefaultXCCUseDebugFrameworkWithObjj; +extern NSString * const kDefaultXCCShouldProcessObjj; extern NSString * const kDefaultXCCProjectHistory; extern NSString * const kDefaultLastOpenedPath; extern NSString * const kDefaultPathModificationDates; @@ -29,5 +31,6 @@ extern NSString * const kDefaultLogLevel; extern NSString * const kDefaultAutoOpenXcodeProject; extern NSString * const kDefaultUseSymlinkWhenCreatingProject; extern NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch; +extern NSString * const kDefaultXCCPanelStyleUtility; #endif diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index aee5793ae..d88657a6f 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -19,6 +19,8 @@ NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors = @"XCCAutoOpenErrorsPan NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint = @"XCCAutoOpenErrorsPanelOnCappLint"; NSString * const kDefaultXCCAutoShowNotificationOnErrors = @"XCCAutoOpenShowNotificationErrors"; NSString * const kDefaultXCCAutoShowNotificationOnCappLint = @"XCCAutoShowNotificationOnCappLint"; +NSString * const kDefaultXCCUseDebugFrameworkWithObjj = @"XCCUseDebugFrameworkWithObjj"; +NSString * const kDefaultXCCShouldProcessObjj = @"XCCShouldProcessObjj"; NSString * const kDefaultXCCProjectHistory = @"XCCProjectHistory"; NSString * const kDefaultLastOpenedPath = @"LastOpenedPath"; NSString * const kDefaultPathModificationDates = @"pathModificationDates"; @@ -27,3 +29,4 @@ NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; +NSString * const kDefaultXCCPanelStyleUtility = @"XCCPanelStyleUtility"; \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index 09f9ae64f..ef7b756c5 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -156,9 +156,14 @@ extern NSString * const XCCCappLintDidEndNotification; - (NSDictionary*)createProject:(NSString*)aPath; +- (void)showCappLintWarnings; +- (void)showObjjWarnings; + - (BOOL)shouldProcessWithCappLint; - (BOOL)checkCappLintForPath:(NSArray*)paths; -- (void)showCappLintErrors; + +- (BOOL)shouldProcessWithObjjWarnings; +- (BOOL)checkObjjWarningsForPath:(NSArray*)paths; - (void)updateCappuccino; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 36ebc6c63..5c0392af3 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -76,6 +76,8 @@ static NSArray *XCCDefaultIgnoredPathPredicates = nil; NSString * const XCCCappLintDidStartNotification = @"XCCCappLintDidStartNotification"; NSString * const XCCCappLintDidEndNotification = @"XCCCappLintDidEndNotification"; +NSString * const XCCObjjDidStartNotification = @"XCCObjjDidStartNotification"; +NSString * const XCCObjjDidEndNotification = @"XCCObjjDidEndNotification"; @interface XcodeCapp () @@ -1564,6 +1566,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (IBAction)openErrorsPanel:(id)aSender { [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + [self.errorsPanel setFloatingPanel:[[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCPanelStyleUtility]]; [self.errorsPanel makeKeyAndOrderFront:nil]; } @@ -1571,11 +1574,11 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, { id info = self.errorListController.selection; - NSString *path = [info valueForKey:@"path"]; - + NSString *path = [info valueForKey:@"realPath"] ? [info valueForKey:@"realPath"] : [info valueForKey:@"path"]; + if (path == NSNoSelectionMarker) return; - + if ([self isObjjFile:path]) { [self openObjjFile:path line:[[info valueForKey:@"line"] intValue]]; @@ -1694,6 +1697,13 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]; } +- (BOOL)shouldProcessWithObjjWarnings +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + return ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnErrors]) && [defaults boolForKey:kDefaultXCCShouldProcessObjj]; +} + - (void)showErrors { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -1704,41 +1714,96 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } } -- (void)showCappLintErrors +- (void)showCappLintWarnings { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && self.errorList.count) + NSUInteger numberError = [self.errorList count]; + NSDictionary *firstError; + NSUInteger i = 0; + + for (i = 0; i < numberError; i++) + { + NSDictionary *dict = [self.errorList objectAtIndex:i]; + + if ([[dict valueForKey:@"type"] isEqualToString: @"capp_lint"]) + { + firstError = dict; + break; + } + } + + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && firstError) [self openErrorsPanel:self]; - if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]) + if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint] && firstError) { - NSUInteger numberError = [self.errorList count]; + NSDictionary *error = [self.errorList objectAtIndex:0]; + NSString *filename = [error objectForKey:@"path"]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:self.projectId] , @"projectId", + @"Code Style Issues", @"title", + filename.lastPathComponent , @"message", + nil]; + + [self wantUserNotificationWithInfo:dict]; + } +} + +- (void)showObjjWarnings +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + NSUInteger numberError = [self.errorList count]; + NSDictionary *firstError; + NSUInteger i = 0; + + for (i = 0; i < numberError; i++) + { + NSDictionary *dict = [self.errorList objectAtIndex:i]; - if (numberError) + if ([[dict valueForKey:@"type"] isEqualToString: @"objj"]) { - NSDictionary *error = [self.errorList objectAtIndex:0]; - NSString *filename = [error objectForKey:@"path"]; - - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:self.projectId] , @"projectId", - @"Code Style Issues", @"title", - filename.lastPathComponent , @"message", - nil]; - - [self wantUserNotificationWithInfo:dict]; + firstError = dict; + break; } } + + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && firstError) + [self openErrorsPanel:self]; + + if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnErrors] && firstError) + { + NSDictionary *error = [self.errorList objectAtIndex:0]; + NSString *filename = [error objectForKey:@"path"]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:self.projectId] , @"projectId", + @"Compiling Issues", @"title", + filename.lastPathComponent , @"message", + nil]; + + [self wantUserNotificationWithInfo:dict]; + } } - (void)pruneProcessingErrorsForProjectPath:(NSString *)path +{ + [self pruneProcessingErrorsForProjectPath:path type:nil]; +} + +- (void)pruneProcessingErrorsForProjectPath:(NSString *)path type:(NSString*)type { // Remove all errors for the path being processed NSIndexSet *matchingErrors = [self.errorList indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { - return [[obj valueForKey:@"path"] isEqualToString:path]; + if (type) + return ([[obj valueForKey:@"path"] isEqualToString:path] || [[obj valueForKey:@"realPath"] isEqualToString:path]) && [[obj valueForKey:@"type"] isEqualToString:type]; + else + return [[obj valueForKey:@"path"] isEqualToString:path] || [[obj valueForKey:@"realPath"] isEqualToString:path]; }]; - + [self.errorListController removeObjectsAtArrangedObjectIndexes:matchingErrors]; } @@ -1758,6 +1823,212 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return index != NSNotFound; } +#pragma mark - objjj check + +- (NSString*)_getObjjIncludePaths +{ + NSRegularExpression *regulareExpressionFramework = [NSRegularExpression regularExpressionWithPattern:@"OBJJ_INCLUDE_PATHS ?= ?\\[\"(.*)\"\\," options:0 error:nil]; + + NSString *indexPath; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCUseDebugFrameworkWithObjj]) + indexPath = [NSString stringWithFormat:@"%@/index-debug.html", self.projectPath]; + else + indexPath = [NSString stringWithFormat:@"%@/index.html", self.projectPath]; + + NSDictionary *taskResult = [self runTaskWithLaunchPath:@"/bin/cat" arguments:[NSMutableArray arrayWithObject:indexPath] returnType:kTaskReturnTypeAny]; + + NSString *response = taskResult[@"response"]; + + NSArray *matches = [regulareExpressionFramework matchesInString:response options:0 range:NSMakeRange(0, [response length])]; + + for (NSTextCheckingResult *match in matches) + return [NSString stringWithFormat:@"%@/%@", self.projectPath, [response substringWithRange:[match rangeAtIndex:1]]]; + + return [NSString stringWithFormat:@"%@/%@", self.projectPath ,@"Frameworks/"]; +} + +- (BOOL)checkObjjWarningsForPath:(NSArray*)paths +{ + DDLogVerbose(@"Checking path %@ with objj", paths); + + NSUInteger numberOfFiles = [paths count]; + NSUInteger i = 0; + NSMutableArray *objjPaths = [NSMutableArray array]; + + // We only want the objj files + for (i = 0; i < numberOfFiles; i++) + { + NSString *path = [paths objectAtIndex:i]; + + if ([self isObjjFile:path]) + [objjPaths addObject:path]; + } + + if (![objjPaths count]) + return YES; + + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidStartNotification object:self]; + + NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"-I", [self _getObjjIncludePaths], @"-m", nil]; + [arguments addObjectsFromArray:objjPaths]; + + NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"objj"] + arguments:arguments + returnType:kTaskReturnTypeStdOut]; + + NSInteger status = [taskResult[@"status"] intValue]; + NSString *response = taskResult[@"response"]; + + if (status == 0 && [response length] == 0) + { + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + return YES; + } + + NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; + + NSInteger numberOfErrors = [errors count]; + NSMutableArray *dicts = [NSMutableArray array]; + + // When checking of the entire project, we have to be ready to find errors + NSRegularExpression *regulareExpressionFramework = [NSRegularExpression regularExpressionWithPattern:@"([\\S\\s]*)(WARNING|ERROR) line ([0-9]*) in file\\:(.*)\\: ([\\S\\s]*)" options:0 error:nil]; + + NSString *filePath; + + if ([paths count] == 1) + filePath = [paths firstObject]; + + i = 0; + + for (i = 0; i < numberOfErrors; i++) + { + NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; + NSString *line; + NSString *path; + NSString *messageError; + + // We have an extra new line for the first error + if (i == 0) + error = (NSMutableString*)[error substringFromIndex:1]; + + NSArray *matches = [regulareExpressionFramework matchesInString:error options:0 range:NSMakeRange(0, [error length])]; + NSInteger j = 0; + + if (![matches count]) + { + // This shouldn't happen + DDLogVerbose(@"Error %@ doesn't respect any pattern", error); + + path = @""; + line = 0; + messageError = [NSString stringWithFormat:@"Compiling issue at line %@ of file %@:\n%@", line, path.lastPathComponent, error]; + } + + for (NSTextCheckingResult *match in matches) + { + for (j = 0; j < [match numberOfRanges]; j++) + { + switch (j) { + case 1: + messageError = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 3: + line = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 4: + path = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 5: + messageError = [NSString stringWithFormat:@"Compiling issue at line %@ of file %@:\n%@ \n%@", line, path.lastPathComponent, [error substringWithRange:[match rangeAtIndex:j]], messageError]; + break; + + default: + break; + } + } + } + + // Make sure to delete all the compilations issue form the tableView + [self pruneProcessingErrorsForProjectPath:path type:@"objj"]; + + // Path and realPath are needed, we can get error on ViewController2.j while checking ViewController.j. + // When recompiling ViewController.j, realPath is used to know which errors have to be erased form the table + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:[line intValue]], @"line", + messageError , @"message", + (filePath ? filePath:path), @"path", + @"objj", @"type", + path , @"realPath", + nil]; + + // Block to compare dicts + BOOL (^dictComparaison)(id obj, NSUInteger idx, BOOL *stop) = ^(id obj, NSUInteger idx, BOOL *stop){ + if ([obj valueForKey:@"line"] == [dict valueForKey:@"line"]) + { + // For an unknown reason, trim doesn't work + NSString *messsageObj = [obj valueForKey:@"message"]; + NSString *messsageDict = [dict valueForKey:@"message"]; + + messsageDict = [messsageDict stringByReplacingOccurrencesOfString:@" " withString:@""]; + messsageDict = [messsageDict stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + + messsageObj = [messsageObj stringByReplacingOccurrencesOfString:@" " withString:@""]; + messsageObj = [messsageObj stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + + if ([messsageDict isEqualToString:messsageObj]) + { + *stop = YES; + return YES; + } + } + + return NO; + }; + + NSUInteger isInDict = [dicts indexOfObjectPassingTest:dictComparaison]; + NSUInteger isInList = [self.errorList indexOfObjectPassingTest:dictComparaison]; + + // Compiler can show several times the same errors + if (isInDict == NSNotFound && isInList == NSNotFound) + [dicts addObject:dict]; + } + + [self performSelectorOnMainThread:@selector(objjCompilerDidGenerateError:) withObject:dicts waitUntilDone:YES]; + + self.isProcessing = NO; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + + return NO; +} + +- (IBAction)checkProjectWithObjj:(id)sender +{ + [self clearErrors:self]; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:self selector:@selector(objjDidEndNotification:) name:XCCObjjDidEndNotification object:nil]; + + [self performSelectorInBackground:@selector(checkObjjWarningsForPath:) withObject:self.xCodeCappTargetedFiles]; +} + +- (void)objjDidEndNotification:(NSNotification*)aNotification +{ + [self showObjjWarnings]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCObjjDidEndNotification object:nil]; +} + +- (void)objjCompilerDidGenerateError:(NSArray*)errors +{ + [self.errorListController addObjects:errors]; +} + #pragma mark - capp_lint @@ -1773,7 +2044,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (void)cappLintDidEndNotification:(NSNotification*)aNotification { - [self showCappLintErrors]; + [self showCappLintWarnings]; [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCCappLintDidEndNotification object:nil]; } @@ -1840,18 +2111,19 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; line = [errorWithoutPath substringToIndex:positionOfSecondColon]; - NSString *messageError = [NSString stringWithFormat:@"Code style issue: %@ \n%@", path.lastPathComponent, errorWithoutPath]; + NSString *messageError = [NSString stringWithFormat:@"Code style issue at line %@ of file %@:\n%@", line, path.lastPathComponent, errorWithoutPath]; NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:[line intValue]], @"line", messageError , @"message", path, @"path", + @"capp_lint", @"type", nil]; [dicts addObject:dict]; } - [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:NO]; + [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:YES]; 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 3efdd46af..28098a798 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,13 +2,13 @@ 1060 - 13C1021 - 5056 - 1265.19 - 697.40 + 14B17 + 6250 + 1343.15 + 755.00 - 5056 - 5056 + 6250 + 6250 NSArrayController @@ -108,6 +108,14 @@
+ + Check Compilation Issues + + 2147483647 + + + + Check Project Code Style @@ -254,7 +262,7 @@ YUBhcGFyYWppdGEuY29tCiAgICAKICAgIEFsZXhhbmRyZSBXaWxoZWxtCiAgICBhbGV4YW5kcmUud2ls aGVsbWZyQGdtYWlsLmNvbQoKT3JpZ2luYWwgQ29jb2EgdmVyc2lvbiBkZXZlbG9wZWQgYnk6CiAgICBB bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - .LucidaGrandeUI + YES 11 3100 @@ -353,15 +361,15 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 900}} {10000000000000, 10000000000000} NO
15 2 - {{1826, 825}, {550, 237}} - 1618478080 + {{890, 663}, {550, 237}} + 1613759488 Reporting NSPanel @@ -466,6 +474,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 4 + YES @@ -475,6 +484,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO + _doScroller: + 1 _doScroller: @@ -487,6 +498,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO + _doScroller: + _doScroller: @@ -518,7 +531,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 134217728 Clear - .LucidaGrandeUI + YES 12 787 @@ -589,17 +602,17 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ
- {{1440, -180}, {1920, 1058}} + {{0, 0}, {1440, 900}} {315, 99} {10000000000000, 10000000000000} - errorPanel + YES
3 2 - {{1964, 505}, {369, 415}} - 1618478080 + {{534, 231}, {369, 510}} + 1613235200 Preferences NSWindow @@ -619,7 +632,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 81}, {271, 18}} + {{16, 118}, {271, 18}} @@ -629,7 +642,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 0 Load the most recent project on launch - .LucidaGrandeUI + YES 13 1044 @@ -653,10 +666,10 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 51}, {241, 18}} + {{16, 88}, {241, 18}} - + YES -2080374784 @@ -675,10 +688,35 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO + + + 268 + {{16, 58}, {260, 18}} + + + + YES + + -2080374784 + 0 + Errors & Warnings panel always on top + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + 268 - {{16, 109}, {298, 18}} + {{16, 146}, {298, 18}} @@ -703,7 +741,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{15, 20}, {106, 17}} + {{16, 17}, {106, 17}} @@ -723,7 +761,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{124, 14}, {56, 26}} + {{125, 11}, {56, 26}} @@ -732,7 +770,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2076180416 2048 - .LucidaGrandeUI + YES 13 1301 @@ -798,13 +836,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {330, 139}} + {{1, 1}, {330, 176}} - {{17, 245}, {332, 155}} + {{17, 303}, {332, 192}} @@ -813,15 +851,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 Projects - - LucidaGrande - 11 - 16 - + - - 3 - MCAwLjgAA + + 6 + System + labelColor + @@ -841,7 +877,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{146, 12}, {171, 18}} + {{149, 12}, {171, 18}} @@ -866,7 +902,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 39}, {126, 17}} + {{16, 40}, {126, 17}} @@ -886,7 +922,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{146, 38}, {171, 18}} + {{149, 37}, {171, 18}} @@ -908,14 +944,64 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO + + + 268 + {{16, 93}, {192, 18}} + + + + YES + + -2080374784 + 0 + Look for compilation issues + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 67}, {301, 18}} + + + + YES + + -2080374784 + 0 + Use include path from the index-debug file + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + - {{1, 1}, {330, 66}} + {{1, 1}, {330, 124}} - + - {{17, 159}, {332, 82}} + {{17, 159}, {332, 140}} @@ -924,12 +1010,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 File processing - + - - 3 - MCAwLjgAA - + 1 @@ -1035,10 +1118,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ Code style - - 3 - MCAwLjgwMDAwMDAxMTkAA - + 1 @@ -1095,12 +1175,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 Update - + - - 3 - MCAwLjgAA - + 1 @@ -1109,12 +1186,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO
- {369, 415} + {369, 510}
- {{1440, -180}, {1920, 1058}} + {{0, 0}, {1440, 900}} {10000000000000, 10000000000000} xcc-prefs YES @@ -1129,7 +1206,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - + 256 @@ -1141,8 +1218,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{0, 8}, {716, 654}} - - YES 1 NO @@ -1151,11 +1226,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {716, 662} - - - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 900}} {10000000000000, 10000000000000} YES @@ -1186,7 +1259,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - + 256 @@ -1194,6 +1267,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{18, 22}, {251, 17}} + _NS:397 {251, 750} @@ -1216,6 +1290,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{269, 13}, {74, 32}} + + _NS:9 YES @@ -1239,6 +1315,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{20, 45}, {317, 20}} + _NS:9 {250, 250} @@ -1247,10 +1324,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {357, 84} + + _NS:21 - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 900}} {10000000000000, 10000000000000} updatingCappuccinoPanel YES @@ -1258,7 +1337,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - + delegate @@ -1507,6 +1586,30 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 30N-ga-LBo + + + save: + + + + kBr-PF-Ng7 + + + + save: + + + + HyN-S0-KXD + + + + save: + + + + A92-fj-Uci + openXcodeProject: @@ -1531,14 +1634,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 774 - - - checkProjectWithCappLint: - - - - cNV-We-Why - clearErrors: @@ -1619,6 +1714,22 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ HJ3-bt-3EP + + + checkProjectWithCappLint: + + + + bwf-Gu-ART + + + + checkProjectWithObjj: + + + + oPW-bl-Ydt + values.XCCReopenLastProject @@ -1965,6 +2076,26 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ dP2-Fc-one + + + value: values.XCCPanelStyleUtility + + + + + + value: values.XCCPanelStyleUtility + value + values.XCCPanelStyleUtility + + NSValidatesImmediately + + + 2 + + + uUW-Ro-3aA + value: values.updateCappuccinoWithLastVersionOfMasterBranch @@ -2021,6 +2152,22 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ uwx-aq-p86 + + + enabled: projectPath.length + + + + + + enabled: projectPath.length + enabled + projectPath.length + 2 + + + a7g-oH-Wxj + value: values.XCCAutoOpenShowNotificationErrors @@ -2061,6 +2208,46 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ aof-Pn-nzf + + + value: values.kDefaultXCCUseDebugFrameworkWithObjj + + + + + + value: values.kDefaultXCCUseDebugFrameworkWithObjj + value + values.kDefaultXCCUseDebugFrameworkWithObjj + + NSValidatesImmediately + + + 2 + + + 8Eb-cw-Tsj + + + + value: values.XCCShouldProcessObjj + + + + + + value: values.XCCShouldProcessObjj + value + values.XCCShouldProcessObjj + + NSValidatesImmediately + + + 2 + + + 4tf-7Y-tid + @@ -2115,6 +2302,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + @@ -2366,6 +2554,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + @@ -2466,9 +2655,11 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 848 - + + + @@ -2699,6 +2890,50 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + + wDc-Ir-hmE + + + + + + + + beY-m1-Aia + + + + + wGK-ie-cgv + + + + + + + + fJB-o4-AhU + + + + + SNH-t4-Ay7 + + + + + GDP-7Q-0W5 + + + + + + + + QpC-n8-rmF + + +
@@ -2730,6 +2965,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + {182, 582.5} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2740,10 +2976,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + {239, 248.5} com.apple.InterfaceBuilder.CocoaPlugin - - + + + {-183.5, 363} com.apple.InterfaceBuilder.CocoaPlugin @@ -2757,6 +2995,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2906,9 +3145,11 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2926,6 +3167,18 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 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 + + ToolTip @@ -2958,12 +3211,20 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + 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 @@ -2986,6 +3247,30 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 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 + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + @@ -3002,9 +3287,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ id id id - id - id - id @@ -3023,18 +3305,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ openHelp: id - - openPreferences: - id - - - showInFinder: - id - - - updateCappuccino: - id - NSPanel @@ -3092,7 +3362,53 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ IBProjectSource - ./Classes/AppController.h + ../XcodeCapp/AppController.h + + + + AppController + + id + id + id + id + id + id + id + + + + createProject: + id + + + loadProject: + id + + + openAbout: + id + + + openHelp: + id + + + openPreferences: + id + + + showInFinder: + id + + + updateCappuccino: + id + + + + IBProjectSource + ../XcodeCapp/AppController.m @@ -3168,7 +3484,373 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ IBProjectSource - ./Classes/XcodeCapp.h + ../XcodeCapp/XcodeCapp.h + + + + XcodeCapp + + id + id + id + id + id + id + id + + + + checkProjectWithCappLint: + id + + + checkProjectWithObjj: + id + + + clearErrors: + id + + + openErrorInEditor: + id + + + openErrorsPanel: + id + + + openXcodeProject: + id + + + synchronizeProject: + id + + + + IBProjectSource + ../XcodeCapp/XcodeCapp.m + + + + + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSArrayController + NSObjectController + + IBFrameworkSource + AppKit.framework/Headers/NSArrayController.h + + + + NSBox + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSBox.h + + + + NSButton + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSButton.h + + + + NSButtonCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSButtonCell.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSController + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSController.h + + + + NSFontManager + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSImageCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSImageCell.h + + + + NSImageView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSImageView.h + + + + NSManagedObjectContext + NSObject + + IBFrameworkSource + CoreData.framework/Headers/NSManagedObjectContext.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSMenuItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSMenuItemCell + NSButtonCell + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItemCell.h + + + + NSObjectController + NSController + + IBFrameworkSource + AppKit.framework/Headers/NSObjectController.h + + + + NSPanel + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSPanel.h + + + + NSPopUpButton + NSButton + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButton.h + + + + NSPopUpButtonCell + NSMenuItemCell + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButtonCell.h + + + + NSProgressIndicator + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSProgressIndicator.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSScrollView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSScrollView.h + + + + NSScroller + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSScroller.h + + + + NSTableColumn + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableColumn.h + + + + NSTableView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSUserDefaultsController + NSController + + IBFrameworkSource + AppKit.framework/Headers/NSUserDefaultsController.h + + + + NSView + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + PDFView + NSView + + id + id + id + id + id + id + id + id + id + id + + + + goBack: + id + + + goForward: + id + + + goToFirstPage: + id + + + goToLastPage: + id + + + goToNextPage: + id + + + goToPreviousPage: + id + + + selectAll: + id + + + takeBackgroundColorFrom: + id + + + zoomIn: + id + + + zoomOut: + id + + + + IBFrameworkSource + Quartz.framework/Frameworks/PDFKit.framework/Headers/PDFView.h @@ -3180,10 +3862,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin.macosx - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 @@ -3191,8 +3869,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ YES 3 - {11, 11} - {10, 3} + {12, 12} + {10, 2} {15, 15} {128, 128} diff --git a/Tools/capp/Resources/Templates/Application/Jakefile b/Tools/capp/Resources/Templates/Application/Jakefile index 6207c9b34..08a8c0c8b 100644 --- a/Tools/capp/Resources/Templates/Application/Jakefile +++ b/Tools/capp/Resources/Templates/Application/Jakefile @@ -55,13 +55,13 @@ task ("build", ["default"], function() task ("debug", function() { - ENV["CONFIGURATION"] = "Debug"; + configuration = ENV["CONFIGURATION"] = "Debug"; JAKE.subjake(["."], "build", ENV); }); task ("release", function() { - ENV["CONFIGURATION"] = "Release"; + configuration = ENV["CONFIGURATION"] = "Release"; JAKE.subjake(["."], "build", ENV); }); @@ -105,7 +105,7 @@ function updateApplicationSize() { print("Calculating application file sizes..."); - var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }), format = CFPropertyList.sniffedFormatOfString(contents), plist = CFPropertyList.propertyListFromString(contents), totalBytes = {executable:0, data:0, mhtml:0}; @@ -113,7 +113,7 @@ function updateApplicationSize() // Get the size of all framework executables and sprite data var frameworksDir = "Frameworks"; - if (ENV["CONFIGURATION"] === "Debug") + if (configuration === "Debug") frameworksDir = FILE.join(frameworksDir, "Debug"); var frameworks = FILE.list(frameworksDir); @@ -137,7 +137,7 @@ function updateApplicationSize() addBundleFileSizes(themePath, totalBytes); // Add sizes for the app - addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes); print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); @@ -149,7 +149,7 @@ function updateApplicationSize() plist.setValueForKey("CPApplicationSize", dict); - FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); + FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); } function addBundleFileSizes(bundlePath, totalBytes) diff --git a/Tools/capp/Resources/Templates/NibApplication/Jakefile b/Tools/capp/Resources/Templates/NibApplication/Jakefile index 6207c9b34..08a8c0c8b 100644 --- a/Tools/capp/Resources/Templates/NibApplication/Jakefile +++ b/Tools/capp/Resources/Templates/NibApplication/Jakefile @@ -55,13 +55,13 @@ task ("build", ["default"], function() task ("debug", function() { - ENV["CONFIGURATION"] = "Debug"; + configuration = ENV["CONFIGURATION"] = "Debug"; JAKE.subjake(["."], "build", ENV); }); task ("release", function() { - ENV["CONFIGURATION"] = "Release"; + configuration = ENV["CONFIGURATION"] = "Release"; JAKE.subjake(["."], "build", ENV); }); @@ -105,7 +105,7 @@ function updateApplicationSize() { print("Calculating application file sizes..."); - var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }), format = CFPropertyList.sniffedFormatOfString(contents), plist = CFPropertyList.propertyListFromString(contents), totalBytes = {executable:0, data:0, mhtml:0}; @@ -113,7 +113,7 @@ function updateApplicationSize() // Get the size of all framework executables and sprite data var frameworksDir = "Frameworks"; - if (ENV["CONFIGURATION"] === "Debug") + if (configuration === "Debug") frameworksDir = FILE.join(frameworksDir, "Debug"); var frameworks = FILE.list(frameworksDir); @@ -137,7 +137,7 @@ function updateApplicationSize() addBundleFileSizes(themePath, totalBytes); // Add sizes for the app - addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes); print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); @@ -149,7 +149,7 @@ function updateApplicationSize() plist.setValueForKey("CPApplicationSize", dict); - FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); + FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); } function addBundleFileSizes(bundlePath, totalBytes) diff --git a/Tools/nib2cib/NSCell.j b/Tools/nib2cib/NSCell.j index 01307538a..8be4737b8 100644 --- a/Tools/nib2cib/NSCell.j +++ b/Tools/nib2cib/NSCell.j @@ -51,6 +51,7 @@ int _lineBreakMode @accessors(readonly, getter=lineBreakMode); CPFormatter _formatter @accessors(readonly, getter=formatter); int _tag @accessors(readonly, getter=tag); + BOOL _usesSingleLineMode @accessors(readonly, getter=usesSingleLineMode); } - (id)initWithCoder:(CPCoder)aCoder @@ -62,22 +63,23 @@ var flags = [aCoder decodeIntForKey:@"NSCellFlags"], flags2 = [aCoder decodeIntForKey:@"NSCellFlags2"]; - _state = (flags & 0x80000000) ? CPOnState : CPOffState; - _isHighlighted = (flags & 0x40000000) ? YES : NO; - _isEnabled = (flags & 0x20000000) ? NO : YES; - _isEditable = (flags & 0x10000000) ? YES : NO; - _isBordered = (flags & 0x00800000) ? YES : NO; - _isBezeled = (flags & 0x00400000) ? YES : NO; - _isSelectable = (flags & 0x00200000) ? YES : NO; - _isScrollable = (flags & 0x00100000) ? YES : NO; - _isContinuous = (flags & 0x00080100) ? YES : NO; - _scrolls = (flags & 0x00100000) && (flags & 0x00000040); - _wraps = (flags & 0x00100000 === 0) && (flags & 0x00000040 === 0); - _truncates = !(flags & 0x00100000) && (flags & 0x00000040); - _alignment = (flags2 & 0x1c000000) >> 26; - _lineBreakMode = (flags2 & 0x0E00) >> 9; - _controlSize = (flags2 & 0xE0000) >> 17; - _sendsActionOnEndEditing = (flags2 & 0x00400000) ? YES : NO; + _state = (flags & 0x80000000) ? CPOnState : CPOffState; + _isHighlighted = (flags & 0x40000000) ? YES : NO; + _isEnabled = (flags & 0x20000000) ? NO : YES; + _isEditable = (flags & 0x10000000) ? YES : NO; + _isBordered = (flags & 0x00800000) ? YES : NO; + _isBezeled = (flags & 0x00400000) ? YES : NO; + _isSelectable = (flags & 0x00200000) ? YES : NO; + _isScrollable = (flags & 0x00100000) ? YES : NO; + _isContinuous = (flags & 0x00080100) ? YES : NO; + _scrolls = (flags & 0x00100000) && (flags & 0x00000040) ? YES : NO; + _wraps = !(flags & 0x00100000) && !(flags & 0x00000040) ? YES : NO; + _truncates = (flags & 0x00100000) && !(flags & 0x00000040) ? YES : NO; + _alignment = (flags2 & 0x1c000000) >> 26; + _lineBreakMode = (flags2 & 0x0E00) >> 9; + _controlSize = (flags2 & 0xE0000) >> 17; + _sendsActionOnEndEditing = (flags2 & 0x00400000) ? YES : NO; + _usesSingleLineMode = (flags2 & 0xF4240) ? YES : NO; _tag = [aCoder decodeIntForKey:@"NSTag"]; diff --git a/Tools/nib2cib/NSDatePicker.j b/Tools/nib2cib/NSDatePicker.j index d3af0690c..a90983ec5 100644 --- a/Tools/nib2cib/NSDatePicker.j +++ b/Tools/nib2cib/NSDatePicker.j @@ -180,7 +180,7 @@ var NSDatePickerDefaultSize = 22, CPDateFormatter _formatter @accessors(getter=formatter); CPInteger _datePickerMode @accessors(getter=datePickerMode); CPInteger _datePickerElements @accessors(getter=datePickerElements); - CPinteger _datePickerType @accessors(getter=datePickerType); + CPInteger _datePickerType @accessors(getter=datePickerType); double _timeInterval @accessors(getter=timeInterval); CPColor _textColor @accessors(getter=textColor); CPColor _backgroundColor @accessors(getter=backgroundColor); diff --git a/Tools/nib2cib/NSImageView.j b/Tools/nib2cib/NSImageView.j index 909089fdf..02fd50f52 100644 --- a/Tools/nib2cib/NSImageView.j +++ b/Tools/nib2cib/NSImageView.j @@ -67,7 +67,7 @@ @end // NSImageCell - +@typedef NSImageAlignment NSImageAlignCenter = 0; NSImageAlignTop = 1; NSImageAlignTopLeft = 2; @@ -78,12 +78,13 @@ NSImageAlignBottomLeft = 6; NSImageAlignBottomRight = 7; NSImageAlignRight = 8; - +@typedef NSImageScaling NSImageScaleProportionallyDown = 0; NSImageScaleAxesIndependently = 1; NSImageScaleNone = 2; NSImageScaleProportionallyUpOrDown = 3; +@typedef NSImageFrameStyle NSImageFrameNone = 0; NSImageFramePhoto = 1; NSImageFrameGrayBezel = 2; diff --git a/Tools/nib2cib/NSTextField.j b/Tools/nib2cib/NSTextField.j index 711fb8f7e..cb0fa306b 100644 --- a/Tools/nib2cib/NSTextField.j +++ b/Tools/nib2cib/NSTextField.j @@ -54,6 +54,10 @@ [self setPlaceholderString:[cell placeholderString]]; + [self _setUsesSingleLineMode:[cell usesSingleLineMode]]; + [self _setWraps:[cell wraps]]; + [self _setScrolls:[cell scrolls]]; + var textColor = [cell textColor], defaultColor = [self currentValueForThemeAttribute:@"text-color"];