diff --git a/AppKit/CPAlert.j b/AppKit/CPAlert.j index fad82a6c2..180f6e952 100644 --- a/AppKit/CPAlert.j +++ b/AppKit/CPAlert.j @@ -631,7 +631,10 @@ CPCriticalAlertStyle = 2; - (@action)_takeReturnCodeFrom:(id)aSender { if ([_window isSheet]) + { [CPApp endSheet:_window returnCode:[aSender tag]]; + [_window orderOut:nil]; + } else { [CPApp abortModal]; diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index f92a27412..f62f1baec 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -33,7 +33,8 @@ var CPMainCibFile = @"CPMainCibFile", - CPMainCibFileHumanFriendly = @"Main cib file base name"; + CPMainCibFileHumanFriendly = @"Main cib file base name", + CPEventModifierFlags = 0; CPApp = nil; @@ -575,6 +576,7 @@ CPRunContinuesResponse = -1002; - (void)sendEvent:(CPEvent)anEvent { _currentEvent = anEvent; + CPEventModifierFlags = [anEvent modifierFlags]; #if PLATFORM(DOM) var willPropagate = [[[anEvent window] platformWindow] _willPropagateCurrentDOMEvent]; @@ -931,15 +933,21 @@ CPRunContinuesResponse = -1002; */ - (void)beginSheet:(CPWindow)aSheet modalForWindow:(CPWindow)aWindow modalDelegate:(id)aModalDelegate didEndSelector:(SEL)aDidEndSelector contextInfo:(id)aContextInfo { - var styleMask = [aSheet styleMask]; - if (!(styleMask & CPDocModalWindowMask)) + if ([aWindow isSheet]) { - [CPException raise:CPInternalInconsistencyException reason:@"Currently only CPDocModalWindowMask style mask is supported for attached sheets"]; + [CPException raise:CPInternalInconsistencyException reason:@"The target window of beginSheet: cannot be a sheet"]; return; } - [aWindow orderFront:self]; - [aSheet setPlatformWindow:[aWindow platformWindow]]; + [aSheet._windowView _enableSheet:YES]; + + // -dw- if a sheet is already visible, we skip this since it serves no purpose and causes + // orderOut: to be called on the sheet, which is not what we want. + if (![aWindow isVisible]) + { + [aWindow orderFront:self]; + [aSheet setPlatformWindow:[aWindow platformWindow]]; + } [aWindow _attachSheet:aSheet modalDelegate:aModalDelegate didEndSelector:aDidEndSelector contextInfo:aContextInfo]; } @@ -968,7 +976,7 @@ CPRunContinuesResponse = -1002; if (context != nil && context["sheet"] === sheet) { context["returnCode"] = returnCode; - [aWindow _detachSheetWindow]; + [aWindow _endSheet]; return; } } @@ -1190,7 +1198,10 @@ _CPRunModalLoop = function(anEvent) // yet it works when there is a modal window. Maybe it starts its own modal session, but interaction with the original // modal window seems to continue working as well. Regardless of correctness, this solution beats popovers not working // at all from sheets. - if (theWindow == modalSession._window || [theWindow worksWhenModal] || ([theWindow isKindOfClass:_CPAttachedWindow] && [[theWindow targetView] window] === modalSession._window)) + if (theWindow == modalSession._window || + [theWindow worksWhenModal] || + [theWindow attachedSheet] == modalSession._window || // -dw- allow modal parent of sheet to be repositioned + ([theWindow isKindOfClass:_CPAttachedWindow] && [[theWindow targetView] window] === modalSession._window)) [theWindow sendEvent:anEvent]; }; @@ -1379,3 +1390,16 @@ var _CPAppBootstrapperActions = nil; } @end + + +@implementation CPEvent (CPApplicationModifierFlags) + +/*! + Returns the currently pressed modifier flags. +*/ ++ (unsigned)modifierFlags +{ + return CPEventModifierFlags; +} + +@end diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 3e22ad838..dc13ae452 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -946,36 +946,38 @@ _disableSetContent = YES; var arrangedObjects = [self arrangedObjects], - index = [anIndexSet lastIndex], position = CPNotFound, newSelectionIndexes = [_selectionIndexes copy]; - while (index !== CPNotFound) - { - var object = [arrangedObjects objectAtIndex:index]; - - // First try the simple case which should work if there are no sort descriptors. - if ([_contentObject objectAtIndex:index] === object) - [_contentObject removeObjectAtIndex:index]; - else + [anIndexSet enumerateIndexesWithOptions:CPEnumerationReverse + usingBlock:function(anIndex) { - // Since we don't have a reverse mapping between the sorted order and the - // unsorted one, we'll just simply have to remove an arbitrary pointer. It might - // be the 'wrong' one - as in not the one the user selected - but the wrong - // one is still just another pointer to the same object, so the user will not - // be able to see any difference. - contentIndex = [_contentObject indexOfObjectIdenticalTo:object]; - [_contentObject removeObjectAtIndex:contentIndex]; - } - [arrangedObjects removeObjectAtIndex:index]; + var object = [arrangedObjects objectAtIndex:anIndex]; - // Deselect this row if it was selected, and either way shift all selection indexes - // following it up by 1. - [newSelectionIndexes removeIndex:index]; - [newSelectionIndexes shiftIndexesStartingAtIndex:index by:-1]; + // First try the simple case which should work if there are no sort descriptors. + if ([_contentObject objectAtIndex:anIndex] === object) + [_contentObject removeObjectAtIndex:anIndex]; + else + { + // Since we don't have a reverse mapping between the sorted order and the + // unsorted one, we'll just simply have to remove an arbitrary pointer. It might + // be the 'wrong' one - as in not the one the user selected - but the wrong + // one is still just another pointer to the same object, so the user will not + // be able to see any difference. + contentIndex = [_contentObject indexOfObjectIdenticalTo:object]; + [_contentObject removeObjectAtIndex:contentIndex]; + } + [arrangedObjects removeObjectAtIndex:anIndex]; + + if (!_avoidsEmptySelection || [newSelectionIndexes count] > 1) + { + [newSelectionIndexes removeIndex:anIndex]; + [newSelectionIndexes shiftIndexesStartingAtIndex:anIndex by:-1]; + } + else if ([newSelectionIndexes lastIndex] !== anIndex) + [newSelectionIndexes shiftIndexesStartingAtIndex:anIndex by:-1]; + }]; - index = [anIndexSet indexLessThanIndex:index]; - } // Allow handlesContentAsCompoundValue reverse sets to trigger. [[CPBinder getBinding:@"contentArray" forObject:self] _contentArrayDidChange]; _disableSetContent = NO; diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index 1b05ed895..8dd1686d5 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -67,13 +67,28 @@ CPHTML5DragAndDropSourceYOffBy1 = 1 << 26; CPSOPDisabledFromFileURLs = 1 << 27; +// element.style.font can be set for an element not in the DOM. +CPInputSetFontOutsideOfDOM = 1 << 28; + +// Input elements have 1 px of extra padding on the left regardless of padding setting. +CPInput1PxLeftPadding = 1 << 29; +CPInputOnInputEventFeature = 1 << 30; + +// When an absolutely positioned div (CPView) with an absolutely positioned canvas in it (CPView with drawRect:) moves things on top of the canvas +// (subviews) don't redraw correctly. E.g. if you have a bunch of text fields in a CPBox in a sheet which animates in, some of the text fields might +// not be visible because the CPBox has a canvas at the bottom and the box moved form offscreen to onscreen. +// This bug is probably very related: https://bugs.webkit.org/show_bug.cgi?id=67203 +CPCanvasParentDrawErrorsOnMovementBug = 1 << 0; + var USER_AGENT = "", PLATFORM_ENGINE = CPUnknownBrowserEngine, - PLATFORM_FEATURES = 0; + PLATFORM_FEATURES = 0, + PLATFORM_BUGS = 0; // default these features to true PLATFORM_FEATURES |= CPInputTypeCanBeChangedFeature; +PLATFORM_FEATURES |= CPInputSetFontOutsideOfDOM; if (typeof window !== "undefined" && typeof window.navigator !== "undefined") USER_AGENT = window.navigator.userAgent; @@ -99,6 +114,9 @@ else if (typeof window !== "undefined" && window.attachEvent) // Must follow Ope PLATFORM_FEATURES |= CPOpacityRequiresFilterFeature; PLATFORM_FEATURES &= ~CPInputTypeCanBeChangedFeature; + + // Tested in Internet Explore 8 and 9. + PLATFORM_FEATURES &= ~CPInputSetFontOutsideOfDOM; } // WebKit @@ -135,8 +153,16 @@ else if (USER_AGENT.indexOf("AppleWebKit/") != -1) if (majorVersion < 532 || (majorVersion === 532 && minorVersion < 6)) PLATFORM_FEATURES |= CPHTML5DragAndDropSourceYOffBy1; + // This is supposedly fixed in webkit r123603. Seems to work in Chrome 21 but not Safari 6.0. + if (majorVersion < 537) + PLATFORM_FEATURES |= CPInput1PxLeftPadding; + if (USER_AGENT.indexOf("Chrome") === CPNotFound) PLATFORM_FEATURES |= CPSOPDisabledFromFileURLs; + + // Assume this bug was introduced around Safari 5.1/Chrome 16. This could probably be tighter. + if (majorVersion > 533) + PLATFORM_BUGS |= CPCanvasParentDrawErrorsOnMovementBug; } // KHTML @@ -160,6 +186,9 @@ else if (USER_AGENT.indexOf("Gecko") !== -1) // Must follow KHTML check. if (version < 3.0) PLATFORM_FEATURES |= CPJavaScriptMouseWheelValues_8_15; + + // Some day this might be fixed and should be version prefixed. No known fixed version yet. + PLATFORM_FEATURES |= CPInput1PxLeftPadding; } // Feature Specific Checks @@ -185,6 +214,16 @@ if (typeof document != "undefined") PLATFORM_FEATURES |= CPJavaScriptInnerTextFeature; else if (DOMElement.textContent != undefined) PLATFORM_FEATURES |= CPJavaScriptTextContentFeature; + + var DOMInputElement = document.createElement("input"); + if ("oninput" in DOMInputElement) + PLATFORM_FEATURES |= CPInputOnInputEventFeature; + else if (typeof DOMInputElement.setAttribute === "function") + { + DOMInputElement.setAttribute("oninput", "return;"); + if (typeof DOMInputElement.oninput === "function") + PLATFORM_FEATURES |= CPInputOnInputEventFeature; + } } function CPFeatureIsCompatible(aFeature) @@ -192,6 +231,11 @@ function CPFeatureIsCompatible(aFeature) return PLATFORM_FEATURES & aFeature; } +function CPPlatformHasBug(aBug) +{ + return PLATFORM_BUGS & aBug; +} + function CPBrowserIsEngine(anEngine) { return PLATFORM_ENGINE === anEngine; diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 25cb70f99..cae59c446 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -516,7 +516,7 @@ var CPControlBlackColor = [CPColor blackColor]; */ - (CPString)stringValue { - if (_formatter && _value !== undefined && _value !== nil) + if (_formatter && _value !== undefined) { var formattedValue = [self hasThemeState:CPThemeStateEditing] ? [_formatter editingStringForObjectValue:_value] : [_formatter stringForObjectValue:_value]; diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index a5fe949bd..543dcaadd 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -204,6 +204,8 @@ var _CPEventPeriodicEventPeriod = 0, BOOL _isARepeat; unsigned _keyCode; DOMEvent _DOMEvent; + int _data1; + int _data2; float _deltaX; float _deltaY; @@ -517,6 +519,16 @@ var _CPEventPeriodicEventPeriod = 0, return _DOMEvent; } +- (int)data1 +{ + return _data1; +} + +- (int)data2 +{ + return _data2; +} + // Getting Scroll Wheel Event Information /*! Returns the change in the x-axis for a mouse event. @@ -630,6 +642,29 @@ var _CPEventPeriodicEventPeriod = 0, _CPEventPeriodicEventTimer = nil; } +- (CPString)description +{ + switch (_type) + { + case CPKeyDown: + case CPKeyUp: + case CPFlagsChanged: + return [CPString stringWithFormat:@"CPEvent: type=%d loc=%@ time=%.1f flags=0x%X win=%@ winNum=%d ctxt=%@ chars=\"%@\" unmodchars=\"%@\" repeat=%d keyCode=%d", _type, CPStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _characters, _charactersIgnoringModifiers, _isARepeat, _keyCode]; + case CPLeftMouseDown: + case CPLeftMouseUp: + case CPRightMouseDown: + case CPRightMouseUp: + case CPMouseMoved: + case CPLeftMouseDragged: + case CPRightMouseDragged: + case CPMouseEntered: + case CPMouseExited: + return [CPString stringWithFormat:@"CPEvent: type=%d loc=%@ time=%.1f flags=0x%X win=%@ winNum=%d ctxt=%@ evNum=%d click=%d buttonNumber=%d pressure=%f", _type, CPStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _eventNumber, _clickCount, [self buttonNumber], _pressure]; + default: + return [CPString stringWithFormat:@"CPEvent: type=%d loc=%@ time=%.1f flags=0x%X win=%@ winNum=%d ctxt=%@ subtype=%d data1=%d data2=%d", _type, CPStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _subtype, _data1, _data2]; + } +} + @end function _CPEventFirePeriodEvent() diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 1794085a3..c49b70aa1 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -190,7 +190,7 @@ var CPBindingOperationAnd = 0, var destination = [_info objectForKey:CPObservedObjectKey], keyPath = [_info objectForKey:CPObservedKeyPathKey], options = [_info objectForKey:CPOptionsKey], - newValue = [_source valueForKeyPath:aBinding]; + newValue = [self valueForBinding:aBinding]; newValue = [self reverseTransformValue:newValue withOptions:options]; @@ -199,6 +199,11 @@ var CPBindingOperationAnd = 0, [self unsuppressSpecificNotificationFromObject:destination keyPath:keyPath]; } +- (id)valueForBinding:(CPString)aBinding +{ + return [_source valueForKeyPath:aBinding]; +} + - (void)observeValueForKeyPath:(CPString)aKeyPath ofObject:(id)anObject change:(CPDictionary)changes context:(id)context { if (!changes) @@ -546,20 +551,35 @@ CPNotApplicableMarker = @"CPNotApplicableMarker"; CPNullMarker = @"CPNullMarker"; // Binding name constants -CPAlignmentBinding = @"alignment"; -CPEditableBinding = @"editable"; -CPEnabledBinding = @"enabled"; -CPFontBinding = @"font"; -CPHiddenBinding = @"hidden"; -CPSelectedIndexBinding = @"selectedIndex"; -CPTextColorBinding = @"textColor"; -CPToolTipBinding = @"toolTip"; -CPValueBinding = @"value"; -CPValueURLBinding = @"valueURL"; -CPValuePathBinding = @"valuePath"; -CPDataBinding = @"data"; -CPContentBinding = @"content"; -CPContentValuesBinding = @"contentValues"; +CPAlignmentBinding = @"alignment"; +CPContentArrayBinding = @"contentArray"; +CPContentBinding = @"content"; +CPContentObjectBinding = @"contentObject"; +CPContentObjectsBinding = @"contentObjects"; +CPContentValuesBinding = @"contentValues"; +CPEditableBinding = @"editable"; +CPEnabledBinding = @"enabled"; +CPFontBinding = @"font"; +CPFontNameBinding = @"fontName"; +CPFontBoldBinding = @"fontBold"; +CPHiddenBinding = @"hidden"; +CPFilterPredicateBinding = @"filterPredicate"; +CPPredicateBinding = @"predicate"; +CPSelectedIndexBinding = @"selectedIndex"; +CPSelectedLabelBinding = @"selectedLabel"; +CPSelectedObjectBinding = @"selectedObject"; +CPSelectedObjectsBinding = @"selectedObjects"; +CPSelectedTagBinding = @"selectedTag"; +CPSelectedValueBinding = @"selectedValue"; +CPSelectedValuesBinding = @"selectedValues"; +CPSelectionIndexesBinding = @"selectionIndexes"; +CPTextColorBinding = @"textColor"; +CPTitleBinding = @"title"; +CPToolTipBinding = @"toolTip"; +CPValueBinding = @"value"; +CPValueURLBinding = @"valueURL"; +CPValuePathBinding = @"valuePath"; +CPDataBinding = @"data"; //Binding options constants CPAllowsEditingMultipleValuesSelectionBindingOption = @"CPAllowsEditingMultipleValuesSelection"; diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index 84ab5adcc..98f837d4c 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -23,10 +23,10 @@ @import @import "CPButton.j" +@import "CPKeyValueBinding.j" @import "CPMenu.j" @import "CPMenuItem.j" - var VISIBLE_MARGIN = 7.0; CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); @@ -247,22 +247,6 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); return _selectedIndex; } -/*! - @ignore -*/ -- (int)_selectedTag -{ - return [[self selectedItem] tag]; -} - -/*! - @ignore -*/ -- (void)_setSelectedTag:(int)aTag -{ - [self selectItemWithTag:aTag]; -} - // Setting the Current Selection /*! Selects the specified menu item. @@ -787,16 +771,286 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)_reverseSetBinding { - var binderClass = [[self class] _binderClassForBinding:CPSelectedIndexBinding], - theBinding = [binderClass getBinding:CPSelectedIndexBinding forObject:self]; - - [theBinding reverseSetValueFor:@"objectValue"]; + [_CPPopUpButtonSelectionBinder reverseSetValueForObject:self]; [super _reverseSetBinding]; } @end +@implementation CPPopUpButton (BindingSupport) + ++ (Class)_binderClassForBinding:(CPString)aBinding +{ + if (aBinding == CPSelectedIndexBinding || + aBinding == CPSelectedObjectBinding || + aBinding == CPSelectedTagBinding || + aBinding == CPSelectedValueBinding || + aBinding == CPContentBinding || + aBinding == CPContentObjectsBinding || + aBinding == CPContentValuesBinding) + { + var capitalizedBinding = aBinding.charAt(0).toUpperCase() + aBinding.substr(1); + + return [CPClassFromString(@"_CPPopUpButton" + capitalizedBinding + "Binder") class]; + } + + return [super _binderClassForBinding:aBinding]; +} + +@end + +@implementation _CPPopUpButtonContentBinder : CPBinder +{ +} + +- (CPInteger)_getInsertNullOffset +{ + var options = [_info objectForKey:CPOptionsKey]; + + return [options objectForKey:CPInsertsNullPlaceholderBindingOption] ? 1 : 0; +} + +- (CPString)_getNullPlaceholder +{ + var options = [_info objectForKey:CPOptionsKey], + placeholder = [options objectForKey:CPNullPlaceholderBindingOption] || @""; + + if (placeholder === [CPNull null]) + placeholder = @""; + + return placeholder; +} + +- (id)transformValue:(CPArray)contentArray withOptions:(CPDictionary)options +{ + // Desactivate the full array transformation forced by super because we don't want this. We want individual transformations (see below). + return contentArray; +} + +- (void)setValue:(CPArray)contentArray forBinding:(CPString)aBinding +{ + [self _setContent:contentArray]; + [self _setContentValuesIfNeeded:contentArray]; +} + +- (void)valueForBinding:(CPString)aBinding +{ + return [self _content]; +} + +- (void)_setContent:(CPArray)aValue +{ + var count = [aValue count], + options = [_info objectForKey:CPOptionsKey], + offset = [self _getInsertNullOffset]; + + if (count + offset != [_source numberOfItems]) + { + [_source removeAllItems]; + + if (offset) + [_source addItemWithTitle:[self _getNullPlaceholder]]; + + for (var i = 0; i < count; i++) + { + var item = [[CPMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:nil]; + [self _setValue:[aValue objectAtIndex:i] forItem:item withOptions:options]; + [_source addItem:item]; + } + } + else + { + for (var i = 0; i < count; i++) + { + [self _setValue:[aValue objectAtIndex:i] forItem:[_source itemAtIndex:i + offset] withOptions:options]; + } + } +} + +- (void)_setContentValuesIfNeeded:(CPArray)values +{ + var offset = [self _getInsertNullOffset]; + + if (![_source infoForBinding:CPContentValuesBinding]) + { + if (offset) + [[_source itemAtIndex:0] setTitle:[self _getNullPlaceholder]]; + + var count = [values count]; + + for (var i = 0; i < count; i++) + [[_source itemAtIndex:i + offset] setTitle:[[values objectAtIndex:i] description]]; + } +} + +- (void)_setValue:(id)aValue forItem:(CPMenuItem)aMenuItem withOptions:(CPDictionary)options +{ + var value = [self _transformValue:aValue withOptions:options]; + [aMenuItem setRepresentedObject:value]; +} + +- (id)_transformValue:(id)aValue withOptions:(CPDictionary)options +{ + return [super transformValue:aValue withOptions:options]; +} + +- (CPArray)_content +{ + return [_source valueForKeyPath:@"itemArray.representedObject"]; +} + +@end + +@implementation _CPPopUpButtonContentValuesBinder : _CPPopUpButtonContentBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [super _setContent:aValue]; +} + +- (void)_setValue:(id)aValue forItem:(CPMenuItem)aMenuItem withOptions:(CPDictionary)options +{ + if (aValue === [CPNull null]) + aValue = nil; + + var value = [self _transformValue:aValue withOptions:options]; + [aMenuItem setTitle:value]; +} + +- (CPArray)_content +{ + return [_source valueForKeyPath:@"itemArray.title"]; +} + +@end + +var binderForObject = {}; + +@implementation _CPPopUpButtonSelectionBinder : CPBinder +{ + CPString _selectionBinding @accessors; +} + +- (id)initWithBinding:(CPString)aBinding name:(CPString)aName to:(id)aDestination keyPath:(CPString)aKeyPath options:(CPDictionary)options from:(id)aSource +{ + self = [super initWithBinding:aBinding name:aName to:aDestination keyPath:aKeyPath options:options from:aSource]; + + if (self) + { + binderForObject[[aSource UID]] = self; + _selectionBinding = aName; + } + + return self; +} + ++ (void)reverseSetValueForObject:(id)aSource +{ + var binder = binderForObject[[aSource UID]]; + [binder reverseSetValueFor:[binder _selectionBinding]]; +} + +- (void)setPlaceholderValue:(id)aValue withMarker:(CPString)aMarker forBinding:(CPString)aBinding +{ + [self setValue:aValue forBinding:aBinding]; +} + +- (CPInteger)_getInsertNullOffset +{ + var options = [[CPBinder infoForBinding:CPContentBinding forObject:_source] objectForKey:CPOptionsKey]; + + return [options objectForKey:CPInsertsNullPlaceholderBindingOption] ? 1 : 0; +} + +@end + +@implementation _CPPopUpButtonSelectedIndexBinder : _CPPopUpButtonSelectionBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [_source selectItemAtIndex:aValue + [self _getInsertNullOffset]]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [_source indexOfSelectedItem] - [self _getInsertNullOffset]; +} + +@end + +@implementation _CPPopUpButtonSelectedObjectBinder : _CPPopUpButtonSelectionBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + var index = [_source indexOfItemWithRepresentedObject:aValue], + offset = [self _getInsertNullOffset]; + + // If the content binding has the option CPNullPlaceholderBindingOption and the object to select is nil, select the first item (i.e., the placeholder). + // Other cases to consider: + // 1. no binding: + // 1.1 there's no item with a represented object matching the object to select. + // 1.2 the object to select is nil/CPNull + // 2. there's a binding: + // 2.1 there's a CPNullPlaceholderBindingOption: + // 2.1.1 there's no item with a represented object matching the object to select? + // 2.1.2 the object to select is nil/CPNull + // 2.2 there's no CPNullPlaceholderBindingOption: + // 2.2.1 there's no item with a represented object matching the object to select? + // 2.2.2 the object to select is nil/CPNull + // More cases? Behaviour that depends on array controller settings? + + if (offset === 1 && index === CPNotFound) + index = 0; + + [_source selectItemAtIndex:index]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [[_source selectedItem] representedObject]; +} + +@end + +@implementation _CPPopUpButtonSelectedTagBinder : _CPPopUpButtonSelectionBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [_source selectItemWithTag:aValue]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [[_source selectedItem] tag]; +} + +@end + +@implementation _CPPopUpButtonSelectedValueBinder : _CPPopUpButtonSelectionBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [_source selectItemWithTitle:aValue]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [_source titleOfSelectedItem]; +} + +@end + var DEPRECATED_CPPopUpButtonMenuKey = @"CPPopUpButtonMenuKey", DEPRECATED_CPPopUpButtonSelectedIndexKey = @"CPPopUpButtonSelectedIndexKey"; diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 94b1b64e0..1c201d1af 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -79,11 +79,11 @@ var CPTabViewDidSelectTabViewItemSelector = 1, { _selectedIndex = CPNotFound; - _tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; + _tabs = [[CPSegmentedControl alloc] initWithFrame:_CGRectMake(0, 0, 0, 0)]; [_tabs setHitTests:NO]; var height = [_tabs valueForThemeAttribute:@"default-height"]; - [_tabs setFrameSize:CGSizeMake(0, height)]; + [_tabs setFrameSize:_CGSizeMake(0, height)]; _box = [[CPBox alloc] initWithFrame:[self bounds]]; [self setBackgroundColor:[CPColor colorWithCalibratedWhite:0.95 alpha:1.0]]; @@ -350,11 +350,11 @@ var CPTabViewDidSelectTabViewItemSelector = 1, else { var aFrame = [self frame], - segmentedHeight = CGRectGetHeight([_tabs frame]), + segmentedHeight = _CGRectGetHeight([_tabs frame]), origin = _type === CPTopTabsBezelBorder ? segmentedHeight / 2 : 0; - [_box setFrame:CGRectMake(0, origin, CGRectGetWidth(aFrame), - CGRectGetHeight(aFrame) - segmentedHeight / 2)]; + [_box setFrame:_CGRectMake(0, origin, _CGRectGetWidth(aFrame), + _CGRectGetHeight(aFrame) - segmentedHeight / 2)]; [self addSubview:_tabs]; } @@ -439,22 +439,22 @@ var CPTabViewDidSelectTabViewItemSelector = 1, - (void)_repositionTabs { - var horizontalCenterOfSelf = CGRectGetWidth([self bounds]) / 2, - verticalCenterOfTabs = CGRectGetHeight([_tabs bounds]) / 2; + var horizontalCenterOfSelf = _CGRectGetWidth([self bounds]) / 2, + verticalCenterOfTabs = _CGRectGetHeight([_tabs bounds]) / 2; if (_type === CPBottomTabsBezelBorder) - [_tabs setCenter:CGPointMake(horizontalCenterOfSelf, CGRectGetHeight([self bounds]) - verticalCenterOfTabs)]; + [_tabs setCenter:_CGPointMake(horizontalCenterOfSelf, _CGRectGetHeight([self bounds]) - verticalCenterOfTabs)]; else - [_tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; + [_tabs setCenter:_CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; } - (void)_setSelectedIndex:(CPNumber)index { _selectedIndex = index; - [self _setContentViewForItem:[_items objectAtIndex:_selectedIndex]]; + [self _setContentViewFromItem:[_items objectAtIndex:_selectedIndex]]; } -- (void)_setContentViewForItem:(CPTabViewItem)anItem +- (void)_setContentViewFromItem:(CPTabViewItem)anItem { [_box setContentView:[anItem view]]; } @@ -471,9 +471,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, } if (_selectedIndex === CPNotFound) - { [self selectFirstTabViewItem:self]; - } } @end diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 61045d64e..8d8361921 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -4037,8 +4037,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad */ - (BOOL)startTrackingAt:(CGPoint)aPoint { - if (![[self window] makeFirstResponder:self]) - return NO; + // Try to become the first responder, but if we can't, that's okay. + [[self window] makeFirstResponder:self]; var row = [self rowAtPoint:aPoint]; @@ -4189,9 +4189,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad */ - (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp { - if ([[self window] firstResponder] !== self) - return; - _isSelectingSession = NO; var CLICK_TIME_DELTA = 1000, diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index e57093ccf..07d52f7dd 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -46,7 +46,8 @@ var CPTextFieldDOMInputElement = nil, CPTextFieldInputIsActive = NO, CPTextFieldCachedSelectStartFunction = nil, CPTextFieldCachedDragFunction = nil, - CPTextFieldBlurFunction = nil; + CPTextFieldBlurFunction = nil, + CPTextFieldInputFunction = nil; #endif @@ -211,6 +212,25 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; }; + if (CPFeatureIsCompatible(CPInputOnInputEventFeature)) + { + CPTextFieldInputFunction = function(anEvent) + { + 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]; + + [CPTextFieldInputOwner keyUp:cappEvent]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + } + + CPTextFieldDOMInputElement.oninput = CPTextFieldInputFunction; + } + //FIXME make this not onblur CPTextFieldDOMInputElement.onblur = CPTextFieldBlurFunction; @@ -474,13 +494,31 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [[CPTextFieldInputOwner window] makeFirstResponder:nil]; #endif + // As long as we are the first responder we need to monitor the key status of our window. + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowDidResignKey:) name:CPWindowDidResignKeyNotification object:[self window]]; + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowDidBecomeKey:) name:CPWindowDidBecomeKeyNotification object:[self window]]; + + _isEditing = NO; + + if ([[self window] isKeyWindow]) + [self _becomeFirstKeyResponder]; + + return YES; +} + +/*! + A text field can be the first responder without necessarily being the focus of keyboard input. For example, it might be the first responder of window A but window B is the main and key window. It's important we don't put a focused input field into a text field in a non key window, even if that field is the first responder, because the key window might also have a first responder text field which the user will expect to receive keyboard input. + + Since a first responder but non-key window text field can't receive input it should not even look like an active text field (Cocoa has a "slightly active" text field look it uses when another window is the key window, but Cappuccino doesn't today.) +*/ +- (void)_becomeFirstKeyResponder +{ [self setThemeState:CPThemeStateEditing]; [self _updatePlaceholderState]; [self setNeedsLayout]; - _isEditing = NO; _stringValue = [self stringValue]; #if PLATFORM(DOM) @@ -491,7 +529,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); element.value = _stringValue; element.style.color = [[self currentValueForThemeAttribute:@"text-color"] cssString]; - element.style.font = [font cssString]; + if (CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) + element.style.font = [font cssString]; element.style.zIndex = 1000; switch ([self alignment]) @@ -526,12 +565,22 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); } element.style.top = topPoint; - element.style.left = (_CGRectGetMinX(contentRect) - 1) + "px"; // -1 because input element seems to have 1px left inset + var left = _CGRectGetMinX(contentRect); + // If the browser has a built in left padding, compensate for it. We need the input text to be exactly on top of the original text. + if (CPFeatureIsCompatible(CPInput1PxLeftPadding)) + left -= 1; + element.style.left = left + "px"; element.style.width = _CGRectGetWidth(contentRect) + "px"; - element.style.height = lineHeight + "px"; + element.style.height = ROUND(lineHeight) + "px"; + element.style.lineHeight = ROUND(lineHeight) + "px"; + element.style.verticalAlign = @"top"; _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]; + window.setTimeout(function() { element.focus(); @@ -559,14 +608,14 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [[self window] platformWindow]._DOMBodyElement.onselectstart = function () {}; } #endif - - return YES; } /* @ignore */ - (BOOL)resignFirstResponder { - [self unsetThemeState:CPThemeStateEditing]; + // When we are no longer the first responder we don't worry about the key status of our window anymore. + [[CPNotificationCenter defaultCenter] removeObserver:self name:CPWindowDidResignKeyNotification object:[self window]]; + [[CPNotificationCenter defaultCenter] removeObserver:self name:CPWindowDidBecomeKeyNotification object:[self window]]; #if PLATFORM(DOM) @@ -583,13 +632,29 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // even if the value has not changed. if ([self _valueIsValid:newValue] === NO) { - [self setThemeState:CPThemeStateEditing]; element.focus(); return NO; } #endif + [self _resignFirstKeyResponder]; + + _isEditing = NO; + [self textDidEndEditing:[CPNotification notificationWithName:CPControlTextDidEndEditingNotification object:self userInfo:nil]]; + + if ([self sendsActionOnEndEditing]) + [self sendAction:[self action] to:[self target]]; + + [self textDidBlur:[CPNotification notificationWithName:CPTextFieldDidBlurNotification object:self userInfo:nil]]; + + return YES; +} + +- (void)_resignFirstKeyResponder +{ + [self unsetThemeState:CPThemeStateEditing]; + // Cache the formatted string _stringValue = [self stringValue]; @@ -601,6 +666,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); #if PLATFORM(DOM) + var element = [self _inputElement]; + CPTextFieldInputResigning = YES; if (CPTextFieldInputIsActive) @@ -627,16 +694,18 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); } #endif +} - _isEditing = NO; - [self textDidEndEditing:[CPNotification notificationWithName:CPControlTextDidEndEditingNotification object:self userInfo:nil]]; +- (void)_windowDidResignKey:(CPNotification)aNotification +{ + if (![[self window] isKeyWindow]) + [self _resignFirstKeyResponder]; +} - if ([self sendsActionOnEndEditing]) - [self sendAction:[self action] to:[self target]]; - - [self textDidBlur:[CPNotification notificationWithName:CPTextFieldDidBlurNotification object:self userInfo:nil]]; - - return YES; +- (void)_windowDidBecomeKey:(CPNotification)aNotification +{ + if ([[self window] isKeyWindow] && [[self window] firstResponder] === self) + [self _becomeFirstKeyResponder]; } - (BOOL)_valueIsValid:(CPString)aValue @@ -1133,7 +1202,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self copy:sender]; [self deleteBackward:sender]; } - else + // If we don't have an oninput listener, we won't detect the change made by the cut and need to fake a key up "soon". + else if (!CPFeatureIsCompatible(CPInputOnInputEventFeature)) [CPTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(keyUp:) userInfo:nil repeats:NO]; } @@ -1155,7 +1225,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self setStringValue:newValue]; [self setSelectedRange:CPMakeRange(selectedRange.location + pasteString.length, 0)]; } - else + // If we don't have an oninput listener, we won't detect the change made by the cut and need to fake a key up "soon". + else if (!CPFeatureIsCompatible(CPInputOnInputEventFeature)) [CPTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(keyUp:) userInfo:nil repeats:NO]; } diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 1da505571..09e689ff9 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -419,7 +419,8 @@ CPThemeStateVertical = CPThemeState("vertical"); CPThemeStateDefault = CPThemeState("default"); CPThemeStateCircular = CPThemeState("circular"); CPThemeStateAutocompleting = CPThemeState("autocompleting"); - +CPThemeStateMainWindow = CPThemeState("mainWindow"); +CPThemeStateKeyWindow = CPThemeState("keyWindow"); @implementation _CPThemeAttribute : CPObject { diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 7791be27a..8f45054e1 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1008,8 +1008,9 @@ var CPScrollDestinationNone = 0, r.origin.y = offset.y; // Make sure the frame fits. - if (_CGRectGetHeight([contentView bounds]) < offset.y + height) - [contentView setFrame:_CGRectMake(0, 0, _CGRectGetWidth([_tokenScrollView bounds]), offset.y + height)]; + var scrollHeight = offset.y + tokenHeight + CEIL(spaceBetweenTokens.height / 2.0); + if (_CGRectGetHeight([contentView bounds]) < scrollHeight) + [contentView setFrameSize:_CGSizeMake(_CGRectGetWidth([_tokenScrollView bounds]), scrollHeight)]; offset.x += width + spaceBetweenTokens.width; @@ -1033,6 +1034,7 @@ var CPScrollDestinationNone = 0, } _inputFrame = fitAndFrame(textWidth, tokenHeight); + _inputFrame.size.height = lineHeight; element.style.left = (_inputFrame.origin.x + editorInset.left) + "px"; @@ -1042,7 +1044,7 @@ var CPScrollDestinationNone = 0, // When editing, always scroll to the cursor. if (_selectedRange.length == 0) - [[_tokenScrollView documentView] scrollRectToVisible:_inputFrame]; + [[_tokenScrollView documentView] scrollPoint:_CGPointMake(0, _inputFrame.origin.y)]; }; for (var i = 0, count = [tokens count]; i < count; i++) @@ -1074,13 +1076,21 @@ var CPScrollDestinationNone = 0, if (isEditing && _selectedRange.length) { _inputFrame = nil; - [self _inputElement].style.left = "-10000px"; - [self _inputElement].focus(); + var inputElement = [self _inputElement]; + inputElement.style.display = "none"; + } + else if (isEditing) + { + var inputElement = [self _inputElement]; + inputElement.style.display = "block"; + if (document.activeElement !== inputElement) + inputElement.focus(); } - // Trim off any excess height downwards. - if (_CGRectGetHeight([contentView bounds]) > offset.y + tokenHeight) - [contentView setFrame:_CGRectMake(0, 0, _CGRectGetWidth([_tokenScrollView bounds]), offset.y + tokenHeight)]; + // Trim off any excess height downwards (in case we shrank). + var scrollHeight = offset.y + tokenHeight + CEIL(spaceBetweenTokens.height / 2.0); + if (_CGRectGetHeight([contentView bounds]) > scrollHeight) + [contentView setFrameSize:_CGSizeMake(_CGRectGetWidth([_tokenScrollView bounds]), scrollHeight)]; if (_shouldScrollTo !== CPScrollDestinationNone) { @@ -1105,7 +1115,7 @@ var CPScrollDestinationNone = 0, if (!aToken) return; - return [[_tokenScrollView documentView] scrollRectToVisible:[aToken frame]]; + return [[_tokenScrollView documentView] scrollPoint:_CGPointMake(0, [aToken frameOrigin].y)]; } @end diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 8d4db509f..7160f092d 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -614,7 +614,7 @@ var CPCurrentToolTip, */ - (void)replaceSubview:(CPView)aSubview with:(CPView)aView { - if (aSubview._superview != self) + if (aSubview._superview !== self) return; var index = [_subviews indexOfObjectIdenticalTo:aSubview]; @@ -2092,6 +2092,11 @@ setBoundsOrigin: _DOMContentsElement.style.height = ROUND(_CGRectGetHeight(_frame)) + "px"; #if PLATFORM(DOM) + // The performance implications of this aren't clear, but without this subviews might not be redrawn when this + // view moves. + if (CPPlatformHasBug(CPCanvasParentDrawErrorsOnMovementBug)) + _DOMElement.style.webkitTransform = 'translateX(0)'; + CPDOMDisplayServerAppendChild(_DOMElement, _DOMContentsElement); #endif _graphicsContext = [CPGraphicsContext graphicsContextWithGraphicsPort:graphicsPort flipped:YES]; diff --git a/AppKit/CPViewController.j b/AppKit/CPViewController.j index 5f355c4c0..f6268b4dc 100644 --- a/AppKit/CPViewController.j +++ b/AppKit/CPViewController.j @@ -67,6 +67,7 @@ var CPViewControllerCachedCibs; CPView _view @accessors(property=view); BOOL _isLoading; BOOL _isLazy; + BOOL _isViewLoaded @accessors(getter=isViewLoaded); id _representedObject @accessors(property=representedObject); CPString _title @accessors(property=title); @@ -206,17 +207,24 @@ var CPViewControllerCachedCibs; [cibOwner viewControllerDidLoadCib:self]; _isLoading = NO; - [self viewDidLoad]; + [self _viewDidLoad]; } else if (_isLazy) { _isLazy = NO; - [self viewDidLoad]; + [self _viewDidLoad]; } return _view; } +- (void)_viewDidLoad +{ + [self willChangeValueForKey:"isViewLoaded"]; + [self viewDidLoad]; + isViewLoaded = YES; + [self didChangeValueForKey:"isViewLoaded"]; +} /*! This method is called after the view controller has loaded its associated views into memory. @@ -242,7 +250,21 @@ var CPViewControllerCachedCibs; */ - (void)setView:(CPView)aView { + var willChangeIsViewLoaded = (_isViewLoaded == NO && aView != nil) || (_isViewLoaded == YES && aView == nil); + + if (willChangeIsViewLoaded) + [self willChangeValueForKey:"isViewLoaded"]; + _view = aView; + _isViewLoaded = aView !== nil; + + if (willChangeIsViewLoaded) + [self didChangeValueForKey:"isViewLoaded"]; +} + +- (BOOL)automaticallyNotifiesObserversOfIsViewLoaded +{ + return NO; } @end diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 044a6c845..7e46c28e0 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -259,6 +259,16 @@ var CPWindowActionMessageKeys = [ @param window the window to close @return \c YES allows the window to close. \c NO vetoes the close operation and leaves the window open. + + @delegate -(BOOL)windowWillBeginSheet:(CPNotification)notification; + Sent from the notification center before sheet is visible on + the delegate's window. + @param notification contains information about the event + + @delegate -(BOOL)windowDidEndSheet:(CPNotification)notification; + Sent from the notification center when an attached sheet on the + delegate's window has been animated out and is no longer visible. + @param notification contains information about the event */ @implementation CPWindow : CPResponder { @@ -335,7 +345,6 @@ var CPWindowActionMessageKeys = [ CPDictionary _sheetContext; CPWindow _parentView; BOOL _isSheet; - _CPWindowFrameAnimation _frameAnimation; } @@ -405,10 +414,13 @@ CPTexturedBackgroundWindowMask _isFullPlatformWindow = NO; _registeredDraggedTypes = [CPSet set]; _registeredDraggedTypesArray = []; - _isSheet = NO; _acceptsMouseMovedEvents = YES; _isMovable = YES; + _isSheet = NO; + _sheetContext = nil; + _parentView = nil; + // Set up our window number. _windowNumber = [CPApp._windows count]; CPApp._windows[_windowNumber] = self; @@ -764,7 +776,21 @@ CPTexturedBackgroundWindowMask [_windowView setFrameSize:size]; if (_hasShadow) - [_shadowView setFrameSize:_CGSizeMake(SHADOW_MARGIN_LEFT + size.width + SHADOW_MARGIN_RIGHT, SHADOW_MARGIN_BOTTOM + size.height + SHADOW_MARGIN_TOP + SHADOW_DISTANCE)]; + { + // if the shadow would be taller/wider than the window height, + // make it the same as the window height. this allows views to + // become 0, 0 with no shadow on them and makes the sheet + // animation look nicer + var shadowSize = _CGSizeMake(size.width, size.height); + + if (size.width >= (SHADOW_MARGIN_LEFT + SHADOW_MARGIN_RIGHT)) + shadowSize.width += SHADOW_MARGIN_LEFT + SHADOW_MARGIN_RIGHT; + + if (size.height >= (SHADOW_MARGIN_BOTTOM + SHADOW_MARGIN_TOP + SHADOW_DISTANCE)) + shadowSize.height += SHADOW_MARGIN_BOTTOM + SHADOW_MARGIN_TOP + SHADOW_DISTANCE; + + [_shadowView setFrameSize:shadowSize]; + } if (!_isAnimating) [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidResizeNotification object:self]; @@ -801,6 +827,10 @@ CPTexturedBackgroundWindowMask - (void)setFrameOrigin:(CGPoint)anOrigin { [self _setClippedFrame:_CGRectMake(anOrigin.x, anOrigin.y, _CGRectGetWidth(_frame), _CGRectGetHeight(_frame)) display:YES animate:NO]; + + // reposition sheet + if ([self attachedSheet]) + [self _setAttachedSheetFrameOrigin]; } /*! @@ -819,16 +849,20 @@ CPTexturedBackgroundWindowMask - (void)orderFront:(id)aSender { #if PLATFORM(DOM) + // -dw- if a sheet is clicked, the parent window should come up too + if ([self isSheet]) + [_parentView orderFront:self]; + [_platformWindow orderFront:self]; [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; #endif - if (_firstResponder === self || !_firstResponder) - [self makeFirstResponder:_initialFirstResponder]; - if (!CPApp._keyWindow) [self makeKeyWindow]; + if ([self isKeyWindow] && (_firstResponder === self || !_firstResponder)) + [self makeFirstResponder:_initialFirstResponder]; + if (!CPApp._mainWindow) [self makeMainWindow]; } @@ -849,6 +883,13 @@ CPTexturedBackgroundWindowMask */ - (void)orderOut:(id)aSender { + if ([self isSheet]) + { + // -dw- as in Cocoa, orderOut: detaches the sheet and animates out + [self._parentView _detachSheetWindow]; + return; + } + #if PLATFORM(DOM) if ([self _sharesChromeWithPlatformWindow]) [_platformWindow orderOut:self]; @@ -1209,6 +1250,8 @@ CPTexturedBackgroundWindowMask [defaultCenter removeObserver:_delegate name:CPWindowDidResignMainNotification object:self]; [defaultCenter removeObserver:_delegate name:CPWindowDidMoveNotification object:self]; [defaultCenter removeObserver:_delegate name:CPWindowDidResizeNotification object:self]; + [defaultCenter removeObserver:_delegate name:CPWindowWillBeginSheetNotification object:self]; + [defaultCenter removeObserver:_delegate name:CPWindowDidEndSheetNotification object:self]; _delegate = aDelegate; _delegateRespondsToWindowWillReturnUndoManagerSelector = [_delegate respondsToSelector:@selector(windowWillReturnUndoManager:)]; @@ -1254,6 +1297,20 @@ CPTexturedBackgroundWindowMask selector:@selector(windowDidResize:) name:CPWindowDidResizeNotification object:self]; + + if ([_delegate respondsToSelector:@selector(windowWillBeginSheet:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(windowWillBeginSheet:) + name:CPWindowWillBeginSheetNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(windowDidEndSheet:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(windowDidEndSheet:) + name:CPWindowDidEndSheetNotification + object:self]; } /*! @@ -1534,6 +1591,30 @@ CPTexturedBackgroundWindowMask var type = [anEvent type], point = [anEvent locationInWindow]; + // If a sheet is attached events get filtered here. + // It is not clear what events should be passed to the view, perhaps all? + // CPLeftMouseDown is needed for window moving and resizing to work. + // CPMouseMoved is needed for rollover effects on title bar buttons. + var sheet = [self attachedSheet]; + if (sheet) + { + switch (type) + { + case CPLeftMouseDown: + [_windowView mouseDown:anEvent]; + + // -dw- if the window is clicked, the sheet should come to front, and become key, + // and the window should be immediately behind + [sheet makeKeyAndOrderFront:self]; + break; + case CPMouseMoved: + [_windowView mouseMoved:anEvent]; + break; + } + + return; + } + switch (type) { case CPFlagsChanged: return [[self firstResponder] flagsChanged:anEvent]; @@ -1698,6 +1779,8 @@ CPTexturedBackgroundWindowMask [self _setupFirstResponder:nil]; + [_windowView noteKeyWindowStateChanged]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidBecomeKeyNotification object:self]; @@ -1755,6 +1838,8 @@ CPTexturedBackgroundWindowMask if (CPApp._keyWindow === self) CPApp._keyWindow = nil; + [_windowView noteKeyWindowStateChanged]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidResignKeyNotification object:self]; @@ -2100,6 +2185,8 @@ CPTexturedBackgroundWindowMask [self _synchronizeMenuBarTitleWithWindowTitle]; [self _synchronizeSaveMenuWithDocumentSaving]; + [_windowView noteMainWindowStateChanged]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidBecomeMainNotification object:self]; @@ -2116,6 +2203,8 @@ CPTexturedBackgroundWindowMask if (CPApp._mainWindow === self) CPApp._mainWindow = nil; + + [_windowView noteMainWindowStateChanged]; } - (void)_updateMainAndKeyWindows @@ -2284,62 +2373,124 @@ CPTexturedBackgroundWindowMask [attachedSheet setFrame:sheetFrame display:YES animate:NO]; } -/* @ignore */ -- (void)_attachSheet:(CPWindow)aSheet modalDelegate:(id)aModalDelegate didEndSelector:(SEL)aDidEndSelector contextInfo:(id)aContextInfo +/* @ignore + Starting point for sheet session, called from CPApplication beginSheet: +*/ +- (void)_attachSheet:(CPWindow)aSheet modalDelegate:(id)aModalDelegate + didEndSelector:(SEL)aDidEndSelector contextInfo:(id)aContextInfo { + if (_sheetContext) + { + [CPException raise:CPInternalInconsistencyException + reason:@"The target window of beginSheet: already has a sheet, did you forget orderOut: ?"]; + return; + } + var sheetFrame = [aSheet frame]; - _sheetContext = {"sheet":aSheet, "modalDelegate":aModalDelegate, "endSelector":aDidEndSelector, "contextInfo":aContextInfo, "frame":CGRectMakeCopy(sheetFrame), "returnCode":-1, "opened": NO}; + _sheetContext = {"sheet": aSheet, "modalDelegate": aModalDelegate, "endSelector": aDidEndSelector, + "contextInfo": aContextInfo, "frame": _CGRectMakeCopy(sheetFrame), "returnCode": -1, + "opened": NO}; - [self _attachSheetWindow:aSheet]; + [self _attachSheetWindow]; } -/* @ignore */ -- (void)_attachSheetWindow:(CPWindow)aSheet +/* @ignore + Called to animate the sheet in. The timer seems to solve a bug where sheets would + be partially animated under certain conditions. +*/ +- (void)_attachSheetWindow { - var sheetFrame = [aSheet frame], - frame = [self frame], - sheetContent = [aSheet contentView]; + _sheetContext["isAttached"] = YES; - [self _setUpMasksForView:sheetContent]; - - aSheet._isSheet = YES; - aSheet._parentView = self; - - var originx = frame.origin.x + FLOOR((frame.size.width - sheetFrame.size.width) / 2), - originy = frame.origin.y + [[self contentView] frame].origin.y, - startFrame = CGRectMake(originx, originy, sheetFrame.size.width, 0), - endFrame = CGRectMake(originx, originy, sheetFrame.size.width, sheetFrame.size.height); - - [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowWillBeginSheetNotification object:self]; - [CPApp runModalForWindow:aSheet]; - - [aSheet orderFront:self]; - [aSheet setFrame:startFrame display:YES animate:NO]; - _sheetContext["opened"] = YES; - - [aSheet _setFrame:endFrame delegate:self duration:[self animationResizeTime:endFrame] curve:CPAnimationEaseOut]; - - // Should run the main loop here until _isAnimating = FALSE - [aSheet becomeKeyWindow]; + // it would be ideal to block here and spin an event loop, until attach is complete + [CPTimer scheduledTimerWithTimeInterval:0.0 + target:self + selector:@selector(_sheetShouldAnimateIn:) + userInfo:nil + repeats:NO]; } -/* @ignore */ +/* @ignore + Called to end the sheet. Note that orderOut: is needed to animate the sheet out, as in Cocoa. + The sheet isn't completely gone until _cleanupSheetWindow gets called. +*/ +- (void)_endSheet +{ + var delegate = _sheetContext["modalDelegate"], + endSelector = _sheetContext["endSelector"]; + + // If the sheet has been ordered out, defer didEndSelector until after sheet animates out. + // This must be done since we cannot block and wait for the animation to complete. + if (delegate && endSelector) + { + if (_sheetContext["isAttached"]) + objj_msgSend(delegate, endSelector, _sheetContext["sheet"], _sheetContext["returnCode"], + _sheetContext["contextInfo"]); + else + _sheetContext["deferDidEndSelector"] = YES; + } +} + +/* @ignore + Called to animate the sheet out. If called while animating in, schedules an animate + out at completion +*/ - (void)_detachSheetWindow { - var sheet = [self attachedSheet], - startFrame = [sheet frame], - endFrame = CGRectMakeCopy(startFrame); + _sheetContext["isAttached"] = NO; - endFrame.size.height = 0; + // it would be ideal to block here and spin the event loop, until attach is complete + [CPTimer scheduledTimerWithTimeInterval:0.0 + target:self + selector:@selector(_sheetShouldAnimateOut:) + userInfo:nil + repeats:NO]; +} - _sheetContext["frame"] = startFrame; +/* @ignore + Called to cleanup sheet, when we are definitely done with it +*/ +- (void)_cleanupSheetWindow +{ + var sheet = _sheetContext["sheet"], + lastFrame = _sheetContext["frame"], + deferDidEnd = _sheetContext["deferDidEndSelector"]; - var sheetContent = [sheet contentView]; - [self _setUpMasksForView:sheetContent]; + [sheet setFrame:lastFrame]; + [self _restoreMasksForView:[sheet contentView]]; - _sheetContext["opened"] = NO; - [sheet _setFrame:endFrame delegate:self duration:[self animationResizeTime:endFrame] curve:CPAnimationEaseIn]; + // if the parent window is modal, the sheet started its own modal session + if (sheet._isModal) + [CPApp stopModal]; + + // restore the state of window before it was sheetified + [sheet._windowView _enableSheet:NO]; + + // close it + sheet._isSheet = NO; + [sheet orderOut:self]; + + [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidEndSheetNotification object:self]; + + if (deferDidEnd) + { + var delegate = _sheetContext["modalDelegate"], + selector = _sheetContext["endSelector"], + returnCode = _sheetContext["returnCode"], + contextInfo = _sheetContext["contextInfo"]; + + // context must be destroyed, since didEnd might want to attach another sheet + _sheetContext = nil; + sheet._parentView = nil; + + objj_msgSend(delegate, selector, sheet, returnCode, contextInfo); + } + else + { + _sheetContext = nil; + sheet._parentView = nil; + } } /* @ignore */ @@ -2349,34 +2500,117 @@ CPTexturedBackgroundWindowMask if (anim._window != sheet) return; - var sheetContent = [sheet contentView]; + [CPTimer scheduledTimerWithTimeInterval:0.0 + target:self + selector:@selector(_sheetAnimationDidEnd:) + userInfo:nil + repeats:NO]; +} - if (_sheetContext["opened"] === YES) +/* @ignore */ +- (void)_sheetShouldAnimateIn:(CPTimer)timer +{ + // can't open sheet while opening or closing animation is going on + if (_sheetContext["isOpening"] || + _sheetContext["isClosing"]) + return; + + var sheet = _sheetContext["sheet"], + sheetFrame = [sheet frame], + frame = [self frame]; + + [self _setUpMasksForView:[sheet contentView]]; + + sheet._isSheet = YES; + sheet._parentView = self; + + var originx = frame.origin.x + FLOOR((frame.size.width - sheetFrame.size.width) / 2), + originy = frame.origin.y + [[self contentView] frame].origin.y, + startFrame = CGRectMake(originx, originy, sheetFrame.size.width, 0), + endFrame = CGRectMake(originx, originy, sheetFrame.size.width, sheetFrame.size.height); + + [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowWillBeginSheetNotification object:self]; + + // if sheet is attached to a modal window, the sheet runs + // as if itself and the parent window are modal + sheet._isModal = NO; + if ([CPApp modalWindow] === self) { - [self _restoreMasksForView:sheetContent]; + [CPApp runModalForWindow:sheet]; + sheet._isModal = YES; + } + + [sheet orderFront:self]; + [sheet setFrame:startFrame display:YES animate:NO]; + + _sheetContext["opened"] = YES; + _sheetContext["shouldClose"] = NO; + _sheetContext["isOpening"] = YES; + + [sheet _setFrame:endFrame delegate:self duration:[self animationResizeTime:endFrame] curve:CPAnimationEaseOut]; + + // NOTE: cocoa doesn't make window key until animation is done, but a + // keypress while animating eventually gets to the window. Therefore, + // there must be a runloop specifically designed for sheets? + [sheet makeKeyWindow]; +} + +/* @ignore */ +- (void)_sheetShouldAnimateOut:(CPTimer)timer +{ + var sheet = _sheetContext["sheet"], + startFrame = [sheet frame], + endFrame = CGRectMakeCopy(startFrame); + + if (_sheetContext["isOpening"]) + { + // allow sheet to be closed while opening, it will close when animate in completes + _sheetContext["shouldClose"] = YES; return; } - [CPApp stopModal]; - [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidEndSheetNotification object:self]; + if (_sheetContext["isClosing"]) + return; - [sheet orderOut:self]; + _sheetContext["opened"] = NO; + _sheetContext["frame"] = startFrame; + _sheetContext["isClosing"] = YES; - var lastFrame = _sheetContext["frame"]; - [sheet setFrame:lastFrame]; + // the parent window can be orderedOut to disable the sheet animate out, as in Cocoa + if ([self isVisible]) + { + endFrame.size.height = 0; + [self _setUpMasksForView:[sheet contentView]]; + [sheet _setFrame:endFrame delegate:self duration:[self animationResizeTime:endFrame] curve:CPAnimationEaseIn]; + } + else + { + [self _sheetAnimationDidEnd:nil]; + } +} - [self _restoreMasksForView:sheetContent]; +/* @ignore */ +- (void)_sheetAnimationDidEnd:(CPTimer)timer +{ + var sheet = _sheetContext["sheet"]; - var delegate = _sheetContext["modalDelegate"], - endSelector = _sheetContext["endSelector"], - returnCode = _sheetContext["returnCode"], - contextInfo = _sheetContext["contextInfo"]; + _sheetContext["isOpening"] = NO; + _sheetContext["isClosing"] = NO; - _sheetContext = nil; - sheet._parentView = nil; + if (_sheetContext["opened"] === YES) + { + // sheet is open and completely visible + [self _restoreMasksForView:[sheet contentView]]; - if (delegate != nil && endSelector != nil) - objj_msgSend(delegate, endSelector, sheet, returnCode, contextInfo); + // we wanted to close the sheet while it animated in, do that now + if (_sheetContext["shouldClose"] === YES) + [self _detachSheetWindow]; + } + else + { + // sheet is closed and not visible + [self _cleanupSheetWindow]; + } } - (void)_setUpMasksForView:(CPView)aView diff --git a/AppKit/CPWindow/_CPDocModalWindowView.j b/AppKit/CPWindow/_CPDocModalWindowView.j index 8bd6540d4..19babdef7 100644 --- a/AppKit/CPWindow/_CPDocModalWindowView.j +++ b/AppKit/CPWindow/_CPDocModalWindowView.j @@ -54,4 +54,10 @@ var _CPStandardWindowViewBodyBackgroundColor = nil; return aContentRect; } +- (void)_enableSheet:(BOOL)enable +{ + // do nothing, already a sheet +} + @end + diff --git a/AppKit/CPWindow/_CPHUDWindowView.j b/AppKit/CPWindow/_CPHUDWindowView.j index 488bd5c4b..d4a92e6ac 100644 --- a/AppKit/CPWindow/_CPHUDWindowView.j +++ b/AppKit/CPWindow/_CPHUDWindowView.j @@ -21,18 +21,18 @@ */ @import "CPTextField.j" +@import "_CPTitleableWindowView.j" var _CPHUDWindowViewBackgroundColor = nil, + _CPHUDWindowViewThemeValues = nil, CPHUDCloseButtonImage = nil; var HUD_TITLEBAR_HEIGHT = 26.0; -@implementation _CPHUDWindowView : _CPWindowView +@implementation _CPHUDWindowView : _CPTitleableWindowView { CPView _toolbarView; - - CPTextField _titleField; CPButton _closeButton; } @@ -60,28 +60,23 @@ var HUD_TITLEBAR_HEIGHT = 26.0; _CPHUDWindowViewCloseImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"HUDTheme/WindowClose.png"] size:CPSizeMake(18.0, 18.0)]; _CPHUDWindowViewCloseActiveImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"HUDTheme/WindowCloseActive.png"] size:CPSizeMake(18.0, 18.0)]; + + _CPHUDWindowViewThemeValues = [ + [@"title-font", [CPFont systemFontOfSize:[CPFont systemFontSize] - 1]], + [@"title-text-color", [CPColor colorWithWhite:255.0 / 255.0 alpha:0.75]], + [@"title-text-color", [CPColor colorWithWhite:255.0 / 255.0 alpha:1], CPThemeStateKeyWindow], + [@"title-text-shadow-color", [CPColor blackColor]], + [@"title-text-shadow-offset", CGSizeMake(0.0, 1.0)], + [@"title-alignment", CPCenterTextAlignment], + // FIXME: Make this to CPLineBreakByTruncatingMiddle once it's implemented. + [@"title-line-break-mode", CPLineBreakByTruncatingTail], + [@"title-vertical-alignment", CPCenterVerticalTextAlignment] + ]; } -+ (CGRect)contentRectForFrameRect:(CGRect)aFrameRect ++ (int)titleBarHeight { - var contentRect = CGRectMakeCopy(aFrameRect), - titleBarHeight = HUD_TITLEBAR_HEIGHT; - - contentRect.origin.y += titleBarHeight; - contentRect.size.height -= titleBarHeight; - - return contentRect; -} - -+ (CGRect)frameRectForContentRect:(CGRect)aContentRect -{ - var frameRect = CGRectMakeCopy(aContentRect), - titleBarHeight = HUD_TITLEBAR_HEIGHT; - - frameRect.origin.y -= titleBarHeight; - frameRect.size.height += titleBarHeight; - - return frameRect; + return HUD_TITLEBAR_HEIGHT; } - (CGRect)contentRectForFrameRect:(CGRect)aFrameRect @@ -120,37 +115,18 @@ var HUD_TITLEBAR_HEIGHT = 26.0; if (self) { + // Until windows become properly themable, just set these values here in the subclass. + [self registerThemeValues:_CPHUDWindowViewThemeValues]; + var bounds = [self bounds]; [self setBackgroundColor:_CPHUDWindowViewBackgroundColor]; - _titleField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; - - [_titleField setHitTests:NO]; - [_titleField setFont:[CPFont systemFontOfSize:[CPFont systemFontSize] - 1]]; - [_titleField setTextColor:[CPColor whiteColor]]; - [_titleField setTextShadowColor:[CPColor blackColor]]; - [_titleField setTextShadowOffset:CGSizeMake(0.0, 1.0)]; - [_titleField setAutoresizingMask:CPViewWidthSizable]; - - // FIXME: Make this to CPLineBreakByTruncatingMiddle once it's implemented. - [_titleField setLineBreakMode:CPLineBreakByTruncatingTail]; - [_titleField setAlignment:CPCenterTextAlignment]; - - [_titleField setStringValue:@"Untitled"]; - [_titleField sizeToFit]; - [_titleField setAutoresizingMask:CPViewWidthSizable]; - [_titleField setStringValue:@""]; - - [_titleField setFrame:CGRectMake(20.0, 3.0, CGRectGetWidth([self bounds]) - 40.0, CGRectGetHeight([_titleField frame]))]; - - [self addSubview:_titleField]; - if (_styleMask & CPClosableWindowMask) { var closeSize = [_CPHUDWindowViewCloseImage size]; - _closeButton = [[CPButton alloc] initWithFrame:CGRectMake(8.0, 5.0, closeSize.width, closeSize.height)]; + _closeButton = [[CPButton alloc] initWithFrame:CGRectMake(8.0, 4.0, closeSize.width, closeSize.height)]; [_closeButton setBordered:NO]; @@ -161,6 +137,8 @@ var HUD_TITLEBAR_HEIGHT = 26.0; } [self setResizeIndicatorOffset:CGSizeMake(5.0, 5.0)]; + + [self tile]; } return self; @@ -172,11 +150,6 @@ var HUD_TITLEBAR_HEIGHT = 26.0; [_closeButton setAction:@selector(performClose:)]; } -- (void)setTitle:(CPString)aTitle -{ - [_titleField setStringValue:aTitle]; -} - - (_CPToolbarView)toolbarView { return _toolbarView; @@ -194,7 +167,7 @@ var HUD_TITLEBAR_HEIGHT = 26.0; - (CGSize)toolbarOffset { - return CGSizeMake(0.0, HUD_TITLEBAR_HEIGHT); + return _CGSizeMake(0.0, [[self class] titleBarHeight]); } - (void)tile @@ -203,14 +176,43 @@ var HUD_TITLEBAR_HEIGHT = 26.0; var theWindow = [self window], bounds = [self bounds], - width = CGRectGetWidth(bounds); + width = _CGRectGetWidth(bounds); - [_titleField setFrame:CGRectMake(20.0, 3.0, width - 40.0, CGRectGetHeight([_titleField frame]))]; + [_titleField setFrame:_CGRectMake(20.0, 0, width - 40.0, [self toolbarOffset].height)]; var maxY = [self toolbarMaxY]; + if ([_titleField isHidden]) + maxY -= ([self toolbarOffset]).height; - [[theWindow contentView] setFrameOrigin:CGPointMake(0.0, maxY, width, CGRectGetHeight(bounds) - maxY)]; + var contentRect = _CGRectMake(0.0, maxY, width, _CGRectGetHeight(bounds) - maxY); + + [[theWindow contentView] setFrame:contentRect]; +} + +- (void)_enableSheet:(BOOL)enable +{ + [super _enableSheet:enable]; + + [_closeButton setHidden:enable]; + [_titleField setHidden:enable]; + + // resize the window + var theWindow = [self window], + frame = [theWindow frame], + dy = ([self toolbarOffset]).height; + + if (enable) + dy = -dy; + + var newHeight = _CGRectGetMaxY(frame) + dy, + newWidth = _CGRectGetMaxX(frame); + + frame.size.height += dy; + + [self setFrameSize:_CGSizeMake(newWidth, newHeight)]; + [self tile]; + [theWindow setFrame:frame display:NO animate:NO]; + [theWindow setMovableByWindowBackground:!enable]; } @end - diff --git a/AppKit/CPWindow/_CPStandardWindowView.j b/AppKit/CPWindow/_CPStandardWindowView.j index f0f9b9cf1..9d8fd7147 100644 --- a/AppKit/CPWindow/_CPStandardWindowView.j +++ b/AppKit/CPWindow/_CPStandardWindowView.j @@ -21,7 +21,7 @@ */ @import "CPTextField.j" -@import "_CPWindowView.j" +@import "_CPTitleableWindowView.j" var GRADIENT_HEIGHT = 41.0; @@ -98,31 +98,44 @@ var _CPTexturedWindowHeadGradientColor = nil, var _CPStandardWindowViewBodyBackgroundColor = nil, _CPStandardWindowViewDividerBackgroundColor = nil, - _CPStandardWindowViewTitleBackgroundColor = nil, _CPStandardWindowViewCloseButtonImage = nil, _CPStandardWindowViewCloseButtonHighlightedImage = nil, _CPStandardWindowViewCloseButtonUnsavedImage = nil, _CPStandardWindowViewCloseButtonUnsavedHighlightedImage = nil, _CPStandardWindowViewMinimizeButtonImage = nil, - _CPStandardWindowViewMinimizeButtonHighlightedImage = nil; + _CPStandardWindowViewMinimizeButtonHighlightedImage = nil, + _CPStandardWindowViewThemeValues = nil; -var STANDARD_GRADIENT_HEIGHT = 41.0, - STANDARD_TITLEBAR_HEIGHT = 25.0; +var STANDARD_GRADIENT_HEIGHT = 41.0; -@implementation _CPStandardWindowView : _CPWindowView +@implementation _CPStandardWindowView : _CPTitleableWindowView { _CPTexturedWindowHeadView _headView; CPView _dividerView; CPView _bodyView; CPView _toolbarView; - CPTextField _titleField; CPButton _closeButton; CPButton _minimizeButton; BOOL _isDocumentEdited; } ++ (void)initialize +{ + _CPStandardWindowViewThemeValues = [ + [@"title-font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]], + [@"title-text-color", [CPColor colorWithWhite:22.0 / 255.0 alpha:0.75]], + [@"title-text-color", [CPColor colorWithWhite:22.0 / 255.0 alpha:1], CPThemeStateKeyWindow], + [@"title-text-shadow-color", [CPColor whiteColor]], + [@"title-text-shadow-offset", CGSizeMake(0.0, 1.0)], + [@"title-alignment", CPCenterTextAlignment], + // FIXME: Make this to CPLineBreakByTruncatingMiddle once it's implemented. + [@"title-line-break-mode", CPLineBreakByTruncatingTail], + [@"title-vertical-alignment", CPCenterVerticalTextAlignment] + ]; +} + + (CPColor)bodyBackgroundColor { if (!_CPStandardWindowViewBodyBackgroundColor) @@ -139,41 +152,6 @@ var STANDARD_GRADIENT_HEIGHT = 41.0, return _CPStandardWindowViewDividerBackgroundColor; } -+ (CPColor)titleColor -{ - if (!_CPStandardWindowViewTitleBackgroundColor) - _CPStandardWindowViewTitleBackgroundColor = [CPColor colorWithCalibratedRed:44.0 / 255.0 green:44.0 / 255.0 blue:44.0 / 255.0 alpha:1.0]; - - return _CPStandardWindowViewTitleBackgroundColor; -} - -+ (CGRect)contentRectForFrameRect:(CGRect)aFrameRect -{ - var contentRect = CGRectMakeCopy(aFrameRect), - titleBarHeight = [self titleBarHeight] + 1.0; - - contentRect.origin.y += titleBarHeight; - contentRect.size.height -= titleBarHeight; - - return contentRect; -} - -+ (CGRect)frameRectForContentRect:(CGRect)aContentRect -{ - var frameRect = CGRectMakeCopy(aContentRect), - titleBarHeight = [self titleBarHeight] + 1.0; - - frameRect.origin.y -= titleBarHeight; - frameRect.size.height += titleBarHeight; - - return frameRect; -} - -+ (float)titleBarHeight -{ - return STANDARD_TITLEBAR_HEIGHT; -} - - (CGRect)contentRectForFrameRect:(CGRect)aFrameRect { var contentRect = [[self class] contentRectForFrameRect:aFrameRect], @@ -212,6 +190,9 @@ var STANDARD_GRADIENT_HEIGHT = 41.0, if (self) { + // Until windows become properly themable, just set these values here in the subclass. + [self registerThemeValues:_CPStandardWindowViewThemeValues]; + var theClass = [self class], bounds = [self bounds]; @@ -220,7 +201,7 @@ var STANDARD_GRADIENT_HEIGHT = 41.0, [_headView setAutoresizingMask:CPViewWidthSizable];; [_headView setHitTests:NO]; - [self addSubview:_headView]; + [self addSubview:_headView positioned:CPWindowBelow relativeTo:_titleField]; _dividerView = [[CPView alloc] initWithFrame:CGRectMake(0.0, CGRectGetMaxY([_headView frame]), CGRectGetWidth(bounds), 1.0)]; @@ -242,24 +223,6 @@ var STANDARD_GRADIENT_HEIGHT = 41.0, [self setResizeIndicatorOffset:CGSizeMake(2.0, 2.0)]; - _titleField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; - - [_titleField setFont:[CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]]; - [_titleField setAutoresizingMask:CPViewWidthSizable]; - - // FIXME: Make this to CPLineBreakByTruncatingMiddle once it's implemented. - [_titleField setLineBreakMode:CPLineBreakByTruncatingTail]; - [_titleField setAlignment:CPCenterTextAlignment]; - [_titleField setTextShadowColor:[CPColor whiteColor]]; - [_titleField setTextShadowOffset:CGSizeMake(0.0, 1.0)]; - - [_titleField setStringValue:@"Untitled"]; - [_titleField sizeToFit]; - [_titleField setAutoresizingMask:CPViewWidthSizable]; - [_titleField setStringValue:@""]; - - [self addSubview:_titleField]; - if (_styleMask & CPClosableWindowMask) { if (!_CPStandardWindowViewCloseButtonImage) @@ -272,7 +235,7 @@ var STANDARD_GRADIENT_HEIGHT = 41.0, _CPStandardWindowViewCloseButtonUnsavedHighlightedImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png"] size:CGSizeMake(16.0, 16.0)]; } - _closeButton = [[CPButton alloc] initWithFrame:CGRectMake(8.0, 7.0, 16.0, 16.0)]; + _closeButton = [[CPButton alloc] initWithFrame:CGRectMake(8.0, 6.0, 16.0, 16.0)]; [_closeButton setBordered:NO]; [self _updateCloseButton]; @@ -326,14 +289,20 @@ var STANDARD_GRADIENT_HEIGHT = 41.0, var theWindow = [self window], bounds = [self bounds], - width = CGRectGetWidth(bounds); + width = _CGRectGetWidth(bounds); - [_headView setFrameSize:CGSizeMake(width, [self toolbarMaxY])]; - [_dividerView setFrame:CGRectMake(0.0, CGRectGetMaxY([_headView frame]), width, 1.0)]; + [_headView setFrameSize:_CGSizeMake(width, [self toolbarMaxY])]; + [_dividerView setFrame:_CGRectMake(0.0, _CGRectGetMaxY([_headView frame]), width, 1.0)]; - var dividerMaxY = CGRectGetMaxY([_dividerView frame]); + var dividerMaxY = 0, + dividerMinY = 0; + if (![_dividerView isHidden]) + { + dividerMinY = _CGRectGetMinY([_dividerView frame]); + dividerMaxY = _CGRectGetMaxY([_dividerView frame]); + } - [_bodyView setFrame:CGRectMake(0.0, dividerMaxY, width, CGRectGetHeight(bounds) - dividerMaxY)]; + [_bodyView setFrame:_CGRectMake(0.0, dividerMaxY, width, _CGRectGetHeight(bounds) - dividerMaxY)]; var leftOffset = 8; @@ -342,10 +311,13 @@ var STANDARD_GRADIENT_HEIGHT = 41.0, if (_minimizeButton) leftOffset += 19.0; - [_titleField setFrame:CGRectMake(leftOffset, 5.0, width - leftOffset * 2.0, CGRectGetHeight([_titleField frame]))]; + [_titleField setFrame:_CGRectMake(leftOffset, 0, width - leftOffset * 2.0, [[self class] titleBarHeight])]; - [[theWindow contentView] setFrameOrigin:CGPointMake(0.0, CGRectGetMaxY([_dividerView frame]))]; + var contentRect = _CGRectMake(0.0, dividerMaxY, width, _CGRectGetHeight([_bodyView frame])); + + [[theWindow contentView] setFrame:contentRect]; } + /* - (void)setAnimatingToolbar:(BOOL)isAnimatingToolbar { @@ -394,17 +366,46 @@ var STANDARD_GRADIENT_HEIGHT = 41.0, [self _updateCloseButton]; } -- (void)setTitle:(CPString)aTitle -{ - [_titleField setStringValue:aTitle]; -} - - (void)mouseDown:(CPEvent)anEvent { - if (CGRectContainsPoint([_headView frame], [self convertPoint:[anEvent locationInWindow] fromView:nil])) - return [self trackMoveWithEvent:anEvent]; + if (![_headView isHidden]) + if (CGRectContainsPoint([_headView frame], [self convertPoint:[anEvent locationInWindow] fromView:nil])) + return [self trackMoveWithEvent:anEvent]; [super mouseDown:anEvent]; } +- (void)_enableSheet:(BOOL)enable +{ + [super _enableSheet:enable]; + + [_headView setHidden:enable]; + [_dividerView setHidden:enable]; + [_closeButton setHidden:enable]; + [_minimizeButton setHidden:enable]; + [_titleField setHidden:enable]; + + if (enable) + [_bodyView setBackgroundColor:[_CPDocModalWindowView bodyBackgroundColor]]; + else + [_bodyView setBackgroundColor:[[self class] bodyBackgroundColor]]; + + // resize the window + var theWindow = [self window], + frame = [theWindow frame]; + + var dy = _CGRectGetHeight([_headView frame]) + _CGRectGetHeight([_dividerView frame]); + if (enable) + dy = -dy; + + var newHeight = _CGRectGetMaxY(frame) + dy, + newWidth = _CGRectGetMaxX(frame); + + frame.size.height += dy; + + [self setFrameSize:_CGSizeMake(newWidth, newHeight)]; + [self tile]; + [theWindow setFrame:frame display:NO animate:NO]; +} + @end diff --git a/AppKit/CPWindow/_CPTitleableWindowView.j b/AppKit/CPWindow/_CPTitleableWindowView.j new file mode 100644 index 000000000..acb2cd963 --- /dev/null +++ b/AppKit/CPWindow/_CPTitleableWindowView.j @@ -0,0 +1,114 @@ +/* + * _CPTitleableWindowView.j + * AppKit + * + * Created by Alexander Ljungberg. + * Copyright 2012, SlevenBits Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import "_CPWindowView.j" + +var STANDARD_TITLEBAR_HEIGHT = 25.0; + +@implementation _CPTitleableWindowView : _CPWindowView +{ + CPTextField _titleField; +} + ++ (int)titleBarHeight +{ + return STANDARD_TITLEBAR_HEIGHT; +} + ++ (CGRect)contentRectForFrameRect:(CGRect)aFrameRect +{ + var contentRect = CGRectMakeCopy(aFrameRect), + titleBarHeight = [[self class] titleBarHeight]; + + contentRect.origin.y += titleBarHeight; + contentRect.size.height -= titleBarHeight; + + return contentRect; +} + ++ (CGRect)frameRectForContentRect:(CGRect)aContentRect +{ + var frameRect = CGRectMakeCopy(aContentRect), + titleBarHeight = [[self class] titleBarHeight]; + + frameRect.origin.y -= titleBarHeight; + frameRect.size.height += titleBarHeight; + + return frameRect; +} + +- (id)initWithFrame:(CPRect)aFrame styleMask:(unsigned)aStyleMask +{ + self = [super initWithFrame:aFrame styleMask:aStyleMask]; + + if (self) + { + _titleField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; + + [_titleField setHitTests:NO]; + [_titleField setStringValue:@"Untitled"]; + [_titleField sizeToFit]; + [_titleField setAutoresizingMask:CPViewWidthSizable]; + [_titleField setStringValue:@""]; + + [_titleField setFrame:CGRectMake(20.0, 3.0, CGRectGetWidth([self bounds]) - 40.0, CGRectGetHeight([_titleField frame]))]; + + [self addSubview:_titleField]; + + [self setNeedsLayout]; + } + + return self; +} + +- (void)setTitle:(CPString)aTitle +{ + [_titleField setStringValue:aTitle]; +} + +- (void)tile +{ + [super tile]; + + var theWindow = [self window], + bounds = [self bounds], + width = CGRectGetWidth(bounds); + + // The vertical alignment of the title is set by the theme, so just give it all available space. By default + // the title will vertically centre within. + [_titleField setFrame:_CGRectMake(20.0, 0, width - 40.0, [[self class] titleBarHeight])]; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + [_titleField setTextColor:[self currentValueForThemeAttribute:@"title-text-color"]]; + [_titleField setFont:[self currentValueForThemeAttribute:@"title-font"]]; + [_titleField setAlignment:[self currentValueForThemeAttribute:@"title-alignment"]]; + [_titleField setVerticalAlignment:[self currentValueForThemeAttribute:@"title-vertical-alignment"]]; + [_titleField setLineBreakMode:[self currentValueForThemeAttribute:@"title-line-break-mode"]]; + [_titleField setTextShadowColor:[self currentValueForThemeAttribute:@"title-text-shadow-color"]]; + [_titleField setTextShadowOffset:[self currentValueForThemeAttribute:@"title-text-shadow-offset"]]; +} + +@end diff --git a/AppKit/CPWindow/_CPWindowView.j b/AppKit/CPWindow/_CPWindowView.j index 56b5ee8cd..ae02622cf 100644 --- a/AppKit/CPWindow/_CPWindowView.j +++ b/AppKit/CPWindow/_CPWindowView.j @@ -41,6 +41,8 @@ var _CPWindowViewResizeIndicatorImage = nil; CGPoint _mouseDraggedPoint; CGRect _cachedScreenFrame; + + CPView _sheetShadowView; } + (void)initialize @@ -61,6 +63,17 @@ var _CPWindowViewResizeIndicatorImage = nil; return CGRectMakeCopy(aContentRect); } ++ (CPString)defaultThemeClass +{ + return "window"; +} + ++ (id)themeAttributes +{ + return [CPDictionary dictionaryWithObjects:[[CPColor blackColor], [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPNull null], _CGSizeMakeZero(), CPCenterTextAlignment, CPLineBreakByTruncatingTail, CPTopVerticalTextAlignment] + forKeys:[@"title-text-color", @"title-font", @"title-text-shadow-color", @"title-text-shadow-offset", @"title-alignment", @"title-line-break-mode", @"title-vertical-alignment"]]; +} + - (CGRect)contentRectForFrameRect:(CGRect)aFrameRect { return [[self class] contentRectForFrameRect:aFrameRect]; @@ -195,7 +208,6 @@ var _CPWindowViewResizeIndicatorImage = nil; location = [theWindow convertBaseToGlobal:[anEvent locationInWindow]], origin = [self _pointWithinScreenFrame:CGPointMake(_CGRectGetMinX(frame) + (location.x - _mouseDraggedPoint.x), _CGRectGetMinY(frame) + (location.y - _mouseDraggedPoint.y))]; - [theWindow setFrameOrigin:origin]; _mouseDraggedPoint = [self _pointWithinScreenFrame:location]; @@ -204,6 +216,17 @@ var _CPWindowViewResizeIndicatorImage = nil; [CPApp setTarget:self selector:@selector(trackMoveWithEvent:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES]; } +- (void)setFrameSize:(CGSize)newSize +{ + [super setFrameSize:newSize]; + + // reposition sheet if the parent window resizes or moves + var theWindow = [self window]; + + if ([theWindow attachedSheet]) + [theWindow _setAttachedSheetFrameOrigin]; +} + - (void)setShowsResizeIndicator:(BOOL)shouldShowResizeIndicator { if (shouldShowResizeIndicator) @@ -347,6 +370,23 @@ var _CPWindowViewResizeIndicatorImage = nil; [self tile]; } + +- (void)noteKeyWindowStateChanged +{ + if ([[self window] isKeyWindow]) + [self setThemeState:CPThemeStateKeyWindow]; + else + [self unsetThemeState:CPThemeStateKeyWindow]; +} + +- (void)noteMainWindowStateChanged +{ + if ([[self window] isMainWindow]) + [self setThemeState:CPThemeStateMainWindow]; + else + [self unsetThemeState:CPThemeStateMainWindow]; +} + /* - (void)setAnimatingToolbar:(BOOL)isAnimatingToolbar { @@ -367,4 +407,21 @@ var _CPWindowViewResizeIndicatorImage = nil; [self addSubview:_resizeIndicator]; } +- (void)_enableSheet:(BOOL)enable +{ + if (enable) + { + var bundle = [CPBundle bundleForClass:[CPWindow class]]; + _sheetShadowView = [[CPView alloc] initWithFrame:_CGRectMake(0, 0, _CGRectGetWidth([self bounds]), 8)]; + [_sheetShadowView setAutoresizingMask:CPViewWidthSizable]; + [_sheetShadowView setBackgroundColor:[CPColor colorWithPatternImage:[[CPImage alloc] + initWithContentsOfFile:[bundle pathForResource:@"CPWindow/CPWindowAttachedSheetShadow.png"] size:_CGSizeMake(9, 8)]]]; + [self addSubview:_sheetShadowView]; + } + else + { + [_sheetShadowView removeFromSuperview]; + } +} + @end diff --git a/AppKit/CPWindowController.j b/AppKit/CPWindowController.j index 0a2b7202a..5ddb02258 100644 --- a/AppKit/CPWindowController.j +++ b/AppKit/CPWindowController.j @@ -181,8 +181,7 @@ if (!_window) { - var reason = [CPString stringWithFormat:@"Window for %@ could not be loaded from Cib or no window specified. \ - Override loadWindow to load the window manually.", self]; + var reason = [CPString stringWithFormat:@"Window for %@ could not be loaded from Cib or no window specified. Override loadWindow to load the window manually.", self]; [CPException raise:CPInternalInconsistencyException reason:reason]; } @@ -336,18 +335,21 @@ if (!_viewControllerContainerView && !aView) return; - var viewControllerView = [[self viewController] view], + var viewController = [self viewController], + viewControllerView = [viewController isViewLoaded] ? [viewController view] : nil, contentView = [[self window] contentView]; if (aView) { [aView setFrame:[contentView frame]]; [aView setAutoresizingMask:[contentView autoresizingMask]]; + if (viewControllerView) { [viewControllerView removeFromSuperview]; [aView addSubview:viewControllerView]; } + [[self window] setContentView:aView]; } else if (viewControllerView) @@ -379,11 +381,12 @@ return; var containerView = [self viewControllerContainerView], - newView = [aViewController view]; + newView = [aViewController isViewLoaded] ? [aViewController view] : nil; if (containerView) { - var oldView = [_viewController view]; + var oldView = [_viewController isViewLoaded] ? [_viewController view] : nil; + if (oldView) { [newView setFrame:[oldView frame]]; @@ -408,6 +411,7 @@ { var view = [[CPView alloc] init], contentView = [[self window] contentView]; + [view setFrame:[contentView frame]]; [view setAutoresizingMask:[contentView autoresizingMask]]; [[self window] setContentView:view] diff --git a/AppKit/Platform/DOM/CPPlatformString.j b/AppKit/Platform/DOM/CPPlatformString.j index da3cc3a17..0f6e7731d 100644 --- a/AppKit/Platform/DOM/CPPlatformString.j +++ b/AppKit/Platform/DOM/CPPlatformString.j @@ -25,8 +25,6 @@ var DOMFixedWidthSpanElement = nil, DOMMetricsDivElement = nil, DOMMetricsTextSpanElement = nil, DOMMetricsImgElement = nil, - DOMIFrameElement = nil, - DOMIFrameDocument = nil, DefaultFont = nil; @implementation CPPlatformString : CPBasePlatformString @@ -48,50 +46,27 @@ var DOMFixedWidthSpanElement = nil, + (void)createDOMElements { - var style; + var style, + bodyElement = [CPPlatform mainBodyElement]; - DOMIFrameElement = document.createElement("iframe"); - // necessary for Safari caching bug: - DOMIFrameElement.name = "iframe_" + FLOOR(RAND() * 10000); - DOMIFrameElement.className = "cpdontremove"; - - style = DOMIFrameElement.style; - style.position = "absolute"; - style.left = "-100px"; - style.top = "-100px"; - style.width = "1px"; - style.height = "1px"; - style.borderWidth = "0px"; - style.overflow = "hidden"; - style.zIndex = 100000000000; - - var bodyElement = [CPPlatform mainBodyElement]; - - bodyElement.appendChild(DOMIFrameElement); - - DOMIFrameDocument = (DOMIFrameElement.contentDocument || DOMIFrameElement.contentWindow.document); - DOMIFrameDocument.write(''); - DOMIFrameDocument.close(); - - // IE needs this wide
to prevent unwanted text wrapping: - var DOMDivElement = DOMIFrameDocument.createElement("div"); - DOMDivElement.style.position = "absolute"; - DOMDivElement.style.width = "100000px"; - - DOMIFrameDocument.body.appendChild(DOMDivElement); - - DOMFlexibleWidthSpanElement = DOMIFrameDocument.createElement("span"); + DOMFlexibleWidthSpanElement = document.createElement("span"); + DOMFlexibleWidthSpanElement.className = "cpdontremove"; style = DOMFlexibleWidthSpanElement.style; style.position = "absolute"; + style.left = "-100000px"; + style.zIndex = -100000; style.visibility = "visible"; style.padding = "0px"; style.margin = "0px"; style.whiteSpace = "pre"; - DOMFixedWidthSpanElement = DOMIFrameDocument.createElement("span"); + DOMFixedWidthSpanElement = document.createElement("span"); + DOMFixedWidthSpanElement.className = "cpdontremove"; style = DOMFixedWidthSpanElement.style; style.display = "block"; style.position = "absolute"; + style.left = "-100000px"; + style.zIndex = -10000; style.visibility = "visible"; style.padding = "0px"; style.margin = "0px"; @@ -112,27 +87,31 @@ var DOMFixedWidthSpanElement = nil, style.whiteSpace = "pre"; } - DOMDivElement.appendChild(DOMFlexibleWidthSpanElement); - DOMDivElement.appendChild(DOMFixedWidthSpanElement); + bodyElement.appendChild(DOMFlexibleWidthSpanElement); + bodyElement.appendChild(DOMFixedWidthSpanElement); } + (void)createDOMMetricsElements { - if (!DOMIFrameElement) - [self createDOMElements]; + var style, + bodyElement = [CPPlatform mainBodyElement]; - var style; - - DOMMetricsDivElement = DOMIFrameDocument.createElement("div"); + DOMMetricsDivElement = document.createElement("div"); + DOMMetricsDivElement.className = "cpdontremove"; DOMMetricsDivElement.style.position = "absolute"; + DOMMetricsDivElement.style.left = "-10000px"; + DOMMetricsDivElement.style.zIndex = -10000; DOMMetricsDivElement.style.width = "100000px"; - DOMIFrameDocument.body.appendChild(DOMMetricsDivElement); + bodyElement.appendChild(DOMMetricsDivElement); - DOMMetricsTextSpanElement = DOMIFrameDocument.createElement("span"); + DOMMetricsTextSpanElement = document.createElement("span"); + DOMMetricsTextSpanElement.className = "cpdontremove"; DOMMetricsTextSpanElement.innerHTML = "x"; style = DOMMetricsTextSpanElement.style; style.position = "absolute"; + style.left = "-10000px"; + style.zIndex = -10000; style.visibility = "visible"; style.padding = "0px"; style.margin = "0px"; @@ -140,12 +119,16 @@ var DOMFixedWidthSpanElement = nil, var imgPath = [[CPBundle bundleForClass:[CPView class]] pathForResource:@"empty.png"]; - DOMMetricsImgElement = DOMIFrameDocument.createElement("img"); + DOMMetricsImgElement = document.createElement("img"); + DOMMetricsImgElement.className = "cpdontremove"; DOMMetricsImgElement.setAttribute("src", imgPath); DOMMetricsImgElement.setAttribute("width", "1"); DOMMetricsImgElement.setAttribute("height", "1"); DOMMetricsImgElement.setAttribute("alt", ""); style = DOMMetricsImgElement.style; + style.position = "absolute"; + style.left = "-10000px"; + style.zIndex = -10000; style.visibility = "visible"; style.padding = "0px"; style.margin = "0px"; @@ -158,7 +141,7 @@ var DOMFixedWidthSpanElement = nil, + (CGSize)sizeOfString:(CPString)aString withFont:(CPFont)aFont forWidth:(float)aWidth { - if (!DOMIFrameElement) + if (!DOMFixedWidthSpanElement) [self createDOMElements]; var span; diff --git a/AppKit/Resources/CPApplication/New.png b/AppKit/Resources/CPApplication/New.png index 058a6caa4..2ca371152 100644 Binary files a/AppKit/Resources/CPApplication/New.png and b/AppKit/Resources/CPApplication/New.png differ diff --git a/AppKit/Resources/CPApplication/NewHighlighted.png b/AppKit/Resources/CPApplication/NewHighlighted.png index 6697edddb..cc1798ce5 100644 Binary files a/AppKit/Resources/CPApplication/NewHighlighted.png and b/AppKit/Resources/CPApplication/NewHighlighted.png differ diff --git a/AppKit/Resources/CPApplication/Open.png b/AppKit/Resources/CPApplication/Open.png index 15c6cda7f..e7377da06 100644 Binary files a/AppKit/Resources/CPApplication/Open.png and b/AppKit/Resources/CPApplication/Open.png differ diff --git a/AppKit/Resources/CPApplication/OpenHighlighted.png b/AppKit/Resources/CPApplication/OpenHighlighted.png index 17b5a2b9e..61bef991a 100644 Binary files a/AppKit/Resources/CPApplication/OpenHighlighted.png and b/AppKit/Resources/CPApplication/OpenHighlighted.png differ diff --git a/AppKit/Resources/CPApplication/Save.png b/AppKit/Resources/CPApplication/Save.png index bdefaef19..a6cfc44cd 100644 Binary files a/AppKit/Resources/CPApplication/Save.png and b/AppKit/Resources/CPApplication/Save.png differ diff --git a/AppKit/Resources/CPApplication/SaveHighlighted.png b/AppKit/Resources/CPApplication/SaveHighlighted.png index cbba05f64..8a42c72a7 100644 Binary files a/AppKit/Resources/CPApplication/SaveHighlighted.png and b/AppKit/Resources/CPApplication/SaveHighlighted.png differ diff --git a/AppKit/Resources/CPAttachedWindow/attached-window-button-close-highlighted.png b/AppKit/Resources/CPAttachedWindow/attached-window-button-close-highlighted.png index 2d3bcda48..61a9f456e 100644 Binary files a/AppKit/Resources/CPAttachedWindow/attached-window-button-close-highlighted.png and b/AppKit/Resources/CPAttachedWindow/attached-window-button-close-highlighted.png differ diff --git a/AppKit/Resources/CPAttachedWindow/attached-window-button-close.png b/AppKit/Resources/CPAttachedWindow/attached-window-button-close.png index a39c6ac46..cd8743de1 100644 Binary files a/AppKit/Resources/CPAttachedWindow/attached-window-button-close.png and b/AppKit/Resources/CPAttachedWindow/attached-window-button-close.png differ diff --git a/AppKit/Resources/CPImage/CPImageNameColorPanel.png b/AppKit/Resources/CPImage/CPImageNameColorPanel.png index 85f94ee58..527ff1ad8 100644 Binary files a/AppKit/Resources/CPImage/CPImageNameColorPanel.png and b/AppKit/Resources/CPImage/CPImageNameColorPanel.png differ diff --git a/AppKit/Resources/CPImage/CPImageNameColorPanelHighlighted.png b/AppKit/Resources/CPImage/CPImageNameColorPanelHighlighted.png index 72d0739f5..85efbde42 100644 Binary files a/AppKit/Resources/CPImage/CPImageNameColorPanelHighlighted.png and b/AppKit/Resources/CPImage/CPImageNameColorPanelHighlighted.png differ diff --git a/AppKit/Resources/CPImageView/CPImageViewBottomLeftShadow.png b/AppKit/Resources/CPImageView/CPImageViewBottomLeftShadow.png index 7b1d88f8b..9869030cf 100644 Binary files a/AppKit/Resources/CPImageView/CPImageViewBottomLeftShadow.png and b/AppKit/Resources/CPImageView/CPImageViewBottomLeftShadow.png differ diff --git a/AppKit/Resources/CPImageView/CPImageViewBottomRightShadow.png b/AppKit/Resources/CPImageView/CPImageViewBottomRightShadow.png index e9d60da1d..f0149cf72 100644 Binary files a/AppKit/Resources/CPImageView/CPImageViewBottomRightShadow.png and b/AppKit/Resources/CPImageView/CPImageViewBottomRightShadow.png differ diff --git a/AppKit/Resources/CPImageView/CPImageViewBottomShadow.png b/AppKit/Resources/CPImageView/CPImageViewBottomShadow.png index 650089689..ec75c41e7 100644 Binary files a/AppKit/Resources/CPImageView/CPImageViewBottomShadow.png and b/AppKit/Resources/CPImageView/CPImageViewBottomShadow.png differ diff --git a/AppKit/Resources/CPImageView/CPImageViewLeftShadow.png b/AppKit/Resources/CPImageView/CPImageViewLeftShadow.png index 6fcbb9694..e897b0fc4 100644 Binary files a/AppKit/Resources/CPImageView/CPImageViewLeftShadow.png and b/AppKit/Resources/CPImageView/CPImageViewLeftShadow.png differ diff --git a/AppKit/Resources/CPImageView/CPImageViewRightShadow.png b/AppKit/Resources/CPImageView/CPImageViewRightShadow.png index 7b93553ff..91f8fc242 100644 Binary files a/AppKit/Resources/CPImageView/CPImageViewRightShadow.png and b/AppKit/Resources/CPImageView/CPImageViewRightShadow.png differ diff --git a/AppKit/Resources/CPImageView/CPImageViewTopLeftShadow.png b/AppKit/Resources/CPImageView/CPImageViewTopLeftShadow.png index 71857276c..bb6b59f14 100644 Binary files a/AppKit/Resources/CPImageView/CPImageViewTopLeftShadow.png and b/AppKit/Resources/CPImageView/CPImageViewTopLeftShadow.png differ diff --git a/AppKit/Resources/CPImageView/CPImageViewTopRightShadow.png b/AppKit/Resources/CPImageView/CPImageViewTopRightShadow.png index e597c5e7a..0c31dfedd 100644 Binary files a/AppKit/Resources/CPImageView/CPImageViewTopRightShadow.png and b/AppKit/Resources/CPImageView/CPImageViewTopRightShadow.png differ diff --git a/AppKit/Resources/CPImageView/CPImageViewTopShadow.png b/AppKit/Resources/CPImageView/CPImageViewTopShadow.png index 483e391fa..df08a10a6 100644 Binary files a/AppKit/Resources/CPImageView/CPImageViewTopShadow.png and b/AppKit/Resources/CPImageView/CPImageViewTopShadow.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-center.png b/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-center.png index e35825eca..06fd6801d 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-center.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-center.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-left.png b/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-left.png index c6b6a79db..6a40c8572 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-left.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-left.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-right.png b/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-right.png index 6d764de47..a8960f806 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-right.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-bezel-right.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-center.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-center.png index 73c27b640..3701f3629 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-center.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-center.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-left.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-left.png index f7c0e99a3..8b16af62e 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-left.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-left.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-right.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-right.png index 66861d454..177628245 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-right.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-critical-right.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-center.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-center.png index 52af5430d..b1df410d0 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-center.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-center.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-left.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-left.png index 1610a148e..f46aa0027 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-left.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-left.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-right.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-right.png index 6da29ed04..e546ae62d 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-right.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-empty-right.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-center.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-center.png index 8f8ee5b89..443ecf43e 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-center.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-center.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-left.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-left.png index ff0c4d545..096168186 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-left.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-left.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-right.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-right.png index 18c5f258d..93d128c98 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-right.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-normal-right.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-center.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-center.png index 2458232a8..9b21ace3e 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-center.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-center.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-left.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-left.png index 28749052a..c26b6db9d 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-left.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-left.png differ diff --git a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-right.png b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-right.png index 3ac02048b..02ce4ffad 100644 Binary files a/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-right.png and b/AppKit/Resources/CPLevelIndicator/level-indicator-segment-warning-right.png differ diff --git a/AppKit/Resources/CPMenuItem/CPMenuItemOnState.png b/AppKit/Resources/CPMenuItem/CPMenuItemOnState.png index 614ae28f1..4c25d65a8 100644 Binary files a/AppKit/Resources/CPMenuItem/CPMenuItemOnState.png and b/AppKit/Resources/CPMenuItem/CPMenuItemOnState.png differ diff --git a/AppKit/Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png b/AppKit/Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png index f1a9c8360..aee93822c 100644 Binary files a/AppKit/Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png and b/AppKit/Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png index eb8ef7760..185ae1649 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png index 31bf729e1..453892b24 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png index 1a8da63e7..bcbf22ce6 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png index 499de408b..6f52b1008 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png index f49b3f392..8a3924309 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png index 81691a355..f46d6e2b1 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png index 032dfca6f..3db8ec41d 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png index f3e7717c4..e42a7c458 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png index 075026cb3..0a1939345 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png index f27ba9cb7..de32b01b1 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png index e4d1fc5d5..e0a0bd241 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png index b6d88f15a..b0e9559a1 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleMini.gif b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleMini.gif index e0124ff71..370ef06a9 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleMini.gif and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleMini.gif differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif index 0d2567cd0..598cab3dc 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif differ diff --git a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleSmall.gif b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleSmall.gif index 140e850c7..cbd275d4c 100644 Binary files a/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleSmall.gif and b/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleSmall.gif differ diff --git a/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png b/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png index fc32eabb3..233c7235c 100644 Binary files a/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png and b/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png differ diff --git a/AppKit/Resources/CPSearchField/CPSearchFieldCancelPressed.png b/AppKit/Resources/CPSearchField/CPSearchFieldCancelPressed.png index e4fc62e23..18e58d79d 100644 Binary files a/AppKit/Resources/CPSearchField/CPSearchFieldCancelPressed.png and b/AppKit/Resources/CPSearchField/CPSearchFieldCancelPressed.png differ diff --git a/AppKit/Resources/CPSearchField/CPSearchFieldFind.png b/AppKit/Resources/CPSearchField/CPSearchFieldFind.png index 0dcd0cd53..c5b8f5e00 100644 Binary files a/AppKit/Resources/CPSearchField/CPSearchFieldFind.png and b/AppKit/Resources/CPSearchField/CPSearchFieldFind.png differ diff --git a/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png b/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png index 77434b8a2..6789691b0 100644 Binary files a/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png and b/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottom.png b/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottom.png index 17398406c..4b62ff445 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottom.png and b/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottom.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png b/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png index 0fa178fb8..5e8887378 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png and b/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomRight.png b/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomRight.png index 8015c51d4..f6f1195f6 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomRight.png and b/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomRight.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewHeavyLeft.png b/AppKit/Resources/CPShadowView/CPShadowViewHeavyLeft.png index 2ef546f3e..51a4ad8a1 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewHeavyLeft.png and b/AppKit/Resources/CPShadowView/CPShadowViewHeavyLeft.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewHeavyRight.png b/AppKit/Resources/CPShadowView/CPShadowViewHeavyRight.png index aec43cd34..6e443d483 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewHeavyRight.png and b/AppKit/Resources/CPShadowView/CPShadowViewHeavyRight.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewHeavyTop.png b/AppKit/Resources/CPShadowView/CPShadowViewHeavyTop.png index 039ea0815..c55c30555 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewHeavyTop.png and b/AppKit/Resources/CPShadowView/CPShadowViewHeavyTop.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopLeft.png b/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopLeft.png index 7fedc4e24..6f02fadaa 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopLeft.png and b/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopLeft.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopRight.png b/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopRight.png index 4914a6a50..7c775fbf4 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopRight.png and b/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopRight.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewLightBottom.png b/AppKit/Resources/CPShadowView/CPShadowViewLightBottom.png index 650089689..ec75c41e7 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewLightBottom.png and b/AppKit/Resources/CPShadowView/CPShadowViewLightBottom.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewLightBottomLeft.png b/AppKit/Resources/CPShadowView/CPShadowViewLightBottomLeft.png index 7b1d88f8b..9869030cf 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewLightBottomLeft.png and b/AppKit/Resources/CPShadowView/CPShadowViewLightBottomLeft.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewLightBottomRight.png b/AppKit/Resources/CPShadowView/CPShadowViewLightBottomRight.png index e9d60da1d..f0149cf72 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewLightBottomRight.png and b/AppKit/Resources/CPShadowView/CPShadowViewLightBottomRight.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewLightLeft.png b/AppKit/Resources/CPShadowView/CPShadowViewLightLeft.png index 9e2c8e371..ea7b5ffc5 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewLightLeft.png and b/AppKit/Resources/CPShadowView/CPShadowViewLightLeft.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewLightRight.png b/AppKit/Resources/CPShadowView/CPShadowViewLightRight.png index 7b93553ff..91f8fc242 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewLightRight.png and b/AppKit/Resources/CPShadowView/CPShadowViewLightRight.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewLightTop.png b/AppKit/Resources/CPShadowView/CPShadowViewLightTop.png index e930dc7d9..05e9291d0 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewLightTop.png and b/AppKit/Resources/CPShadowView/CPShadowViewLightTop.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewLightTopLeft.png b/AppKit/Resources/CPShadowView/CPShadowViewLightTopLeft.png index 71857276c..bb6b59f14 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewLightTopLeft.png and b/AppKit/Resources/CPShadowView/CPShadowViewLightTopLeft.png differ diff --git a/AppKit/Resources/CPShadowView/CPShadowViewLightTopRight.png b/AppKit/Resources/CPShadowView/CPShadowViewLightTopRight.png index e597c5e7a..0c31dfedd 100644 Binary files a/AppKit/Resources/CPShadowView/CPShadowViewLightTopRight.png and b/AppKit/Resources/CPShadowView/CPShadowViewLightTopRight.png differ diff --git a/AppKit/Resources/CPSplitView/CPSplitViewHorizontal.png b/AppKit/Resources/CPSplitView/CPSplitViewHorizontal.png index 6a016f697..6fd8bf219 100644 Binary files a/AppKit/Resources/CPSplitView/CPSplitViewHorizontal.png and b/AppKit/Resources/CPSplitView/CPSplitViewHorizontal.png differ diff --git a/AppKit/Resources/CPSplitView/CPSplitViewVertical.png b/AppKit/Resources/CPSplitView/CPSplitViewVertical.png index ed3225ab5..80f5725d6 100644 Binary files a/AppKit/Resources/CPSplitView/CPSplitViewVertical.png and b/AppKit/Resources/CPSplitView/CPSplitViewVertical.png differ diff --git a/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator0.png b/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator0.png index a525ea37a..cc186ecec 100644 Binary files a/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator0.png and b/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator0.png differ diff --git a/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator1.png b/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator1.png index d3e6f1fc4..b0be3bf91 100644 Binary files a/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator1.png and b/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator1.png differ diff --git a/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator2.png b/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator2.png index 9fcb69525..84b0fa609 100644 Binary files a/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator2.png and b/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator2.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowAttachedSheetShadow.png b/AppKit/Resources/CPWindow/CPWindowAttachedSheetShadow.png index 836eb6a16..2ecc53336 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowAttachedSheetShadow.png and b/AppKit/Resources/CPWindow/CPWindowAttachedSheetShadow.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow0.png b/AppKit/Resources/CPWindow/CPWindowShadow0.png index 0c1872095..fad099fa7 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow0.png and b/AppKit/Resources/CPWindow/CPWindowShadow0.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow1.png b/AppKit/Resources/CPWindow/CPWindowShadow1.png index 109156c56..253bef159 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow1.png and b/AppKit/Resources/CPWindow/CPWindowShadow1.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow2.png b/AppKit/Resources/CPWindow/CPWindowShadow2.png index e8bc7540a..b480d36c2 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow2.png and b/AppKit/Resources/CPWindow/CPWindowShadow2.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow3.png b/AppKit/Resources/CPWindow/CPWindowShadow3.png index ca075356d..15946b136 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow3.png and b/AppKit/Resources/CPWindow/CPWindowShadow3.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow4.png b/AppKit/Resources/CPWindow/CPWindowShadow4.png index c8ebdd586..3b08d680b 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow4.png and b/AppKit/Resources/CPWindow/CPWindowShadow4.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow5.png b/AppKit/Resources/CPWindow/CPWindowShadow5.png index 239b4038b..7266b0549 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow5.png and b/AppKit/Resources/CPWindow/CPWindowShadow5.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow6.png b/AppKit/Resources/CPWindow/CPWindowShadow6.png index 624d9987a..13e2bbf35 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow6.png and b/AppKit/Resources/CPWindow/CPWindowShadow6.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow7.png b/AppKit/Resources/CPWindow/CPWindowShadow7.png index 80b9a7523..b4bd351f2 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow7.png and b/AppKit/Resources/CPWindow/CPWindowShadow7.png differ diff --git a/AppKit/Resources/CPWindow/CPWindowShadow8.png b/AppKit/Resources/CPWindow/CPWindowShadow8.png index eb82b4b21..83851db04 100644 Binary files a/AppKit/Resources/CPWindow/CPWindowShadow8.png and b/AppKit/Resources/CPWindow/CPWindowShadow8.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground0.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground0.png index 49f0f1bbf..052311dc3 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground0.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground0.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground1.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground1.png index 03afa8531..2d396a9bb 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground1.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground1.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground2.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground2.png index 049910091..e9d582697 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground2.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground2.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground3.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground3.png index 3ba64c822..b0c9211ca 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground3.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground3.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground4.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground4.png index eb0bc87f3..db7fc63a3 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground4.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground4.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground5.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground5.png index 260cc579c..83b4070c5 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground5.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground5.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground6.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground6.png index 01fe3ad8a..291d55d3b 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground6.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground6.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground7.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground7.png index 6300ed5d6..421d344a7 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground7.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground7.png differ diff --git a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground8.png b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground8.png index 14c5c58e1..ff4610cb6 100644 Binary files a/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground8.png and b/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground8.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButton.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButton.png index cd922a599..d29d5fbca 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButton.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButton.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png index e2cf52ed1..ab5946cbd 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png index 9bd3566b1..d5fe88d8c 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png index a84804f09..9681c5a2e 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png index 403ea85eb..2c044317e 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png index 77f0a58ad..d72cfa6a9 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png index 9b462b25b..a63d93f54 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png index d4136ec38..ab3765c79 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop0.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop0.png index 1b0bfd7de..326e5c3f0 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop0.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop0.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop1.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop1.png index 05e709688..fd2f055fb 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop1.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop1.png differ diff --git a/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop2.png b/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop2.png index f0bafb8d1..c75f83c70 100644 Binary files a/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop2.png and b/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop2.png differ diff --git a/AppKit/Resources/CPWindowResizeIndicator.png b/AppKit/Resources/CPWindowResizeIndicator.png index bac884dbb..2643e3db8 100644 Binary files a/AppKit/Resources/CPWindowResizeIndicator.png and b/AppKit/Resources/CPWindowResizeIndicator.png differ diff --git a/AppKit/Resources/FIXME_ImageShadow.png b/AppKit/Resources/FIXME_ImageShadow.png index 2b3e46c55..5d8125413 100644 Binary files a/AppKit/Resources/FIXME_ImageShadow.png and b/AppKit/Resources/FIXME_ImageShadow.png differ diff --git a/AppKit/Resources/GenericFile.png b/AppKit/Resources/GenericFile.png index f6147a176..d1d48824b 100644 Binary files a/AppKit/Resources/GenericFile.png and b/AppKit/Resources/GenericFile.png differ diff --git a/AppKit/Resources/HUDTheme/WindowClose.png b/AppKit/Resources/HUDTheme/WindowClose.png index 17ba6f603..dd9d7d72b 100644 Binary files a/AppKit/Resources/HUDTheme/WindowClose.png and b/AppKit/Resources/HUDTheme/WindowClose.png differ diff --git a/AppKit/Resources/HUDTheme/WindowCloseActive.png b/AppKit/Resources/HUDTheme/WindowCloseActive.png index 5fa29fed3..5f54a8218 100644 Binary files a/AppKit/Resources/HUDTheme/WindowCloseActive.png and b/AppKit/Resources/HUDTheme/WindowCloseActive.png differ diff --git a/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png b/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png index 3150ab978..63c16b49e 100644 Binary files a/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png and b/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png differ diff --git a/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png b/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png index 92307f8b0..24656a5e8 100644 Binary files a/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png and b/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow1.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow1.png index 9055cb9c8..51a55035e 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow1.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow1.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow3.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow3.png index 1ec560b3b..3b5543e65 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow3.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow3.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow4.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow4.png index 0d46be367..3334e6648 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow4.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow4.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow5.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow5.png index c70019c3a..cf9849b9e 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow5.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow5.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow7.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow7.png index 82c60c212..9125d382e 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindow7.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindow7.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png index 6a093be1d..85722a286 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png index cac3e0ed8..b46b9fec3 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded0.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded0.png index 34841cb3c..b1b69b034 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded0.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded0.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded2.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded2.png index 12342f636..4243fd990 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded2.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded2.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded6.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded6.png index 94eae6ff3..51fbeea38 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded6.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded6.png differ diff --git a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded8.png b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded8.png index e2935bb7a..93b44c354 100644 Binary files a/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded8.png and b/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded8.png differ diff --git a/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png b/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png index 17e951c44..e3787b91f 100644 Binary files a/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png and b/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png differ diff --git a/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png b/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png index 6b19961db..d0fcbaab0 100644 Binary files a/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png and b/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png differ diff --git a/AppKit/Resources/_CPToolbarView/toolbar-background-bottom.png b/AppKit/Resources/_CPToolbarView/toolbar-background-bottom.png index 4dcfb044e..a31f07b4c 100644 Binary files a/AppKit/Resources/_CPToolbarView/toolbar-background-bottom.png and b/AppKit/Resources/_CPToolbarView/toolbar-background-bottom.png differ diff --git a/AppKit/Resources/_CPToolbarView/toolbar-background-center.png b/AppKit/Resources/_CPToolbarView/toolbar-background-center.png index 18e0335f4..7df3663bd 100644 Binary files a/AppKit/Resources/_CPToolbarView/toolbar-background-center.png and b/AppKit/Resources/_CPToolbarView/toolbar-background-center.png differ diff --git a/AppKit/Resources/_CPToolbarView/toolbar-background-top.png b/AppKit/Resources/_CPToolbarView/toolbar-background-top.png index a6946f1b2..1ad992f1c 100644 Binary files a/AppKit/Resources/_CPToolbarView/toolbar-background-top.png and b/AppKit/Resources/_CPToolbarView/toolbar-background-top.png differ diff --git a/AppKit/Resources/_CPWindowView/_CPWindowViewResizeIndicator.png b/AppKit/Resources/_CPWindowView/_CPWindowViewResizeIndicator.png index bac884dbb..2643e3db8 100644 Binary files a/AppKit/Resources/_CPWindowView/_CPWindowViewResizeIndicator.png and b/AppKit/Resources/_CPWindowView/_CPWindowViewResizeIndicator.png differ diff --git a/AppKit/Resources/action_button.png b/AppKit/Resources/action_button.png index 2af0dfc48..78ef20a18 100644 Binary files a/AppKit/Resources/action_button.png and b/AppKit/Resources/action_button.png differ diff --git a/AppKit/Resources/brightness_bar.png b/AppKit/Resources/brightness_bar.png index 3848c2c17..079a05cf1 100644 Binary files a/AppKit/Resources/brightness_bar.png and b/AppKit/Resources/brightness_bar.png differ diff --git a/AppKit/Resources/browser-leaf-highlighted.png b/AppKit/Resources/browser-leaf-highlighted.png index c786c820b..5b9e80e37 100644 Binary files a/AppKit/Resources/browser-leaf-highlighted.png and b/AppKit/Resources/browser-leaf-highlighted.png differ diff --git a/AppKit/Resources/browser-leaf.png b/AppKit/Resources/browser-leaf.png index 196afdcb6..d6a5e1d41 100644 Binary files a/AppKit/Resources/browser-leaf.png and b/AppKit/Resources/browser-leaf.png differ diff --git a/AppKit/Resources/browser-resize-control.png b/AppKit/Resources/browser-resize-control.png index c335460de..9b9e50587 100644 Binary files a/AppKit/Resources/browser-resize-control.png and b/AppKit/Resources/browser-resize-control.png differ diff --git a/AppKit/Resources/color_well.png b/AppKit/Resources/color_well.png index 0701699df..525506e37 100644 Binary files a/AppKit/Resources/color_well.png and b/AppKit/Resources/color_well.png differ diff --git a/AppKit/Resources/empty.png b/AppKit/Resources/empty.png index f38e9f910..4b5b30292 100644 Binary files a/AppKit/Resources/empty.png and b/AppKit/Resources/empty.png differ diff --git a/AppKit/Resources/minus_button.png b/AppKit/Resources/minus_button.png index fb4ccbb01..593d7da34 100644 Binary files a/AppKit/Resources/minus_button.png and b/AppKit/Resources/minus_button.png differ diff --git a/AppKit/Resources/plus_button.png b/AppKit/Resources/plus_button.png index 25a6e982f..ab8c66d24 100644 Binary files a/AppKit/Resources/plus_button.png and b/AppKit/Resources/plus_button.png differ diff --git a/AppKit/Resources/slider_button.png b/AppKit/Resources/slider_button.png index 602d7dbb0..a81f5ab76 100644 Binary files a/AppKit/Resources/slider_button.png and b/AppKit/Resources/slider_button.png differ diff --git a/AppKit/Resources/slider_button_h.png b/AppKit/Resources/slider_button_h.png index 1f493e372..b4a499806 100644 Binary files a/AppKit/Resources/slider_button_h.png and b/AppKit/Resources/slider_button_h.png differ diff --git a/AppKit/Resources/standardApplicationIcon.png b/AppKit/Resources/standardApplicationIcon.png index 4611d4582..fdcecf3bb 100644 Binary files a/AppKit/Resources/standardApplicationIcon.png and b/AppKit/Resources/standardApplicationIcon.png differ diff --git a/AppKit/Resources/wheel.png b/AppKit/Resources/wheel.png index 81d06b244..edf379414 100644 Binary files a/AppKit/Resources/wheel.png and b/AppKit/Resources/wheel.png differ diff --git a/AppKit/Resources/wheel_black.png b/AppKit/Resources/wheel_black.png index a5f42597f..363a68a70 100644 Binary files a/AppKit/Resources/wheel_black.png and b/AppKit/Resources/wheel_black.png differ diff --git a/AppKit/Resources/wheel_button.png b/AppKit/Resources/wheel_button.png index 8cca49ee3..9a5ac6ba1 100644 Binary files a/AppKit/Resources/wheel_button.png and b/AppKit/Resources/wheel_button.png differ diff --git a/AppKit/Resources/wheel_button_h.png b/AppKit/Resources/wheel_button_h.png index f580569d9..431ba928b 100644 Binary files a/AppKit/Resources/wheel_button_h.png and b/AppKit/Resources/wheel_button_h.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-center.png index cc9401c73..a32abade3 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-center.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-center.png index dd4ce2152..ccf10e7c4 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-left.png index a615b9382..54d1e177a 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-right.png index 6f14f35d8..afef273e5 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-center.png index be25a32af..3c886fdfb 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-left.png index a4b766ac2..9a5b41e5d 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-right.png index cd709f319..83af4b048 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-left.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-left.png index 674aacd37..0c42f1093 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-left.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-right.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-right.png index 88a8540cc..095eddccb 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-right.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-center.png index ba9ba11ee..28bea0d56 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-center.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-center.png index dc9c36197..37e60f839 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-center.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-left.png index 9831203c0..795b10163 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-left.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-right.png index 359f47a00..99a2a452e 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-right.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-center.png index 7a14851c4..5a3fc5f27 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-left.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-left.png index ecce2caab..1a36e4b41 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-right.png index 20243a2f7..41b9f7321 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-left.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-left.png index 5612f2c91..25aa49985 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-left.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-right.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-right.png index 1540e13d8..538796270 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-right.png and b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-rounded-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-center.png index bc5b3a93b..2110c4d39 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-center.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-center.png index 8289aed50..39f3bc97f 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-left.png index b0e2c0ac5..f5e445fb5 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-right.png index 25dac55c3..5abd8ffef 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-center.png index 79e37a1a4..afdfc2b26 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-left.png index 19b884419..d9b8fa1bb 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-right.png index da0cb9a8a..8660e0773 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-left.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-left.png index dd02f1725..6aad4ce68 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-left.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-right.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-right.png index e32647f97..f85ee8b20 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-right.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-center.png index 62097e54b..ef1bcd511 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-center.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-center.png index 6eacdb9b3..57a7744dd 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-center.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-left.png index 6c3b5f643..462fd8ead 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-left.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-right.png index 0acb2dc95..0c28de01f 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-right.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-center.png index 2591606ba..7d22211a6 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-left.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-left.png index f577b0ad9..07336996b 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-right.png index 9a5ace967..7fbbc9651 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-left.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-left.png index fb3f8fb17..0f527d68f 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-left.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-right.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-right.png index 0e36bf0d5..a5fe760d9 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-right.png and b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-rounded-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-center.png index b565d8e6a..c715b1a16 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-center.png and b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-center.png index 31da63ab7..540f11cdc 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-center.png and b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-left.png index e395935df..6df0c0f8e 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-left.png and b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-right.png index d752a54ec..7927436ad 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-right.png and b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-left.png index 05ff0804e..bfdcbd430 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-left.png and b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-right.png index db4488023..c9fcfea1b 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-right.png and b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/knob-disabled.png b/AppKit/Themes/Aristo/Resources/HUD/knob-disabled.png index fc6e54041..034806f7f 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/knob-disabled.png and b/AppKit/Themes/Aristo/Resources/HUD/knob-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png b/AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png index 5c4387a55..f84e98f4e 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png and b/AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/knob.png b/AppKit/Themes/Aristo/Resources/HUD/knob.png index bad25cf31..7a857a162 100755 Binary files a/AppKit/Themes/Aristo/Resources/HUD/knob.png and b/AppKit/Themes/Aristo/Resources/HUD/knob.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow-disabled.png index b7edfb041..ea1ca4a94 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow-disabled.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow-highlighted.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow-highlighted.png index 31ee9fe88..1c7890f74 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow-highlighted.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow.png index 1cbaf2e26..265cf39c6 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-down-arrow.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-center.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-center.png index 31e38c428..976b4cd2e 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-center.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-left.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-left.png index 83079a4f1..119abbcc0 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-left.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-right.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-right.png index a72035849..dfb90d398 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-right.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-knob-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-track-disabled.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-track-disabled.png index d4d2e0fc1..e75be59d9 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-track-disabled.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-track-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow-disabled.png index 3b5d68032..1313443c8 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow-disabled.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow-highlighted.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow-highlighted.png index cc85f48c0..fa2c83095 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow-highlighted.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow.png index 4182c266a..283e39326 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-left-arrow.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow-disabled.png index d33dce736..2fff07057 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow-disabled.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow-highlighted.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow-highlighted.png index f799e38d8..5e9778526 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow-highlighted.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow.png index 0c661a1c3..1a67fd503 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-right-arrow.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow-disabled.png index 1eaeff830..a14ec1a49 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow-disabled.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow-highlighted.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow-highlighted.png index 7cab7d66e..0a6fadd75 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow-highlighted.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow.png index fd4fae03d..1fcec124c 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-up-arrow.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-bottom.png index 66d2ac683..ce1bdd94e 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-bottom.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-center.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-center.png index 3076a5c7f..09f55b757 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-center.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-top.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-top.png index 6d2e0f78a..f7aa01ca4 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-top.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-knob-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-track-disabled.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-track-disabled.png index 6c4aec1e9..3bf5fb3ad 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-track-disabled.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-track-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-track.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-track.png index 6c287198d..9db373166 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-track.png and b/AppKit/Themes/Aristo/Resources/HUD/scroller-vertical-track.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png index 455b25dec..a32abade3 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-center.png index a32359e5c..211986239 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png index a07b15d5c..17acca69e 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-left.png index cca119c66..36ea26ecc 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-right.png index 9f3a03b7d..0c8166dd9 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png index 6811fc89a..c56eb19d2 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-center.png index ac04df7bb..2110c4d39 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png index 06105ca17..03a871370 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png index 513282884..17acca69e 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png index e8bf1b6b0..e3760d153 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png index 73880f0de..422b89ab0 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-divider.png index 6811fc89a..c56eb19d2 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-divider.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-divider.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-left.png index 56ac58d65..bce037b1d 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-right.png index 2941208e8..f85ee8b20 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-left.png index 61b659212..949732bc9 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-left.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-center.png index aa78a13bc..3c886fdfb 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-center.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png index dc64067fe..3c886fdfb 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png index c81b5aba0..3db0e7ebd 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png index 6eb94808d..83af4b048 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-left.png index a1c5e0323..99c15d72a 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-left.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-right.png index 949864422..f1ce1d872 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-right.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-right.png index 12e90829c..ea5d72c80 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-right.png and b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-bezel.png b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-bezel.png index 69d5c29a9..082af5457 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-bezel.png and b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-bezel.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-bezel.png b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-bezel.png index 9c54fa23e..20ddecc58 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-bezel.png and b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-bezel.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-knob.png b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-knob.png index 5c0d8bd11..375fa2905 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-knob.png and b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-knob.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-knob.png b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-knob.png index 050ffefe6..3f3ce52e1 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-knob.png and b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-knob.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-bottom.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-bottom.png index bdec63744..5211ff749 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-bottom.png and b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-center.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-center.png index 2fbcce41e..a2b37e7ce 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-center.png and b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-bottom.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-bottom.png index efc622a82..7bf9206ac 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-bottom.png and b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-center.png index 25675211c..de9fc8dfa 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-center.png and b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-top.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-top.png index 12abe0927..dc6abbbbe 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-top.png and b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-top.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-top.png index a27c09e56..d22d98bb7 100644 Binary files a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-top.png and b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/alert-error.png b/AppKit/Themes/Aristo/Resources/alert-error.png index edded8310..ef70466c8 100644 Binary files a/AppKit/Themes/Aristo/Resources/alert-error.png and b/AppKit/Themes/Aristo/Resources/alert-error.png differ diff --git a/AppKit/Themes/Aristo/Resources/alert-help-pressed.png b/AppKit/Themes/Aristo/Resources/alert-help-pressed.png index 81dfa09a2..b6e85cb76 100644 Binary files a/AppKit/Themes/Aristo/Resources/alert-help-pressed.png and b/AppKit/Themes/Aristo/Resources/alert-help-pressed.png differ diff --git a/AppKit/Themes/Aristo/Resources/alert-help.png b/AppKit/Themes/Aristo/Resources/alert-help.png index 386b7284d..28b566a61 100644 Binary files a/AppKit/Themes/Aristo/Resources/alert-help.png and b/AppKit/Themes/Aristo/Resources/alert-help.png differ diff --git a/AppKit/Themes/Aristo/Resources/alert-info.png b/AppKit/Themes/Aristo/Resources/alert-info.png index 8ebf63789..9d81a30e8 100644 Binary files a/AppKit/Themes/Aristo/Resources/alert-info.png and b/AppKit/Themes/Aristo/Resources/alert-info.png differ diff --git a/AppKit/Themes/Aristo/Resources/alert-warning.png b/AppKit/Themes/Aristo/Resources/alert-warning.png index c5e480421..03dcc2f83 100644 Binary files a/AppKit/Themes/Aristo/Resources/alert-warning.png and b/AppKit/Themes/Aristo/Resources/alert-warning.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-center.png b/AppKit/Themes/Aristo/Resources/button-bezel-center.png index 9d33b4a52..b501eef86 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-center.png and b/AppKit/Themes/Aristo/Resources/button-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png index 310e7382b..a8552cebb 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-left.png index 2ed1dc26a..739ee9013 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png index 1a986e2fb..ea97138de 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/button-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-center.png index 0d03b41de..1633c0e93 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-left.png index 1f0dfad7f..c4761a768 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-right.png index ee90e9450..d77cba38e 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/button-bezel-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-left.png b/AppKit/Themes/Aristo/Resources/button-bezel-left.png index 43b127cbb..55e8a87f9 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-left.png and b/AppKit/Themes/Aristo/Resources/button-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-right.png b/AppKit/Themes/Aristo/Resources/button-bezel-right.png index b7d5b55dd..95497a981 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-right.png and b/AppKit/Themes/Aristo/Resources/button-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-center.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-center.png index 2b147e622..ae9ba90a6 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-center.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-center.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-center.png index 8000b5c69..73ce9b719 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-center.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-left.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-left.png index 839fa35d7..d5e9afddf 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-left.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-right.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-right.png index 3b5a71186..2f6e05176 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-right.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-center.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-center.png index 1b8d4ac2d..33051c355 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-left.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-left.png index a07ea1ec3..b28b2273e 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-right.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-right.png index c4d248bd2..a2b7ad296 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-left.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-left.png index 6b2617414..d1a0412c4 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-left.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-right.png b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-right.png index 04c7af05f..bfcc5df79 100644 Binary files a/AppKit/Themes/Aristo/Resources/button-bezel-rounded-right.png and b/AppKit/Themes/Aristo/Resources/button-bezel-rounded-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-bezel.png b/AppKit/Themes/Aristo/Resources/buttonbar-bezel.png index 0786263d5..c73a0ae5c 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-bezel.png and b/AppKit/Themes/Aristo/Resources/buttonbar-bezel.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-center.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-center.png index c7e5c8cff..fa3e37e0a 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-center.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-center.png index 2d0338639..a0754c617 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-left.png index b14a4263a..08a64c0c6 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-right.png index e8c8f2192..569bb4177 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-center.png index ee02c199c..6d34f8566 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-left.png index 05d299548..043882d91 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-right.png index 2aef0e98e..ef638e46b 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-left.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-left.png index 7400551e4..d77c8f53f 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-left.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-right.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-right.png index 18575ce51..f6d173163 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-right.png and b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-resize-control.png b/AppKit/Themes/Aristo/Resources/buttonbar-resize-control.png index b31cc36b9..fff92b3d9 100644 Binary files a/AppKit/Themes/Aristo/Resources/buttonbar-resize-control.png and b/AppKit/Themes/Aristo/Resources/buttonbar-resize-control.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image-disabled.png b/AppKit/Themes/Aristo/Resources/check-box-image-disabled.png index 9d595806b..4a9f05d86 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image-disabled.png and b/AppKit/Themes/Aristo/Resources/check-box-image-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image-highlighted.png b/AppKit/Themes/Aristo/Resources/check-box-image-highlighted.png index 51e26047e..a9b30f91f 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image-highlighted.png and b/AppKit/Themes/Aristo/Resources/check-box-image-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image-mixed-disabled.png b/AppKit/Themes/Aristo/Resources/check-box-image-mixed-disabled.png index 2caf2010e..c770f9cc9 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image-mixed-disabled.png and b/AppKit/Themes/Aristo/Resources/check-box-image-mixed-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image-mixed-highlighted.png b/AppKit/Themes/Aristo/Resources/check-box-image-mixed-highlighted.png index 661b06627..94b256f13 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image-mixed-highlighted.png and b/AppKit/Themes/Aristo/Resources/check-box-image-mixed-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image-mixed.png b/AppKit/Themes/Aristo/Resources/check-box-image-mixed.png index d1c739a8b..d7f381171 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image-mixed.png and b/AppKit/Themes/Aristo/Resources/check-box-image-mixed.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image-selected-disabled.png b/AppKit/Themes/Aristo/Resources/check-box-image-selected-disabled.png index 191c479a9..34c741cfe 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image-selected-disabled.png and b/AppKit/Themes/Aristo/Resources/check-box-image-selected-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image-selected-highlighted.png b/AppKit/Themes/Aristo/Resources/check-box-image-selected-highlighted.png index dc2a5f089..422aab08a 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image-selected-highlighted.png and b/AppKit/Themes/Aristo/Resources/check-box-image-selected-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image-selected.png b/AppKit/Themes/Aristo/Resources/check-box-image-selected.png index e8fd93420..29fe63fb2 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image-selected.png and b/AppKit/Themes/Aristo/Resources/check-box-image-selected.png differ diff --git a/AppKit/Themes/Aristo/Resources/check-box-image.png b/AppKit/Themes/Aristo/Resources/check-box-image.png index 1541ecbeb..f97d28f07 100644 Binary files a/AppKit/Themes/Aristo/Resources/check-box-image.png and b/AppKit/Themes/Aristo/Resources/check-box-image.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-center.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-center.png index 343e76d51..835bb2e53 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-center.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-center.png index 3aefab2d3..73ce9b719 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-left.png index 6f1614ab9..fb6c92e7f 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-right.png index bf56b9637..0ae8971cb 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-center.png index 3dd335f5b..33051c355 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-left.png index 8c1579335..84148f538 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-right.png index 8bde109b6..6b4b60ca3 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-left.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-left.png index d188ea17b..4369e4b58 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-left.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-right.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-right.png index 7c6bbf90d..7ccd0552f 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-bezel-right.png and b/AppKit/Themes/Aristo/Resources/colorwell-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-content-border-center.png b/AppKit/Themes/Aristo/Resources/colorwell-content-border-center.png index 96e46d5ca..30fe02985 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-content-border-center.png and b/AppKit/Themes/Aristo/Resources/colorwell-content-border-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-content-border-left.png b/AppKit/Themes/Aristo/Resources/colorwell-content-border-left.png index ca13ac1c8..aff6c5723 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-content-border-left.png and b/AppKit/Themes/Aristo/Resources/colorwell-content-border-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/colorwell-content-border-right.png b/AppKit/Themes/Aristo/Resources/colorwell-content-border-right.png index ca13ac1c8..aff6c5723 100644 Binary files a/AppKit/Themes/Aristo/Resources/colorwell-content-border-right.png and b/AppKit/Themes/Aristo/Resources/colorwell-content-border-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-center.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-center.png index 8f5171d3c..ae51ca109 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-center.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-center.png index 584597d70..ea9901b0c 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-left.png index 5cd37245f..d2be9689b 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-right.png index cad4200ec..f3d3e3838 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-center.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-center.png index 17a750707..3bf8be6a2 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-center.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-left.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-left.png index cf33abf0d..30832d3b6 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-left.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-right.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-right.png index d86d6da36..026e8c56d 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-right.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-focused-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-left.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-left.png index 7278434b5..780c73736 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-left.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-center.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-center.png index 0d654e92e..d2db37444 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-center.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-center.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-center.png index 49cb956b3..44bafedc2 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-center.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-left.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-left.png index dc9d6ac33..2e4b4cffb 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-left.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-right.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-right.png index 811bbcd91..b45c2e146 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-right.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-center.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-center.png index 17a750707..3bf8be6a2 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-center.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-left.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-left.png index 475f79853..75c5ee3d6 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-left.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-right.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-right.png index 6de63cff9..5d71c7272 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-right.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-focused-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-left.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-left.png index 67d0702e0..bdc11d31d 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-left.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-right.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-right.png index d033a0e7f..52987fd2b 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-right.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-no-border-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/combobox-bezel-right.png b/AppKit/Themes/Aristo/Resources/combobox-bezel-right.png index e796d2f7e..5a190b89e 100644 Binary files a/AppKit/Themes/Aristo/Resources/combobox-bezel-right.png and b/AppKit/Themes/Aristo/Resources/combobox-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-center.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-center.png index 73f7c1e34..405b711f7 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-center.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-center.png index 20cb138e3..df6c18db1 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-left.png index 03e468f39..e958bc0cb 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-right.png index d3366babc..119a99c2f 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-center.png index 1c064ca45..d9fd2f72a 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-left.png index 0b0ab90cd..1136e6802 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-right.png index eaa4a61c7..78ad51701 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-left.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-left.png index fead58088..51b6aa0a2 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-left.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-right.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-right.png index 9e3a17454..7e8b2eb2a 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-right.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-center.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-center.png index 1d540df8e..e0a9fb5c0 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-center.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-center.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-center.png index f651063a9..77061dfc9 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-center.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-left.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-left.png index eeb67ede3..56264b79e 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-left.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-right.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-right.png index 30298940c..1f8a99c9e 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-right.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-center.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-center.png index b009e5b9e..170862cfd 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-left.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-left.png index 4a292a1b5..cfd89cf7c 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-right.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-right.png index 3ec6dddcd..2f4e36e0e 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-left.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-left.png index 127c89658..594e340e5 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-left.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-right.png b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-right.png index 72aa04c72..57f5cf301 100644 Binary files a/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-right.png and b/AppKit/Themes/Aristo/Resources/default-button-bezel-rounded-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/horizontal-track-center.png index 67f2ec8b8..7b04fa446 100644 Binary files a/AppKit/Themes/Aristo/Resources/horizontal-track-center.png and b/AppKit/Themes/Aristo/Resources/horizontal-track-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-center.png b/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-center.png index fa421383b..6f6f35a34 100644 Binary files a/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-center.png and b/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-left.png b/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-left.png index 370897e28..48d9b0bc2 100644 Binary files a/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-left.png and b/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-right.png b/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-right.png index 71c465d55..279cb870e 100644 Binary files a/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-right.png and b/AppKit/Themes/Aristo/Resources/horizontal-track-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/horizontal-track-left.png index bf628c570..8b70a44b2 100644 Binary files a/AppKit/Themes/Aristo/Resources/horizontal-track-left.png and b/AppKit/Themes/Aristo/Resources/horizontal-track-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/horizontal-track-right.png index 325582160..e876e57b3 100644 Binary files a/AppKit/Themes/Aristo/Resources/horizontal-track-right.png and b/AppKit/Themes/Aristo/Resources/horizontal-track-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/knob-disabled.png b/AppKit/Themes/Aristo/Resources/knob-disabled.png index 61e860a66..d9c1cea70 100644 Binary files a/AppKit/Themes/Aristo/Resources/knob-disabled.png and b/AppKit/Themes/Aristo/Resources/knob-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/knob-highlighted.png b/AppKit/Themes/Aristo/Resources/knob-highlighted.png index 4154b0fc5..511b23d2b 100644 Binary files a/AppKit/Themes/Aristo/Resources/knob-highlighted.png and b/AppKit/Themes/Aristo/Resources/knob-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/knob.png b/AppKit/Themes/Aristo/Resources/knob.png index 9272760bb..e516841f0 100644 Binary files a/AppKit/Themes/Aristo/Resources/knob.png and b/AppKit/Themes/Aristo/Resources/knob.png differ diff --git a/AppKit/Themes/Aristo/Resources/popup-bezel-center.png b/AppKit/Themes/Aristo/Resources/popup-bezel-center.png index 07d887586..529a19257 100644 Binary files a/AppKit/Themes/Aristo/Resources/popup-bezel-center.png and b/AppKit/Themes/Aristo/Resources/popup-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-center.png index 6ed0c758d..e05dfee2c 100644 Binary files a/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-left.png index d6e40a83e..42eb590c7 100644 Binary files a/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-right-pullsdown.png b/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-right-pullsdown.png index 2ad5a9f3a..81831f72f 100644 Binary files a/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-right-pullsdown.png and b/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-right-pullsdown.png differ diff --git a/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-right.png index 7560cefd1..fa474d166 100644 Binary files a/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/popup-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/popup-bezel-left.png b/AppKit/Themes/Aristo/Resources/popup-bezel-left.png index 6a4f5b580..a716542b3 100644 Binary files a/AppKit/Themes/Aristo/Resources/popup-bezel-left.png and b/AppKit/Themes/Aristo/Resources/popup-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/popup-bezel-right-pullsdown.png b/AppKit/Themes/Aristo/Resources/popup-bezel-right-pullsdown.png index fdcbe0345..e0fdf4539 100644 Binary files a/AppKit/Themes/Aristo/Resources/popup-bezel-right-pullsdown.png and b/AppKit/Themes/Aristo/Resources/popup-bezel-right-pullsdown.png differ diff --git a/AppKit/Themes/Aristo/Resources/popup-bezel-right.png b/AppKit/Themes/Aristo/Resources/popup-bezel-right.png index e97be6171..6aa3ce593 100644 Binary files a/AppKit/Themes/Aristo/Resources/popup-bezel-right.png and b/AppKit/Themes/Aristo/Resources/popup-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/radio-image-disabled.png b/AppKit/Themes/Aristo/Resources/radio-image-disabled.png index 6d9d9bafe..b5a81e3fb 100644 Binary files a/AppKit/Themes/Aristo/Resources/radio-image-disabled.png and b/AppKit/Themes/Aristo/Resources/radio-image-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/radio-image-highlighted.png b/AppKit/Themes/Aristo/Resources/radio-image-highlighted.png index 6f16d4803..ac93ce930 100644 Binary files a/AppKit/Themes/Aristo/Resources/radio-image-highlighted.png and b/AppKit/Themes/Aristo/Resources/radio-image-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/radio-image-selected-disabled.png b/AppKit/Themes/Aristo/Resources/radio-image-selected-disabled.png index 20858b2bd..eeb8aa604 100644 Binary files a/AppKit/Themes/Aristo/Resources/radio-image-selected-disabled.png and b/AppKit/Themes/Aristo/Resources/radio-image-selected-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/radio-image-selected-highlighted.png b/AppKit/Themes/Aristo/Resources/radio-image-selected-highlighted.png index aa4fbc1d6..f538a9c90 100644 Binary files a/AppKit/Themes/Aristo/Resources/radio-image-selected-highlighted.png and b/AppKit/Themes/Aristo/Resources/radio-image-selected-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/radio-image-selected.png b/AppKit/Themes/Aristo/Resources/radio-image-selected.png index 96fa554a6..c3c098542 100644 Binary files a/AppKit/Themes/Aristo/Resources/radio-image-selected.png and b/AppKit/Themes/Aristo/Resources/radio-image-selected.png differ diff --git a/AppKit/Themes/Aristo/Resources/radio-image.png b/AppKit/Themes/Aristo/Resources/radio-image.png index 90cf20c31..10c32350a 100644 Binary files a/AppKit/Themes/Aristo/Resources/radio-image.png and b/AppKit/Themes/Aristo/Resources/radio-image.png differ diff --git a/AppKit/Themes/Aristo/Resources/rule-editor-add.png b/AppKit/Themes/Aristo/Resources/rule-editor-add.png index 5506b84f4..bc0393a85 100644 Binary files a/AppKit/Themes/Aristo/Resources/rule-editor-add.png and b/AppKit/Themes/Aristo/Resources/rule-editor-add.png differ diff --git a/AppKit/Themes/Aristo/Resources/rule-editor-remove.png b/AppKit/Themes/Aristo/Resources/rule-editor-remove.png index 0b5000123..788574a9f 100644 Binary files a/AppKit/Themes/Aristo/Resources/rule-editor-remove.png and b/AppKit/Themes/Aristo/Resources/rule-editor-remove.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-down-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/scroller-down-arrow-disabled.png index 39aee8131..f8c7e0b05 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-down-arrow-disabled.png and b/AppKit/Themes/Aristo/Resources/scroller-down-arrow-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-down-arrow-highlighted.png b/AppKit/Themes/Aristo/Resources/scroller-down-arrow-highlighted.png index c3f181d35..19314c85f 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-down-arrow-highlighted.png and b/AppKit/Themes/Aristo/Resources/scroller-down-arrow-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-down-arrow.png b/AppKit/Themes/Aristo/Resources/scroller-down-arrow.png index a749f32bc..ad5ed8ecd 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-down-arrow.png and b/AppKit/Themes/Aristo/Resources/scroller-down-arrow.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png index 4ebac465a..dd9952665 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png index 7ed9e6f3a..9891a3318 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png index dbc02bf1f..a9fddc0ac 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-right.png index 79665d41b..00a6cc771 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-right.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-left.png index 4bbacbb9c..590cf6942 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-left.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png index 4ac50a74a..0b43baa24 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png index f9c28c326..1947cae3d 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-right.png index 3de61a69d..5bba1baaf 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-right.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png index 93ae51239..29301718f 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png index 9cbdf526c..6391d914f 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-center.png index fd0543a46..de34cc9db 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-center.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-left.png index 58f127169..e533575e2 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-left.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-right.png index 7df58e92b..d049d8d31 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-right.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png index 814f29f61..b3cf74d68 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png index 8454e45d4..df79f9f87 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png index 1befa86cd..171a18fde 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-right.png index 183e7f326..9cb3e7d78 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-right.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png index 91f415300..019855a60 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png and b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-left-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/scroller-left-arrow-disabled.png index f56c4b57b..273eadb90 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-left-arrow-disabled.png and b/AppKit/Themes/Aristo/Resources/scroller-left-arrow-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-left-arrow-highlighted.png b/AppKit/Themes/Aristo/Resources/scroller-left-arrow-highlighted.png index 3c3c2b6a5..95df8bd70 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-left-arrow-highlighted.png and b/AppKit/Themes/Aristo/Resources/scroller-left-arrow-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-left-arrow.png b/AppKit/Themes/Aristo/Resources/scroller-left-arrow.png index 7176691da..ebd6b686f 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-left-arrow.png and b/AppKit/Themes/Aristo/Resources/scroller-left-arrow.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-center.png index b2112661b..00b4f5dab 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-center.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png index 7c3245347..4f0cc3692 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-right.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-right.png index 750fa003f..f1ccb779e 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-right.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png index cd48f0513..cadda610c 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png index b2f76be02..04e2510a6 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png index 7c338ed9e..5a9e6c8b1 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png index f2a83216b..33d9effa9 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png index 8e9272da9..80f165c47 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png index d34e638b8..dc55f672a 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png index 7f53deda9..51517a659 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-center.png index 0f708cd9b..b5afcbb9d 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-center.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-top.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-top.png index af2421264..c41a4afb2 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-top.png and b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-right-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/scroller-right-arrow-disabled.png index 01430c282..8430527dd 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-right-arrow-disabled.png and b/AppKit/Themes/Aristo/Resources/scroller-right-arrow-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-right-arrow-highlighted.png b/AppKit/Themes/Aristo/Resources/scroller-right-arrow-highlighted.png index 6eb90a213..2acbd7b0e 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-right-arrow-highlighted.png and b/AppKit/Themes/Aristo/Resources/scroller-right-arrow-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-right-arrow.png b/AppKit/Themes/Aristo/Resources/scroller-right-arrow.png index c3ac74efc..c536cf3f7 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-right-arrow.png and b/AppKit/Themes/Aristo/Resources/scroller-right-arrow.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-up-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/scroller-up-arrow-disabled.png index 1d474d147..929ac1458 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-up-arrow-disabled.png and b/AppKit/Themes/Aristo/Resources/scroller-up-arrow-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-up-arrow-highlighted.png b/AppKit/Themes/Aristo/Resources/scroller-up-arrow-highlighted.png index fe93632b1..8caeacfeb 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-up-arrow-highlighted.png and b/AppKit/Themes/Aristo/Resources/scroller-up-arrow-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-up-arrow.png b/AppKit/Themes/Aristo/Resources/scroller-up-arrow.png index bb0919165..eaa182606 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-up-arrow.png and b/AppKit/Themes/Aristo/Resources/scroller-up-arrow.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png index df32cc981..abce2eeec 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-center.png index e193dfde3..7ec922c90 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-center.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-bottom.png index 9604bc4fc..b0198fc7e 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-bottom.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png index c285ecd81..6ecb665b6 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png index b4de055ff..b6beea840 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png index 3085360e1..089724b03 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-center.png index 222956a22..9d44ad24f 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-center.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-top.png index ddaea84ca..c950dc963 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-top.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-top.png index 52958547d..df0d79a4e 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-top.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-bottom.png index c7d089297..92a2fe6be 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-bottom.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-center.png index 2c153cb72..9e74fdb51 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-center.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-bottom.png index e71064c82..f740034c3 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-bottom.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-center.png index 663fd52e0..ddcb8bbce 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-center.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-top.png index 76cfb290f..180ecc536 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-top.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-disabled.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-disabled.png index ce00f9700..174a43363 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-disabled.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-left.png index 814f29f61..b3cf74d68 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-left.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-bottom.png index 2fb4d0724..16a9a556d 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-bottom.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png index 981c98ac2..fa720fcbc 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-top.png index 64a6fd631..f5f89443a 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-top.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-right.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-right.png index e7d47fc90..019855a60 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-right.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png index 17e29c9e6..e6f8123d8 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track.png index 6cb8dbbec..d940f4084 100644 Binary files a/AppKit/Themes/Aristo/Resources/scroller-vertical-track.png and b/AppKit/Themes/Aristo/Resources/scroller-vertical-track.png differ diff --git a/AppKit/Themes/Aristo/Resources/scrollview-bottom-corner-color.png b/AppKit/Themes/Aristo/Resources/scrollview-bottom-corner-color.png index ec7c9e451..eadb802a1 100644 Binary files a/AppKit/Themes/Aristo/Resources/scrollview-bottom-corner-color.png and b/AppKit/Themes/Aristo/Resources/scrollview-bottom-corner-color.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-center.png index f45b3fa31..302d5bb3e 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-center.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-center.png index 489c02b39..18a60f688 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-center.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-divider.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-divider.png index 8db39c622..ee83dc7f3 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-divider.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-divider.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-left.png index cb7c29f61..e093f5074 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-left.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-right.png index 81611090d..c7ca218ba 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-right.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-divider.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-divider.png index 73048d79e..3af21666e 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-divider.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-divider.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-center.png index 15a88e704..55d1d6ced 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-center.png index eb00afc1f..27e069051 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-center.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-divider.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-divider.png index 84cde75b9..de6c08565 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-divider.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-divider.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-left.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-left.png index 899b09c4e..cb7cbe4f1 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-left.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-right.png index a932e6ac6..17b154371 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-right.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-divider.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-divider.png index 497350b08..6465572da 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-divider.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-divider.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-left.png index e7ec7cd49..0c17da85a 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-right.png index 0fab60313..9765a8dea 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-left.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-left.png index c28759074..bb5742a73 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-left.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-center.png index 5b7021c08..b58a9decd 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-center.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-center.png index f9f6a6e4e..1faddd654 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-left.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-left.png index aca1e6a6c..7c803a6ac 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-right.png index 07b36cfa6..b22fe2229 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-left.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-left.png index f293920f3..128e65949 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-left.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-right.png index f3371171d..c912f66b9 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-right.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-right.png index 27898baed..3b195a0ce 100644 Binary files a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-right.png and b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/slider-circular-bezel.png b/AppKit/Themes/Aristo/Resources/slider-circular-bezel.png index 0025fc9a4..8d69327dd 100644 Binary files a/AppKit/Themes/Aristo/Resources/slider-circular-bezel.png and b/AppKit/Themes/Aristo/Resources/slider-circular-bezel.png differ diff --git a/AppKit/Themes/Aristo/Resources/slider-circular-disabled-bezel.png b/AppKit/Themes/Aristo/Resources/slider-circular-disabled-bezel.png index 7053d3f3a..ca499dfd8 100644 Binary files a/AppKit/Themes/Aristo/Resources/slider-circular-disabled-bezel.png and b/AppKit/Themes/Aristo/Resources/slider-circular-disabled-bezel.png differ diff --git a/AppKit/Themes/Aristo/Resources/slider-circular-disabled-knob.png b/AppKit/Themes/Aristo/Resources/slider-circular-disabled-knob.png index f657e437b..0730bbee7 100644 Binary files a/AppKit/Themes/Aristo/Resources/slider-circular-disabled-knob.png and b/AppKit/Themes/Aristo/Resources/slider-circular-disabled-knob.png differ diff --git a/AppKit/Themes/Aristo/Resources/slider-circular-knob.png b/AppKit/Themes/Aristo/Resources/slider-circular-knob.png index 7d9fb3bbb..96f97c451 100644 Binary files a/AppKit/Themes/Aristo/Resources/slider-circular-knob.png and b/AppKit/Themes/Aristo/Resources/slider-circular-knob.png differ diff --git a/AppKit/Themes/Aristo/Resources/spinner.gif b/AppKit/Themes/Aristo/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/AppKit/Themes/Aristo/Resources/spinner.gif and b/AppKit/Themes/Aristo/Resources/spinner.gif differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-center.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-center.png index f0bf860d3..9f6eb024f 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-center.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-left.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-left.png index 5bbd44915..d26b98bc0 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-left.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-right.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-right.png index bda1c0dc9..9a6a3b92d 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-right.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-down-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-center.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-center.png index 9f8aae544..84dccac61 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-center.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-left.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-left.png index 5cb96fe54..5905f74f0 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-left.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-right.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-right.png index e7b71fb3a..2c2a7a64f 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-right.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-disabled-up-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-center.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-center.png index 4676dc60c..4b450ed81 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-center.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-left.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-left.png index 5a2ea5996..34ef68ee9 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-left.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-right.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-right.png index 610fbc6c6..76d28a271 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-right.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-down-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-center.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-center.png index 8acb5b5ce..591a0e4f1 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-center.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-left.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-left.png index cb5fcc392..c090f5762 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-left.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-right.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-right.png index 8453a2549..7fd6db716 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-right.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-down-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-center.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-center.png index df05795bc..3e66486b6 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-center.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-left.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-left.png index b3d8204bf..5962a2299 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-left.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-right.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-right.png index 8efab7d8d..5adfec42c 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-right.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-highlighted-up-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-center.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-center.png index f77eddc93..b022dfe9f 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-center.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-left.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-left.png index ebd97df77..6ab25ca19 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-left.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-right.png b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-right.png index be4a430ee..d9630e755 100644 Binary files a/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-right.png and b/AppKit/Themes/Aristo/Resources/stepper-bezel-big-up-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/tableview-headerview-ascending.png b/AppKit/Themes/Aristo/Resources/tableview-headerview-ascending.png index 3a4fa6624..5902e279c 100644 Binary files a/AppKit/Themes/Aristo/Resources/tableview-headerview-ascending.png and b/AppKit/Themes/Aristo/Resources/tableview-headerview-ascending.png differ diff --git a/AppKit/Themes/Aristo/Resources/tableview-headerview-descending.png b/AppKit/Themes/Aristo/Resources/tableview-headerview-descending.png index 9365254b5..d4b749f84 100644 Binary files a/AppKit/Themes/Aristo/Resources/tableview-headerview-descending.png and b/AppKit/Themes/Aristo/Resources/tableview-headerview-descending.png differ diff --git a/AppKit/Themes/Aristo/Resources/tableview-headerview-highlighted-pressed.png b/AppKit/Themes/Aristo/Resources/tableview-headerview-highlighted-pressed.png index b0a0ff82a..93318a7a3 100644 Binary files a/AppKit/Themes/Aristo/Resources/tableview-headerview-highlighted-pressed.png and b/AppKit/Themes/Aristo/Resources/tableview-headerview-highlighted-pressed.png differ diff --git a/AppKit/Themes/Aristo/Resources/tableview-headerview-highlighted.png b/AppKit/Themes/Aristo/Resources/tableview-headerview-highlighted.png index 6596e48d8..04a68128d 100644 Binary files a/AppKit/Themes/Aristo/Resources/tableview-headerview-highlighted.png and b/AppKit/Themes/Aristo/Resources/tableview-headerview-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/tableview-headerview-pressed.png b/AppKit/Themes/Aristo/Resources/tableview-headerview-pressed.png index e032e53de..88ab5f62a 100644 Binary files a/AppKit/Themes/Aristo/Resources/tableview-headerview-pressed.png and b/AppKit/Themes/Aristo/Resources/tableview-headerview-pressed.png differ diff --git a/AppKit/Themes/Aristo/Resources/tableview-headerview.png b/AppKit/Themes/Aristo/Resources/tableview-headerview.png index 357bbc85b..6e93345d2 100644 Binary files a/AppKit/Themes/Aristo/Resources/tableview-headerview.png and b/AppKit/Themes/Aristo/Resources/tableview-headerview.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-center.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-center.png index 47b21b422..bdc5e8970 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-center.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-center.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-center.png index 2089c6dc6..abc15a71e 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-center.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-left.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-left.png index d4f0f53be..4571263a1 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-left.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-right.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-right.png index e3fa8a303..f00ec2271 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-right.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-disabled-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-center.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-center.png index e1aad4ee2..628ea5e6b 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-center.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-left.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-left.png index 66a00a37e..25f2e8453 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-left.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-right.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-right.png index 53711d5ad..a867de8e9 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-right.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-focused-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-left.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-left.png index 39a880af9..589fa00e2 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-left.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-right.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-right.png index 8aac94d7b..6dcbfd3b4 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-right.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-rounded-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-0.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-0.png index 9277864a3..9fb52e5ce 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-0.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-0.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-1.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-1.png index 373b4521a..d8e5478ca 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-1.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-1.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-2.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-2.png index 8a25d7d56..e16d9d2c4 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-2.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-2.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-3.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-3.png index c64440c21..e914bd49d 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-3.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-3.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-4.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-4.png index b9d310c91..4996c1820 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-4.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-4.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-5.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-5.png index fd3d0f353..ae00d6fdd 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-5.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-5.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-6.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-6.png index 657130254..20563a192 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-6.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-6.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-7.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-7.png index 516547dd3..7659c0236 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-7.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-7.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-8.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-8.png index 7e5ee4d11..e648afdbf 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-8.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-8.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-0.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-0.png index 9d9c48149..7a180f870 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-0.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-0.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-1.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-1.png index 69059d7f4..8b8504cf3 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-1.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-1.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-2.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-2.png index c16b43a4c..d0b7b7e04 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-2.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-2.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-3.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-3.png index c66d31b2f..293931a96 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-3.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-3.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-4.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-4.png index b9d310c91..4996c1820 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-4.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-4.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-5.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-5.png index 1bbb21e96..22076f265 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-5.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-5.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-6.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-6.png index 34f8ea207..844f2be2f 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-6.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-6.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-7.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-7.png index 78e4e0197..2afec995c 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-7.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-7.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-8.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-8.png index 7cacd441e..bff1770a6 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-8.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-disabled-8.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-0.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-0.png index 45338f207..880035cd9 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-0.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-0.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-1.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-1.png index b5425fd48..8b8b0b92b 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-1.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-1.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-2.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-2.png index d0ed18841..48085ae85 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-2.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-2.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-3.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-3.png index d91ea7245..bfe8fa715 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-3.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-3.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-4.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-4.png index b9d310c91..4996c1820 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-4.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-4.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-5.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-5.png index 2b90330e9..cca115eed 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-5.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-5.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-6.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-6.png index 427e771b2..9a5f4d793 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-6.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-6.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-7.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-7.png index cdc204445..45e900413 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-7.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-7.png differ diff --git a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-8.png b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-8.png index 0bfdb231c..2dc70bb1e 100644 Binary files a/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-8.png and b/AppKit/Themes/Aristo/Resources/textfield-bezel-square-focused-8.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-center-disabled.png b/AppKit/Themes/Aristo/Resources/token-center-disabled.png index 0fcdbc47a..64a06e738 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-center-disabled.png and b/AppKit/Themes/Aristo/Resources/token-center-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-center.png b/AppKit/Themes/Aristo/Resources/token-center.png index b2249fc56..762839050 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-center.png and b/AppKit/Themes/Aristo/Resources/token-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-close-highlighted.png b/AppKit/Themes/Aristo/Resources/token-close-highlighted.png index 5ca9f34be..b17cc2b35 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-close-highlighted.png and b/AppKit/Themes/Aristo/Resources/token-close-highlighted.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-close.png b/AppKit/Themes/Aristo/Resources/token-close.png index 497d69355..b638f5045 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-close.png and b/AppKit/Themes/Aristo/Resources/token-close.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-highlighted-center.png b/AppKit/Themes/Aristo/Resources/token-highlighted-center.png index a6c0668eb..fa948b831 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-highlighted-center.png and b/AppKit/Themes/Aristo/Resources/token-highlighted-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-highlighted-left.png b/AppKit/Themes/Aristo/Resources/token-highlighted-left.png index f53519633..6e851e3a2 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-highlighted-left.png and b/AppKit/Themes/Aristo/Resources/token-highlighted-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-highlighted-right.png b/AppKit/Themes/Aristo/Resources/token-highlighted-right.png index 6cd745a5d..36c95c3d4 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-highlighted-right.png and b/AppKit/Themes/Aristo/Resources/token-highlighted-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-left-disabled.png b/AppKit/Themes/Aristo/Resources/token-left-disabled.png index c3ae314d9..de6f5aa51 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-left-disabled.png and b/AppKit/Themes/Aristo/Resources/token-left-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-left.png b/AppKit/Themes/Aristo/Resources/token-left.png index 2293aa0e7..009452c87 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-left.png and b/AppKit/Themes/Aristo/Resources/token-left.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-right-disabled.png b/AppKit/Themes/Aristo/Resources/token-right-disabled.png index 00d52832d..86cbe135e 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-right-disabled.png and b/AppKit/Themes/Aristo/Resources/token-right-disabled.png differ diff --git a/AppKit/Themes/Aristo/Resources/token-right.png b/AppKit/Themes/Aristo/Resources/token-right.png index a213fe09d..d7886f5ad 100644 Binary files a/AppKit/Themes/Aristo/Resources/token-right.png and b/AppKit/Themes/Aristo/Resources/token-right.png differ diff --git a/AppKit/Themes/Aristo/Resources/vertical-track-bottom.png b/AppKit/Themes/Aristo/Resources/vertical-track-bottom.png index c43104a3e..40f02fb25 100644 Binary files a/AppKit/Themes/Aristo/Resources/vertical-track-bottom.png and b/AppKit/Themes/Aristo/Resources/vertical-track-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/vertical-track-center.png b/AppKit/Themes/Aristo/Resources/vertical-track-center.png index 13b874392..b77af7b6d 100644 Binary files a/AppKit/Themes/Aristo/Resources/vertical-track-center.png and b/AppKit/Themes/Aristo/Resources/vertical-track-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/vertical-track-disabled-bottom.png b/AppKit/Themes/Aristo/Resources/vertical-track-disabled-bottom.png index 5ff3530fb..a5624bf6e 100644 Binary files a/AppKit/Themes/Aristo/Resources/vertical-track-disabled-bottom.png and b/AppKit/Themes/Aristo/Resources/vertical-track-disabled-bottom.png differ diff --git a/AppKit/Themes/Aristo/Resources/vertical-track-disabled-center.png b/AppKit/Themes/Aristo/Resources/vertical-track-disabled-center.png index ca474fce8..4afee484a 100644 Binary files a/AppKit/Themes/Aristo/Resources/vertical-track-disabled-center.png and b/AppKit/Themes/Aristo/Resources/vertical-track-disabled-center.png differ diff --git a/AppKit/Themes/Aristo/Resources/vertical-track-disabled-top.png b/AppKit/Themes/Aristo/Resources/vertical-track-disabled-top.png index 9edaf4fc2..e6945d7ce 100644 Binary files a/AppKit/Themes/Aristo/Resources/vertical-track-disabled-top.png and b/AppKit/Themes/Aristo/Resources/vertical-track-disabled-top.png differ diff --git a/AppKit/Themes/Aristo/Resources/vertical-track-top.png b/AppKit/Themes/Aristo/Resources/vertical-track-top.png index 96fdefcbf..caedc4621 100644 Binary files a/AppKit/Themes/Aristo/Resources/vertical-track-top.png and b/AppKit/Themes/Aristo/Resources/vertical-track-top.png differ diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index e1652f4f3..d5f368fbc 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1031,13 +1031,13 @@ var themedButtonValues = nil, [@"editor-inset", CGInsetMake(2.0, 0.0, 0.0, 0.0)], // Non-bezeled token field with tokens - [@"content-inset", CGInsetMake(5.0, 8.0, 4.0, 8.0)], + [@"content-inset", CGInsetMake(6.0, 8.0, 4.0, 8.0)], // Non-bezeled token field with no tokens [@"content-inset", CGInsetMake(7.0, 8.0, 6.0, 8.0), CPTextFieldStatePlaceholder], // Bezeled token field with tokens - [@"content-inset", CGInsetMake(6.0, 8.0, 2.0, 8.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 5.0, 4.0, 5.0), CPThemeStateBezeled], // Bezeled token field with no tokens [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeStateBezeled | CPTextFieldStatePlaceholder] @@ -1089,7 +1089,7 @@ var themedButtonValues = nil, [@"text-color", textHighlightedColor, CPThemeStateHighlighted], [@"bezel-inset", CGInsetMakeZero(), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(1.0, 22.0, 3.0, 15.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(2.0, 22.0, 2.0, 15.0), CPThemeStateBezeled], // Minimum height == maximum height since tokens are fixed height. [@"min-size", CGSizeMake(0.0, 19.0)], diff --git a/AppKit/Themes/BlendKit/Resources/dark-checkers.png b/AppKit/Themes/BlendKit/Resources/dark-checkers.png index 838362cf0..268f0aa15 100644 Binary files a/AppKit/Themes/BlendKit/Resources/dark-checkers.png and b/AppKit/Themes/BlendKit/Resources/dark-checkers.png differ diff --git a/AppKit/Themes/BlendKit/Resources/light-checkers.png b/AppKit/Themes/BlendKit/Resources/light-checkers.png index 83499084f..816a4ec3d 100644 Binary files a/AppKit/Themes/BlendKit/Resources/light-checkers.png and b/AppKit/Themes/BlendKit/Resources/light-checkers.png differ diff --git a/AppKit/Themes/BlendKit/Resources/selection.png b/AppKit/Themes/BlendKit/Resources/selection.png index aafc65dcf..578e1ca31 100644 Binary files a/AppKit/Themes/BlendKit/Resources/selection.png and b/AppKit/Themes/BlendKit/Resources/selection.png differ diff --git a/AppKit/Themes/Default/Resources/horizontal-track-center.png b/AppKit/Themes/Default/Resources/horizontal-track-center.png index 55e49f11e..a76c7de6d 100644 Binary files a/AppKit/Themes/Default/Resources/horizontal-track-center.png and b/AppKit/Themes/Default/Resources/horizontal-track-center.png differ diff --git a/AppKit/Themes/Default/Resources/horizontal-track-left.png b/AppKit/Themes/Default/Resources/horizontal-track-left.png index 9d1e2382b..f0dfc0425 100644 Binary files a/AppKit/Themes/Default/Resources/horizontal-track-left.png and b/AppKit/Themes/Default/Resources/horizontal-track-left.png differ diff --git a/AppKit/Themes/Default/Resources/horizontal-track-right.png b/AppKit/Themes/Default/Resources/horizontal-track-right.png index 6659af54a..9b3949e0d 100644 Binary files a/AppKit/Themes/Default/Resources/horizontal-track-right.png and b/AppKit/Themes/Default/Resources/horizontal-track-right.png differ diff --git a/AppKit/Themes/Default/Resources/knob-highlighted.png b/AppKit/Themes/Default/Resources/knob-highlighted.png index 2e8043068..3aec0000e 100644 Binary files a/AppKit/Themes/Default/Resources/knob-highlighted.png and b/AppKit/Themes/Default/Resources/knob-highlighted.png differ diff --git a/AppKit/Themes/Default/Resources/knob.png b/AppKit/Themes/Default/Resources/knob.png index 5d527f873..6630ef2a0 100644 Binary files a/AppKit/Themes/Default/Resources/knob.png and b/AppKit/Themes/Default/Resources/knob.png differ diff --git a/AppKit/Themes/Default/Resources/vertical-track-bottom.png b/AppKit/Themes/Default/Resources/vertical-track-bottom.png index 5c7acdc78..1b5d3fbda 100644 Binary files a/AppKit/Themes/Default/Resources/vertical-track-bottom.png and b/AppKit/Themes/Default/Resources/vertical-track-bottom.png differ diff --git a/AppKit/Themes/Default/Resources/vertical-track-center.png b/AppKit/Themes/Default/Resources/vertical-track-center.png index fbdf9a422..e52c0dd43 100644 Binary files a/AppKit/Themes/Default/Resources/vertical-track-center.png and b/AppKit/Themes/Default/Resources/vertical-track-center.png differ diff --git a/AppKit/Themes/Default/Resources/vertical-track-top.png b/AppKit/Themes/Default/Resources/vertical-track-top.png index f4e1ea68e..ee188af9c 100644 Binary files a/AppKit/Themes/Default/Resources/vertical-track-top.png and b/AppKit/Themes/Default/Resources/vertical-track-top.png differ diff --git a/AppKit/_CPAttachedWindow.j b/AppKit/_CPAttachedWindow.j index ccbf265f1..690fa80fe 100644 --- a/AppKit/_CPAttachedWindow.j +++ b/AppKit/_CPAttachedWindow.j @@ -109,8 +109,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, */ - (id)initWithContentRect:(CGRect)aFrame { - self = [self initWithContentRect:aFrame styleMask:0]; - return self; + return [self initWithContentRect:aFrame styleMask:0]; } /*! @@ -196,7 +195,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, - (CGPoint)computeOriginFromRect:(CGRect)aRect ofView:(CPView)positioningView preferredEdge:(int)anEdge { - var mainWindow = [CPApp mainWindow], + var mainWindow = [positioningView window], platformWindow = [mainWindow platformWindow], nativeRect = [platformWindow nativeContentRect], baseOrigin = [positioningView convertPointToBase:aRect.origin], diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index a79c1ae80..78d1be533 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -65,7 +65,7 @@ var _CPAutocompleteMenuMaximumHeight = 307; [scrollView setHasHorizontalScroller:NO]; [contentView addSubview:scrollView]; - tableView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; + tableView = [[_CPNonFirstResponderTableView alloc] initWithFrame:CPRectMakeZero()]; var tableColumn = [CPTableColumn new]; [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; @@ -251,14 +251,14 @@ var _CPAutocompleteMenuMaximumHeight = 307; return [contentArray objectAtIndex:row]; } -- (void)tableViewSelectionDidChange:(CPNotification)notification +@end + + +@implementation _CPNonFirstResponderTableView : CPTableView + +- (BOOL)acceptsFirstResponder { - // FIXME - // make sure a mouse click in the tableview doesn't steal first responder state - window.setTimeout(function() - { - [[textField window] makeFirstResponder:textField]; - }, 2.0); + return NO; } @end diff --git a/AppKit/_CPImageAndTextView.j b/AppKit/_CPImageAndTextView.j index 4b7b87527..c12661d1e 100644 --- a/AppKit/_CPImageAndTextView.j +++ b/AppKit/_CPImageAndTextView.j @@ -432,13 +432,15 @@ var _CPimageAndTextViewFrameSizeChangedFlag = 1 << 0, { _DOMTextShadowElement = document.createElement("div"); - var shadowStyle = _DOMTextShadowElement.style; + var shadowStyle = _DOMTextShadowElement.style, + font = (_font || [CPFont systemFontOfSize:CPFontCurrentSystemSize]); - shadowStyle.font = [(_font || [CPFont systemFontOfSize:CPFontCurrentSystemSize]) cssString]; + shadowStyle.font = [font cssString]; shadowStyle.position = "absolute"; shadowStyle.whiteSpace = textStyle.whiteSpace; shadowStyle.wordWrap = textStyle.wordWrap; shadowStyle.color = [_textShadowColor cssString]; + shadowStyle.lineHeight = [font defaultLineHeightForFont] + "px"; shadowStyle.zIndex = 150; shadowStyle.textOverflow = textStyle.textOverflow; @@ -484,11 +486,16 @@ var _CPimageAndTextViewFrameSizeChangedFlag = 1 << 0, if (_flags & _CPImageAndTextViewFontChangedFlag) { - var fontStyle = [(_font || [CPFont systemFontOfSize:CPFontCurrentSystemSize]) cssString]; + var font = (_font || [CPFont systemFontOfSize:CPFontCurrentSystemSize]), + fontStyle = [font cssString]; textStyle.font = fontStyle; + textStyle.lineHeight = [font defaultLineHeightForFont] + "px"; if (shadowStyle) + { shadowStyle.font = fontStyle; + shadowStyle.lineHeight = [font defaultLineHeightForFont] + "px"; + } } // Update the line break mode if necessary. @@ -697,7 +704,8 @@ var _CPimageAndTextViewFrameSizeChangedFlag = 1 << 0, if (_verticalAlignment === CPCenterVerticalTextAlignment) { - textRectY = textRectY + (textRectHeight - _textSize.height) / 2.0; + // Since we added +1 px height above to show fractional pixels on the bottom, we have to remove that when calculating vertical centre. + textRectY = textRectY + (textRectHeight - _textSize.height + 1.0) / 2.0; textRectHeight = _textSize.height; } @@ -712,6 +720,7 @@ var _CPimageAndTextViewFrameSizeChangedFlag = 1 << 0, textStyle.left = ROUND(textRectX) + "px"; textStyle.width = MAX(CEIL(textRectWidth), 0) + "px"; textStyle.height = MAX(CEIL(textRectHeight), 0) + "px"; + textStyle.verticalAlign = @"top"; if (shadowStyle) { diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index 20ebac313..10f66136f 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -104,7 +104,7 @@ var ListColumnIdentifier = @"1"; _tableView = [self makeTableView]; // Start with a default size, we will resize it later - frame = CGRectMake(0, 0, 200, 200); + var frame = CGRectMake(0, 0, 200, 200); _tableColumn = [[CPTableColumn alloc] initWithIdentifier:ListColumnIdentifier]; [_tableColumn setWidth:CGRectGetWidth(frame) - [CPScroller scrollerWidth]]; @@ -656,6 +656,7 @@ var ListColumnIdentifier = @"1"; else return YES; } + #pragma mark Internal Helpers /*! @ignore */ diff --git a/Foundation/CPArray/CPArray.j b/Foundation/CPArray/CPArray.j index 7507a21d6..d835196ad 100755 --- a/Foundation/CPArray/CPArray.j +++ b/Foundation/CPArray/CPArray.j @@ -872,7 +872,7 @@ var concat = Array.prototype.concat, { var index = 0, count = [self count], - description = "("; + description = "@["; for (; index < count; ++index) { @@ -888,7 +888,7 @@ var concat = Array.prototype.concat, description += "\n"; } - return description + ")"; + return description + "]"; } // Collecting paths diff --git a/Foundation/CPDecimal.j b/Foundation/CPDecimal.j index ec06deea7..4b2f68697 100644 --- a/Foundation/CPDecimal.j +++ b/Foundation/CPDecimal.j @@ -115,7 +115,8 @@ function CPDecimalMakeWithString(string, locale) // Note: this doesn't accept .01 for example, should it? // If yes simply add '?' after integer part group, i.e. ([+\-]?)((?:0|[1-9]\d*)?) - var matches = string.match(/^([+\-]?)((?:0|[1-9]\d*))(?:\.(\d*))?(?:[eE]([+\-]?)(\d+))?$/); + // Note: now it accept .01 style. + var matches = string.match(/^([+\-]?)((?:0|[1-9]\d*)?)(?:\.(\d*))?(?:[eE]([+\-]?)(\d+))?$/); if (!matches) return CPDecimalMakeNaN(); @@ -142,6 +143,10 @@ function CPDecimalMakeWithString(string, locale) // input is too long, increase exponent and truncate exponent += inputlength - CPDecimalMaxDigits; } + else if (inputlength === 0) + { + return CPDecimalMakeNaN(); + } if (exponent > CPDecimalMaxExponent || exponent < CPDecimalMinExponent) return CPDecimalMakeNaN(); diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index 1f3257cf5..e63313c75 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -633,7 +633,7 @@ */ - (CPString)description { - var string = "{\n\t", + var string = "@{\n", keys = _keys, index = 0, count = _count; @@ -643,7 +643,7 @@ var key = keys[index], value = valueForKey(key); - string += key + " = \"" + CPDescriptionOfObject(value).split('\n').join("\n\t") + "\"\n\t"; + string += "\t" + key + ": " + CPDescriptionOfObject(value).split('\n').join("\n\t") + ",\n"; } return string + "}"; diff --git a/Foundation/CPNumberFormatter.j b/Foundation/CPNumberFormatter.j index 0197d02ef..1fafb8969 100644 --- a/Foundation/CPNumberFormatter.j +++ b/Foundation/CPNumberFormatter.j @@ -27,7 +27,7 @@ @import #define UPDATE_NUMBER_HANDLER_IF_NECESSARY() if (!_numberHandler) \ - _numberHandler = [CPDecimalNumberHandler decimalNumberHandlerWithRoundingMode:_roundingMode scale:_maximumFractionalDigits raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES]; + _numberHandler = [CPDecimalNumberHandler decimalNumberHandlerWithRoundingMode:_roundingMode scale:_maximumFractionDigits raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES]; #define SET_NEEDS_NUMBER_HANDLER_UPDATE() _numberHandler = nil; CPNumberFormatterNoStyle = 0; @@ -49,7 +49,7 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; @ingroup foundation @class CPNumberFormatter - CPNumberFormatter takes a numeric NSNumber value and formats it as text for + CPNumberFormatter takes a numeric CPNumber value and formats it as text for display. It also supports the converse, taking text and interpreting it as a CPNumber by configurable formatting rules. */ @@ -59,8 +59,14 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; CPString _perMillSymbol @accessors(property=perMillSymbol); CPString _groupingSeparator @accessors(property=groupingSeparator); CPNumberFormatterRoundingMode _roundingMode @accessors(property=roundingMode); - CPUInteger _maximumFractionalDigits @accessors(property=maximalFractionalDigits); + CPUInteger _minimumFractionDigits @accessors(property=minimumFractionDigits); + CPUInteger _maximumFractionDigits @accessors(property=maximumFractionDigits); + CPString _currencyCode @accessors(property=currencyCode); + CPString _currencySymbol @accessors(property=currencySymbol); + BOOL _generatesDecimalNumbers @accessors(property=generatesDecimalNumbers); + // Note that we do not implement the 10.0 style number formatter, but the 10.4+ formatter. Therefore + // we don't expose this through a `roundingBehavior` property. CPDecimalNumberHandler _numberHandler; } @@ -68,9 +74,15 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; { if (self = [super init]) { - _roundingMode = CPNumberFormatterRoundHalfUp; - _maximumFractionalDigits = 3; + _roundingMode = CPNumberFormatterRoundHalfEven; + _minimumFractionDigits = 0; + _maximumFractionDigits = 0; _groupingSeparator = @","; + _generatesDecimalNumbers = YES; + + // FIXME Add locale support. + _currencyCode = @"USD"; + _currencySymbol = @"$"; } return self; @@ -78,13 +90,15 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; - (CPString)stringFromNumber:(CPNumber)number { + var dcmn = [number isKindOfClass:CPDecimalNumber] ? number : [[CPDecimalNumber alloc] _initWithJSNumber:number]; + // TODO Add locale support. switch (_numberStyle) { + case CPNumberFormatterCurrencyStyle: case CPNumberFormatterDecimalStyle: UPDATE_NUMBER_HANDLER_IF_NECESSARY(); - var dcmn = [CPDecimalNumber numberWithFloat:number]; dcmn = [dcmn decimalNumberByRoundingAccordingToBehavior:_numberHandler]; var output = [dcmn descriptionWithLocale:nil], @@ -94,6 +108,9 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; preFractionLength = [preFraction length], commaPosition = 3; + while (fraction.length < _minimumFractionDigits) + fraction += "0"; + // TODO This is just a temporary solution. Should be generalised. // Add in thousands separators. if (_groupingSeparator) @@ -105,19 +122,30 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; } } + var string = preFraction; if (fraction) - return preFraction + "." + fraction; - else - return preFraction; + string += "." + fraction; + + if (_numberStyle === CPNumberFormatterCurrencyStyle) + { + if (_currencySymbol) + string = _currencySymbol + string; + else + string = _currencyCode + string; + } + + return string; default: return [number description]; } } -- (CPNumber)numberFromString:(CPString)string +- (CPNumber)numberFromString:(CPString)aString { - // TODO - return parseFloat(string); + if (_generatesDecimalNumbers) + return [CPDecimalNumber decimalNumberWithString:aString]; + else + return parseFloat(aString); } - (CPString)stringForObjectValue:(id)anObject @@ -142,21 +170,53 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; return YES; } +- (void)setNumberStyle:(CPNumberFormatterStyle)aStyle +{ + _numberStyle = aStyle; + + switch (aStyle) + { + case CPNumberFormatterDecimalStyle: + _minimumFractionDigits = 0; + _maximumFractionDigits = 3; + SET_NEEDS_NUMBER_HANDLER_UPDATE(); + break; + case CPNumberFormatterCurrencyStyle: + _minimumFractionDigits = 2; + _maximumFractionDigits = 2; + SET_NEEDS_NUMBER_HANDLER_UPDATE(); + break; + } +} + - (void)setRoundingMode:(CPNumberFormatterRoundingMode)aRoundingMode { _roundingMode = aRoundingMode; SET_NEEDS_NUMBER_HANDLER_UPDATE(); } +- (void)setMinimumFractionDigits:(CPUInteger)aNumber +{ + _minimumFractionDigits = aNumber; + SET_NEEDS_NUMBER_HANDLER_UPDATE(); +} + - (void)setMaximumFractionDigits:(CPUInteger)aNumber { - _maximumFractionalDigits = aNumber; + _maximumFractionDigits = aNumber; SET_NEEDS_NUMBER_HANDLER_UPDATE(); } @end -var CPNumberFormatterStyleKey = "CPNumberFormatterStyleKey"; +var CPNumberFormatterStyleKey = "CPNumberFormatterStyleKey", + CPNumberFormatterMinimumFractionDigitsKey = @"CPNumberFormatterMinimumFractionDigitsKey", + CPNumberFormatterMaximumFractionDigitsKey = @"CPNumberFormatterMaximumFractionDigitsKey", + CPNumberFormatterRoundingModeKey = @"CPNumberFormatterRoundingModeKey", + CPNumberFormatterGroupingSeparatorKey = @"CPNumberFormatterGroupingSeparatorKey", + CPNumberFormatterCurrencyCodeKey = @"CPNumberFormatterCurrencyCodeKey", + CPNumberFormatterCurrencySymbolKey = @"CPNumberFormatterCurrencySymbolKey", + CPNumberFormatterGeneratesDecimalNumbers = @"CPNumberFormatterGeneratesDecimalNumbers"; @implementation CPNumberFormatter (CPCoding) @@ -167,6 +227,13 @@ var CPNumberFormatterStyleKey = "CPNumberFormatterStyleKey"; if (self) { _numberStyle = [aCoder decodeIntForKey:CPNumberFormatterStyleKey]; + _minimumFractionDigits = [aCoder decodeIntForKey:CPNumberFormatterMinimumFractionDigitsKey]; + _maximumFractionDigits = [aCoder decodeIntForKey:CPNumberFormatterMaximumFractionDigitsKey]; + _roundingMode = [aCoder decodeIntForKey:CPNumberFormatterRoundingModeKey]; + _groupingSeparator = [aCoder decodeObjectForKey:CPNumberFormatterGroupingSeparatorKey]; + _currencyCode = [aCoder decodeObjectForKey:CPNumberFormatterCurrencyCodeKey]; + _currencySymbol = [aCoder decodeObjectForKey:CPNumberFormatterCurrencySymbolKey]; + _generatesDecimalNumbers = [aCoder decodeBoolForKey:CPNumberFormatterGeneratesDecimalNumbers]; } return self; @@ -177,6 +244,13 @@ var CPNumberFormatterStyleKey = "CPNumberFormatterStyleKey"; [super encodeWithCoder:aCoder]; [aCoder encodeInt:_numberStyle forKey:CPNumberFormatterStyleKey]; + [aCoder encodeInt:_minimumFractionDigits forKey:CPNumberFormatterMinimumFractionDigitsKey]; + [aCoder encodeInt:_maximumFractionDigits forKey:CPNumberFormatterMaximumFractionDigitsKey]; + [aCoder encodeInt:_roundingMode forKey:CPNumberFormatterRoundingModeKey]; + [aCoder encodeObject:_groupingSeparator forKey:CPNumberFormatterGroupingSeparatorKey]; + [aCoder encodeObject:_currencyCode forKey:CPNumberFormatterCurrencyCodeKey]; + [aCoder encodeObject:_currencySymbol forKey:CPNumberFormatterCurrencySymbolKey]; + [aCoder encodeBool:_generatesDecimalNumbers forKey:CPNumberFormatterGeneratesDecimalNumbers]; } @end diff --git a/Foundation/CPObject.j b/Foundation/CPObject.j index 6af4622d6..5590a2048 100644 --- a/Foundation/CPObject.j +++ b/Foundation/CPObject.j @@ -533,7 +533,11 @@ CPLog(@"Got some class: %@", inst); function CPDescriptionOfObject(anObject) { if (anObject.isa) + { + if ([anObject isKindOfClass:CPString]) + return '@"' + [anObject description] + '"'; return [anObject description]; + } if (typeof(anObject) !== "object") return String(anObject); diff --git a/Objective-J/CommonJS/lib/objective-j/compiler.js b/Objective-J/CommonJS/lib/objective-j/compiler.js index b55264689..f7b15a8a1 100644 --- a/Objective-J/CommonJS/lib/objective-j/compiler.js +++ b/Objective-J/CommonJS/lib/objective-j/compiler.js @@ -189,7 +189,7 @@ exports.main = function(args) continue; } - if (argv[0] === "-T" || argv[0] === "--incluceTypeSignatures") + if (argv[0] === "-T" || argv[0] === "--includeTypeSignatures") { objjcFlags |= ObjectiveJ.Preprocessor.Flags.IncludeTypeSignatures; argv.shift(); diff --git a/README.markdown b/README.markdown index 5a4c78b13..d50f07ee2 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.6-RC1/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh + $ curl https://raw.github.com/cappuccino/cappuccino/v0.9.6-RC2/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 08597ab64..939d8881e 100644 --- a/Tests/AppKit/CPArrayControllerTest.j +++ b/Tests/AppKit/CPArrayControllerTest.j @@ -183,82 +183,415 @@ [self assert:[CPNumber numberWithInt:2] equals:[_arrayController arrangedObjects][1]]; } -- (void)testRemoveObjectsWithoutAvoidingEmptySelection_SimpleArray + + +- (void)_initTestRemoveObjects_SimpleArray { - [self initControllerWithSimpleArray]; - [self _testRemoveObjectsWithoutAvoidingEmptySelection]; + var array = [[CPMutableDictionary dictionaryWithObject:0 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:1 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:2 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:3 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:4 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:5 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:6 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:7 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:8 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:9 forKey:@"number"]]; + _arrayController = [[CPArrayController alloc] initWithContent:[array mutableCopy]]; } -- (void)testRemoveObjectsWithoutAvoidingEmptySelection_ContentBinding +- (void)_initTestRemoveObjects_ContentBinding { - [self initControllerWithContentBinding]; - [self _testRemoveObjectsWithoutAvoidingEmptySelection]; + _contentArray = [[CPMutableDictionary dictionaryWithObject:0 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:1 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:2 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:3 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:4 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:5 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:6 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:7 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:8 forKey:@"number"], + [CPMutableDictionary dictionaryWithObject:9 forKey:@"number"]]; + _arrayController = [CPArrayController new]; + [_arrayController bind:@"contentArray" toObject:self withKeyPath:@"itemsArray" options:nil]; } -- (void)_testRemoveObjectsWithoutAvoidingEmptySelection +- (void)testRemoveObjects_OneSelectedObject_SimpleArray { - var arrayController = [self arrayController]; - [arrayController setAvoidsEmptySelection:NO]; - [arrayController setPreservesSelection:NO]; - - [arrayController setSelectionIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(1, 2)]]; - [arrayController removeObjects:[arrayController selectedObjects]]; - - [self assert:[CPIndexSet indexSet] equals:[arrayController selectionIndexes] - message:@"selection should be empty if arraycontroller doesn't avoid empty selection"]; + [self _initTestRemoveObjects_SimpleArray]; + [self _testRemoveObjects_OneSelectedObject]; } -- (void)testRemoveObjectWithAvoidingEmptySelection +- (void)testRemoveObjects_OneSelectedObject_ContentBinding { - var arrayController = [self arrayController]; - [arrayController setAvoidsEmptySelection:YES]; - - [arrayController setSelectionIndex:2]; - [arrayController removeObjectsAtArrangedObjectIndexes:[CPIndexSet indexSetWithIndex:2]]; - - [self assertTrue:([[arrayController selectionIndexes] count] > 0) message:@"Selection should not empty when arraycontroller avoids empty selection"]; - - [arrayController setContent:[self contentArray]]; - [arrayController setSelectionIndex:2]; - [arrayController removeObjects:[arrayController selectedObjects]]; - - [self assertTrue:([[arrayController selectionIndexes] count] > 0) message:@"Selection should not empty when arraycontroller avoids empty selection"]; - -// This will fail, currently we select the first index instead of an adjacent index. -// [self assertTrue:([arrayController selectionIndex] == 1) message:@"The selected index should be 1, was " + [arrayController selectionIndex]]; + [self _initTestRemoveObjects_ContentBinding]; + [self _testRemoveObjects_OneSelectedObject]; } -- (void)testRemoveObjectsWithPreservesSelection_SimpleArray +- (void)_testRemoveObjects_OneSelectedObject { - [self initControllerWithSimpleArray]; - [self _testRemoveObjectsWithPreservesSelection]; + [_arrayController setAvoidsEmptySelection:NO]; + [_arrayController setPreservesSelection:NO]; + [_arrayController setSelectionIndex:5]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === 4]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 5]; + + [_arrayController removeObjectAtArrangedObjectIndex:5]; + [self assertTrue:[_arrayController selectionIndex] === 4]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 5]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === CPNotFound]; } -- (void)testRemoveObjectsWithPreservesSelection_ContentBinding +- (void)testRemoveObjects_OneSelectedObject_AvoidingEmptySelection_SimpleArray { - [self initControllerWithContentBinding]; - [self _testRemoveObjectsWithPreservesSelection]; + [self _initTestRemoveObjects_SimpleArray]; + [self _testRemoveObjects_OneSelectedObject_AvoidingEmptySelection]; } -- (void)_testRemoveObjectsWithPreservesSelection +- (void)testRemoveObjects_OneSelectedObject_AvoidingEmptySelection_ContentBinding { - var arrayController = [self arrayController]; - [arrayController setPreservesSelection:YES]; + [self _initTestRemoveObjects_ContentBinding]; + [self _testRemoveObjects_OneSelectedObject_AvoidingEmptySelection]; +} - // Remove from middle - var selectionIndexes = [CPIndexSet indexSetWithIndex:1]; - [arrayController setSelectionIndexes:selectionIndexes]; - [arrayController removeObjects:[arrayController selectedObjects]]; - [self assert:selectionIndexes equals:[arrayController selectionIndexes] message:@"selection should stay the same"]; +- (void)_testRemoveObjects_OneSelectedObject_AvoidingEmptySelection +{ + [_arrayController setAvoidsEmptySelection:YES]; + [_arrayController setPreservesSelection:NO]; + [_arrayController setSelectionIndex:5]; - // Remove from end - [arrayController removeObjects:[[[arrayController content] objectAtIndex:1]]]; - [self assert:[CPIndexSet indexSetWithIndex:0] equals:[arrayController selectionIndexes] - message:@"last object removed; selection should shift to first available index"]; + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === 4]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 5]; - // Remove from all - [arrayController removeObjects:[[[arrayController content] objectAtIndex:0]]]; - [self assert:[CPIndexSet indexSet] equals:[arrayController selectionIndexes] message:@"no objects left, selection should disappear"]; + [_arrayController removeObjectAtArrangedObjectIndex:5]; + [self assertTrue:[_arrayController selectionIndex] === 4]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 5]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === 4 message:"" + [_arrayController selectionIndex]]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 7]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === 3]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 3]; + + [_arrayController removeObjectAtArrangedObjectIndex:0]; + [_arrayController removeObjectAtArrangedObjectIndex:0]; + [_arrayController removeObjectAtArrangedObjectIndex:0]; + [self assertTrue:[_arrayController selectionIndex] === 0]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 3]; + + [_arrayController removeObjectAtArrangedObjectIndex:0]; + [self assertTrue:[_arrayController selectionIndex] === CPNotFound]; +} + +- (void)testRemoveObjects_OneSelectedObject_PreservesSelection_SimpleArray +{ + [self _initTestRemoveObjects_SimpleArray]; + [self _testRemoveObjects_OneSelectedObject_PreservesSelection]; +} + +- (void)testRemoveObjects_OneSelectedObject_PreservesSelection_ContentBinding +{ + [self _initTestRemoveObjects_ContentBinding]; + [self _testRemoveObjects_OneSelectedObject_PreservesSelection]; +} + +- (void)_testRemoveObjects_OneSelectedObject_PreservesSelection +{ + [_arrayController setAvoidsEmptySelection:NO]; + [_arrayController setPreservesSelection:YES]; + [_arrayController setSelectionIndex:5]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === 4]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 5]; + + [_arrayController removeObjectAtArrangedObjectIndex:5]; + [self assertTrue:[_arrayController selectionIndex] === 4]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 5]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === CPNotFound]; +} + +- (void)testRemoveObjects_OneSelectedObject_AvoidingEmptySelection_PreservesSelection_SimpleArray +{ + [self _initTestRemoveObjects_SimpleArray]; + [self _testRemoveObjects_OneSelectedObject_AvoidingEmptySelection_PreservesSelection]; +} + +- (void)testRemoveObjects_OneSelectedObject_AvoidingEmptySelection_PreservesSelection_ContentBinding +{ + [self _initTestRemoveObjects_ContentBinding]; + [self _testRemoveObjects_OneSelectedObject_AvoidingEmptySelection_PreservesSelection]; +} + +- (void)_testRemoveObjects_OneSelectedObject_AvoidingEmptySelection_PreservesSelection +{ + [_arrayController setAvoidsEmptySelection:YES]; + [_arrayController setPreservesSelection:YES]; + [_arrayController setSelectionIndex:5]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === 4]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 5]; + + [_arrayController removeObjectAtArrangedObjectIndex:5]; + [self assertTrue:[_arrayController selectionIndex] === 4]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 5]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === 4 message:"" + [_arrayController selectionIndex]]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 7]; + + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [_arrayController removeObjectAtArrangedObjectIndex:4]; + [self assertTrue:[_arrayController selectionIndex] === 3]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 3]; + + [_arrayController removeObjectAtArrangedObjectIndex:0]; + [_arrayController removeObjectAtArrangedObjectIndex:0]; + [_arrayController removeObjectAtArrangedObjectIndex:0]; + [self assertTrue:[_arrayController selectionIndex] === 0]; + [self assertTrue:[[[_arrayController selectedObjects] lastObject] objectForKey:@"number"] === 3]; + + [_arrayController removeObjectAtArrangedObjectIndex:0]; + [self assertTrue:[_arrayController selectionIndex] === CPNotFound]; +} + +- (void)testRemoveObjects_MultipleSelectedObjects_SimpleArray +{ + [self _initTestRemoveObjects_SimpleArray]; + [self _testRemoveObjects_MultipleSelectedObjects]; +} + +- (void)testRemoveObjects_MultipleSelectedObjects_ContentBinding +{ + [self _initTestRemoveObjects_ContentBinding]; + [self _testRemoveObjects_MultipleSelectedObjects]; +} + +- (void)_testRemoveObjects_MultipleSelectedObjects +{ + [_arrayController setAvoidsEmptySelection:NO]; + [_arrayController setPreservesSelection:NO]; + var indexes = [CPMutableIndexSet indexSet]; + [indexes addIndex:2]; + [indexes addIndex:4]; + [indexes addIndex:6]; + [indexes addIndex:8]; + [_arrayController setSelectionIndexes:indexes]; + + [_arrayController removeObjectAtArrangedObjectIndex:0]; + var indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:1]; + [indexes1 addIndex:3]; + [indexes1 addIndex:5]; + [indexes1 addIndex:7]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[2, 4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + [_arrayController removeObjectAtArrangedObjectIndex:1]; + indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:2]; + [indexes1 addIndex:4]; + [indexes1 addIndex:6]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + [_arrayController removeObjectAtArrangedObjectIndex:3]; + indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:2]; + [indexes1 addIndex:3]; + [indexes1 addIndex:5]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + var indexes2 = [CPMutableIndexSet indexSet]; + [indexes2 addIndex:2]; + [indexes2 addIndex:3]; + [indexes2 addIndex:5]; + [_arrayController removeObjectsAtArrangedObjectIndexes:indexes2]; + [self assertTrue:[[_arrayController selectionIndexes] lastIndex] === CPNotFound]; +} + +- (void)testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection_SimpleArray +{ + [self _initTestRemoveObjects_SimpleArray]; + [self _testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection]; +}/ + +- (void)testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection_ContentBinding +{ + [self _initTestRemoveObjects_ContentBinding]; + [self _testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection]; +} + +- (void)_testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection +{ + [_arrayController setAvoidsEmptySelection:YES]; + [_arrayController setPreservesSelection:NO]; + var indexes = [CPMutableIndexSet indexSet]; + [indexes addIndex:2]; + [indexes addIndex:4]; + [indexes addIndex:6]; + [indexes addIndex:8]; + [_arrayController setSelectionIndexes:indexes]; + + [_arrayController removeObjectAtArrangedObjectIndex:0]; + var indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:1]; + [indexes1 addIndex:3]; + [indexes1 addIndex:5]; + [indexes1 addIndex:7]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[2, 4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + [_arrayController removeObjectAtArrangedObjectIndex:1]; + indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:2]; + [indexes1 addIndex:4]; + [indexes1 addIndex:6]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + [_arrayController removeObjectAtArrangedObjectIndex:3]; + indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:2]; + [indexes1 addIndex:3]; + [indexes1 addIndex:5]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + var indexes2 = [CPMutableIndexSet indexSet]; + [indexes2 addIndex:2]; + [indexes2 addIndex:3]; + [indexes2 addIndex:5]; + [_arrayController removeObjectsAtArrangedObjectIndexes:indexes2]; + [self assertTrue:[[_arrayController selectionIndexes] lastIndex] === 2]; + [self assert:[7] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; +} + +- (void)testRemoveObjects_MultipleSelectedObjects_PreservesSelection_SimpleArray +{ + [self _initTestRemoveObjects_SimpleArray]; + [self _testRemoveObjects_MultipleSelectedObjects_PreservesSelection]; +} + +- (void)testRemoveObjects_MultipleSelectedObjects_PreservesSelection_ContentBinding +{ + [self _initTestRemoveObjects_ContentBinding]; + [self _testRemoveObjects_MultipleSelectedObjects_PreservesSelection]; +} + +- (void)_testRemoveObjects_MultipleSelectedObjects_PreservesSelection +{ + [_arrayController setAvoidsEmptySelection:NO]; + [_arrayController setPreservesSelection:YES]; + var indexes = [CPMutableIndexSet indexSet]; + [indexes addIndex:2]; + [indexes addIndex:4]; + [indexes addIndex:6]; + [indexes addIndex:8]; + [_arrayController setSelectionIndexes:indexes]; + + [_arrayController removeObjectAtArrangedObjectIndex:0]; + var indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:1]; + [indexes1 addIndex:3]; + [indexes1 addIndex:5]; + [indexes1 addIndex:7]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[2, 4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + [_arrayController removeObjectAtArrangedObjectIndex:1]; + indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:2]; + [indexes1 addIndex:4]; + [indexes1 addIndex:6]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + [_arrayController removeObjectAtArrangedObjectIndex:3]; + indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:2]; + [indexes1 addIndex:3]; + [indexes1 addIndex:5]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + var indexes2 = [CPMutableIndexSet indexSet]; + [indexes2 addIndex:2]; + [indexes2 addIndex:3]; + [indexes2 addIndex:5]; + [_arrayController removeObjectsAtArrangedObjectIndexes:indexes2]; + [self assertTrue:[[_arrayController selectionIndexes] lastIndex] === CPNotFound]; +} + +- (void)testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection_PreservesSelection_SimpleArray +{ + [self _initTestRemoveObjects_SimpleArray]; + [self _testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection_PreservesSelection]; +} + +- (void)testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection_PreservesSelection_ContentBinding +{ + [self _initTestRemoveObjects_ContentBinding]; + [self _testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection_PreservesSelection]; +} + +- (void)_testRemoveObjects_MultipleSelectedObjects_AvoidingEmptySelection_PreservesSelection +{ + [_arrayController setAvoidsEmptySelection:YES]; + [_arrayController setPreservesSelection:YES]; + var indexes = [CPMutableIndexSet indexSet]; + [indexes addIndex:2]; + [indexes addIndex:4]; + [indexes addIndex:6]; + [indexes addIndex:8]; + [_arrayController setSelectionIndexes:indexes]; + + [_arrayController removeObjectAtArrangedObjectIndex:0]; + var indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:1]; + [indexes1 addIndex:3]; + [indexes1 addIndex:5]; + [indexes1 addIndex:7]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[2, 4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + [_arrayController removeObjectAtArrangedObjectIndex:1]; + indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:2]; + [indexes1 addIndex:4]; + [indexes1 addIndex:6]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + [_arrayController removeObjectAtArrangedObjectIndex:3]; + indexes1 = [CPMutableIndexSet indexSet]; + [indexes1 addIndex:2]; + [indexes1 addIndex:3]; + [indexes1 addIndex:5]; + [self assert:indexes1 equals:[_arrayController selectionIndexes]]; + [self assert:[4, 6, 8] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; + + var indexes2 = [CPMutableIndexSet indexSet]; + [indexes2 addIndex:2]; + [indexes2 addIndex:3]; + [indexes2 addIndex:5]; + [_arrayController removeObjectsAtArrangedObjectIndexes:indexes2]; + [self assertTrue:[[_arrayController selectionIndexes] lastIndex] === 2]; + [self assert:[7] equals:[[_arrayController selectedObjects] valueForKey:@"number"]]; } - (void)testRemoveObjectsWithoutSelection diff --git a/Tests/AppKit/CPEventTest.j b/Tests/AppKit/CPEventTest.j index 160024ad2..0313a7ba4 100644 --- a/Tests/AppKit/CPEventTest.j +++ b/Tests/AppKit/CPEventTest.j @@ -1,9 +1,16 @@ +@import @import @implementation CPEventTest : OJTestCase { } +- (void)setUp +{ + // CPApplication must be initialised for some event handling to work. + [CPApplication sharedApplication]; +} + /*! This test isn't very useful but it checks for any trouble related to issue #1202. */ @@ -16,4 +23,35 @@ [self assert:0 equals:[anEvent deltaZ] message:"default event delta Z should be 0"]; } -@end \ No newline at end of file +- (void)testDescription +{ + var anEvent = [CPEvent mouseEventWithType:CPLeftMouseUp location:CGPointMake(50, 50) modifierFlags:CPShiftKeyMask + timestamp:400.5 windowNumber:300 context:nil eventNumber:0 clickCount:2 pressure:0.5]; + [self assert:@"CPEvent: type=2 loc={50, 50} time=400.5 flags=0x20000 win=undefined winNum=0 ctxt=null evNum=0 click=2 buttonNumber=0 pressure=0.5" equals:[anEvent description]]; + + anEvent = [CPEvent keyEventWithType:CPKeyDown location:CGPointMakeZero() modifierFlags:CPShiftKeyMask | CPCommandKeyMask timestamp:12345.6 windowNumber:10 context:nil characters:"X" charactersIgnoringModifiers:"x" isARepeat:NO keyCode:10]; + + [self assert:@"CPEvent: type=10 loc={0, 0} time=12345.6 flags=0x120000 win=null winNum=10 ctxt=null chars=\"X\" unmodchars=\"x\" repeat=0 keyCode=10" equals:[anEvent description]]; + + anEvent = [CPEvent otherEventWithType:CPApplicationDefined location:CGPointMakeZero() modifierFlags:0 timestamp:500.5 windowNumber:2 context:nil subtype:5 data1:15 data2:25]; + + [self assert:@"CPEvent: type=15 loc={0, 0} time=500.5 flags=0x0 win=null winNum=0 ctxt=null subtype=5 data1=15 data2=25" equals:[anEvent description]]; +} + +- (void)testModifierFlags +{ + [self assert:0 equals:[CPEvent modifierFlags] message:@"no modifier flags active in a newly started app"]; + + var anEvent = [CPEvent keyEventWithType:CPKeyDown location:CGPointMakeZero() modifierFlags:CPShiftKeyMask timestamp:0 windowNumber:0 context:nil characters:"A" charactersIgnoringModifiers:"a" isARepeat:NO keyCode:0]; + [CPApp sendEvent:anEvent]; + + [self assert:CPShiftKeyMask equals:[CPEvent modifierFlags] message:@"shift key pressed"]; + + // When the key up event is sent the modifier flags are cleared. + anEvent = [CPEvent keyEventWithType:CPKeyUp location:CGPointMakeZero() modifierFlags:0 timestamp:0 windowNumber:0 context:nil characters:"A" charactersIgnoringModifiers:"a" isARepeat:NO keyCode:0]; + [CPApp sendEvent:anEvent]; + + [self assert:0 equals:[CPEvent modifierFlags] message:@"shift key released"]; +} + +@end diff --git a/Tests/AppKit/CPPopUpButtonTest.j b/Tests/AppKit/CPPopUpButtonTest.j index 9711c0f0e..b31366a42 100644 --- a/Tests/AppKit/CPPopUpButtonTest.j +++ b/Tests/AppKit/CPPopUpButtonTest.j @@ -1,10 +1,12 @@ +@import @import @import @implementation CPPopUpButtonTest : OJTestCase { CPPopUpButton button @accessors; + id objects @accessors; } - (void)setUp @@ -205,6 +207,251 @@ [self assert:2 equals:[[self button] indexOfItemWithTitle:@"three"]]; } +- (void)testSimpleStringBindingArrayController +{ + var arrayController = [[CPArrayController alloc] init], + objectController = [[CPObjectController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = @"Martin", + malte = @"Malte", + johan = @"Johan", + menuObjects = [martin, malte, johan]; + + [testObject setObject:@"I'm a testObject" forKey:@"Who am I"]; + [arrayController setContent:menuObjects]; + [objectController setContent:testObject]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + [button bind:CPSelectedObjectBinding toObject:objectController withKeyPath:@"selection.xxx" options:nil]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:martin equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:malte equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:johan equals:[testObject objectForKey:@"xxx"]]; + + [testObject setObject:martin forKey:@"xxx"]; + [self assert:0 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:malte forKey:@"xxx"]; + [self assert:1 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:johan forKey:@"xxx"]; + [self assert:2 equals:[[self button] indexOfSelectedItem]]; +} + +- (void)testSimpleStringBindingNullPlaceholderOption +{ + var arrayController = [[CPArrayController alloc] init], + objectController = [[CPObjectController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = @"Martin", + malte = @"Malte", + johan = @"Johan", + menuObjects = [martin, malte, johan], + insertsNullPlaceholderOption = [CPDictionary dictionaryWithObjects:[YES, @"Null Placeholder"] forKeys:[CPInsertsNullPlaceholderBindingOption, CPNullPlaceholderBindingOption]]; + + [testObject setObject:@"I'm a testObject" forKey:@"Who am I"]; + [arrayController setContent:menuObjects]; + [objectController setContent:testObject]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:insertsNullPlaceholderOption]; + [button bind:CPSelectedObjectBinding toObject:objectController withKeyPath:@"selection.xxx" options:insertsNullPlaceholderOption]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:martin equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:malte equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:johan equals:[testObject objectForKey:@"xxx"]]; + + [[self button] selectItemWithTitle:@"Null Placeholder"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assertNull:[testObject objectForKey:@"xxx"]]; + + [testObject setObject:martin forKey:@"xxx"]; + [self assert:1 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:malte forKey:@"xxx"]; + [self assert:2 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:johan forKey:@"xxx"]; + [self assert:3 equals:[[self button] indexOfSelectedItem]]; + + [testObject removeObjectForKey:@"xxx"]; + [self assert:0 equals:[[self button] indexOfSelectedItem]]; +} + +- (void)testSimpleObjectBindingArrayController +{ + var arrayController = [[CPArrayController alloc] init], + objectController = [[CPObjectController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = [CPDictionary dictionaryWithJSObject:{@"name": @"Martin"}], + malte = [CPDictionary dictionaryWithJSObject:{@"name": @"Malte"}], + johan = [CPDictionary dictionaryWithJSObject:{@"name": @"Johan"}], + menuObjects = [martin, malte, johan]; + + [testObject setObject:@"I'm a testObject" forKey:@"Who am I"]; + [arrayController setContent:menuObjects]; + [objectController setContent:testObject]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + [button bind:CPContentValuesBinding toObject:arrayController withKeyPath:@"arrangedObjects.name" options:nil]; + [button bind:CPSelectedObjectBinding toObject:objectController withKeyPath:@"selection.xxx" options:nil]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:martin equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:malte equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:johan equals:[testObject objectForKey:@"xxx"]]; + + [testObject setObject:martin forKey:@"xxx"]; + [self assert:0 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:malte forKey:@"xxx"]; + [self assert:1 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:johan forKey:@"xxx"]; + [self assert:2 equals:[[self button] indexOfSelectedItem]]; +} + +- (void)testObjectBindingNullPlaceholderOption +{ + var arrayController = [[CPArrayController alloc] init], + martin = [CPDictionary dictionaryWithJSObject:{@"name": @"Martin"}], + malte = [CPDictionary dictionaryWithJSObject:{@"name": @"Malte"}], + johan = [CPDictionary dictionaryWithJSObject:{@"name": @"Johan"}], + menuObjects = [martin, malte, johan], + insertsNullPlaceholderOption = [CPDictionary dictionaryWithObjects:[YES, @"Null Placeholder"] forKeys:[CPInsertsNullPlaceholderBindingOption, CPNullPlaceholderBindingOption]]; + + [arrayController setContent:menuObjects]; + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:insertsNullPlaceholderOption]; + [button bind:CPContentValuesBinding toObject:arrayController withKeyPath:@"arrangedObjects.name" options:insertsNullPlaceholderOption]; + + [self assert:4 equals:[[self button] numberOfItems]]; + [self assert:0 equals:[[self button] indexOfItemWithTitle:@"Null Placeholder"]]; + [self assert:1 equals:[[self button] indexOfItemWithTitle:@"Martin"]]; + [self assert:2 equals:[[self button] indexOfItemWithTitle:@"Malte"]]; + [self assert:3 equals:[[self button] indexOfItemWithTitle:@"Johan"]]; + + [button unbind:CPContentValuesBinding]; + [button unbind:CPContentBinding]; + [button bind:CPContentValuesBinding toObject: arrayController withKeyPath:@"arrangedObjects.name" options:nil]; + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + + [self assert:3 equals:[[self button] numberOfItems]]; + [self assert:0 equals:[[self button] indexOfItemWithTitle:@"Martin"]]; + [self assert:1 equals:[[self button] indexOfItemWithTitle:@"Malte"]]; + [self assert:2 equals:[[self button] indexOfItemWithTitle:@"Johan"]]; +} + +- (void)testSelectedObjectBindingArrayController +{ + var arrayController = [[CPArrayController alloc] init], + objectController = [[CPObjectController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = [CPDictionary dictionaryWithJSObject:{@"name": @"Martin"}], + malte = [CPDictionary dictionaryWithJSObject:{@"name": @"Malte"}], + johan = [CPDictionary dictionaryWithJSObject:{@"name": @"Johan"}], + menuObjects = [martin, malte, johan], + insertsNullPlaceholderOption = [CPDictionary dictionaryWithObjects:[YES, @"Null Placeholder"] forKeys:[CPInsertsNullPlaceholderBindingOption, CPNullPlaceholderBindingOption]]; + + [testObject setObject:@"I'm a testObject" forKey:@"Who am I"]; + [arrayController setContent:menuObjects]; + [objectController setContent:testObject]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:insertsNullPlaceholderOption]; + [button bind:CPContentValuesBinding toObject:arrayController withKeyPath:@"arrangedObjects.name" options:insertsNullPlaceholderOption]; + [button bind:CPSelectedObjectBinding toObject:objectController withKeyPath:@"selection.xxx" options:nil]; + + [self assert:4 equals:[[self button] numberOfItems]]; + [self assert:0 equals:[[self button] indexOfItemWithTitle:@"Null Placeholder"]]; + [self assert:1 equals:[[self button] indexOfItemWithTitle:@"Martin"]]; + [self assert:2 equals:[[self button] indexOfItemWithTitle:@"Malte"]]; + [self assert:3 equals:[[self button] indexOfItemWithTitle:@"Johan"]]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:martin equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:malte equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:johan equals:[testObject objectForKey:@"xxx"]]; + + [[self button] selectItemWithTitle:@"Null Placeholder"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assertNull:[testObject objectForKey:@"xxx"]]; + + [testObject setObject:martin forKey:@"xxx"]; + [self assert:1 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:malte forKey:@"xxx"]; + [self assert:2 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:johan forKey:@"xxx"]; + [self assert:3 equals:[[self button] indexOfSelectedItem]]; + + [testObject removeObjectForKey:@"xxx"]; + [self assert:0 equals:[[self button] indexOfSelectedItem]]; +} + +- (void)testContentValuesWithValueTransformer +{ + var arrayController = [[CPArrayController alloc] init], + martin = [CPDictionary dictionaryWithJSObject:{@"name": @"Martin"}], + malte = [CPDictionary dictionaryWithJSObject:{@"name": @"Malte"}], + johan = [CPDictionary dictionaryWithJSObject:{@"name": @"Johan"}], + menuObjects = [martin, malte, johan]; + + [arrayController setContent:menuObjects]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + var options = [CPDictionary dictionary]; + [options setObject:[ContentValuesTransformer new] forKey:CPValueTransformerBindingOption]; + [button bind:CPContentValuesBinding toObject:arrayController withKeyPath:@"arrangedObjects.name" options:options]; + + [self assert:@"Transformed-Malte" equals:[[[self button] itemAtIndex:1] title]]; +} + +- (void)testSelectedIndexBindingWithInsertsNullOption +{ + var arrayController = [[CPArrayController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = @"Martin", + malte = @"Malte", + johan = @"Johan", + menuObjects = [martin, malte, johan], + insertsNullPlaceholderOption = [CPDictionary dictionaryWithObjects:[YES, @"Null Placeholder"] forKeys:[CPInsertsNullPlaceholderBindingOption, CPNullPlaceholderBindingOption]]; + + [arrayController setContent:menuObjects]; + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:insertsNullPlaceholderOption]; + [button bind:CPSelectedIndexBinding toObject:testObject withKeyPath:@"index" options:nil]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:0 equals:[testObject objectForKey:@"index"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:1 equals:[testObject objectForKey:@"index"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:2 equals:[testObject objectForKey:@"index"]]; + + [[self button] selectItemWithTitle:@"Null Placeholder"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:-1 equals:[testObject objectForKey:@"index"]]; +} + +- (void)actionTest:(id)sender +{ +} + - (void)testRemoveItemAtIndex_ { button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 28.0) pullsDown:NO]; @@ -231,5 +478,16 @@ [self assert:1 equals:[button indexOfSelectedItem] message:"selection index reduced when a prior item is removed"]; } +@end + + +@implementation ContentValuesTransformer : CPValueTransformer +{ +} + +- (id)transformedValue:(id)aValue +{ + return "Transformed-" + aValue; +} @end diff --git a/Tests/AppKit/CPTableViewTest.j b/Tests/AppKit/CPTableViewTest.j index e07a63664..a65de663f 100644 --- a/Tests/AppKit/CPTableViewTest.j +++ b/Tests/AppKit/CPTableViewTest.j @@ -4,6 +4,7 @@ @implementation CPTableViewTest : OJTestCase { + CPWindow theWindow; CPTableView tableView; CPTableColumn tableColumn; @@ -15,19 +16,21 @@ - (void)setUp { // setup a reasonable table - tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) + styleMask:CPWindowNotSizable]; + + tableView = [[FirstResponderConfigurableTableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; tableColumn = [[CPTableColumn alloc] initWithIdentifier:@"Foo"]; + tableView.acceptsFirstResponder = YES; [tableView addTableColumn:tableColumn]; + + [[theWindow contentView] addSubview:tableView]; } - (void)testDoubleAction { doubleActionReceived = NO; - var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) - styleMask:CPWindowNotSizable]; - [[theWindow contentView] addSubview:tableView]; - [tableView setTarget:self]; [tableView setDoubleAction:@selector(doubleAction:)]; @@ -44,6 +47,20 @@ [tableView trackMouse:dblClkUp]; [self assertTrue:doubleActionReceived]; + + // The event should also work even if the table is not the first responder. + tableView.acceptsFirstResponder = NO; + [theWindow makeFirstResponder:nil]; + + doubleActionReceived = NO; + + [[CPApplication sharedApplication] sendEvent:dblClkDown]; + [tableView trackMouse:dblClkDown]; + + [[CPApplication sharedApplication] sendEvent:dblClkUp]; + [tableView trackMouse:dblClkUp]; + + [self assertTrue:doubleActionReceived]; } - (void)doubleAction:(id)sender @@ -124,11 +141,6 @@ */ - (void)testEditCell { - var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0, 0, 200, 150) - styleMask:CPWindowNotSizable]; - - [[theWindow contentView] addSubview:tableView]; - var dataSource = [TestDataSource new]; [dataSource setTableEntries:["A", "B", "C"]]; @@ -230,9 +242,7 @@ - (void)testContentBinding { - var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0, 0, 200, 150) - styleMask:CPWindowNotSizable], - contentBindingTable = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], + var contentBindingTable = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], tableColumn = [[CPTableColumn alloc] initWithIdentifier:@"A"], delegate = [ContentBindingTableDelegate new]; @@ -259,6 +269,18 @@ @end +@implementation FirstResponderConfigurableTableView : CPTableView +{ + BOOL acceptsFirstResponder; +} + +- (BOOL)acceptsFirstResponder +{ + return acceptsFirstResponder; +} + +@end + @implementation TestDataSource : CPObject { CPArray tableEntries @accessors; diff --git a/Tests/AppKit/CPTextFieldTest.j b/Tests/AppKit/CPTextFieldTest.j index 6570c63b5..19dc3c539 100644 --- a/Tests/AppKit/CPTextFieldTest.j +++ b/Tests/AppKit/CPTextFieldTest.j @@ -32,7 +32,7 @@ [control setFormatter:numberFormatter]; [control setStringValue:@"12.3456"]; - [self assert:[CPNumber class] equals:[[control objectValue] class] message:@"object should be a number"]; + [self assertTrue:[[control objectValue] isKindOfClass:CPNumber] message:@"object should be a number"]; // Note that the control stores the value with a different precision than the maximum fraction // digits of the number formatter. It's a little surprising but this makes the implementation easier // and Cocoa does it too. @@ -63,4 +63,4 @@ return self; } -@end \ No newline at end of file +@end diff --git a/Tests/Foundation/CPDecimalNumberTest.j b/Tests/Foundation/CPDecimalNumberTest.j index 4fa59c474..7e1ea479c 100644 --- a/Tests/Foundation/CPDecimalNumberTest.j +++ b/Tests/Foundation/CPDecimalNumberTest.j @@ -130,7 +130,7 @@ // misc - // decimalValue <- if it hasnt been working so far, your would know. + // decimalValue <- if it hasnt been working so far, you would know. dcmn = [CPDecimalNumber zero]; dcm = [dcmn boolValue]; @@ -145,20 +145,14 @@ dcmn = [[CPDecimalNumber alloc] initWithString:@"foo"]; [self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 2 overflow should return NaN"]; - dcmn = [[CPDecimalNumber alloc] initWithString:@".123"]; + dcmn = [[CPDecimalNumber alloc] initWithString:@"0123"]; [self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 3 overflow should return NaN"]; - dcmn = [[CPDecimalNumber alloc] initWithString:@"-.123"]; + dcmn = [[CPDecimalNumber alloc] initWithString:@"1e200"]; [self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 4 overflow should return NaN"]; - dcmn = [[CPDecimalNumber alloc] initWithString:@"0123"]; - [self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 5 overflow should return NaN"]; - - dcmn = [[CPDecimalNumber alloc] initWithString:@"1e200"]; - [self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 6 overflow should return NaN"]; - dcmn = [[CPDecimalNumber alloc] initWithString:@"12312e-23421"]; - [self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 7 overflow should return NaN"]; + [self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 5 overflow should return NaN"]; } - (void)testAdd @@ -326,7 +320,7 @@ [self assert:1000 equals:[res doubleValue] message:"220000/220 == 1000"]; } -- (void)testMutliply +- (void)testMultiply { var dcmn1 = [CPDecimalNumber decimalNumberWithString:@"17"], @@ -487,6 +481,11 @@ [self assert:[1] equals:d1._mantissa message:"decimalNumberByRoundingAccordingToBehavior: - mantissa"]; [self assert:NO equals:d1._isNegative message:"decimalNumberByRoundingAccordingToBehavior: - sign"]; [self assert:NO equals:d1._isNaN message:"decimalNumberByRoundingAccordingToBehavior: - NaN is incorrectly set"]; + + h = [CPDecimalNumberHandler decimalNumberHandlerWithRoundingMode:CPRoundBankers scale:2 raiseOnExactness:NO raiseOnOverflow:YES raiseOnUnderflow:YES raiseOnDivideByZero:YES], + + [self assert:@"0.02" equals:[[[CPDecimalNumber decimalNumberWithString:@"0.015"] decimalNumberByRoundingAccordingToBehavior:h] description]]; + [self assert:@"0" equals:[[[CPDecimalNumber decimalNumberWithString:@"0.005"] decimalNumberByRoundingAccordingToBehavior:h] description]]; } - (void)testCompare @@ -517,6 +516,10 @@ [self assert:"123456789123456789123456789000000000000000" equals:[dcmn stringValue] message:"stringValue: - large number"]; dcmn = [CPDecimalNumber decimalNumberWithString:@"82346.2341144"]; [self assert:"82346.2341144" equals:[dcmn descriptionWithLocale:nil] message:"descriptionWithLocale: - large number"]; + dcmn = [CPDecimalNumber decimalNumberWithString:@".125"]; + [self assert:"0.125" equals:[dcmn descriptionWithLocale:nil] message:"stringValue: - no integral part number"]; + dcmn = [CPDecimalNumber decimalNumberWithString:@"-.003"]; + [self assert:"-0.003" equals:[dcmn descriptionWithLocale:nil] message:"stringValue: - no integral part negative number"]; } - (void)testEncoding diff --git a/Tests/Foundation/CPDecimalTest.j b/Tests/Foundation/CPDecimalTest.j index 9acdfbdbb..1a8411a09 100644 --- a/Tests/Foundation/CPDecimalTest.j +++ b/Tests/Foundation/CPDecimalTest.j @@ -99,10 +99,6 @@ [self assertTrue:dcm._isNaN message:"CPDecimalMakeWithString() Ti9: catch of invalid number string. Should return NaN"]; dcm = CPDecimalMakeWithString(@"-0001"); [self assertTrue:dcm._isNaN message:"CPDecimalMakeWithString() Ti10: catch of invalid number string. Should return NaN"]; - dcm = CPDecimalMakeWithString(@".123"); - [self assertTrue:dcm._isNaN message:"CPDecimalMakeWithString() Ti11: catch of invalid number string. Should return NaN"]; - dcm = CPDecimalMakeWithString(@"-.1"); - [self assertTrue:dcm._isNaN message:"CPDecimalMakeWithString() Ti12: catch of invalid number string. Should return NaN"]; //test make with parts dcm = CPDecimalMakeWithParts(10127658,2); diff --git a/Tests/Foundation/CPDictionaryTest.j b/Tests/Foundation/CPDictionaryTest.j index 96a6651ec..cd7e43c1f 100644 --- a/Tests/Foundation/CPDictionaryTest.j +++ b/Tests/Foundation/CPDictionaryTest.j @@ -395,6 +395,8 @@ [self assertTrue:d.indexOf("height: 4") !== -1 message:"Can't find 'height: 4' in description of dictionary " + d]; [self assertTrue:d.indexOf("x: 5") !== -1 message:"Can't find 'x: 5' in description of dictionary " + d]; [self assertTrue:d.indexOf("y: 6") !== -1 message:"Can't find 'y: 6' in description of dictionary " + d]; + + [self assert:'@{\n\tkey1: @[\n\t\t@"1",\n\t\t@"2",\n\t\t@"3"\n\t],\n\tkey2: @"This is a string",\n\tkey3: @{\n\t\tanother: @"object",\n\t},\n}' equals:[json_dict description]]; } @end diff --git a/Tests/Foundation/CPKVCArrayTest.j b/Tests/Foundation/CPKVCArrayTest.j index 6b893d9bc..cc96e2ffa 100644 --- a/Tests/Foundation/CPKVCArrayTest.j +++ b/Tests/Foundation/CPKVCArrayTest.j @@ -15,7 +15,7 @@ var COUNTER; COUNTER = 0; } -- (void)_patchSelector:(SEL)theSelector +- (void)_patchSelector:(SEL)selectors, ... { var method_dtable = [[self object] class].method_dtable, method_list = [[self object] class].method_list, @@ -40,10 +40,14 @@ var COUNTER; [method_list removeObject:implementation]; } - var method = class_getInstanceMethod([[self implementedObject] class], theSelector), - implementation = method_getImplementation(method); + for (var i = 2; i < arguments.length; i++) + { + var theSelector = arguments[i], + method = class_getInstanceMethod([[self implementedObject] class], theSelector), + implementation = method_getImplementation(method); - class_addMethod([[self object] class], theSelector, implementation); + class_addMethod([[self object] class], theSelector, implementation); + } } - (void)testUsesCountOfKey @@ -299,6 +303,20 @@ var COUNTER; message:@"replaceObjectInValuesAtIndexes:withValues: should have been called once"]; } +- (void)testSetArray +{ + [self _patchSelector:@selector(removeObjectFromValuesAtIndex:), @selector(insertObject:inValuesAtIndex:)]; + + // This should result in all 10 objects being removed from the values and the 2 new ones being inserted + // in a KVO compliant manner. + [[[self object] mutableArrayValueForKey:@"values"] setArray:[88, 99]]; + + [self assert:[88, 99] equals:[[self object] values]]; + [self assert:12 + equals:COUNTER + message:@"removeObjectFromValuesAtIndex: should have been called 10 times and insertObject:inValuesAtIndex: 2 times"]; +} + - (void)testKVCArrayOperators { var one = [1, 1, 1, 1, 1, 1, 1, 1], diff --git a/Tests/Foundation/CPMutableArrayTest.j b/Tests/Foundation/CPMutableArrayTest.j index 47e06311b..4cdf8cbee 100644 --- a/Tests/Foundation/CPMutableArrayTest.j +++ b/Tests/Foundation/CPMutableArrayTest.j @@ -380,11 +380,11 @@ [pretty sortUsingDescriptors:[[[CPSortDescriptor alloc] initWithKey:@"value" ascending:NO]]]; - [self assert:"(\n\t3:d,\n\t2:c,\n\t1:b,\n\t0:a\n)" equals:[pretty description]]; + [self assert:"@[\n\t3:d,\n\t2:c,\n\t1:b,\n\t0:a\n]" equals:[pretty description]]; [pretty sortUsingDescriptors:[[[CPSortDescriptor alloc] initWithKey:@"value" ascending:YES]]]; - [self assert:"(\n\t0:a,\n\t1:b,\n\t2:c,\n\t3:d\n)" equals:[pretty description]]; + [self assert:"@[\n\t0:a,\n\t1:b,\n\t2:c,\n\t3:d\n]" equals:[pretty description]]; } - (void)testThatCPArrayDoesSortUsingTwoDescriptors diff --git a/Tests/Foundation/CPNumberFormatterTest.j b/Tests/Foundation/CPNumberFormatterTest.j index 67f4addcb..13775a26e 100644 --- a/Tests/Foundation/CPNumberFormatterTest.j +++ b/Tests/Foundation/CPNumberFormatterTest.j @@ -8,6 +8,7 @@ { var numberFormatter = [[CPNumberFormatter alloc] init]; [numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle]; + [numberFormatter setMaximumFractionDigits:3]; var formattedNumberString = [numberFormatter stringFromNumber:[CPNumber numberWithInt:123]]; [self assert:@"123" equals:formattedNumberString]; @@ -44,6 +45,7 @@ var numberFormatter = [[CPNumberFormatter alloc] init], formattedNumberString; [numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle]; + [numberFormatter setMaximumFractionDigits:3]; [numberFormatter setRoundingMode:CPNumberFormatterRoundUp]; formattedNumberString = [numberFormatter stringFromNumber:[CPNumber numberWithFloat:123.5672]]; @@ -68,4 +70,93 @@ [self assert:@"123.568" equals:formattedNumberString]; } +- (void)testStringFromDecimalNumber +{ + var numberFormatter = [CPNumberFormatter new]; + [numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle]; + [numberFormatter setMaximumFractionDigits:1]; + + [self assert:@"1" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1"]]]; + [self assert:@"0.4" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.4467"]]]; +} + +- (void)testSetMinimumFractionDigits_ +{ + var numberFormatter = [CPNumberFormatter new]; + [numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle]; + [numberFormatter setMinimumFractionDigits:3]; + [numberFormatter setMaximumFractionDigits:4]; + + [self assert:@"1.000" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1"]]]; + [self assert:@"1.100" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.1"]]]; + [self assert:@"0.4467" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.4467"]]]; +} + +- (void)testArchiving +{ + var numberFormatter = [CPNumberFormatter new], + archived, + unarchived; + + [numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle]; + [numberFormatter setMinimumFractionDigits:2]; + [numberFormatter setMaximumFractionDigits:3]; + [numberFormatter setRoundingMode:CPNumberFormatterRoundHalfDown]; + [numberFormatter setGroupingSeparator:@" "]; + + archived = [CPKeyedArchiver archivedDataWithRootObject:numberFormatter], + unarchived = [CPKeyedUnarchiver unarchiveObjectWithData:archived]; + + [self assert:CPNumberFormatterDecimalStyle equals:[unarchived numberStyle] message:@"numberStyle"]; + [self assert:2 equals:[unarchived minimumFractionDigits] message:@"minimumFractionDigits"]; + [self assert:3 equals:[unarchived maximumFractionDigits] message:@"maximumFractionDigits"]; + [self assert:CPNumberFormatterRoundHalfDown equals:[unarchived roundingMode] message:@"roundingMode"]; + [self assert:@" " equals:[unarchived groupingSeparator] message:@"groupingSeparator"]; +} + +- (void)testCurrencyStyle +{ + var numberFormatter = [CPNumberFormatter new]; + [numberFormatter setNumberStyle:CPNumberFormatterCurrencyStyle]; + [numberFormatter setCurrencyCode:@"USD"]; + + [self assert:@"$1.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1"]]]; + [self assert:@"$12.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12"]]]; + [self assert:@"$12.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12.1"]]]; + [self assert:@"$12.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12.10"]]]; + [self assert:@"$0.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.1"]]]; + [self assert:@"$0.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.10"]]]; + [self assert:@"$0.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.005"]]]; + [self assert:@"$0.02" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.015"]]]; + + + [numberFormatter setCurrencyCode:@"SEK"]; + [numberFormatter setCurrencySymbol:@""]; + + [self assert:@"SEK1.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1"]]]; + [self assert:@"SEK12.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12"]]]; + [self assert:@"SEK12.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12.1"]]]; + [self assert:@"SEK12.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12.10"]]]; + [self assert:@"SEK0.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.1"]]]; + [self assert:@"SEK0.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.10"]]]; + [self assert:@"SEK0.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.005"]]]; + [self assert:@"SEK0.02" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.015"]]]; +} + +- (void)testSetGeneratesDecimalNumbers_ +{ + var numberFormatter = [CPNumberFormatter new]; + [numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle]; + + [self assertTrue:[numberFormatter generatesDecimalNumbers]]; + var generated = [numberFormatter numberFromString:@"1.23456"]; + [self assert:CPDecimalNumber equals:[generated class]]; + [self assert:[CPDecimalNumber decimalNumberWithString:@"1.23456"] equals:generated]; + + [numberFormatter setGeneratesDecimalNumbers:NO]; + generated = [numberFormatter numberFromString:@"1.23456"]; + [self assertFalse:[generated isKindOfClass:CPDecimalNumber]]; + [self assert:1.23456 equals:generated]; +} + @end diff --git a/Tests/Foundation/CPObjectTest.j b/Tests/Foundation/CPObjectTest.j index 8de2fe4b4..5b8f487de 100644 --- a/Tests/Foundation/CPObjectTest.j +++ b/Tests/Foundation/CPObjectTest.j @@ -21,11 +21,11 @@ [self assert:[CPObject version] equals:0]; // create a random new version and round it to an integer - var newVersion = ROUND(RAND()*100); + var newVersion = ROUND(RAND() * 100); // make sure it's not zero while (newVersion == 0) - newVersion = ROUND(RAND()*100); + newVersion = ROUND(RAND() * 100); [CPObject setVersion:newVersion]; @@ -35,18 +35,18 @@ - (void)testMultipleArgumentPerformSelector { - var receiver = [[Receiver alloc] init]; - - var value1 = "a", + var receiver = [[Receiver alloc] init], + + value1 = "a", value2 = "b", value3 = "c", value4 = "d", - selector = @selector(implements:multiple:argument:selector:); - - var returnValue = [receiver performSelector:selector withObjects:value1, value2, value3, value4]; - - var expectedReturnValue = value1 + value2 + value3 + value4; - + selector = @selector(implements:multiple:argument:selector:), + + returnValue = [receiver performSelector:selector withObjects:value1, value2, value3, value4], + + expectedReturnValue = value1 + value2 + value3 + value4; + [self assertTrue:expectedReturnValue === returnValue]; } diff --git a/Tests/Manual/ArrayController1/Resources/spinner.gif b/Tests/Manual/ArrayController1/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/ArrayController1/Resources/spinner.gif and b/Tests/Manual/ArrayController1/Resources/spinner.gif differ diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/Resources/spinner.gif b/Tests/Manual/ArrayControllerRemovingFirstTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/ArrayControllerRemovingFirstTest/Resources/spinner.gif and b/Tests/Manual/ArrayControllerRemovingFirstTest/Resources/spinner.gif differ diff --git a/Tests/Manual/AttachedSheet/Resources/spinner.gif b/Tests/Manual/AttachedSheet/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/AttachedSheet/Resources/spinner.gif and b/Tests/Manual/AttachedSheet/Resources/spinner.gif differ diff --git a/Tests/Manual/AttachedSheet2/AppController.j b/Tests/Manual/AttachedSheet2/AppController.j new file mode 100644 index 000000000..900b3b335 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/AppController.j @@ -0,0 +1,25 @@ +@import + +@import "SheetWindowController.j" + +@implementation AppController : CPObject +{ + SheetController _sheetController; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ +} + +- (void)awakeFromCib +{ + _sheetController = [[SheetWindowController alloc] initWithWindowCibName:@"Window"]; + [self newDocument:self]; +} + +- (void)newDocument:(id)sender +{ + [_sheetController newWindow:self]; +} + +@end diff --git a/Tests/Manual/AttachedSheet2/Info.plist b/Tests/Manual/AttachedSheet2/Info.plist new file mode 100644 index 000000000..a5876ce11 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/Info.plist @@ -0,0 +1,10 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + TestSheet + + diff --git a/Tests/Manual/AttachedSheet2/Jakefile b/Tests/Manual/AttachedSheet2/Jakefile new file mode 100644 index 000000000..d59137d5b --- /dev/null +++ b/Tests/Manual/AttachedSheet2/Jakefile @@ -0,0 +1,93 @@ +/* + * Jakefile + * AttachedSheet2 + * + * Created by Saikat Chakrabarti on March 16, 2010. + * Copyright 2010, gomockingbird.com All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("AttachedSheet2", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "AttachedSheet2.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("AttachedSheet2"); + task.setIdentifier("com.gomockingbird.AttachedSheet2"); + task.setVersion("1.0"); + task.setAuthor("Saikat Chakrabarti and Sheena Pakanati"); + task.setEmail("contact @nospam@ gomockingbird.com"); + task.setSummary("AttachedSheet2"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/*")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +function printResults(configuration) +{ + print("----------------------------") + print(configuration+" app built at path: "+FILE.join("Build", configuration, "AttachedSheet2")); + print("----------------------------") +} + +task ("default", ["AttachedSheet2"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "AttachedSheet2", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "AttachedSheet2", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "AttachedSheet2")); + OS.system(["press", "-f", FILE.join("Build", "Release", "AttachedSheet2"), FILE.join("Build", "Deployment", "AttachedSheet2")]); + printResults("Deployment") +}); + +task ("press", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Press", "AttachedSheet2")); + OS.system(["press", "-f", FILE.join("Build", "Release", "AttachedSheet2"), FILE.join("Build", "Press", "AttachedSheet2")]); +}); + +task ("flatten", ["press"], function() +{ + FILE.mkdirs(FILE.join("Build", "Flatten", "AttachedSheet2")); + OS.system(["flatten", "-f", "--verbose", "--split", "3", "-c", "closure-compiler", FILE.join("Build", "Press", "AttachedSheet2"), FILE.join("Build", "Flatten", "AttachedSheet2")]); +}); diff --git a/Tests/Manual/AttachedSheet2/Resources/MainMenu.cib b/Tests/Manual/AttachedSheet2/Resources/MainMenu.cib new file mode 100644 index 000000000..6e058a471 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;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;76E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;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;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;78E;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;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;87E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;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;197E;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;198E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;196E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;199E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;200E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;88E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;76E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;141E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;3;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;191E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;176E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;178E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;180E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;172E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;173E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;111E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;197E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;259E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;260E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;261E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;262E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;81E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;262E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;265E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;271E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;272E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;273E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;274E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;274E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;275E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;279E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;281E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;282E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;283E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;284E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;285E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;286E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;279E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;290E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;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;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;293E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;294E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;104E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;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;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;297E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;298E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;299E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;300E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;301E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;304E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;306E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;309E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;310E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;311E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;313E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;316E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;316E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;318E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;319E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;320E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;321E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;324E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;326E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;327E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;328E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;130E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;334E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;337E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;338E;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;339E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;340E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;342E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;343E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;344E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;345E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;346E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;347E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;348E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;350E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;351E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;352E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;353E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;354E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;355E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;143E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;355E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;143E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;358E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;143E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;147E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;359E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;360E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;345E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;346E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;342E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;343E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;334E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;364E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;152E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;364E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;365E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;366E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;367E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;368E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;342E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;371E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;345E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;373E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;334E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;379E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;380E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;381E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;164E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;381E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;382E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;385E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;386E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;170E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;387E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;388E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;389E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;175E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;390E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;393E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;395E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;397E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;328E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;399E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;326E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;400E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;263E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;187E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;400E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;401E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;402E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;187E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;403E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;404E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;187E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;405E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;407E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;187E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;267E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;269E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;410E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;187E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;328E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;187E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;326E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;413E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;delegateS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;performClose:S;14;runPageLayout:S;6;print:S;12;newDocument:S;9;showHelp:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;15;newModalWindow:S;9;newSheet:S;14;newModalSheet:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;100E;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;85E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;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;88E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;91E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;E;E;S;19;NewApplication HelpS;1;?S;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;105E;E;E;S;6;Print…S;1;pS;10;New WindowS;1;nS;13;Page Setup...S;1;Pd;7;1179648S;5;CloseS;1;wS;16;New Modal WindowS;1;NS;9;New SheetS;1;sS;15;New Modal SheetS;1;SS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;142E;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;ZS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;132E;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;140E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;141E;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;145E;D;K;6;CP$UIDd;3;144E;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;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;186E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;13;AppControllerE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/AttachedSheet2/Resources/MainMenu.xib b/Tests/Manual/AttachedSheet2/Resources/MainMenu.xib new file mode 100644 index 000000000..9781a1d5b --- /dev/null +++ b/Tests/Manual/AttachedSheet2/Resources/MainMenu.xib @@ -0,0 +1,2810 @@ + + + + 1050 + 11D50d + 2182 + 1138.32 + 568.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + YES + NSMenu + NSMenuItem + NSCustomObject + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New Window + n + 1048576 + 2147483647 + + + + + + New Modal Window + N + 1048576 + 2147483647 + + + + + + New Sheet + s + 1048576 + 2147483647 + + + + + + New Modal Sheet + S + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + AppController + + + + + YES + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + 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 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + newModalWindow: + + + + 494 + + + + newSheet: + + + + 495 + + + + newModalSheet: + + + + 497 + + + + newDocument: + + + + 498 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + 78 + + + 6 + + + 82 + + + 9 + + + 77 + + + 5 + + + 73 + + + 1 + + + 74 + + + 2 + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + 2 + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 378 + + + YES + + + + + + 379 + + + YES + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + 488 + + + 9 + + + 490 + + + 9 + + + 492 + + + 9 + + + 79 + + + 7 + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 106.IBPluginDependency + 111.IBPluginDependency + 129.IBPluginDependency + 130.IBPluginDependency + 131.IBPluginDependency + 134.IBPluginDependency + 136.IBPluginDependency + 143.IBPluginDependency + 144.IBPluginDependency + 145.IBPluginDependency + 149.IBPluginDependency + 150.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 375.IBPluginDependency + 376.IBPluginDependency + 377.IBPluginDependency + 378.IBPluginDependency + 379.IBPluginDependency + 380.IBPluginDependency + 381.IBPluginDependency + 382.IBPluginDependency + 383.IBPluginDependency + 384.IBPluginDependency + 385.IBPluginDependency + 386.IBPluginDependency + 387.IBPluginDependency + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 450.IBPluginDependency + 488.IBPluginDependency + 490.IBPluginDependency + 492.IBPluginDependency + 5.IBPluginDependency + 56.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 73.IBPluginDependency + 74.IBPluginDependency + 77.IBPluginDependency + 78.IBPluginDependency + 79.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 498 + + + + YES + + AppController + NSObject + + IBProjectSource + ./Classes/AppController.h + + + + SheetWindowController + NSWindowController + + YES + + YES + newModalSheet: + newModalWindow: + newSheet: + newWindow: + + + YES + id + id + id + id + + + + YES + + YES + newModalSheet: + newModalWindow: + newSheet: + newWindow: + + + YES + + newModalSheet: + id + + + newModalWindow: + id + + + newSheet: + id + + + newWindow: + id + + + + + YES + + YES + _okButton + _sheetWindowHackCheckbox + + + YES + NSButton + NSButton + + + + YES + + YES + _okButton + _sheetWindowHackCheckbox + + + YES + + _okButton + NSButton + + + _sheetWindowHackCheckbox + NSButton + + + + + IBProjectSource + ./Classes/SheetWindowController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {11, 11} + {10, 3} + + + + diff --git a/Tests/Manual/AttachedSheet2/Resources/Window.cib b/Tests/Manual/AttachedSheet2/Resources/Window.cib new file mode 100644 index 000000000..2dd594779 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/Resources/Window.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;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;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;65E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;66E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;67E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;61E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;69E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;60E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;71E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;53E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;73E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;57E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;76E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;50E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;64E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;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;29E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;64E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;88E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;89E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;90E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;91E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;92E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;93E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;40E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;95E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;95E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;93E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;111E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;112E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;113E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;114E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;116E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;117E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;118E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;119E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;120E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;122E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;124E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;125E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;120E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;122E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;124E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;127E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;128E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;129E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;130E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;131E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;132E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;122E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;124E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;133E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;134E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;135E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;122E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;124E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;136E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;137E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;139E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;6;$afontD;K;6;CP$UIDd;3;143E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;144E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;145E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;108E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;108E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;108E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;147E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;94E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;148E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;149E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;150E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;152E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;153E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;157E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;158E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;159E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;160E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonKeyEquivalentKeyD;K;6;CP$UIDd;3;161E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;162E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;163E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;164E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;62E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;165E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;166E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;167E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;168E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;6;$afontD;K;6;CP$UIDd;3;169E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;170E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;171E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;2;94E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;172E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;2;94E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;173E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;174E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;167E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;105E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;107E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;145E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;176E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;105E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;120E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;120E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;122E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;124E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;125E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;107E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;S;21;SheetWindowControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;15;_altCloseButtonS;19;_closableMaskButtonS;12;_closeButtonS;25;_miniaturizableMaskButtonS;22;_orderOutAfterCheckboxS;17;_otherCloseButtonS;20;_resizableMaskButtonS;17;_shadeContentViewS;18;_shadeParentWindowS;16;_shadeWindowViewS;17;_titledMaskButtonS;17;_windowTypeMatrixS;6;windowS;21;initialFirstResponderS;20;takeDoubleValueFrom:S;14;newModalSheet:S;10;newWindow:S;9;newSheet:S;15;newModalWindow:S;14;newAlertSheet:S;13;CPApplicationS;32;{10000000000000, 10000000000000}S;8;CPWindowS;23;{{71, -14}, {468, 425}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {468, 425}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;53E;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;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;55E;E;E;S;6;normalS;21;{{18, 18}, {138, 24}}S;19;{{0, 0}, {138, 24}}d;2;36S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;103E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;179E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;108E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;110E;E;d;1;2d;1;4S;0;F;d;2;14T;S;21;{{18, 50}, {138, 24}}S;12;Modal WindowS;21;{{18, 82}, {138, 24}}S;5;SheetS;22;{{18, 114}, {138, 24}}S;11;Modal SheetS;22;{{18, 146}, {138, 24}}S;11;Alert SheetS;23;{{193, 139}, {174, 18}}S;19;{{0, 0}, {174, 18}}S;9;check-boxS;8;selectedD;K;6;$classD;K;6;CP$UIDd;3;103E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;179E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;108E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;108E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;110E;E;d;1;1S;18;CPTitledWindowMaskS;23;{{193, 159}, {174, 18}}S;20;CPClosableWindowMaskS;23;{{194, 20}, {261, 113}}S;20;{{0, 0}, {261, 113}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;E;E;S;23;{{192, 179}, {210, 18}}S;19;{{0, 0}, {210, 18}}S;26;CPMiniaturizableWindowMaskS;23;{{192, 199}, {180, 18}}S;19;{{0, 0}, {180, 18}}S;21;CPResizableWindowMaskS;22;{{18, 221}, {329, 18}}S;19;{{0, 0}, {329, 18}}S;25;orderOut: after endSheet:S;22;{{30, 246}, {362, 26}}S;19;{{0, 0}, {362, 26}}S;9;textfieldD;K;6;$classD;K;6;CP$UIDd;3;103E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;186E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;108E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;108E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;110E;E;S;140;It is not specified if endSheet: or orderOut: on sheet should be called first. However, cannot call orderOut: after endSheet: when chaining.d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;187E;E;S;22;{{18, 277}, {329, 18}}S;36;Shade Window View of Non-CIB WindowsS;22;{{18, 297}, {329, 18}}S;36;Shade Content View of Non-CIB WindowS;22;{{18, 317}, {329, 18}}S;44;Shade Parent Window on windowWillBeginSheet:S;22;{{18, 383}, {110, 24}}S;19;{{0, 0}, {110, 24}}d;1;9S;12;Chain SheetsS;22;{{385, 383}, {68, 24}}S;18;{{0, 0}, {68, 24}}S;5;CloseS;4;CgA=S;23;{{238, 383}, {135, 24}}S;19;{{0, 0}, {135, 24}}S;16;Close Parent TooS;22;{{116, 350}, {96, 21}}S;18;{{0, 0}, {96, 21}}d;2;45S;6;sliderD;K;6;$classD;K;6;CP$UIDd;3;103E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;188E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;177E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;108E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;108E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;108E;E;d;2;50d;2;68d;3;100S;23;{{228, 348}, {104, 29}}S;19;{{0, 0}, {104, 29}}S;19;bezeled+placeholderD;K;6;$classD;K;6;CP$UIDd;3;146E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;189E;E;d;2;12S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;50E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;124E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;190E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;190E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;50E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;191E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;192E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;193E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;194E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;105E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;105E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;124E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;195E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;196E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;197E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;50E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;200E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;190E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;50E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;191E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;192E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;193E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;105E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;105E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;201E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;196E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;197E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;50E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;202E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;203E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;190E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;50E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;191E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;192E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;193E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;105E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;105E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;204E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;196E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;197E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;50E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;106E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;205E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;190E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;50E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;191E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;192E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;193E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;105E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;105E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;206E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;196E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;197E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;50E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;207E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;208E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;190E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;50E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;191E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;192E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;193E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;105E;K;16;$aimage-positionD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;123E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;105E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;209E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;124E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;124E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;105E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;94E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;196E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;197E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;199E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;124E;E;E;S;9;HelveticaD;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;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;124E;E;E;S;19;{{0, 0}, {261, 21}}d;2;18D;K;6;$classD;K;6;CP$UIDd;3;146E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;211E;E;S;5;radioS;17;selected+borderedS;10;CIB Windowf;3;0.5f;4;0.05D;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;198E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;212E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;181E;E;S;20;{{0, 23}, {261, 21}}S;25;CPHUDBackgroundWindowMaskd;1;3S;20;{{0, 46}, {261, 21}}S;22;CPBorderlessWindowMaskS;20;{{0, 69}, {261, 21}}S;30;CPTexturedBackgroundWindowMaskd;1;5S;20;{{0, 92}, {261, 21}}S;20;CPDocModalWindowMaskf;18;0.6862745098039216D;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;94E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;94E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/AttachedSheet2/Resources/Window.xib b/Tests/Manual/AttachedSheet2/Resources/Window.xib new file mode 100644 index 000000000..e6af978f5 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/Resources/Window.xib @@ -0,0 +1,1504 @@ + + + + 1070 + 11D50d + 2182 + 1138.32 + 568.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + NSTextField + NSView + NSWindowTemplate + NSTextFieldCell + NSSliderCell + NSMatrix + NSSlider + NSButtonCell + NSButton + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + SheetWindowController + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{71, 767}, {468, 425}} + 1946157056 + Window + NSWindow + + + + + 256 + + + + 301 + {{116, 54}, {96, 21}} + + + + YES + + -2079981824 + 0 + + + Helvetica + 12 + 16 + + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + + + + 301 + {{234, 51}, {96, 22}} + + + + YES + + -1804468671 + 272630784 + + + LucidaGrande + 13 + 1044 + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + + + + 289 + {{381, 12}, {80, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Close + + _NS:9 + + -2038284033 + 129 + + DQ + 200 + 25 + + + + + 268 + {{14, 345}, {150, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Modal Window + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{14, 313}, {150, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Sheet + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{14, 377}, {150, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Window + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{14, 281}, {150, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Modal Sheet + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{14, 249}, {150, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Alert Sheet + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 289 + {{234, 12}, {147, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Close Parent Too + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 289 + {{14, 12}, {122, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Chain Sheets + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{18, 186}, {329, 18}} + + + + _NS:9 + YES + + 67239424 + 0 + orderOut: after endSheet: + + _NS:9 + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 268 + {{18, 130}, {329, 18}} + + + + _NS:9 + YES + + 67239424 + 0 + Shade Window View of Non-CIB Windows + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{18, 110}, {329, 18}} + + + + _NS:9 + YES + + 67239424 + 0 + Shade Content View of Non-CIB Window + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{18, 90}, {329, 18}} + + + + _NS:9 + YES + + 67239424 + 0 + Shade Parent Window on windowWillBeginSheet: + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{193, 268}, {174, 18}} + + + + _NS:9 + YES + + -2080244224 + 0 + CPTitledWindowMask + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{193, 248}, {174, 18}} + + + + _NS:9 + YES + + -2080244224 + 0 + CPClosableWindowMask + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{194, 292}, {261, 113}} + + + + _NS:9 + YES + 5 + 1 + + + -2080244224 + 0 + CIB Window + + + 1 + 1211912703 + 0 + + NSRadioButton + + + + 200 + 25 + + + 67239424 + 0 + CPHUDBackgroundWindowMask + + + 2 + 1211912703 + 0 + + 549453824 + {18, 18} + + + + + + TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw +IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ +29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 +dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA +AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG +AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ +0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ +7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ +5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ +3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD +AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns +AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ +6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ +/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ +///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl +YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA +AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD +AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu +AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB +AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES +AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS +AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA + + + + + + 3 + MCAwAA + + + + 400 + 75 + + + 67239424 + 0 + CPBorderlessWindowMask + + + 3 + 1211912703 + 0 + + 400 + 75 + + + 67239424 + 0 + CPTexturedBackgroundWindowMask + + + 4 + 1211912703 + 0 + + 400 + 75 + + + 67239424 + 0 + CPDocModalWindowMask + + + 5 + 1211912703 + 0 + + 400 + 75 + + + {261, 21} + {4, 2} + 1151868928 + NSActionCell + + 67239424 + 0 + Radio + + 1211912703 + 0 + + 549453824 + {18, 18} + + + + + + TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw +IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ +29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 +dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA +AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG +AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ +0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ +7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ +5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ +3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD +AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns +AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ +6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ +/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ +///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl +YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA +AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD +AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu +AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB +AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES +AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS +AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA + + + + + + + + 400 + 75 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + + + + + 268 + {{192, 228}, {210, 18}} + + + + _NS:9 + YES + + -2080244224 + 0 + CPMiniaturizableWindowMask + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{192, 208}, {180, 18}} + + + + _NS:9 + YES + + -2080244224 + 0 + CPResizableWindowMask + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{30, 154}, {368, 26}} + + + + _NS:9 + {250, 750} + YES + + 67239424 + 272629760 + It is not specified if endSheet: or orderOut: on sheet should be called first. However, cannot call orderOut: after endSheet: when chaining. + + LucidaGrande + 10 + 16 + + _NS:9 + + + + 6 + System + controlTextColor + + + + + + {468, 425} + + + + + {{0, 0}, {1920, 1178}} + {10000000000000, 10000000000000} + YES + + + + 268 + {174, 18} + _NS:9 + YES + + -2080244224 + 0 + CPTitledWindowMask + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + + + + window + + + + 132 + + + + newModalWindow: + + + + 137 + + + + newSheet: + + + + 138 + + + + newWindow: + + + + 139 + + + + newModalSheet: + + + + 136 + + + + _closeButton + + + + 163 + + + + _altCloseButton + + + + 164 + + + + _otherCloseButton + + + + 165 + + + + _orderOutAfterCheckbox + + + + 168 + + + + _windowTypeMatrix + + + + 180 + + + + _titledMaskButton + + + + 194 + + + + _closableMaskButton + + + + 195 + + + + _miniaturizableMaskButton + + + + 196 + + + + _resizableMaskButton + + + + 197 + + + + newAlertSheet: + + + + 198 + + + + _shadeWindowView + + + + 205 + + + + _shadeContentView + + + + 206 + + + + _shadeParentWindow + + + + 223 + + + + initialFirstResponder + + + + 219 + + + + takeDoubleValueFrom: + + + + 33 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 3 + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + 9 + + + + + + + + 19 + + + + + + + + 20 + + + + + 30 + + + + + 31 + + + + + 17 + + + + + + + + 22 + + + + + 16 + + + + + + + + 23 + + + + + 14 + + + + + + + + 25 + + + + + 11 + + + + + + + + 28 + + + + + 145 + + + + + + + + 146 + + + + + 159 + + + + + + + + 160 + + + + + 161 + + + + + + + + 162 + + + + + 166 + + + + + + + + 167 + + + + + 169 + + + + + + + + + + + + + 170 + + + + + 171 + + + + + 172 + + + + + 173 + + + + + 179 + + + + + 181 + + + + + 184 + + + + + + + + 185 + + + + + 186 + + + + + + + + 187 + + + + + 188 + + + + + + + + 189 + + + + + 190 + + + + + + + + 191 + + + + + 192 + + + + + + + + 193 + + + + + 199 + + + + + + + + 200 + + + + + 201 + + + + + + + + 202 + + + + + 203 + + + + + + + + 204 + + + + + 220 + + + + + + + + 221 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + 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 + + + + + + 223 + + + + + SheetWindowController + NSWindowController + + id + id + id + id + id + id + id + id + + + + newAlertSheet: + id + + + newColorPanelSheet: + id + + + newModalSheet: + id + + + newModalWindow: + id + + + newOpenPanelSheet: + id + + + newSavePanelSheet: + id + + + newSheet: + id + + + newWindow: + id + + + + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSMatrix + + + + _altCloseButton + NSButton + + + _closableMaskButton + NSButton + + + _closeButton + NSButton + + + _miniaturizableMaskButton + NSButton + + + _orderOutAfterCheckbox + NSButton + + + _otherCloseButton + NSButton + + + _resizableMaskButton + NSButton + + + _shadeContentView + NSButton + + + _shadeParentWindow + NSButton + + + _shadeWindowView + NSButton + + + _titledMaskButton + NSButton + + + _windowTypeMatrix + NSMatrix + + + + IBProjectSource + ./Classes/SheetWindowController.h + + + + + 0 + IBCocoaFramework + YES + 3 + + NSSwitch + {15, 15} + + + diff --git a/Tests/Manual/AttachedSheet2/Resources/spinner.gif b/Tests/Manual/AttachedSheet2/Resources/spinner.gif new file mode 100644 index 000000000..77b36416b Binary files /dev/null and b/Tests/Manual/AttachedSheet2/Resources/spinner.gif differ diff --git a/Tests/Manual/AttachedSheet2/SheetWindowController.j b/Tests/Manual/AttachedSheet2/SheetWindowController.j new file mode 100644 index 000000000..a2507f51a --- /dev/null +++ b/Tests/Manual/AttachedSheet2/SheetWindowController.j @@ -0,0 +1,484 @@ + +@implementation SheetWindowController : CPWindowController +{ + @outlet CPButton _closeButton; + @outlet CPButton _sheetWindowHackCheckbox; + @outlet CPButton _altCloseButton; + @outlet CPButton _otherCloseButton; + @outlet CPButton _orderOutAfterCheckbox; + @outlet CPRadioGroup _windowTypeMatrix; + @outlet CPButton _titledMaskButton; + @outlet CPButton _closableMaskButton; + @outlet CPButton _miniaturizableMaskButton; + @outlet CPButton _resizableMaskButton; + @outlet CPButton _shadeWindowView; + @outlet CPButton _shadeContentView; + @outlet CPButton _shadeParentWindow; + + CPModalSession _modalSession; + CPWindow _parentWindow; + CPWindow _sheet; + int _returnCode; + CPColor _savedColor; +} + +- (void)initWithWindowCibName:(CPString)cibName +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + self = [super initWithWindowCibName:cibName]; + + _closeButton = nil; + + return self; +} + +- (void)positionWindow +{ + var keyWindow = [CPApp keyWindow], + origin = CPPointMake(40, 40); + + if (keyWindow) + { + origin = ([keyWindow frame]).origin; + origin = CPPointMake(origin.x + 20, origin.y + 20); + } + + [[self window] setFrameOrigin:origin]; +} + +- (void)awakeFromCib +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + if (!_closeButton) + CPLog.fatal("_closeButton is not connected!"); + + [_closeButton setTarget:self]; + [_closeButton setAction:@selector(unsetAction:)]; + [_altCloseButton setTarget:self]; + [_altCloseButton setAction:@selector(unsetAction:)]; + [_otherCloseButton setTarget:self]; + [_otherCloseButton setAction:@selector(unsetAction:)]; +} + +- (void)unsetAction:(id)sender +{ + CPLog.warn("No action set on this %@", [sender class]); +} + +- (void)addButtons:(CPWindow)aWindow +{ + var x = 10, + unsetAction = @selector(unsetAction:); + + _closeButton = [[CPButton alloc] initWithFrame:CGRectMake(x, 10, 32, 100)]; + [_closeButton setTitle:@"Close"]; + [_closeButton setButtonType:CPMomentaryPushInButton]; + [_closeButton setBezelStyle:CPBezelBorder]; + [_closeButton sizeToFit]; + [_closeButton setTarget:self]; + [_closeButton setAction:unsetAction]; + [[aWindow contentView] addSubview:_closeButton positioned:CPWindowAbove relativeTo:nil]; + x += 10 + CGRectGetWidth([_closeButton frame]); + + _altCloseButton = [[CPButton alloc] initWithFrame:CGRectMake(x, 10, 32, 100)]; + [_altCloseButton setTitle:@"Close Parent Too"]; + [_altCloseButton setButtonType:CPMomentaryPushInButton]; + [_altCloseButton setBezelStyle:CPBezelBorder]; + [_altCloseButton sizeToFit]; + [_altCloseButton setTarget:self]; + [_altCloseButton setAction:unsetAction]; + [[aWindow contentView] addSubview:_altCloseButton positioned:CPWindowAbove relativeTo:nil]; + x += 10 + CGRectGetWidth([_altCloseButton frame]); + + _otherCloseButton = [[CPButton alloc] initWithFrame:CGRectMake(x, 10, 32, 100)]; + [_otherCloseButton setTitle:@"Chain Sheets"]; + [_otherCloseButton setButtonType:CPMomentaryPushInButton]; + [_otherCloseButton setBezelStyle:CPBezelBorder]; + [_otherCloseButton sizeToFit]; + [_otherCloseButton setTarget:self]; + [_otherCloseButton setAction:unsetAction]; + [[aWindow contentView] addSubview:_otherCloseButton positioned:CPWindowAbove relativeTo:nil]; +} + +- (SheetWindowController)initWithStyleMask:(int)styleMask debug:(int)debug +{ + CPLog.debug("[%@ %@] mask=%d radioGroup=%@", [self class], _cmd, styleMask, _windowTypeMatrix); + + if (styleMask < 0) + return [self initWithWindowCibName:@"Window"]; + + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0, 0, 400, 300) styleMask:styleMask]; + + if (debug & 1) + [theWindow setBackgroundColor:[CPColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:0.5]]; + + if (debug & 2) + [[theWindow contentView] setBackgroundColor:[CPColor colorWithCalibratedRed:0.0 green:0.0 blue:1.0 alpha:0.5]]; + + if (self = [super initWithWindow:theWindow]) + [self addButtons:theWindow]; + + return self; +} + +- (SheetWindowController)allocController +{ + CPLog.debug("[%@ %@] groupClass=%@", [self class], _cmd, + [[[[[_windowTypeMatrix subviews] objectAtIndex:0] radioGroup] selectedRadio] tag]); + + var type = 1; + if (_windowTypeMatrix) + type = [[[[[_windowTypeMatrix subviews] objectAtIndex:0] radioGroup] selectedRadio] tag]; + + var styleMask = 0; + if ([_titledMaskButton state]) + styleMask |= CPTitledWindowMask; + + if ([_closableMaskButton state]) + styleMask |= CPClosableWindowMask; + + if ([_miniaturizableMaskButton state]) + styleMask |= CPMiniaturizableWindowMask; + + switch (type) + { + case 2: + styleMask |= CPHUDBackgroundWindowMask; + break; + case 3: + styleMask = CPBorderlessWindowMask; + break; + case 4: + styleMask |= CPTexturedBackgroundWindowMask; + break; + case 5: + styleMask = CPDocModalWindowMask; + break; + default: + } + + if ([_resizableMaskButton state]) + styleMask |= CPResizableWindowMask; + + if (type == 1) + styleMask = -1; + + var debug = 0; + if ([_shadeWindowView state]) + debug |= 1; + + if ([_shadeContentView state]) + debug |= 2; + + return [[SheetWindowController alloc] initWithStyleMask:styleMask debug:debug]; +} + +- (SheetWindowController)allocWithPanel:(CPPanel)panel +{ + return [[SheetWindowController alloc] initWithWindow:panel]; +} + +- (void)disableUnlinkedButtons +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + var unsetSelector = @selector(unsetAction:); + if (_closeButton) + [_closeButton setEnabled:[_closeButton action] != unsetSelector]; + + if (_altCloseButton) + [_altCloseButton setEnabled:[_altCloseButton action] != unsetSelector]; + + if (_otherCloseButton) + [_otherCloseButton setEnabled:[_otherCloseButton action] != unsetSelector]; +} + +// +// Normal window +// +- (void)newDocument:(id)sender +{ + [self newWindow:sender]; +} + +- (void)newWindow:(id)sender +{ + [[self allocController] runNormalWindow]; +} + +- (void)runNormalWindow +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + [self positionWindow]; + [[self window] setTitle:@"Normal Window"]; + [_closeButton setTarget:[self window]]; + [_closeButton setAction:@selector(orderOut:)]; + [self disableUnlinkedButtons]; + + [self showWindow:self]; +} + +// +// Modal window +// +- (void)newModalWindow:(id)sender +{ + [[self allocController] runModalWindow]; +} + +- (void)runModalWindow +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + [[self window] setTitle:@"Modal Window"]; + [[self window] setDelegate:self]; + [_closeButton setTarget:self]; + [_closeButton setAction:@selector(endModalWindow:)]; + [self disableUnlinkedButtons]; + + //[self showWindow:self]; + [CPApp runModalForWindow:[self window]]; +} + +- (void)endModalWindow:(id)sender +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + // performClose shouldn't work, if the window has no close button + if ([[self window] styleMask] & CPClosableWindowMask) + [[self window] performClose:self]; + else + [[self window] close]; +} + +- (void)windowWillClose:(NSNotification*)notification +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + // this is one way to handle close button on modal window + if ([CPApp modalWindow]) + [CPApp stopModal]; +} + +// +// Sheet +// +- (void)newSheet:(id)sender +{ + [[self allocController] runSheetForWindow:[self window]]; +} + +- (void)runSheetForWindow:(CPWindow)parentWindow +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + var sheet = [self window]; + [parentWindow setDelegate:self]; + _parentWindow = parentWindow; + _sheet = sheet; + + // NOTE: _closeButton doesn't exist until we call [self window] to load window from cib! + [_closeButton setTarget:self]; + [_closeButton setAction:@selector(closeSheet:)]; + [_altCloseButton setAction:@selector(closeSheetAndParent:)]; + [_otherCloseButton setAction:@selector(closeSheetAndRepeat:)]; + [self disableUnlinkedButtons]; + + [CPApp beginSheet:sheet + modalForWindow:parentWindow + modalDelegate:self + didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) + contextInfo:parentWindow]; +} + +- (void)closeSheet:(id)sender +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + _returnCode = 1; + + var orderOutAfter = [_orderOutAfterCheckbox state]; + if (!orderOutAfter) + [[self window] orderOut:nil]; + + [CPApp endSheet:[self window] returnCode:_returnCode]; + + if (orderOutAfter) + [[self window] orderOut:nil]; +} + +- (void)closeSheetAndParent:(id)sender +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + // common use case is saving document in response to a close, + // in this case we don't want to show the animation at all, + // and also get rid of the parent window + [_parentWindow close]; + + var orderOutAfter = [_orderOutAfterCheckbox state]; + if (!orderOutAfter) + [[self window] orderOut:nil]; + + _returnCode = 99; + [CPApp endSheet:[self window] returnCode:_returnCode]; + + if (orderOutAfter) + [[self window] orderOut:nil]; +} + +- (void)closeSheetAndRepeat:(id)sender +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + // common use case is showing a progress bar after a save command, + // the orderout gets rid of the current sheet, + // the return code indicates to open another sheet up + var orderOutAfter = [_orderOutAfterCheckbox state]; + if (!orderOutAfter) + [[self window] orderOut:nil]; + + _returnCode = 77; + [CPApp endSheet:[self window] returnCode:_returnCode]; + + if (orderOutAfter) + [[self window] orderOut:nil]; +} + +// +// "Modal" Sheet implemented by using modal session +// +- (void)newModalSheet:(id)sender +{ + [[self allocController] runModalSheetForWindow:[self window]]; +} + +- (void)runModalSheetForWindow:(CPWindow)parentWindow +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + var sheet = [self window]; + [parentWindow setDelegate:self]; + _parentWindow = parentWindow; + _sheet = sheet; + + [_closeButton setTarget:self]; + [_closeButton setAction:@selector(closeModalSheet:)]; + [self disableUnlinkedButtons]; + + [CPApp beginSheet:sheet + modalForWindow:parentWindow + modalDelegate:self + didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) + contextInfo:parentWindow]; + + // what is the difference between these two approaches? + [CPApp runModalForWindow:sheet]; + + //var session = [CPApp beginModalSessionForWindow:sheet]; + //[CPApp runModalSession:session]; +} + +- (void)closeModalSheet:(id)sender +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + var orderOutAfter = [_orderOutAfterCheckbox state]; + if (!orderOutAfter) + [[self window] orderOut:nil]; + + _returnCode = 2; + [CPApp endSheet:[self window] returnCode:_returnCode]; + + // what return should we get, the sheet or modal? + [CPApp stopModalWithCode:999]; + + if (orderOutAfter) + [[self window] orderOut:nil]; +} + +// +// Test alert panels +// +- (void)newAlertSheet:(id)sender +{ + [self runAlertSheet:[self window]]; +} + +- (void)runAlertSheet:(CPWindow)parentWindow +{ + // BUG: capp 0.9.5 on WebKit will chop off "bug." in the info text + var alert = [CPAlert alertWithMessageText:@"Alert message text goes here" + defaultButton:@"DefaultButton" + alternateButton:@"AltButton" + otherButton:@"OtherButton" + informativeTextWithFormat:@"This informative text sentence shows text wrapping bug."]; + + [parentWindow setDelegate:self]; + _parentWindow = parentWindow; + _sheet = alert; + _returnCode = -1; + + [alert beginSheetModalForWindow:parentWindow + modalDelegate:self + didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) + contextInfo:parentWindow]; +} + +// +// Test notifications/delegate methods +// +- (void)didEndSheet:(CPWindow)sheet returnCode:(int)returnCode contextInfo:(id)parentWindow +{ + CPLog.debug("[%@ %@] returnCode=%d", [self class], _cmd, returnCode); + + if (sheet !== _sheet) + CPLog.fatal("sheet invalid"); + + if (_returnCode >= 0 && returnCode != _returnCode) + CPLog.fatal("returnCode invalid"); + + if (_parentWindow !== parentWindow) + CPLog.fatal("contextInfo invalid"); + + // 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) + [self runSheetForWindow:parentWindow]; + //[self runAlertSheet:parentWindow]; +} + +- (BOOL)shadeWindow +{ + return [_shadeParentWindow state]; +} + +- (void)windowWillBeginSheet:(NSNotification*)notification +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + if ([notification object] !== _parentWindow) + CPLog.fatal("notification object should be delegate's window"); + + if ([[_parentWindow windowController] shadeWindow]) + { + _savedColor = [[_parentWindow contentView] backgroundColor]; + [[_parentWindow contentView] setBackgroundColor: + [CPColor colorWithCalibratedRed:0.0 green:0.7 blue:0.0 alpha:1.0]]; + } +} + +- (void)windowDidEndSheet:(NSNotification *)notification +{ + CPLog.debug("[%@ %@]", [self class], _cmd); + + if ([notification object] !== _parentWindow) + CPLog.fatal("notification object should be delegate's window"); + + if ([[_parentWindow windowController] shadeWindow]) + [[_parentWindow contentView] setBackgroundColor:_savedColor]; +} + +@end diff --git a/Tests/Manual/AttachedSheet2/index-debug.html b/Tests/Manual/AttachedSheet2/index-debug.html new file mode 100644 index 000000000..cf044b9ce --- /dev/null +++ b/Tests/Manual/AttachedSheet2/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + TestSheet + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/AttachedSheet2/index.html b/Tests/Manual/AttachedSheet2/index.html new file mode 100644 index 000000000..20935b1b0 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + TestSheet + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/AttachedSheet2/main.j b/Tests/Manual/AttachedSheet2/main.j new file mode 100644 index 000000000..b722e04dc --- /dev/null +++ b/Tests/Manual/AttachedSheet2/main.j @@ -0,0 +1,19 @@ +/* + * AppController.j + * TestSheet + * + * Created by You on April 14, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPLogRegister(CPLogDefault); + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet.xcodeproj/project.pbxproj b/Tests/Manual/AttachedSheet2/xcode/TestSheet.xcodeproj/project.pbxproj new file mode 100644 index 000000000..eaa9a88d6 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet.xcodeproj/project.pbxproj @@ -0,0 +1,304 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + B210EF7E153B0A8D005D15EE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B210EF7D153B0A8D005D15EE /* Cocoa.framework */; }; + B210EF88153B0A8D005D15EE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = B210EF86153B0A8D005D15EE /* InfoPlist.strings */; }; + B210EF8A153B0A8D005D15EE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B210EF89153B0A8D005D15EE /* main.m */; }; + B210EF8E153B0A8D005D15EE /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = B210EF8C153B0A8D005D15EE /* Credits.rtf */; }; + B210EF91153B0A8D005D15EE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B210EF90153B0A8D005D15EE /* AppDelegate.m */; }; + B2129637153B0B3000E15669 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B2129636153B0B3000E15669 /* MainMenu.xib */; }; + B212963B153B0B4900E15669 /* Window.xib in Resources */ = {isa = PBXBuildFile; fileRef = B2129639153B0B4900E15669 /* Window.xib */; }; + B212963C153B0E6A00E15669 /* SheetWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = B2129630153B0ADF00E15669 /* SheetWindow.m */; }; + B212963D153B0E6C00E15669 /* SheetWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B2129632153B0ADF00E15669 /* SheetWindowController.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + B210EF79153B0A8D005D15EE /* TestSheet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestSheet.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B210EF7D153B0A8D005D15EE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + B210EF80153B0A8D005D15EE /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + B210EF81153B0A8D005D15EE /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + B210EF82153B0A8D005D15EE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + B210EF85153B0A8D005D15EE /* TestSheet-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TestSheet-Info.plist"; sourceTree = ""; }; + B210EF87153B0A8D005D15EE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + B210EF89153B0A8D005D15EE /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + B210EF8B153B0A8D005D15EE /* TestSheet-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TestSheet-Prefix.pch"; sourceTree = ""; }; + B210EF8D153B0A8D005D15EE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + B210EF8F153B0A8D005D15EE /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + B210EF90153B0A8D005D15EE /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + B212962F153B0ADF00E15669 /* SheetWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SheetWindow.h; sourceTree = ""; }; + B2129630153B0ADF00E15669 /* SheetWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SheetWindow.m; sourceTree = ""; }; + B2129631153B0ADF00E15669 /* SheetWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SheetWindowController.h; sourceTree = ""; }; + B2129632153B0ADF00E15669 /* SheetWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SheetWindowController.m; sourceTree = ""; }; + B2129636153B0B3000E15669 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MainMenu.xib; path = ../Resources/MainMenu.xib; sourceTree = ""; }; + B2129639153B0B4900E15669 /* Window.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Window.xib; path = ../Resources/Window.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + B210EF76153B0A8D005D15EE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B210EF7E153B0A8D005D15EE /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + B210EF6E153B0A8D005D15EE = { + isa = PBXGroup; + children = ( + B2129639153B0B4900E15669 /* Window.xib */, + B2129636153B0B3000E15669 /* MainMenu.xib */, + B210EF83153B0A8D005D15EE /* TestSheet */, + B210EF7C153B0A8D005D15EE /* Frameworks */, + B210EF7A153B0A8D005D15EE /* Products */, + ); + sourceTree = ""; + }; + B210EF7A153B0A8D005D15EE /* Products */ = { + isa = PBXGroup; + children = ( + B210EF79153B0A8D005D15EE /* TestSheet.app */, + ); + name = Products; + sourceTree = ""; + }; + B210EF7C153B0A8D005D15EE /* Frameworks */ = { + isa = PBXGroup; + children = ( + B210EF7D153B0A8D005D15EE /* Cocoa.framework */, + B210EF7F153B0A8D005D15EE /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + B210EF7F153B0A8D005D15EE /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + B210EF80153B0A8D005D15EE /* AppKit.framework */, + B210EF81153B0A8D005D15EE /* CoreData.framework */, + B210EF82153B0A8D005D15EE /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + B210EF83153B0A8D005D15EE /* TestSheet */ = { + isa = PBXGroup; + children = ( + B210EF8F153B0A8D005D15EE /* AppDelegate.h */, + B210EF90153B0A8D005D15EE /* AppDelegate.m */, + B212962F153B0ADF00E15669 /* SheetWindow.h */, + B2129630153B0ADF00E15669 /* SheetWindow.m */, + B2129631153B0ADF00E15669 /* SheetWindowController.h */, + B2129632153B0ADF00E15669 /* SheetWindowController.m */, + B210EF84153B0A8D005D15EE /* Supporting Files */, + ); + path = TestSheet; + sourceTree = ""; + }; + B210EF84153B0A8D005D15EE /* Supporting Files */ = { + isa = PBXGroup; + children = ( + B210EF85153B0A8D005D15EE /* TestSheet-Info.plist */, + B210EF86153B0A8D005D15EE /* InfoPlist.strings */, + B210EF89153B0A8D005D15EE /* main.m */, + B210EF8B153B0A8D005D15EE /* TestSheet-Prefix.pch */, + B210EF8C153B0A8D005D15EE /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + B210EF78153B0A8D005D15EE /* TestSheet */ = { + isa = PBXNativeTarget; + buildConfigurationList = B210EF97153B0A8D005D15EE /* Build configuration list for PBXNativeTarget "TestSheet" */; + buildPhases = ( + B210EF75153B0A8D005D15EE /* Sources */, + B210EF76153B0A8D005D15EE /* Frameworks */, + B210EF77153B0A8D005D15EE /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TestSheet; + productName = TestSheet; + productReference = B210EF79153B0A8D005D15EE /* TestSheet.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + B210EF70153B0A8D005D15EE /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0430; + }; + buildConfigurationList = B210EF73153B0A8D005D15EE /* Build configuration list for PBXProject "TestSheet" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = B210EF6E153B0A8D005D15EE; + productRefGroup = B210EF7A153B0A8D005D15EE /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B210EF78153B0A8D005D15EE /* TestSheet */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + B210EF77153B0A8D005D15EE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B210EF88153B0A8D005D15EE /* InfoPlist.strings in Resources */, + B2129637153B0B3000E15669 /* MainMenu.xib in Resources */, + B212963B153B0B4900E15669 /* Window.xib in Resources */, + B210EF8E153B0A8D005D15EE /* Credits.rtf in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + B210EF75153B0A8D005D15EE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B210EF8A153B0A8D005D15EE /* main.m in Sources */, + B210EF91153B0A8D005D15EE /* AppDelegate.m in Sources */, + B212963D153B0E6C00E15669 /* SheetWindowController.m in Sources */, + B212963C153B0E6A00E15669 /* SheetWindow.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + B210EF86153B0A8D005D15EE /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + B210EF87153B0A8D005D15EE /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + B210EF8C153B0A8D005D15EE /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + B210EF8D153B0A8D005D15EE /* en */, + ); + name = Credits.rtf; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + B210EF95153B0A8D005D15EE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + B210EF96153B0A8D005D15EE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + SDKROOT = macosx; + }; + name = Release; + }; + B210EF98153B0A8D005D15EE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "TestSheet/TestSheet-Prefix.pch"; + INFOPLIST_FILE = "TestSheet/TestSheet-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + B210EF99153B0A8D005D15EE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "TestSheet/TestSheet-Prefix.pch"; + INFOPLIST_FILE = "TestSheet/TestSheet-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + B210EF73153B0A8D005D15EE /* Build configuration list for PBXProject "TestSheet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B210EF95153B0A8D005D15EE /* Debug */, + B210EF96153B0A8D005D15EE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B210EF97153B0A8D005D15EE /* Build configuration list for PBXNativeTarget "TestSheet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B210EF98153B0A8D005D15EE /* Debug */, + B210EF99153B0A8D005D15EE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = B210EF70153B0A8D005D15EE /* Project object */; +} diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tests/Manual/AttachedSheet2/xcode/TestSheet.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..2a88e2374 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/AppDelegate.h b/Tests/Manual/AttachedSheet2/xcode/TestSheet/AppDelegate.h new file mode 100644 index 000000000..4e7ea0fff --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/AppDelegate.h @@ -0,0 +1,16 @@ +// +// AppDelegate.h +// TestSheet +// +// Created by Joe Semolian on 4/15/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import +#import "SheetWindowController.h" + +@interface AppController : NSObject +{ + SheetWindowController* _sheetController; +} +@end diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/AppDelegate.m b/Tests/Manual/AttachedSheet2/xcode/TestSheet/AppDelegate.m new file mode 100644 index 000000000..ed833baaa --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/AppDelegate.m @@ -0,0 +1,29 @@ +// +// AppDelegate.m +// TestSheet +// +// Created by Joe Semolian on 4/15/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import "AppDelegate.h" +#import "SheetWindowController.h" + +@implementation AppController + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + // Insert code here to initialize your application + _sheetController = [[SheetWindowController alloc] initWithWindowNibName:@"Window"]; + + [_sheetController newWindow:self]; +} + +- (void)newDocument:(id)sender +{ + [_sheetController newWindow:sender]; +} + +@end diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindow.h b/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindow.h new file mode 100644 index 000000000..2b2c7b263 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindow.h @@ -0,0 +1,13 @@ +// +// SheetWindow.h +// +// +// Created by Joe Semolian on 4/14/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import + +@interface SheetWindow : NSWindow + +@end diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindow.m b/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindow.m new file mode 100644 index 000000000..b9f9e4422 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindow.m @@ -0,0 +1,13 @@ +// +// SheetWindow.m +// +// +// Created by Joe Semolian on 4/14/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import "SheetWindow.h" + +@implementation SheetWindow + +@end diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindowController.h b/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindowController.h new file mode 100644 index 000000000..32fd666da --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindowController.h @@ -0,0 +1,43 @@ +// +// SheetWindowController.h +// +// +// Created by Joe Semolian on 4/14/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import + +@interface SheetWindowController : NSWindowController +{ + IBOutlet NSButton* _closeButton; + IBOutlet NSButton* _altCloseButton; + IBOutlet NSButton* _otherCloseButton; + IBOutlet NSButton* _orderOutAfterCheckbox; + IBOutlet NSMatrix* _windowTypeMatrix; + + IBOutlet NSButton* _titledMaskButton; + IBOutlet NSButton* _closableMaskButton; + IBOutlet NSButton* _miniaturizableMaskButton; + IBOutlet NSButton* _resizableMaskButton; + + IBOutlet NSButton* _shadeWindowView; + IBOutlet NSButton* _shadeContentView; + IBOutlet NSButton* _shadeParentWindow; + + NSArray* _childControllers; + NSWindow* _parentWindow; +} + +-(IBAction)newWindow:(id)sender; +-(IBAction)newModalWindow:(id)sender; +-(IBAction)newSheet:(id)sender; +-(IBAction)newModalSheet:(id)sender; +-(IBAction)newAlertSheet:(id)sender; +-(IBAction)newColorPanelSheet:(id)sender; +-(IBAction)newOpenPanelSheet:(id)sender; +-(IBAction)newSavePanelSheet:(id)sender; + +- (void)windowWillBeginSheet:(NSNotification *)notification; +- (void)windowDidEndSheet:(NSNotification *)notification; +@end diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindowController.m b/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindowController.m new file mode 100644 index 000000000..b97b8f53b --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/SheetWindowController.m @@ -0,0 +1,343 @@ +// +// SheetWindowController.m +// +// +// Created by Joe Semolian on 4/14/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import "SheetWindowController.h" + +@interface SheetWindowController () + +@end + +@implementation SheetWindowController + +- (id)initWithWindow:(NSWindow *)window +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + self = [super initWithWindow:window]; + if (self) + { + _closeButton = nil; + _childControllers = [NSArray array]; + } + + return self; +} + +- (void)windowDidLoad +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + [super windowDidLoad]; + + if (!_closeButton) + NSLog(@"[%@ %s]: _closeButton is not connected!", [self className], sel_getName(_cmd)); +} + +-(void)positionWindow +{ + NSWindow* keyWindow = [NSApp keyWindow]; + CGPoint origin = ([keyWindow frame]).origin; + origin = CGPointMake(origin.x + 20, origin.y + 20); + [[self window] setFrameOrigin:origin]; +} + +// +// Normal window +// +-(void)newDocument:(id)sender +{ + [self newWindow:sender]; +} + +-(SheetWindowController*)initWithStyleMask:(int)styleMask +{ + + if (styleMask==0) + return [self initWithWindowNibName:@"Window"]; + + NSWindow* window = [ [NSWindow alloc] + initWithContentRect:CGRectMake(0,0,400,300) + styleMask:styleMask + backing:NSBackingStoreBuffered + defer:YES]; + + if (self = [super initWithWindow:window]) + { + _closeButton = [ [NSButton alloc] initWithFrame:CGRectMake(0,0,32,100)]; + [_closeButton setTitle:@"Close"]; + [_closeButton setButtonType:NSMomentaryPushInButton]; + [_closeButton setBezelStyle:NSBezelBorder]; + [_closeButton sizeToFit]; + [[window contentView] addSubview:_closeButton]; + } + + return self; +} + +-(SheetWindowController*)allocController +{ + long type = 1; + if (_windowTypeMatrix) + type = [ [_windowTypeMatrix selectedCell] tag]; + + int styleMask = 0; + if ([_titledMaskButton state]) + styleMask |= NSTitledWindowMask; + + if ([_closableMaskButton state]) + styleMask |= NSClosableWindowMask; + + if ([_miniaturizableMaskButton state]) + styleMask |= NSMiniaturizableWindowMask; + + switch (type) + { + case 2: + styleMask |= NSTexturedBackgroundWindowMask; + break; + case 3: + styleMask = NSBorderlessWindowMask; + break; + case 4: + break; + case 5: + styleMask = NSDocModalWindowMask; + break; + } + + if ([_resizableMaskButton state]) + styleMask |= NSResizableWindowMask; + + if (type == 1) + styleMask = 0; + + return [[SheetWindowController alloc] initWithStyleMask:styleMask]; +} + +-(void)newWindow:(id)sender +{ + SheetWindowController* controller = [self allocController]; + _childControllers = [_childControllers arrayByAddingObject:controller]; + [controller runNormalWindow]; +} + +-(void)runNormalWindow +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + [self positionWindow]; + [[self window] setTitle:@"Normal Window"]; + [_closeButton setTarget:[self window]]; + [_closeButton setAction:@selector(orderOut:)]; + [self showWindow:self]; +} + +-(void)newModalWindow:(id)sender +{ + SheetWindowController* controller = [self allocController]; + _childControllers = [_childControllers arrayByAddingObject:controller]; + [controller runModalWindow]; +} + +-(void)runModalWindow +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + [[self window] setTitle:@"Modal Window"]; + [[self window] setDelegate:self]; + [_closeButton setTarget:self]; + [_closeButton setAction:@selector(endModalWindow:)]; + //[self showWindow:self]; + [NSApp runModalForWindow:[self window]]; +} + +-(void)endModalWindow:(id)sender +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + [[self window] performClose:self]; +} + +-(void)windowWillClose:(NSNotification*)notification +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + if ([NSApp modalWindow]) + [NSApp stopModal]; +} + +-(void)newSheet:(id)sender +{ + SheetWindowController* controller = [self allocController]; + _childControllers = [_childControllers arrayByAddingObject:controller]; + [controller runSheetForWindow:[self window]]; +} + +-(void)runSheetForWindow:(NSWindow*)parentWindow +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + NSWindow* sheet = [self window]; + [parentWindow setDelegate:self]; + _parentWindow = parentWindow; + + [_closeButton setTarget:self]; + [_closeButton setAction:@selector(closeSheet:)]; + [_altCloseButton setAction:@selector(closeSheetAndParent:)]; + [_otherCloseButton setAction:@selector(closeSheetAndRepeat:)]; + + [NSApp beginSheet:sheet + modalForWindow:parentWindow + modalDelegate:self + didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) + contextInfo:(void*)self]; +} + +-(void)closeSheet:(id)sender +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + // NOTE: orderOut is not required for Capp, but is for Cocoa. It does + // not seem to matter when it is called in relation to endSheet: + BOOL orderOutAfter = [_orderOutAfterCheckbox state]; + if (!orderOutAfter) + [[self window] close]; + //[[self window] orderOut:nil]; + + [NSApp endSheet:[self window] returnCode:99]; + + if (orderOutAfter) + //[[self window] orderOut:nil]; + [[self window] close]; +} + +-(void)closeSheetAndParent:(id)sender +{ + // common use case is saving document in response to a close, + // in this case we don't want to show the animation at all + [_parentWindow close]; + + BOOL orderOutAfter = [_orderOutAfterCheckbox state]; + if (!orderOutAfter) + [[self window] orderOut:nil]; + + [NSApp endSheet:[self window] returnCode:99]; + + if (orderOutAfter) + [[self window] orderOut:nil]; +} + +-(void)closeSheetAndRepeat:(id)sender +{ + // common use case is showing a progress bar after a save command, + // the orderout gets rid of the current sheet, + // the return code indicates to open another sheet up + BOOL orderOutAfter = [_orderOutAfterCheckbox state]; + if (!orderOutAfter) + [[self window] orderOut:nil]; + + [NSApp endSheet:[self window] returnCode:77]; + if (orderOutAfter) + [[self window] orderOut:nil]; +} + + +-(void)newModalSheet:(id)sender +{ + SheetWindowController* controller = [self allocController]; + _childControllers = [_childControllers arrayByAddingObject:controller]; + [controller runModalSheetForWindow:[self window]]; +} + + + +-(void)runModalSheetForWindow:(NSWindow*)parentWindow +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + NSWindow* sheet = [self window]; + [parentWindow setDelegate:self]; + _parentWindow = parentWindow; + + [_closeButton setTarget:self]; + [_closeButton setAction:@selector(closeModalSheet:)]; + + [NSApp beginSheet:sheet + modalForWindow:parentWindow + modalDelegate:self + didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) + contextInfo:(void*)self]; + + // what is the difference between these two approaches? + [NSApp runModalForWindow:sheet]; + + //var session = [CPApp beginModalSessionForWindow:sheet]; + //[CPApp runModalSession:session]; +} + +-(void)closeModalSheet:(id)sender +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + [[self window] orderOut:self]; + + [NSApp endSheet:[self window]]; + + // FIXME: there is no endModalSession: per Cocoa + [NSApp stopModalWithCode:999]; +} + +-(void)newAlertSheet:(id)sender +{ + [[self window] setDelegate:self]; + _parentWindow = [self window]; + [self runAlertSheet:_parentWindow]; +} + +-(void)runAlertSheet:(NSWindow*)parentWindow +{ + NSAlert* alert = [NSAlert alertWithMessageText:@"Oops, something went wrong!" + defaultButton:@"DefaultButton" + alternateButton:@"AltButton" + otherButton:@"OtherButton" + informativeTextWithFormat:@"If we knew why it went wrong, we would describe it here."]; + + [alert beginSheetModalForWindow:[self window] + modalDelegate:self + didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) + contextInfo:nil]; +} + + +- (void)didEndSheet:(NSWindow*)sheet returnCode:(NSInteger)returnCode contextInfo:(void*)contextInfo +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + //NSAssert(sheet == [self window], @"sheet object is incorrect"); + + // repeat with another sheet + if (returnCode == 77) + //[self runSheetForWindow:_parentWindow]; + [self runAlertSheet:_parentWindow]; +} + +- (void)windowWillBeginSheet:(NSNotification *)notification +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + NSAssert([notification object]==_parentWindow, @"notification object is not parent window"); +} + +- (void)windowDidEndSheet:(NSNotification *)notification +{ + NSLog(@"[%@ %s]", [self className], sel_getName(_cmd)); + + NSAssert([notification object]==_parentWindow, @"notification object is not parent window"); +} + +@end diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/TestSheet-Info.plist b/Tests/Manual/AttachedSheet2/xcode/TestSheet/TestSheet-Info.plist new file mode 100644 index 000000000..f9231b08a --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/TestSheet-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + org.github.walisser.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 __MyCompanyName__. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/TestSheet-Prefix.pch b/Tests/Manual/AttachedSheet2/xcode/TestSheet/TestSheet-Prefix.pch new file mode 100644 index 000000000..be4e5327e --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/TestSheet-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'TestSheet' target in the 'TestSheet' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/en.lproj/Credits.rtf b/Tests/Manual/AttachedSheet2/xcode/TestSheet/en.lproj/Credits.rtf new file mode 100644 index 000000000..46576ef21 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/en.lproj/InfoPlist.strings b/Tests/Manual/AttachedSheet2/xcode/TestSheet/en.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Tests/Manual/AttachedSheet2/xcode/TestSheet/main.m b/Tests/Manual/AttachedSheet2/xcode/TestSheet/main.m new file mode 100644 index 000000000..1e799258c --- /dev/null +++ b/Tests/Manual/AttachedSheet2/xcode/TestSheet/main.m @@ -0,0 +1,14 @@ +// +// main.m +// TestSheet +// +// Created by Joe Semolian on 4/15/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/Tests/Manual/Bindings/Resources/spinner.gif b/Tests/Manual/Bindings/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/Bindings/Resources/spinner.gif and b/Tests/Manual/Bindings/Resources/spinner.gif differ diff --git a/Tests/Manual/CPAlertTest/Resources/spinner.gif b/Tests/Manual/CPAlertTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPAlertTest/Resources/spinner.gif and b/Tests/Manual/CPAlertTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPBinder-echo-bug/Resources/spinner.gif b/Tests/Manual/CPBinder-echo-bug/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPBinder-echo-bug/Resources/spinner.gif and b/Tests/Manual/CPBinder-echo-bug/Resources/spinner.gif differ diff --git a/Tests/Manual/CPBoxTest/Resources/spinner.gif b/Tests/Manual/CPBoxTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPBoxTest/Resources/spinner.gif and b/Tests/Manual/CPBoxTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPBrowserTest/Resources/browser-leaf-highlighted.png b/Tests/Manual/CPBrowserTest/Resources/browser-leaf-highlighted.png index c786c820b..5b9e80e37 100644 Binary files a/Tests/Manual/CPBrowserTest/Resources/browser-leaf-highlighted.png and b/Tests/Manual/CPBrowserTest/Resources/browser-leaf-highlighted.png differ diff --git a/Tests/Manual/CPBrowserTest/Resources/browser-leaf.png b/Tests/Manual/CPBrowserTest/Resources/browser-leaf.png index 196afdcb6..d6a5e1d41 100644 Binary files a/Tests/Manual/CPBrowserTest/Resources/browser-leaf.png and b/Tests/Manual/CPBrowserTest/Resources/browser-leaf.png differ diff --git a/Tests/Manual/CPBrowserTest/Resources/browser-resize-control.png b/Tests/Manual/CPBrowserTest/Resources/browser-resize-control.png index c335460de..9b9e50587 100644 Binary files a/Tests/Manual/CPBrowserTest/Resources/browser-resize-control.png and b/Tests/Manual/CPBrowserTest/Resources/browser-resize-control.png differ diff --git a/Tests/Manual/CPBrowserTest/Resources/spinner.gif b/Tests/Manual/CPBrowserTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPBrowserTest/Resources/spinner.gif and b/Tests/Manual/CPBrowserTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPButtonKeyEquivalentDefaultTest/Resources/spinner.gif b/Tests/Manual/CPButtonKeyEquivalentDefaultTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPButtonKeyEquivalentDefaultTest/Resources/spinner.gif and b/Tests/Manual/CPButtonKeyEquivalentDefaultTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPButtonTest/Resources/spinner.gif b/Tests/Manual/CPButtonTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPButtonTest/Resources/spinner.gif and b/Tests/Manual/CPButtonTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPColor-CPImage-description/Resources/add1-32.png b/Tests/Manual/CPColor-CPImage-description/Resources/add1-32.png index b6a1a6c67..c8c07912f 100755 Binary files a/Tests/Manual/CPColor-CPImage-description/Resources/add1-32.png and b/Tests/Manual/CPColor-CPImage-description/Resources/add1-32.png differ diff --git a/Tests/Manual/CPColor-CPImage-description/Resources/spinner.gif b/Tests/Manual/CPColor-CPImage-description/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPColor-CPImage-description/Resources/spinner.gif and b/Tests/Manual/CPColor-CPImage-description/Resources/spinner.gif differ diff --git a/Tests/Manual/CPColorWellBindings/Resources/spinner.gif b/Tests/Manual/CPColorWellBindings/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPColorWellBindings/Resources/spinner.gif and b/Tests/Manual/CPColorWellBindings/Resources/spinner.gif differ diff --git a/Tests/Manual/CPComboBoxTest/Resources/spinner.gif b/Tests/Manual/CPComboBoxTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPComboBoxTest/Resources/spinner.gif and b/Tests/Manual/CPComboBoxTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPControlPerformClickExceptionTest/Resources/spinner.gif b/Tests/Manual/CPControlPerformClickExceptionTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPControlPerformClickExceptionTest/Resources/spinner.gif and b/Tests/Manual/CPControlPerformClickExceptionTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPCursor/Resources/spinner.gif b/Tests/Manual/CPCursor/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPCursor/Resources/spinner.gif and b/Tests/Manual/CPCursor/Resources/spinner.gif differ diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Resources/spinner.gif b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPDocumentControllerTest/withNib/Resources/spinner.gif and b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/spinner.gif differ diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/spinner.gif b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/spinner.gif and b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/spinner.gif differ diff --git a/Tests/Manual/CPFormatterTest/Resources/spinner.gif b/Tests/Manual/CPFormatterTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPFormatterTest/Resources/spinner.gif and b/Tests/Manual/CPFormatterTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/grad0.png b/Tests/Manual/CPGraphicsTest/Resources/grad0.png index 1127a7b99..be4980e57 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/grad0.png and b/Tests/Manual/CPGraphicsTest/Resources/grad0.png differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/grad1.png b/Tests/Manual/CPGraphicsTest/Resources/grad1.png index 41a9fab6b..cddc4d30e 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/grad1.png and b/Tests/Manual/CPGraphicsTest/Resources/grad1.png differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/grad2.png b/Tests/Manual/CPGraphicsTest/Resources/grad2.png index b8f140ab5..78a0a9eff 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/grad2.png and b/Tests/Manual/CPGraphicsTest/Resources/grad2.png differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/grad3.png b/Tests/Manual/CPGraphicsTest/Resources/grad3.png index f1c5ad690..4992261c7 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/grad3.png and b/Tests/Manual/CPGraphicsTest/Resources/grad3.png differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/spinner.gif b/Tests/Manual/CPGraphicsTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/spinner.gif and b/Tests/Manual/CPGraphicsTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/view1.png b/Tests/Manual/CPGraphicsTest/Resources/view1.png index 6539a91a8..3f141bbbe 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/view1.png and b/Tests/Manual/CPGraphicsTest/Resources/view1.png differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/view2.png b/Tests/Manual/CPGraphicsTest/Resources/view2.png index e8032bbd3..f889427fe 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/view2.png and b/Tests/Manual/CPGraphicsTest/Resources/view2.png differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/view3.png b/Tests/Manual/CPGraphicsTest/Resources/view3.png index f192d596f..2253aa8cd 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/view3.png and b/Tests/Manual/CPGraphicsTest/Resources/view3.png differ diff --git a/Tests/Manual/CPGraphicsTest/Resources/view4.png b/Tests/Manual/CPGraphicsTest/Resources/view4.png index bb20a6ac6..116f0f531 100644 Binary files a/Tests/Manual/CPGraphicsTest/Resources/view4.png and b/Tests/Manual/CPGraphicsTest/Resources/view4.png differ diff --git a/Tests/Manual/CPImageViewAlignmentScaling/Resources/box.png b/Tests/Manual/CPImageViewAlignmentScaling/Resources/box.png index d6d1141be..163e8b0fe 100644 Binary files a/Tests/Manual/CPImageViewAlignmentScaling/Resources/box.png and b/Tests/Manual/CPImageViewAlignmentScaling/Resources/box.png differ diff --git a/Tests/Manual/CPImageViewAlignmentScaling/Resources/spinner.gif b/Tests/Manual/CPImageViewAlignmentScaling/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPImageViewAlignmentScaling/Resources/spinner.gif and b/Tests/Manual/CPImageViewAlignmentScaling/Resources/spinner.gif differ diff --git a/Tests/Manual/CPImageViewTest/Resources/280px-1730_Homann_Map_of_Scandinavia,_Norway,_Sweden,_Denmark,_Finland_and_the_Baltics_-_Geographicus_-_Scandinavia-homann-1730.jpg b/Tests/Manual/CPImageViewTest/Resources/280px-1730_Homann_Map_of_Scandinavia,_Norway,_Sweden,_Denmark,_Finland_and_the_Baltics_-_Geographicus_-_Scandinavia-homann-1730.jpg index 1a7cc6a4b..1de63f87a 100644 Binary files a/Tests/Manual/CPImageViewTest/Resources/280px-1730_Homann_Map_of_Scandinavia,_Norway,_Sweden,_Denmark,_Finland_and_the_Baltics_-_Geographicus_-_Scandinavia-homann-1730.jpg and b/Tests/Manual/CPImageViewTest/Resources/280px-1730_Homann_Map_of_Scandinavia,_Norway,_Sweden,_Denmark,_Finland_and_the_Baltics_-_Geographicus_-_Scandinavia-homann-1730.jpg differ diff --git a/Tests/Manual/CPImageViewTest/Resources/spinner.gif b/Tests/Manual/CPImageViewTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPImageViewTest/Resources/spinner.gif and b/Tests/Manual/CPImageViewTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPImageViewbindingsTest/Resources/spinner.gif b/Tests/Manual/CPImageViewbindingsTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPImageViewbindingsTest/Resources/spinner.gif and b/Tests/Manual/CPImageViewbindingsTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPImageViewbindingsTest/Resources/value.jpg b/Tests/Manual/CPImageViewbindingsTest/Resources/value.jpg index b4fc056fc..6791060ca 100644 Binary files a/Tests/Manual/CPImageViewbindingsTest/Resources/value.jpg and b/Tests/Manual/CPImageViewbindingsTest/Resources/value.jpg differ diff --git a/Tests/Manual/CPImageViewbindingsTest/Resources/valueURL.jpg b/Tests/Manual/CPImageViewbindingsTest/Resources/valueURL.jpg index d766dd08f..84dee2cab 100644 Binary files a/Tests/Manual/CPImageViewbindingsTest/Resources/valueURL.jpg and b/Tests/Manual/CPImageViewbindingsTest/Resources/valueURL.jpg differ diff --git a/Tests/Manual/CPLevelIndicator/Resources/spinner.gif b/Tests/Manual/CPLevelIndicator/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPLevelIndicator/Resources/spinner.gif and b/Tests/Manual/CPLevelIndicator/Resources/spinner.gif differ diff --git a/Tests/Manual/CPLogTest/Resources/spinner.gif b/Tests/Manual/CPLogTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPLogTest/Resources/spinner.gif and b/Tests/Manual/CPLogTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPMenuKeyEquivalents/Resources/spinner.gif b/Tests/Manual/CPMenuKeyEquivalents/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPMenuKeyEquivalents/Resources/spinner.gif and b/Tests/Manual/CPMenuKeyEquivalents/Resources/spinner.gif differ diff --git a/Tests/Manual/CPMenuRemoveAllTest/Resources/spinner.gif b/Tests/Manual/CPMenuRemoveAllTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPMenuRemoveAllTest/Resources/spinner.gif and b/Tests/Manual/CPMenuRemoveAllTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPMenuTest/Resources/spinner.gif b/Tests/Manual/CPMenuTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPMenuTest/Resources/spinner.gif and b/Tests/Manual/CPMenuTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPOutlineViewCibTest/Resources/spinner.gif b/Tests/Manual/CPOutlineViewCibTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPOutlineViewCibTest/Resources/spinner.gif and b/Tests/Manual/CPOutlineViewCibTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPOutlineViewTest/Resources/spinner.gif b/Tests/Manual/CPOutlineViewTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPOutlineViewTest/Resources/spinner.gif and b/Tests/Manual/CPOutlineViewTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPPopUpButtonBindings/AppController.j b/Tests/Manual/CPPopUpButtonBindings/AppController.j new file mode 100644 index 000000000..f90914de8 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/AppController.j @@ -0,0 +1,56 @@ +/* + * AppController.j + * CPPopUpButtonBindings + * + * Created by You on December 2, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import + +@implementation AppController : CPObject +{ + @outlet CPWindow mainWindow; + @outlet CPPopUpButton tagPopUp; + + CPArray people @accessors; +} + ++ (void)initialize +{ + [CPValueTransformer setValueTransformer:[Transformer new] forName:@"Transformer"]; +} + +- (void)awakeFromCib +{ + var array = []; + [array addObject:[CPDictionary dictionaryWithObjectsAndKeys:@"John",@"name",@"Butcher",@"job",@"john@meat.com",@"email", 2, @"tag", @"Resources/Jakabos1.jpg", @"image"]]; + [array addObject:[CPDictionary dictionaryWithObjectsAndKeys:@"Alberto",@"name",@"Seller",@"job",@"alberto@gmail.com",@"email", 0, @"tag", @"Resources/Jakabos2.jpg", @"image"]]; + [array addObject:[CPDictionary dictionaryWithObjectsAndKeys:@"Barack",@"name",@"President",@"job",@"barack@whitehouse.gov",@"email", 1, @"tag", @"Resources/Jakabos4.jpg", @"image"]]; + + [self setPeople:array]; + +// Setup tags for the second popup + var items = [tagPopUp itemArray]; + [items enumerateObjectsUsingBlock:function(item, idx) + { + [item setTag:idx]; + [item setTitle:([item title] + " Tag:" + idx)]; + }]; + + [mainWindow setFullBridge:YES]; + +} + +@end + +@implementation Transformer : CPValueTransformer +{ +} + +- (id)transformedValue:(CPString)aValue +{ + return "transformed " + aValue; +} + +@end \ No newline at end of file diff --git a/Tests/Manual/CPPopUpButtonBindings/CPPopUpButton.j b/Tests/Manual/CPPopUpButtonBindings/CPPopUpButton.j new file mode 120000 index 000000000..1c4925ca5 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/CPPopUpButton.j @@ -0,0 +1 @@ +../../../AppKit/CPPopUpButton.j \ No newline at end of file diff --git a/Tests/Manual/CPPopUpButtonBindings/Info.plist b/Tests/Manual/CPPopUpButtonBindings/Info.plist new file mode 100644 index 000000000..1e7a1ead9 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/Info.plist @@ -0,0 +1,12 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPPopUpButtonBindings + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/CPPopUpButtonBindings/Jakefile b/Tests/Manual/CPPopUpButtonBindings/Jakefile new file mode 100644 index 000000000..94c73db0d --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CPPopUpButtonBindings + * + * Created by You on November 2, 2010. + * Copyright 2010, 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"); + +app ("CPPopUpButtonBindings", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPPopUpButtonBindings.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPPopUpButtonBindings"); + task.setIdentifier("com.yourcompany.CPPopUpButtonBindings"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPPopUpButtonBindings"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["CPPopUpButtonBindings"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CPPopUpButtonBindings", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPPopUpButtonBindings", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPPopUpButtonBindings")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPPopUpButtonBindings"), FILE.join("Build", "Deployment", "CPPopUpButtonBindings")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPPopUpButtonBindings")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPPopUpButtonBindings"), FILE.join("Build", "Desktop", "CPPopUpButtonBindings", "CPPopUpButtonBindings.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPPopUpButtonBindings", "CPPopUpButtonBindings.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPPopUpButtonBindings")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.cib b/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.cib new file mode 100644 index 000000000..1ccc6430f --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.cib @@ -0,0 +1,7 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;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;43E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;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;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;68E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;83E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;84E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;76E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;50E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;92E;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;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;94E;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;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;96E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;97E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;100E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;101E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;102E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;104E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;105E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;106E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;108E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;110E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;112E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;113E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;114E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;115E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;116E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;101E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;117E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;118E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;96E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;97E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;119E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;100E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;101E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;102E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;122E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;123E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;76E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;125E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;126E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;127E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;50E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;129E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;130E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;132E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;133E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;51E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;135E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;106E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;137E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;117E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;139E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;140E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;102E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;83E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;144E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;145E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;146E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;147E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;148E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;47E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;150E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;151E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;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;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;153E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;155E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;157E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;162E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;166E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;160E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;168E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;155E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;157E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;162E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;166E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;160E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;170E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;155E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;157E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;162E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;166E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;160E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;171E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;52E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;172E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;173E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;174E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;175E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;178E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;179E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;55E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;56E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;180E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;180E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;180E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;180E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;162E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;162E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;162E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;181E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;149E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;149E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;185E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;187E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;149E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;53E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;188E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;149E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;189E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;190E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;185E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;192E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;149E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;53E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;193E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;149E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;194E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;178E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;195E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;195E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;178E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;166E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;196E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;12;$agrid-colorD;K;6;CP$UIDd;3;197E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;198E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;199E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;149E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;161E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;162E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;162E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;162E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;162E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;162E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;200E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;197E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;149E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;201E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;203E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;65E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;204E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;205E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;206E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;207E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;209E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;210E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;211E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;201E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;162E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;214E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;215E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;206E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;207E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;216E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;217E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;211E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;201E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;162E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;218E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;219E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;180E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;207E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;220E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;221E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;211E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;201E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;162E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;222E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;180E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;223E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;224E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;225E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;211E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;201E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;162E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;179E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;226E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;226E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;179E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;227E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;58E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;228E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;231E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;201E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;149E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;82E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;232E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;233E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;235E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;237E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;155E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;160E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;239E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;242E;K;16;$aimage-positionD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;160E;K;7;$aimageD;K;6;CP$UIDd;3;245E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;243E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;246E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;247E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;248E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;239E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;242E;K;16;$aimage-positionD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;160E;K;7;$aimageD;K;6;CP$UIDd;3;249E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;243E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;246E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;247E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;81E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;250E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;233E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;235E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;237E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;155E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;160E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;80E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;251E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;233E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;235E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;237E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;155E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;160E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;252E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;253E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;201E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;149E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;254E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;255E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;201E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;149E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;256E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;257E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;162E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;201E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;162E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;201E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;162E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;162E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;162E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;201E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;201E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;258E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;258E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;258E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;261E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;45E;E;E;S;8;delegateS;10;emailLabelS;8;jobLabelS;10;mainWindowS;9;nameLabelS;21;ordersArrayControllerS;15;ordersTableViewS;8;tagPopUpS;4;add:S;7;remove:S;24;content: arrangedObjectsS;7;contentS;15;arrangedObjectsD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;24;CPInsertsNullPlaceholderD;K;6;CP$UIDd;3;162E;E;E;S;35;contentValues: arrangedObjects.nameS;13;contentValuesS;20;arrangedObjects.nameD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;24;CPInsertsNullPlaceholderD;K;6;CP$UIDd;3;162E;E;E;S;29;selectedValue: selection.nameS;13;selectedValueS;14;selection.nameD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;26;value: arrangedObjects.tagS;5;valueS;19;arrangedObjects.tagD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;26;selectedTag: selection.tagS;11;selectedTagS;13;selection.tagD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;3;162E;E;E;S;34;contentValues: arrangedObjects.jobS;19;arrangedObjects.jobD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;22;CPValueTransformerNameD;K;6;CP$UIDd;3;262E;E;E;S;29;selectedIndex: selectionIndexS;13;selectedIndexS;14;selectionIndexD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;20;contentArray: peopleS;12;contentArrayS;6;peopleD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;3;162E;E;E;S;20;value: selection.jobS;13;selection.jobD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;22;value: selection.emailS;15;selection.emailD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;21;value: selection.nameD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;26;value: arrangedObjects.jobD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;28;value: arrangedObjects.emailS;21;arrangedObjects.emailD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;27;value: arrangedObjects.nameD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowS;25;{{335, 278}, {1074, 373}}d;1;7S;6;Windowd;1;0S;21;{{0, 0}, {1074, 373}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;E;E;S;6;normalS;22;{{14, 295}, {448, 29}}S;19;{{0, 0}, {448, 29}}d;2;12S;9;textfieldS;19;bezeled+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;158E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;263E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;155E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;201E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;201E;E;d;1;2d;1;4T;S;0;d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;264E;E;S;5;EmailS;22;{{14, 327}, {448, 29}}S;3;JobS;22;{{14, 263}, {448, 29}}S;4;NameS;22;{{-1, -1}, {461, 206}}S;20;{{0, 0}, {461, 206}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;181E;E;E;d;2;20S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;177E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;195E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;195E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;265E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;266E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;3;177E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;267E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;268E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;269E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;266E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;65E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;2;46E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;S;23;{{467, -39}, {15, 228}}S;19;{{0, 0}, {15, 228}}d;1;8d;11;-2147483648S;8;scrollerS;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9382716049382716S;21;{{0, -54}, {482, 15}}S;19;{{0, 0}, {482, 15}}S;8;disabledS;29;_horizontalScrollerDidScroll:f;18;0.9938144329896907S;20;{{0, 0}, {461, 189}}S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;165E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;271E;E;d;2;23S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;E;E;F;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;202E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;272E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;273E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;274E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;S;4;named;3;101d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;208E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;275E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;149E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;171E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;279E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;15;$acontent-insetD;K;6;CP$UIDd;3;281E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;161E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;149E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;163E;E;d;1;3D;K;10;$classnameS;16;CPSortDescriptorK;8;$classesA;S;16;CPSortDescriptorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;212E;K;22;CPSortDescriptorKeyKeyD;K;6;CP$UIDd;3;204E;K;28;CPSortDescriptorAscendingKeyD;K;6;CP$UIDd;3;162E;K;27;CPSortDescriptorSelectorKeyD;K;6;CP$UIDd;3;282E;E;S;5;emaild;3;150D;K;6;$classD;K;6;CP$UIDd;3;208E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;283E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;149E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;167E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;284E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;15;$acontent-insetD;K;6;CP$UIDd;3;285E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;161E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;149E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;163E;E;S;3;jobd;3;106D;K;6;$classD;K;6;CP$UIDd;3;208E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;286E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;149E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;169E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;287E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;15;$acontent-insetD;K;6;CP$UIDd;3;288E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;161E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;149E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;163E;E;d;2;92f;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;3;208E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;149E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;290E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;291E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;15;$acontent-insetD;K;6;CP$UIDd;3;292E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;161E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;149E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;163E;E;S;19;{{0, 0}, {461, 23}}S;14;tableHeaderRowS;22;{{551, 23}, {285, 51}}S;19;{{0, 0}, {285, 51}}d;2;33S;110;Binding: CPSelectedIndexBinding +KeyPath: arrangedObjects.selectionIndex +ContentValues Transformer: TransformerS;22;{{852, 32}, {191, 24}}S;19;{{0, 0}, {191, 24}}S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;3;158E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;263E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;155E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;162E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;201E;E;d;2;-1S;22;{{423, 204}, {35, 24}}S;18;{{0, 0}, {35, 24}}d;2;36S;6;buttonS;17;selected+borderedd;1;1D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;244E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;293E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;294E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;295E;E;S;15;Gradient Buttond;2;14S;22;{{389, 204}, {35, 24}}D;K;6;$classD;K;6;CP$UIDd;3;244E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;293E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;296E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;297E;E;S;23;{{852, 107}, {191, 24}}S;23;{{852, 184}, {191, 24}}S;22;{{551, 93}, {285, 51}}S;70;Binding: CPSelectedTagBinding +KeyPath: selection.tag +Transformer: NoneS;23;{{551, 161}, {285, 51}}S;73;Binding: CPSelectedValueBinding +KeyPath: selection.name +Transformer: NoneS;13;AppControllerS;12;CPDictionaryS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;TransformerS;17;Arial, sans-serifD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;298E;E;S;21;{{0, 189}, {461, 17}}S;19;{{0, 0}, {461, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;243E;E;E;S;22;{{467, 183}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;301E;E;E;S;12;columnHeaderS;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;4;nameD;K;6;CP$UIDd;3;302E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;303E;E;D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;304E;E;S;8;compare:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;305E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;4;nameD;K;6;CP$UIDd;3;302E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;307E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;4;nameD;K;6;CP$UIDd;3;302E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;309E;E;E;S;3;TagD;K;6;$classD;K;6;CP$UIDd;3;278E;K;4;nameD;K;6;CP$UIDd;3;302E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;304E;E;S;7;CPImageS;13;CPAddTemplateD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;311E;E;E;S;16;CPRemoveTemplateD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;312E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;E;E;f;3;0.5D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;300E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;209E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;209E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;S;4;fontD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;300E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;216E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;216E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;300E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;220E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;220E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;300E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;224E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;224E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;314E;E;d;2;18S;22;{"width":0,"height":0}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.xib b/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.xib new file mode 100644 index 000000000..24b533bab --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.xib @@ -0,0 +1,1434 @@ + + + + 1070 + 11E53 + 2541 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2541 + + + NSArrayController + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller + NSTableColumn + NSTableHeaderView + NSTableView + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{335, 377}, {1074, 373}} + 1946157056 + Window + NSWindow + + + + + 256 + + + + 276 + + + + 2304 + + + + 256 + {461, 189} + + + + YES + + + 256 + {461, 17} + + + + + + + + -2147483392 + {{467, 0}, {16, 17}} + + + + + + + name + 101 + 40 + 1000 + + 75628096 + 2048 + Name + + LucidaGrande + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 337772096 + 2048 + Text Cell + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + YES + + + name + YES + compare: + + + + email + 150 + 40 + 1000 + + 75628096 + 2048 + Email + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + job + 106 + 10 + 1000 + + 75628096 + 2048 + Job + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 92 + 10 + 3.4028234663852886e+38 + + 75628096 + 2048 + Tag + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + -566231040 + + + 4 + 15 + 0 + YES + 0 + 1 + + + {{0, 17}, {461, 189}} + + + + + + 4 + + + + -2147483392 + {{467, 17}, {15, 228}} + + + + + _doScroller: + 0.93827160493827155 + + + + -2147483392 + {{0, 245}, {482, 15}} + + + + 1 + + _doScroller: + 0.99381443298969074 + + + + 2304 + + + + {461, 17} + + + + + + 4 + + + + {{-1, 168}, {461, 206}} + + + + 133680 + + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 292 + {{20, 84}, {440, 22}} + + + + YES + + -1804468671 + 272630784 + + + Name + + YES + + 6 + System + textBackgroundColor + + + + 6 + System + textColor + + + + + + + 292 + {{20, 52}, {440, 22}} + + + + YES + + -1804468671 + 272630784 + + + Email + + YES + + + + + + + 292 + {{20, 20}, {440, 22}} + + + + YES + + -1804468671 + 272630784 + + + Job + + YES + + + + + + + 265 + {{851, 315}, {197, 26}} + + + + YES + + -2076049856 + 2048 + + + 109199615 + 129 + + + 400 + 75 + + YES + + OtherViews + + + + -1 + 1 + YES + YES + 2 + + + + + 265 + {{851, 240}, {197, 26}} + + + + _NS:9 + YES + + -2076049856 + 2048 + + _NS:9 + + 109199360 + 129 + + + 400 + 75 + + YES + + OtherViews + + + + -1 + 1 + YES + YES + 2 + + + + + 265 + {{851, 163}, {197, 26}} + + + + _NS:9 + YES + + -2076049856 + 2048 + + _NS:9 + + 109199360 + 129 + + + 400 + 75 + + YES + + OtherViews + + + + -1 + 1 + YES + YES + 2 + + + + + 265 + {{551, 299}, {285, 51}} + + + + _NS:1549 + YES + + 67108864 + 272629760 + QmluZGluZzogQ1BTZWxlY3RlZEluZGV4QmluZGluZwpLZXlQYXRoOiBhcnJhbmdlZE9iamVjdHMuc2Vs +ZWN0aW9uSW5kZXgKQ29udGVudFZhbHVlcyBUcmFuc2Zvcm1lcjogVHJhbnNmb3JtZXI + + _NS:1549 + + + 6 + System + controlColor + + + + + + + + 268 + {{425, 145}, {35, 23}} + + + + _NS:22 + YES + + -2080374784 + 134217728 + Gradient Button + + _NS:22 + + -2033958912 + 162 + + NSImage + NSAddTemplate + + + + 400 + 75 + + + + + 268 + {{391, 145}, {35, 23}} + + + + _NS:22 + YES + + -2080374784 + 134217728 + Gradient Button + + _NS:22 + + -2033958912 + 162 + + NSImage + NSRemoveTemplate + + + + 400 + 75 + + + + + 265 + {{551, 229}, {285, 51}} + + + + _NS:1549 + YES + + 67108864 + 272629760 + QmluZGluZzogQ1BTZWxlY3RlZFRhZ0JpbmRpbmcKS2V5UGF0aDogc2VsZWN0aW9uLnRhZwpUcmFuc2Zv +cm1lcjogTm9uZQ + + _NS:1549 + + + + + + + + 265 + {{551, 161}, {285, 51}} + + + + _NS:1549 + YES + + 67108864 + 272629760 + QmluZGluZzogQ1BTZWxlY3RlZFZhbHVlQmluZGluZwpLZXlQYXRoOiBzZWxlY3Rpb24ubmFtZQpUcmFu +c2Zvcm1lcjogTm9uZQ + + _NS:1549 + + + + + + + {1074, 373} + + + + + {{0, 0}, {1680, 1028}} + {10000000000000, 10000000000000} + YES + + + AppController + + + + name + email + job + tag + + CPDictionary + YES + + YES + YES + YES + YES + + + + + + + delegate + + + + 451 + + + + mainWindow + + + + 464 + + + + ordersTableView + + + + 476 + + + + nameLabel + + + + 488 + + + + emailLabel + + + + 489 + + + + jobLabel + + + + 490 + + + + ordersArrayController + + + + 493 + + + + tagPopUp + + + + 599 + + + + value: arrangedObjects.name + + + + + + value: arrangedObjects.name + value + arrangedObjects.name + 2 + + + 575 + + + + value: arrangedObjects.email + + + + + + value: arrangedObjects.email + value + arrangedObjects.email + 2 + + + 576 + + + + value: arrangedObjects.job + + + + + + value: arrangedObjects.job + value + arrangedObjects.job + 2 + + + 577 + + + + value: selection.name + + + + + + value: selection.name + value + selection.name + 2 + + + 581 + + + + value: selection.email + + + + + + value: selection.email + value + selection.email + 2 + + + 582 + + + + value: selection.job + + + + + + value: selection.job + value + selection.job + 2 + + + 583 + + + + contentArray: people + + + + + + contentArray: people + contentArray + people + + NSValidatesImmediately + + + 2 + + + 578 + + + + add: + + + + 624 + + + + remove: + + + + 625 + + + + content: arrangedObjects + + + + + + content: arrangedObjects + content + arrangedObjects + 2 + + + 534 + + + + contentValues: arrangedObjects.name + + + + + + contentValues: arrangedObjects.name + contentValues + arrangedObjects.name + + NSValueTransformerName + Transformer + + + 2 + + + 618 + + + + selectedIndex: selectionIndex + + + + + + selectedIndex: selectionIndex + selectedIndex + selectionIndex + + 2 + + + 619 + + + + contentValues: arrangedObjects.job + + + + + + contentValues: arrangedObjects.job + contentValues + arrangedObjects.job + 2 + + + 630 + + + + selectedTag: selection.tag + + + + + + selectedTag: selection.tag + selectedTag + selection.tag + + NSValidatesImmediately + + + 2 + + + 631 + + + + value: arrangedObjects.tag + + + + + + value: arrangedObjects.tag + value + arrangedObjects.tag + 2 + + + 598 + + + + content: arrangedObjects + + + + + + content: arrangedObjects + content + arrangedObjects + + NSInsertsNullPlaceholder + + + 2 + + + 632 + + + + contentValues: arrangedObjects.name + + + + + + contentValues: arrangedObjects.name + contentValues + arrangedObjects.name + + NSInsertsNullPlaceholder + + + + 2 + + + 633 + + + + selectedValue: selection.name + + + + + + selectedValue: selection.name + selectedValue + selection.name + + 2 + + + 634 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 371 + + + + + + + + 372 + + + + + + + + + + + + + + + + + + + 450 + + + + + 467 + + + + + + + + + + + 468 + + + + + 469 + + + + + 470 + + + + + + + + + + + 471 + + + + + 472 + + + + + + + + 473 + + + + + + + + 474 + + + + + 475 + + + + + 480 + + + + + + + + 481 + + + + + 482 + + + + + + + + 483 + + + + + 484 + + + + + + + + 485 + + + + + 486 + + + + + + + + 487 + + + + + 492 + + + + + 528 + + + + + + + + 529 + + + + + + + + 530 + + + + + + 584 + + + + + + + + 585 + + + + + + + + 586 + + + + + + 595 + + + + + + + + 596 + + + + + 600 + + + + + + + + 601 + + + + + + + + 602 + + + + + + 611 + + + + + + + + 612 + + + + + 620 + + + + + + + + 621 + + + + + 622 + + + + + + + + 623 + + + + + 626 + + + + + + + + 627 + + + + + 628 + + + + + + + + 629 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{246, 335}, {728, 373}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 634 + + + + + AppController + NSObject + + NSWindow + NSPopUpButton + + + + mainWindow + NSWindow + + + tagPopUp + NSPopUpButton + + + + IBProjectSource + ./Classes/AppController.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {8, 8} + {8, 8} + + + diff --git a/Tests/Manual/CPPopUpButtonBindings/Resources/spinner.gif b/Tests/Manual/CPPopUpButtonBindings/Resources/spinner.gif new file mode 100644 index 000000000..77b36416b Binary files /dev/null and b/Tests/Manual/CPPopUpButtonBindings/Resources/spinner.gif differ diff --git a/Tests/Manual/CPPopUpButtonBindings/index-debug.html b/Tests/Manual/CPPopUpButtonBindings/index-debug.html new file mode 100644 index 000000000..1d257d406 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/index-debug.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + CPPopUpButtonBindings + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPPopUpButtonBindings/index.html b/Tests/Manual/CPPopUpButtonBindings/index.html new file mode 100644 index 000000000..2114299d9 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/index.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + CPPopUpButtonBindings + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPPopUpButtonBindings/main.j b/Tests/Manual/CPPopUpButtonBindings/main.j new file mode 100644 index 000000000..28679968f --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPPopUpButtonBindings + * + * Created by You on November 2, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/CPPopUpButtonTest/Resources/spinner.gif b/Tests/Manual/CPPopUpButtonTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPPopUpButtonTest/Resources/spinner.gif and b/Tests/Manual/CPPopUpButtonTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPPopover/Resources/spinner.gif b/Tests/Manual/CPPopover/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPPopover/Resources/spinner.gif and b/Tests/Manual/CPPopover/Resources/spinner.gif differ diff --git a/Tests/Manual/CPPredicateEditorCibTest/Resources/spinner.gif b/Tests/Manual/CPPredicateEditorCibTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPPredicateEditorCibTest/Resources/spinner.gif and b/Tests/Manual/CPPredicateEditorCibTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPProgressIndicator/Resources/spinner.gif b/Tests/Manual/CPProgressIndicator/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPProgressIndicator/Resources/spinner.gif and b/Tests/Manual/CPProgressIndicator/Resources/spinner.gif differ diff --git a/Tests/Manual/CPPropertyListSerializationTest/Resources/spinner.gif b/Tests/Manual/CPPropertyListSerializationTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPPropertyListSerializationTest/Resources/spinner.gif and b/Tests/Manual/CPPropertyListSerializationTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPRuleEditorCibTest/Resources/spinner.gif b/Tests/Manual/CPRuleEditorCibTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPRuleEditorCibTest/Resources/spinner.gif and b/Tests/Manual/CPRuleEditorCibTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPScrollView/Resources/photo.jpg b/Tests/Manual/CPScrollView/Resources/photo.jpg index a57b108fa..26652ba36 100644 Binary files a/Tests/Manual/CPScrollView/Resources/photo.jpg and b/Tests/Manual/CPScrollView/Resources/photo.jpg differ diff --git a/Tests/Manual/CPScrollView/Resources/spinner.gif b/Tests/Manual/CPScrollView/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPScrollView/Resources/spinner.gif and b/Tests/Manual/CPScrollView/Resources/spinner.gif differ diff --git a/Tests/Manual/CPScrollView2/Resources/photo.jpg b/Tests/Manual/CPScrollView2/Resources/photo.jpg index a57b108fa..26652ba36 100644 Binary files a/Tests/Manual/CPScrollView2/Resources/photo.jpg and b/Tests/Manual/CPScrollView2/Resources/photo.jpg differ diff --git a/Tests/Manual/CPScrollView2/Resources/spinner.gif b/Tests/Manual/CPScrollView2/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPScrollView2/Resources/spinner.gif and b/Tests/Manual/CPScrollView2/Resources/spinner.gif differ diff --git a/Tests/Manual/CPSearchField/Resources/spinner.gif b/Tests/Manual/CPSearchField/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPSearchField/Resources/spinner.gif and b/Tests/Manual/CPSearchField/Resources/spinner.gif differ diff --git a/Tests/Manual/CPSoundTest/Resources/spinner.gif b/Tests/Manual/CPSoundTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPSoundTest/Resources/spinner.gif and b/Tests/Manual/CPSoundTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPSplitViewTest/Resources/spinner.gif b/Tests/Manual/CPSplitViewTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPSplitViewTest/Resources/spinner.gif and b/Tests/Manual/CPSplitViewTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPStepperNibTest/Resources/spinner.gif b/Tests/Manual/CPStepperNibTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPStepperNibTest/Resources/spinner.gif and b/Tests/Manual/CPStepperNibTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPTabView2/Resources/spinner.gif b/Tests/Manual/CPTabView2/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPTabView2/Resources/spinner.gif and b/Tests/Manual/CPTabView2/Resources/spinner.gif differ diff --git a/Tests/Manual/CPTabViewNib/Resources/spinner.gif b/Tests/Manual/CPTabViewNib/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPTabViewNib/Resources/spinner.gif and b/Tests/Manual/CPTabViewNib/Resources/spinner.gif differ diff --git a/Tests/Manual/CPTableViewGroupRows/Resources/spinner.gif b/Tests/Manual/CPTableViewGroupRows/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPTableViewGroupRows/Resources/spinner.gif and b/Tests/Manual/CPTableViewGroupRows/Resources/spinner.gif differ diff --git a/Tests/Manual/CPTextField/AppController.j b/Tests/Manual/CPTextField/AppController.j index 1e5639509..78e54d206 100644 --- a/Tests/Manual/CPTextField/AppController.j +++ b/Tests/Manual/CPTextField/AppController.j @@ -52,6 +52,37 @@ [contentView addSubview:shadowLabel]; [contentView addSubview:championOfLightLabel]; + var jumpLabel = [CPTextField labelWithTitle:@"The text of these text fields should not move ('jump') when a field becomes the first responder. Labels on the right should replicate the input."]; + + [jumpLabel sizeToFit]; + [jumpLabel setFrameOrigin:CGPointMake(15, 150)]; + [contentView addSubview:jumpLabel]; + + var y = CGRectGetMaxY([jumpLabel frame]) + 10; + + for (var i = 0; i < 5; i++) + { + var size = 10 + 3 * i, + textField = [CPTextField textFieldWithStringValue:@"Size " + size placeholder:@"Size " + size width:200], + echoField = [CPTextField labelWithTitle:""]; + + [textField setFont:[CPFont systemFontOfSize:size]]; + [textField sizeToFit]; + [textField setFrameOrigin:CGPointMake(15, y)]; + textField.echoField = echoField; + [contentView addSubview:textField]; + + [echoField setFont:[CPFont systemFontOfSize:size]]; + [echoField setStringValue:[textField stringValue]]; + [echoField sizeToFit]; + [echoField setFrameOrigin:CGPointMake(CGRectGetMaxX([textField frame]) + 15, CGRectGetMidY([textField frame]) - CGRectGetHeight([echoField frame]) / 2.0)]; + [contentView addSubview:echoField]; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:CPControlTextDidChangeNotification object:textField]; + + y = CGRectGetMaxY([textField frame]) + 6; + } + [theWindow orderFront:self]; aWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(150, 300, 400, 150) styleMask:CPTitledWindowMask | CPClosableWindowMask | CPDocModalWindowMask]; @@ -81,6 +112,7 @@ - (void)modalAction:(id)sender { [CPApp endSheet:aWindow returnCode:0]; + [aWindow orderOut:sender]; } - (void)textAction:(id)sender @@ -88,4 +120,12 @@ [sender setEditable:NO]; } +- (void)textDidChange:(CPNotification)aNotification +{ + var changedField = [aNotification object]; + + [changedField.echoField setStringValue:[changedField stringValue]]; + [changedField.echoField sizeToFit]; +} + @end diff --git a/Tests/Manual/CPTextField/Resources/spinner.gif b/Tests/Manual/CPTextField/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPTextField/Resources/spinner.gif and b/Tests/Manual/CPTextField/Resources/spinner.gif differ diff --git a/Tests/Manual/CPTextFieldHeightTest/Resources/spinner.gif b/Tests/Manual/CPTextFieldHeightTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPTextFieldHeightTest/Resources/spinner.gif and b/Tests/Manual/CPTextFieldHeightTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPTokenFieldTest/Resources/spinner.gif b/Tests/Manual/CPTokenFieldTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPTokenFieldTest/Resources/spinner.gif and b/Tests/Manual/CPTokenFieldTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPToolTip/Resources/spinner.gif b/Tests/Manual/CPToolTip/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPToolTip/Resources/spinner.gif and b/Tests/Manual/CPToolTip/Resources/spinner.gif differ diff --git a/Tests/Manual/CPToolTip/Resources/test.png b/Tests/Manual/CPToolTip/Resources/test.png index 8ebf63789..9d81a30e8 100644 Binary files a/Tests/Manual/CPToolTip/Resources/test.png and b/Tests/Manual/CPToolTip/Resources/test.png differ diff --git a/Tests/Manual/CPToolbarTest/Resources/CPImageNameColorPanel.png b/Tests/Manual/CPToolbarTest/Resources/CPImageNameColorPanel.png index 85f94ee58..527ff1ad8 100644 Binary files a/Tests/Manual/CPToolbarTest/Resources/CPImageNameColorPanel.png and b/Tests/Manual/CPToolbarTest/Resources/CPImageNameColorPanel.png differ diff --git a/Tests/Manual/CPToolbarTest/Resources/New.png b/Tests/Manual/CPToolbarTest/Resources/New.png index 058a6caa4..2ca371152 100644 Binary files a/Tests/Manual/CPToolbarTest/Resources/New.png and b/Tests/Manual/CPToolbarTest/Resources/New.png differ diff --git a/Tests/Manual/CPToolbarTest/Resources/spinner.gif b/Tests/Manual/CPToolbarTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPToolbarTest/Resources/spinner.gif and b/Tests/Manual/CPToolbarTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPUserDefaults/Resources/spinner.gif b/Tests/Manual/CPUserDefaults/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPUserDefaults/Resources/spinner.gif and b/Tests/Manual/CPUserDefaults/Resources/spinner.gif differ diff --git a/Tests/Manual/CPUserDefaultsControllerTest/Resources/spinner.gif b/Tests/Manual/CPUserDefaultsControllerTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPUserDefaultsControllerTest/Resources/spinner.gif and b/Tests/Manual/CPUserDefaultsControllerTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPWebViewTest/Resources/spinner.gif b/Tests/Manual/CPWebViewTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPWebViewTest/Resources/spinner.gif and b/Tests/Manual/CPWebViewTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPWebViewTest2/Resources/spinner.gif b/Tests/Manual/CPWebViewTest2/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPWebViewTest2/Resources/spinner.gif and b/Tests/Manual/CPWebViewTest2/Resources/spinner.gif differ diff --git a/Tests/Manual/CPWindowMovableTest/Resources/spinner.gif b/Tests/Manual/CPWindowMovableTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/CPWindowMovableTest/Resources/spinner.gif and b/Tests/Manual/CPWindowMovableTest/Resources/spinner.gif differ diff --git a/Tests/Manual/ContinuouslyUpdatesValueBinding/Resources/spinner.gif b/Tests/Manual/ContinuouslyUpdatesValueBinding/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/ContinuouslyUpdatesValueBinding/Resources/spinner.gif and b/Tests/Manual/ContinuouslyUpdatesValueBinding/Resources/spinner.gif differ diff --git a/Tests/Manual/FF4096Test/Resources/spinner.gif b/Tests/Manual/FF4096Test/Resources/spinner.gif index 06dbc2bc2..77b36416b 100755 Binary files a/Tests/Manual/FF4096Test/Resources/spinner.gif and b/Tests/Manual/FF4096Test/Resources/spinner.gif differ diff --git a/Tests/Manual/FontEnhancementTest/Resources/spinner.gif b/Tests/Manual/FontEnhancementTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/FontEnhancementTest/Resources/spinner.gif and b/Tests/Manual/FontEnhancementTest/Resources/spinner.gif differ diff --git a/Tests/Manual/FontMetricsExplorer/Resources/spinner.gif b/Tests/Manual/FontMetricsExplorer/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/FontMetricsExplorer/Resources/spinner.gif and b/Tests/Manual/FontMetricsExplorer/Resources/spinner.gif differ diff --git a/Tests/Manual/KeyEquivalents/Resources/spinner.gif b/Tests/Manual/KeyEquivalents/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/KeyEquivalents/Resources/spinner.gif and b/Tests/Manual/KeyEquivalents/Resources/spinner.gif differ diff --git a/Tests/Manual/LayoutTest/Resources/horizontal-border-0.png b/Tests/Manual/LayoutTest/Resources/horizontal-border-0.png index 31cafe20e..7bb1d1198 100644 Binary files a/Tests/Manual/LayoutTest/Resources/horizontal-border-0.png and b/Tests/Manual/LayoutTest/Resources/horizontal-border-0.png differ diff --git a/Tests/Manual/LayoutTest/Resources/horizontal-border-1.png b/Tests/Manual/LayoutTest/Resources/horizontal-border-1.png index c4bccc2b4..674c7f7f8 100644 Binary files a/Tests/Manual/LayoutTest/Resources/horizontal-border-1.png and b/Tests/Manual/LayoutTest/Resources/horizontal-border-1.png differ diff --git a/Tests/Manual/LayoutTest/Resources/horizontal-border-2.png b/Tests/Manual/LayoutTest/Resources/horizontal-border-2.png index e75e998f7..4df72cd5a 100644 Binary files a/Tests/Manual/LayoutTest/Resources/horizontal-border-2.png and b/Tests/Manual/LayoutTest/Resources/horizontal-border-2.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-0.png b/Tests/Manual/LayoutTest/Resources/round-border-0.png index 530cb0480..c0212f026 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-0.png and b/Tests/Manual/LayoutTest/Resources/round-border-0.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-1.png b/Tests/Manual/LayoutTest/Resources/round-border-1.png index 556c2e8f6..0691ca75f 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-1.png and b/Tests/Manual/LayoutTest/Resources/round-border-1.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-2.png b/Tests/Manual/LayoutTest/Resources/round-border-2.png index c8baaba5b..380bc53c5 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-2.png and b/Tests/Manual/LayoutTest/Resources/round-border-2.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-3.png b/Tests/Manual/LayoutTest/Resources/round-border-3.png index 80c0a9116..89c9be3c7 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-3.png and b/Tests/Manual/LayoutTest/Resources/round-border-3.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-4.png b/Tests/Manual/LayoutTest/Resources/round-border-4.png index e847d301b..4996c1820 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-4.png and b/Tests/Manual/LayoutTest/Resources/round-border-4.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-5.png b/Tests/Manual/LayoutTest/Resources/round-border-5.png index 454b517cd..3a2765ca8 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-5.png and b/Tests/Manual/LayoutTest/Resources/round-border-5.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-6.png b/Tests/Manual/LayoutTest/Resources/round-border-6.png index 1930ee6d7..bf450e9f5 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-6.png and b/Tests/Manual/LayoutTest/Resources/round-border-6.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-7.png b/Tests/Manual/LayoutTest/Resources/round-border-7.png index 562d432b7..5c5e514ea 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-7.png and b/Tests/Manual/LayoutTest/Resources/round-border-7.png differ diff --git a/Tests/Manual/LayoutTest/Resources/round-border-8.png b/Tests/Manual/LayoutTest/Resources/round-border-8.png index 4396661b2..0b963bc30 100644 Binary files a/Tests/Manual/LayoutTest/Resources/round-border-8.png and b/Tests/Manual/LayoutTest/Resources/round-border-8.png differ diff --git a/Tests/Manual/LayoutTest/Resources/spinner.gif b/Tests/Manual/LayoutTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/LayoutTest/Resources/spinner.gif and b/Tests/Manual/LayoutTest/Resources/spinner.gif differ diff --git a/Tests/Manual/LayoutTest/Resources/vertical-border-0.png b/Tests/Manual/LayoutTest/Resources/vertical-border-0.png index 2d240a4cd..40e77ec2e 100644 Binary files a/Tests/Manual/LayoutTest/Resources/vertical-border-0.png and b/Tests/Manual/LayoutTest/Resources/vertical-border-0.png differ diff --git a/Tests/Manual/LayoutTest/Resources/vertical-border-1.png b/Tests/Manual/LayoutTest/Resources/vertical-border-1.png index da68cd1a5..c64825c35 100644 Binary files a/Tests/Manual/LayoutTest/Resources/vertical-border-1.png and b/Tests/Manual/LayoutTest/Resources/vertical-border-1.png differ diff --git a/Tests/Manual/LayoutTest/Resources/vertical-border-2.png b/Tests/Manual/LayoutTest/Resources/vertical-border-2.png index 35c673295..8e830a47e 100644 Binary files a/Tests/Manual/LayoutTest/Resources/vertical-border-2.png and b/Tests/Manual/LayoutTest/Resources/vertical-border-2.png differ diff --git a/Tests/Manual/LoadTimeTest/Resources/spinner.gif b/Tests/Manual/LoadTimeTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/LoadTimeTest/Resources/spinner.gif and b/Tests/Manual/LoadTimeTest/Resources/spinner.gif differ diff --git a/Tests/Manual/LongBindings/Resources/spinner.gif b/Tests/Manual/LongBindings/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/LongBindings/Resources/spinner.gif and b/Tests/Manual/LongBindings/Resources/spinner.gif differ diff --git a/Tests/Manual/NSBoxTest/Resources/spinner.gif b/Tests/Manual/NSBoxTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/NSBoxTest/Resources/spinner.gif and b/Tests/Manual/NSBoxTest/Resources/spinner.gif differ diff --git a/Tests/Manual/NewTextFieldBezel/Resources/spinner.gif b/Tests/Manual/NewTextFieldBezel/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/NewTextFieldBezel/Resources/spinner.gif and b/Tests/Manual/NewTextFieldBezel/Resources/spinner.gif differ diff --git a/Tests/Manual/Nib2CibAlignment/Resources/spinner.gif b/Tests/Manual/Nib2CibAlignment/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/Nib2CibAlignment/Resources/spinner.gif and b/Tests/Manual/Nib2CibAlignment/Resources/spinner.gif differ diff --git a/Tests/Manual/Nib2CibBaselineAlignementTest/Resources/spinner.gif b/Tests/Manual/Nib2CibBaselineAlignementTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/Nib2CibBaselineAlignementTest/Resources/spinner.gif and b/Tests/Manual/Nib2CibBaselineAlignementTest/Resources/spinner.gif differ diff --git a/Tests/Manual/NibAppRemixed/Resources/spinner.gif b/Tests/Manual/NibAppRemixed/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/NibAppRemixed/Resources/spinner.gif and b/Tests/Manual/NibAppRemixed/Resources/spinner.gif differ diff --git a/Tests/Manual/PatternFillTest/Resources/bad.png b/Tests/Manual/PatternFillTest/Resources/bad.png index 3f4d1a244..9ac10e07f 100644 Binary files a/Tests/Manual/PatternFillTest/Resources/bad.png and b/Tests/Manual/PatternFillTest/Resources/bad.png differ diff --git a/Tests/Manual/PatternFillTest/Resources/help.png b/Tests/Manual/PatternFillTest/Resources/help.png index f7811563d..cc5018347 100644 Binary files a/Tests/Manual/PatternFillTest/Resources/help.png and b/Tests/Manual/PatternFillTest/Resources/help.png differ diff --git a/Tests/Manual/PatternFillTest/Resources/pattern.gif b/Tests/Manual/PatternFillTest/Resources/pattern.gif index 60f660904..6004e749e 100755 Binary files a/Tests/Manual/PatternFillTest/Resources/pattern.gif and b/Tests/Manual/PatternFillTest/Resources/pattern.gif differ diff --git a/Tests/Manual/PatternFillTest/Resources/spinner.gif b/Tests/Manual/PatternFillTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/PatternFillTest/Resources/spinner.gif and b/Tests/Manual/PatternFillTest/Resources/spinner.gif differ diff --git a/Tests/Manual/PlatformWindows/Resources/spinner.gif b/Tests/Manual/PlatformWindows/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/PlatformWindows/Resources/spinner.gif and b/Tests/Manual/PlatformWindows/Resources/spinner.gif differ diff --git a/Tests/Manual/ScrollviewTheming/Resources/spinner.gif b/Tests/Manual/ScrollviewTheming/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/ScrollviewTheming/Resources/spinner.gif and b/Tests/Manual/ScrollviewTheming/Resources/spinner.gif differ diff --git a/Tests/Manual/SmartFoldersDemo/Resources/SmartFolder.png b/Tests/Manual/SmartFoldersDemo/Resources/SmartFolder.png index 85e175cb0..4fbb66846 100644 Binary files a/Tests/Manual/SmartFoldersDemo/Resources/SmartFolder.png and b/Tests/Manual/SmartFoldersDemo/Resources/SmartFolder.png differ diff --git a/Tests/Manual/SmartFoldersDemo/Resources/searchBarBlue.png b/Tests/Manual/SmartFoldersDemo/Resources/searchBarBlue.png index f700c6d52..e0bde9f57 100644 Binary files a/Tests/Manual/SmartFoldersDemo/Resources/searchBarBlue.png and b/Tests/Manual/SmartFoldersDemo/Resources/searchBarBlue.png differ diff --git a/Tests/Manual/SmartFoldersDemo/Resources/spinner.gif b/Tests/Manual/SmartFoldersDemo/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/SmartFoldersDemo/Resources/spinner.gif and b/Tests/Manual/SmartFoldersDemo/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/BorderTableTest/Resources/spinner.gif b/Tests/Manual/TableTest/BorderTableTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/BorderTableTest/Resources/spinner.gif and b/Tests/Manual/TableTest/BorderTableTest/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/ColumnResize/Resources/spinner.gif b/Tests/Manual/TableTest/ColumnResize/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/ColumnResize/Resources/spinner.gif and b/Tests/Manual/TableTest/ColumnResize/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/ColumnSizing2/Resources/spinner.gif b/Tests/Manual/TableTest/ColumnSizing2/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/ColumnSizing2/Resources/spinner.gif and b/Tests/Manual/TableTest/ColumnSizing2/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/DragAndDrop/Resources/spinner.gif b/Tests/Manual/TableTest/DragAndDrop/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/DragAndDrop/Resources/spinner.gif and b/Tests/Manual/TableTest/DragAndDrop/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/DrawRowTest/Resources/spinner.gif b/Tests/Manual/TableTest/DrawRowTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/DrawRowTest/Resources/spinner.gif and b/Tests/Manual/TableTest/DrawRowTest/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/Editing/Resources/spinner.gif b/Tests/Manual/TableTest/Editing/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/Editing/Resources/spinner.gif and b/Tests/Manual/TableTest/Editing/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/EditingControls/Resources/spinner.gif b/Tests/Manual/TableTest/EditingControls/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/EditingControls/Resources/spinner.gif and b/Tests/Manual/TableTest/EditingControls/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/GroupRowTest/Resources/spinner.gif b/Tests/Manual/TableTest/GroupRowTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/GroupRowTest/Resources/spinner.gif and b/Tests/Manual/TableTest/GroupRowTest/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/HeaderCornerView/Resources/spinner.gif b/Tests/Manual/TableTest/HeaderCornerView/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/HeaderCornerView/Resources/spinner.gif and b/Tests/Manual/TableTest/HeaderCornerView/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/OldTest/AppController.j b/Tests/Manual/TableTest/OldTest/AppController.j index c72f7746e..901a9bafd 100644 --- a/Tests/Manual/TableTest/OldTest/AppController.j +++ b/Tests/Manual/TableTest/OldTest/AppController.j @@ -10,6 +10,7 @@ tableTestDragType = @"CPTableViewTestDragType"; CPImage iconImage; CPArray dataSet1; CPArray dataSet2; + CPArray dataSet3; CPTableColumn randomColumn; } @@ -28,9 +29,15 @@ tableTestDragType = @"CPTableViewTestDragType"; } var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(50,50,700,500) styleMask:CPClosableWindowMask], - contentView = [theWindow contentView]; + contentView = [theWindow contentView], + label = [CPTextField new]; - tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 400.0, 400.0)]; + [label setStringValue:@"This table refuses to become the first responder but can still be interacted with."]; + [label sizeToFit]; + [label setFrameOrigin:CGPointMake(200, 10)] + [contentView addSubview:label]; + + tableView = [[CUTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 400.0, 400.0)]; [tableView setAllowsMultipleSelection:YES]; [tableView setAllowsColumnSelection:YES]; @@ -172,7 +179,6 @@ tableTestDragType = @"CPTableViewTestDragType"; - (void)newWindow { - var window2 = [[CPWindow alloc] initWithContentRect:CGRectMake(450, 50, 500, 400) styleMask:CPTitledWindowMask | CPResizableWindowMask]; tableView2 = [[CPTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 500.0, 500.0)]; @@ -186,7 +192,6 @@ tableTestDragType = @"CPTableViewTestDragType"; [tableView2 setDelegate:self]; [tableView2 setDataSource:self]; - var checkBox = [[CPCheckBox alloc] initWithFrame:CGRectMake(5,3,24,24)], checkBoxColumn = [[CPTableColumn alloc] initWithIdentifier:@"checkBox"]; [checkBoxColumn setDataView:checkBox]; @@ -299,20 +304,9 @@ tableTestDragType = @"CPTableViewTestDragType"; [aTableView reloadData]; } - -- (void)tableViewSelectionIsChanging:(CPNotification)aNotification -{ - //CPLog.debug(@"changing! %@", [aNotification description]); -} - -- (void)tableViewSelectionDidChange:(CPNotification)aNotification -{ - //CPLog.debug(@"did change! %@", [aNotification description]); -} - - (BOOL)tableView:(CPTableView)aTableView shouldSelectRow:(int)rowIndex { - //CPLog.debug(@"tableView:shouldSelectRow"); + CPLog.debug(@"tableView:shouldSelectRow"); return true; } @@ -324,18 +318,19 @@ tableTestDragType = @"CPTableViewTestDragType"; - (void)tableViewSelectionDidChange:(id)notification { - //CPLogConsole(_cmd + [notification description]); + CPLogConsole(_cmd + [notification description]); } - (void)tableViewSelectionIsChanging:(id)notification { - //CPLogConsole(_cmd + [notification description]); + CPLogConsole(_cmd + [notification description]); } - (void)_tableViewColumnDidResize:(id)notification { - //CPLogConsole(_cmd + [notification description]); + CPLogConsole(_cmd + [notification description]); } + - (BOOL)tableView:(CPTableView)aTableView shouldEditTableColumn:(CPTableColumn)tableColumn row:(int)row { if (aTableView === tableView3) @@ -425,8 +420,8 @@ tableTestDragType = @"CPTableViewTestDragType"; } else { - var destIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(row, [sourceIndexes count])]; - var sourceObjects = [sourceDataSet objectsAtIndexes:sourceIndexes]; + var destIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(row, [sourceIndexes count])], + sourceObjects = [sourceDataSet objectsAtIndexes:sourceIndexes]; [destinationDataSet insertObjects:sourceObjects atIndexes:destIndexes]; [destinationTable reloadData]; @@ -485,3 +480,16 @@ tableTestDragType = @"CPTableViewTestDragType"; } @end + + +@implementation CUTableView : CPTableView +{ + +} + +- (BOOL)acceptsFirstResponder +{ + return NO; +} + +@end diff --git a/Tests/Manual/TableTest/OldTest/Resources/spinner.gif b/Tests/Manual/TableTest/OldTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/OldTest/Resources/spinner.gif and b/Tests/Manual/TableTest/OldTest/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/TableBindings/Resources/spinner.gif b/Tests/Manual/TableTest/TableBindings/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/TableBindings/Resources/spinner.gif and b/Tests/Manual/TableTest/TableBindings/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/TableCibTest/Resources/spinner.gif b/Tests/Manual/TableTest/TableCibTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/TableCibTest/Resources/spinner.gif and b/Tests/Manual/TableTest/TableCibTest/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/VariableRows/Resources/spinner.gif b/Tests/Manual/TableTest/VariableRows/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/TableTest/VariableRows/Resources/spinner.gif and b/Tests/Manual/TableTest/VariableRows/Resources/spinner.gif differ diff --git a/Tests/Manual/ThemeBrowser/Resources/spinner.gif b/Tests/Manual/ThemeBrowser/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/ThemeBrowser/Resources/spinner.gif and b/Tests/Manual/ThemeBrowser/Resources/spinner.gif differ diff --git a/Tests/Manual/UndoRedoWithMenuUpdate/Resources/spinner.gif b/Tests/Manual/UndoRedoWithMenuUpdate/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/UndoRedoWithMenuUpdate/Resources/spinner.gif and b/Tests/Manual/UndoRedoWithMenuUpdate/Resources/spinner.gif differ diff --git a/Tests/Manual/UserlandNSTest/Resources/spinner.gif b/Tests/Manual/UserlandNSTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/UserlandNSTest/Resources/spinner.gif and b/Tests/Manual/UserlandNSTest/Resources/spinner.gif differ diff --git a/Tests/Manual/layoutEphemeralSubviewTest/Resources/spinner.gif b/Tests/Manual/layoutEphemeralSubviewTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/layoutEphemeralSubviewTest/Resources/spinner.gif and b/Tests/Manual/layoutEphemeralSubviewTest/Resources/spinner.gif differ diff --git a/Tests/Manual/performKeyEquivalentTest/Resources/spinner.gif b/Tests/Manual/performKeyEquivalentTest/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/performKeyEquivalentTest/Resources/spinner.gif and b/Tests/Manual/performKeyEquivalentTest/Resources/spinner.gif differ diff --git a/Tests/Manual/predicateWithFormat/Resources/spinner.gif b/Tests/Manual/predicateWithFormat/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/predicateWithFormat/Resources/spinner.gif and b/Tests/Manual/predicateWithFormat/Resources/spinner.gif differ diff --git a/Tests/Manual/resignFirstResponder-CPControlTextDidEndEditing/Resources/spinner.gif b/Tests/Manual/resignFirstResponder-CPControlTextDidEndEditing/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/resignFirstResponder-CPControlTextDidEndEditing/Resources/spinner.gif and b/Tests/Manual/resignFirstResponder-CPControlTextDidEndEditing/Resources/spinner.gif differ diff --git a/Tests/Manual/sizeToFitFix/Resources/spinner.gif b/Tests/Manual/sizeToFitFix/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tests/Manual/sizeToFitFix/Resources/spinner.gif and b/Tests/Manual/sizeToFitFix/Resources/spinner.gif differ diff --git a/Tools/Documentation/logo.png b/Tools/Documentation/logo.png index d370088a7..dc90d875f 100644 Binary files a/Tools/Documentation/logo.png and b/Tools/Documentation/logo.png differ diff --git a/Tools/NativeHost/NativeHost.xcodeproj/project.pbxproj b/Tools/NativeHost/NativeHost.xcodeproj/project.pbxproj index f229afa22..b40dc518a 100644 --- a/Tools/NativeHost/NativeHost.xcodeproj/project.pbxproj +++ b/Tools/NativeHost/NativeHost.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 45; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -252,8 +252,11 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; + attributes = { + LastUpgradeCheck = 0440; + }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "NativeHost" */; - compatibilityVersion = "Xcode 3.1"; + compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( @@ -334,14 +337,15 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = NativeHost_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = "ACTIVATION=0"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = Info.plist; INFOPLIST_PREPROCESS = YES; INFOPLIST_PREPROCESSOR_DEFINITIONS = "ACTIVATION=0"; @@ -354,10 +358,12 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = NativeHost_Prefix.pch; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = Info.plist; INFOPLIST_PREPROCESS = YES; INFOPLIST_PREPROCESSOR_DEFINITIONS = "ACTIVATION=0"; @@ -376,7 +382,6 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; ONLY_ACTIVE_ARCH = YES; - PREBINDING = NO; SDKROOT = macosx; }; name = Debug; @@ -388,7 +393,6 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - PREBINDING = NO; SDKROOT = macosx; }; name = Release; diff --git a/Tools/XcodeCapp/FSEventCallback.m b/Tools/XcodeCapp/FSEventCallback.m index e050e8d8b..380eb7965 100644 --- a/Tools/XcodeCapp/FSEventCallback.m +++ b/Tools/XcodeCapp/FSEventCallback.m @@ -38,74 +38,48 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, for (i = 0; i < numEvents; i++) { [xcc updateLastEventId:eventIds[i]]; + FSEventStreamEventFlags flags = eventFlags[i]; NSString *path = [[(NSArray *)eventPaths objectAtIndex:i] stringByStandardizingPath]; if (useFileBasedListening) { - if (!(flags & kFSEventStreamEventFlagItemIsFile) || - [xcc isPathMatchingIgnoredPaths:path] || - (![xcc isXIBFile:path] && ![xcc isObjJFile:path] && ![xcc isXCCIgnoreFile:path])) - { + BOOL conditionIsFile = flags & kFSEventStreamEventFlagItemIsFile; + BOOL conditionIsDirectory = NO; + BOOL conditionIsIgnored = [xcc isPathMatchingIgnoredPaths:path]; + BOOL conditionIsValidFile = [xcc isXIBFile:path] || [xcc isObjJFile:path] || [xcc isXCCIgnoreFile:path]; + BOOL conditionPathExists = [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&conditionIsDirectory]; + + if (conditionIsIgnored) continue; - } - if (flags & kFSEventStreamEventFlagItemIsFile && - flags & kFSEventStreamEventFlagItemRemoved) - { - if ([xcc isObjJFile:path]) - { - [xcc tidyShadowedFiles]; - continue; - } - } + if (conditionIsFile && !conditionIsValidFile) + continue; - if (flags & kFSEventStreamEventFlagItemRemoved) + // Events are not so reliable. For example, moving a folder to the trash is not + // a deletion. In order to simplify the code, we simply tidyUp the project when we receive + // an event. + [xcc tidyShadowedFiles]; + + if (conditionIsDirectory) + continue; + + if (!conditionPathExists) { - DLog(@"event type: kFSEventStreamEventFlagItemRemoved for path %@", path); + DLog(@"File removed: %@", path); [xcc handleFileRemoval:path]; } - - if (flags & kFSEventStreamEventFlagItemCreated || - flags & kFSEventStreamEventFlagItemModified) + else { - DLog(@"event type: kFSEventStreamEventFlagItemCreated or kFSEventStreamEventFlagItemModified for path %@", path); + DLog(@"File modified/added: %@", path); [xcc handleFileModification:path notify:YES]; } - - else if ([xcc reactToInodeModification] && - (flags & kFSEventStreamEventFlagItemFinderInfoMod || - flags & kFSEventStreamEventFlagItemXattrMod || - flags & kFSEventStreamEventFlagItemChangeOwner)) - { - DLog(@"event type: %u for path %@", flags, path); - [xcc handleFileModification:path notify:YES]; - } - - else if ([xcc reactToInodeModification] && - flags & kFSEventStreamEventFlagItemInodeMetaMod) - { - DLog(@"event type: kFSEventStreamEventFlagItemInodeMetaMod for path %@", path); - [xcc handleFileModification:path notify:YES]; - } - - else if (flags & kFSEventStreamEventFlagItemRenamed) - { - if (![[NSFileManager defaultManager] fileExistsAtPath:path]) - { - DLog(@"event type: kFSEventStreamEventFlagItemRenamed for path %@ (removed origin)", path); - [xcc handleFileRemoval:path]; - } - else - { - DLog(@"event type: kFSEventStreamEventFlagItemRenamed for path %@ (added destination)", path); - [xcc handleFileModification:path notify:YES]; - } - } } else { + // We should drop support for Snow Leopard soon. + BOOL isDir = NO; [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]; diff --git a/Tools/XcodeCapp/TNXCodeCapp.h b/Tools/XcodeCapp/TNXCodeCapp.h index 51c507de3..b43cfa130 100644 --- a/Tools/XcodeCapp/TNXCodeCapp.h +++ b/Tools/XcodeCapp/TNXCodeCapp.h @@ -40,8 +40,8 @@ extern NSString * const XCCListeningStartNotification; NSString *XCodeSupportProjectName; NSString *XCodeTemplatePBXPath; NSString *profilePath; + NSString *PBXModifierScriptPath; NSURL *currentProjectURL; - NSURL *XCodeSupportFolder; NSURL *XCodeSupportProject; NSURL *XCodeSupportProjectSources; PRHEmptyGrowlDelegate *growlDelegateRef; diff --git a/Tools/XcodeCapp/TNXCodeCapp.m b/Tools/XcodeCapp/TNXCodeCapp.m index ffaab9dac..a77736932 100644 --- a/Tools/XcodeCapp/TNXCodeCapp.m +++ b/Tools/XcodeCapp/TNXCodeCapp.m @@ -318,6 +318,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification DLog(@"Parsing modified file: %@", fullPath); NSArray *arguments = nil; + NSArray *PBXArguments = nil; NSString *successTitle = nil; NSString *successMsg = nil; NSString *response = nil; @@ -331,13 +332,31 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification if ([self isXIBFile:fullPath]) { - arguments = [NSArray arrayWithObjects: @"-c", [NSString stringWithFormat:@"(%@; nib2cib '%@';) 2>&1", profilePath, fullPath],@"",nil]; + arguments = [NSArray arrayWithObjects: @"-c", + [NSString stringWithFormat:@"(%@; nib2cib '%@';) 2>&1", profilePath, fullPath],@"",nil]; + successTitle = @"XIB converted"; successMsg = splitPath; } else if ([self isObjJFile:fullPath]) { - arguments = [NSArray arrayWithObjects: @"-c", [NSString stringWithFormat:@"(%@; objj '%@' '%@' '%@';) 2>&1", profilePath, parserPath, fullPath, shadowPath],@"",nil]; + arguments = [NSArray arrayWithObjects: @"-c", + [NSString stringWithFormat:@"(%@; objj '%@' '%@' '%@';) 2>&1", + profilePath, + parserPath, + fullPath, + shadowPath], + @"",nil]; + + PBXArguments = [NSArray arrayWithObjects: @"-c", + [NSString stringWithFormat:@"(%@; python %@ add '%@' '%@' '%@' '%@') 2>&1", + profilePath, + PBXModifierScriptPath, + XCodeSupportPBXPath, + shadowPath, + fullPath, + [currentProjectURL path]],nil]; + successTitle = @"Objective-J source processed"; successMsg = splitPath; } @@ -352,13 +371,22 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification // Run the task and get the response if needed if (arguments) { - DLog(@"Running task..."); + DLog(@"Running conversion task..."); NSArray *statusInfo = [self runTask:arguments]; status = [statusInfo objectAtIndex:0]; response = [statusInfo objectAtIndex:1]; - DLog(@"Task result/response: %@/%@", status, response); + DLog(@"Conversion task result/response: %@/%@", status, response); + } + + if (PBXArguments) + { + DLog(@"Running update PBX task..."); + NSArray *statusInfo = [self runTask:PBXArguments]; + status = [statusInfo objectAtIndex:0]; + response = [statusInfo objectAtIndex:1]; + DLog(@"Update PBX Task result/response: %@/%@", status, response); } if ([status intValue] == 0 && shouldNotify) @@ -392,8 +420,26 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification if ([self isObjJFile:fullPath]) { NSString *shadowPath = [[self shadowURLForSourceURL:[NSURL URLWithString:[fullPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]] path]; - [fm removeItemAtPath:shadowPath error:nil]; + DLog(@"Removing shadow file: %@", shadowPath); + [fm removeItemAtPath:shadowPath error:nil]; + + DLog(@"Removing PBX reference task..."); + +#if DEBUG + NSArray *PBXArguments = [NSArray arrayWithObjects: @"-c", + [NSString stringWithFormat:@"(%@; python %@ remove '%@' '%@' '%@' '%@') 2>&1", + profilePath, + PBXModifierScriptPath, + XCodeSupportPBXPath, + shadowPath, + fullPath, + [currentProjectURL path]],nil]; + NSArray *statusInfo = [self runTask:PBXArguments]; + NSNumber *status = [statusInfo objectAtIndex:0]; + NSString *response = [statusInfo objectAtIndex:1]; +#endif + DLog(@"PBX Reference removal status/response: %@/%@", status, response); } else if ([self isXCCIgnoreFile:fullPath]) { @@ -435,7 +481,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification /*! - Check if .xCodeSupport needs to be initialized. + Check if .XcodeSupport needs to be initialized. If not needed, check that all J files are mirrored. If no, then launch conversion for missing mirrored h files @return YES or NO @@ -444,15 +490,17 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification { XCodeSupportProjectName = [NSString stringWithFormat:@"%@.xcodeproj/", currentProjectName]; XCodeTemplatePBXPath = [[NSBundle mainBundle] pathForResource:@"project.pbxproj" ofType:@"sample"]; - XCodeSupportFolder = [NSURL URLWithString:@".xCodeSupport/" relativeToURL:currentProjectURL]; - XCodeSupportProject = [NSURL URLWithString:XCodeSupportProjectName relativeToURL:XCodeSupportFolder]; - XCodeSupportProjectSources = [NSURL URLWithString:@"Sources/" relativeToURL:XCodeSupportFolder]; + XCodeSupportProject = [NSURL URLWithString:XCodeSupportProjectName relativeToURL:currentProjectURL]; + XCodeSupportProjectSources = [NSURL URLWithString:@".XcodeSupport/" relativeToURL:currentProjectURL]; XCodeSupportPBXPath = [NSString stringWithFormat:@"%@/project.pbxproj", [XCodeSupportProject path]]; + PBXModifierScriptPath = [[NSBundle mainBundle] pathForResource:@"pbxprojModifier" ofType:@"py"]; + - //[fm removeItemAtURL:XCodeSupportFolder error:nil]; + //[fm removeItemAtURL:XCodeSupportProjectSources error:nil]; + //[fm removeItemAtURL:XCodeSupportProject error:nil]; // create the template project if it doesn't exist - if (![fm fileExistsAtPath:[XCodeSupportFolder path]]) + if (![fm fileExistsAtPath:[XCodeSupportProjectSources path]]) { NSLog(@"Xcode support folder created at: %@", [XCodeSupportProject path]); [fm createDirectoryAtPath:[XCodeSupportProject path] withIntermediateDirectories:YES attributes:nil error:nil]; @@ -462,14 +510,6 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification DLog(@"Reading the content of the project.pbxproj"); NSMutableString *PBXContent = [NSMutableString stringWithContentsOfFile:XCodeSupportPBXPath encoding:NSUTF8StringEncoding error:nil]; - [PBXContent replaceOccurrencesOfString:@"${CappuccinoProjectName}" - withString:currentProjectName - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [PBXContent length])]; - [PBXContent replaceOccurrencesOfString:@"${CappuccinoProjectRelativePath}" - withString:@".." - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [PBXContent length])]; [PBXContent writeToFile:XCodeSupportPBXPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; DLog(@"PBX file adapted to the project"); @@ -483,7 +523,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification } /*! - Create the .xCodeSupport/Sources folder if necessary. + Create the .XcodeSupport/Sources folder if necessary. */ - (void)createXcodeSupportProjectSourcesDirIfNecessary { @@ -495,7 +535,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification } /*! - Initialize the creation of the .xCodeSupport project. This + Initialize the creation of the .XcodeSupport project. This Operation is threaded @param arguments Thread arguments (not used) @param shouldNotify is YES, XCCDidPopulateProjectNotification will be send @@ -557,7 +597,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification range:NSMakeRange(0, [flattenedPath length])]; DLog(@"Flattened path: %@", flattenedPath); - NSString *basename = [NSString stringWithFormat:@"%@.h", [[flattenedPath stringByDeletingPathExtension] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + NSString *basename = [NSString stringWithFormat:@"%@.m", [[flattenedPath stringByDeletingPathExtension] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; return [NSURL URLWithString:basename relativeToURL:XCodeSupportProjectSources]; } @@ -576,7 +616,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification options:0 range:NSMakeRange(0, [unshadowedPath length])]; - [unshadowedPath replaceOccurrencesOfString:@".h" + [unshadowedPath replaceOccurrencesOfString:@".m" withString:@".j" options:0 range:NSMakeRange(0, [unshadowedPath length])]; @@ -610,9 +650,12 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification [ignoredFilePaths addObject:@"*/.svn/*"]; [ignoredFilePaths addObject:@"*/.hg/*"]; [ignoredFilePaths addObject:@"*/Frameworks/*"]; - [ignoredFilePaths addObject:@"*/.xCodeSupport/*"]; + [ignoredFilePaths addObject:@"*/.XcodeSupport/*"]; [ignoredFilePaths addObject:@"*/Build/*"]; [ignoredFilePaths addObject:@"*/NS_*.j"]; + [ignoredFilePaths addObject:@"*main.j"]; + [ignoredFilePaths addObject:@"*.xcodeproj/*"]; + [ignoredFilePaths addObject:@"*.DS_Store"]; NSLog(@"Ignoring file paths: %@", ignoredFilePaths); } @@ -709,6 +752,23 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification { DLog(@"cleaning shadow file: %@", subpath); [fm removeItemAtPath:shadowFullPath error:nil]; + +#if DEBUG + NSArray *PBXArguments = [NSArray arrayWithObjects: @"-c", + [NSString stringWithFormat:@"(%@; python %@ remove '%@' '%@' '%@' '%@') 2>&1", + profilePath, + PBXModifierScriptPath, + XCodeSupportPBXPath, + shadowFullPath, + unshadowed, + [currentProjectURL path]],nil]; + + DLog(@"Cleaning PBX reference task..."); + NSArray *statusInfo = [self runTask:PBXArguments]; + NSNumber *status = [statusInfo objectAtIndex:0]; + NSString *response = [statusInfo objectAtIndex:1]; +#endif + DLog(@"PBX Reference cleaning status/response: %@/%@", status, response); if (![self supportFileLevelAPI] && [self respondsToSelector:@selector(updateLastModificationDate:forPath:)]) [self performSelector:@selector(updateLastModificationDate:forPath:) withObject:nil withObject:unshadowed]; diff --git a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj index cdfdfecf2..94becb428 100644 --- a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj +++ b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 0218442515D32B5D00A782B8 /* pbxprojModifier.py in Resources */ = {isa = PBXBuildFile; fileRef = 0218442415D32B5D00A782B8 /* pbxprojModifier.py */; }; 022BCEA71468632000B72910 /* project.pbxproj.sample in Resources */ = {isa = PBXBuildFile; fileRef = 022BCEA61468632000B72910 /* project.pbxproj.sample */; }; 024A041413699DD400DCBE4D /* parser.j in Resources */ = {isa = PBXBuildFile; fileRef = 024A041113699D6800DCBE4D /* parser.j */; }; 026F3B6213866B0B00EE5B83 /* xcodecapp-icon-inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = 026F3B6113866B0B00EE5B83 /* xcodecapp-icon-inactive.png */; }; @@ -21,6 +22,7 @@ 027FE4BA1462F64E00B1AB92 /* xcodecapp-icon-working.png in Resources */ = {isa = PBXBuildFile; fileRef = 027FE4B91462F64E00B1AB92 /* xcodecapp-icon-working.png */; }; 027FE4BD1462F7EB00B1AB92 /* FSEventCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 027FE4BC1462F7EB00B1AB92 /* FSEventCallback.m */; }; 0289AC9414668CAF003CD975 /* XcodeCapp.icns in Resources */ = {isa = PBXBuildFile; fileRef = 0289AC9314668CAF003CD975 /* XcodeCapp.icns */; }; + 0294F09315D345A500840547 /* mod_pbxproj.py in Resources */ = {isa = PBXBuildFile; fileRef = 0294F09215D345A500840547 /* mod_pbxproj.py */; }; 02998CEB1369BF7D006C73DB /* Growl Registration Ticket.growlRegDict in Resources */ = {isa = PBXBuildFile; fileRef = 02998CEA1369BF7D006C73DB /* Growl Registration Ticket.growlRegDict */; }; 02998CF71369C339006C73DB /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02998CF61369C339006C73DB /* Growl.framework */; }; 02998CF91369C38A006C73DB /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 02998CF61369C339006C73DB /* Growl.framework */; }; @@ -44,8 +46,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0218442415D32B5D00A782B8 /* pbxprojModifier.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = pbxprojModifier.py; sourceTree = ""; }; 022BCEA61468632000B72910 /* project.pbxproj.sample */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = project.pbxproj.sample; sourceTree = ""; }; - 024A041113699D6800DCBE4D /* parser.j */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj; path = parser.j; sourceTree = ""; }; + 024A041113699D6800DCBE4D /* parser.j */ = {isa = PBXFileReference; explicitFileType = sourcecode.javascript; fileEncoding = 4; path = parser.j; sourceTree = ""; }; 026F3B6113866B0B00EE5B83 /* xcodecapp-icon-inactive.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xcodecapp-icon-inactive.png"; sourceTree = ""; }; 026F3B6413866E7D00EE5B83 /* xcodecapp-icon-active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xcodecapp-icon-active.png"; sourceTree = ""; }; 027D9989136969DD00D3DB13 /* XcodeCapp.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XcodeCapp.pch; sourceTree = ""; }; @@ -56,6 +59,7 @@ 027FE4BB1462F7D600B1AB92 /* FSEventCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSEventCallback.h; sourceTree = ""; }; 027FE4BC1462F7EB00B1AB92 /* FSEventCallback.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSEventCallback.m; sourceTree = ""; }; 0289AC9314668CAF003CD975 /* XcodeCapp.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = XcodeCapp.icns; sourceTree = ""; }; + 0294F09215D345A500840547 /* mod_pbxproj.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = mod_pbxproj.py; sourceTree = ""; }; 02998CEA1369BF7D006C73DB /* Growl Registration Ticket.growlRegDict */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Growl Registration Ticket.growlRegDict"; sourceTree = ""; }; 02998CF61369C339006C73DB /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Growl.framework; sourceTree = ""; }; 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -156,6 +160,8 @@ 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( + 0294F09215D345A500840547 /* mod_pbxproj.py */, + 0218442415D32B5D00A782B8 /* pbxprojModifier.py */, 4E2D0D00154840B400475C01 /* help.rtfd */, 022BCEA61468632000B72910 /* project.pbxproj.sample */, 027FE4B91462F64E00B1AB92 /* xcodecapp-icon-working.png */, @@ -209,7 +215,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 0440; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "XcodeCapp" */; compatibilityVersion = "Xcode 3.2"; @@ -242,6 +248,8 @@ 0289AC9414668CAF003CD975 /* XcodeCapp.icns in Resources */, 022BCEA71468632000B72910 /* project.pbxproj.sample in Resources */, 4E2D0D01154840B400475C01 /* help.rtfd in Resources */, + 0218442515D32B5D00A782B8 /* pbxprojModifier.py in Resources */, + 0294F09315D345A500840547 /* mod_pbxproj.py in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -286,6 +294,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -307,6 +316,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -336,7 +346,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx10.6; + SDKROOT = macosx; }; name = Debug; }; @@ -352,7 +362,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx10.6; + SDKROOT = macosx; }; name = Release; }; diff --git a/Tools/XcodeCapp/XcodeCapp.xcodeproj/xcuserdata/Tonio.xcuserdatad/xcschemes/xcschememanagement.plist b/Tools/XcodeCapp/XcodeCapp.xcodeproj/xcuserdata/Tonio.xcuserdatad/xcschemes/xcschememanagement.plist index 06978ff0b..202513f40 100644 --- a/Tools/XcodeCapp/XcodeCapp.xcodeproj/xcuserdata/Tonio.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Tools/XcodeCapp/XcodeCapp.xcodeproj/xcuserdata/Tonio.xcuserdatad/xcschemes/xcschememanagement.plist @@ -14,6 +14,11 @@ orderHint 1 + XcodeCapp.xcscheme + + orderHint + 0 + SuppressBuildableAutocreation diff --git a/Tools/XcodeCapp/help.rtfd/TXT.rtf b/Tools/XcodeCapp/help.rtfd/TXT.rtf index 23be8a208..26ff5110a 100644 --- a/Tools/XcodeCapp/help.rtfd/TXT.rtf +++ b/Tools/XcodeCapp/help.rtfd/TXT.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320 +{\rtf1\ansi\ansicpg1252\cocoartf1187 {\fonttbl\f0\fnil\fcharset0 LucidaGrande;\f1\fswiss\fcharset0 Helvetica;\f2\fmodern\fcharset0 Courier; } {\colortbl;\red255\green255\blue255;} @@ -147,7 +147,7 @@ Note that in addition to whatever patterns you specify (if any), XcodeCapp */.svn/*\ */.hg/*\ */Frameworks/*\ -*/.xCodeSupport/*\ +*/.XcodeSupport/*\ */Build/*\ */NS_*.j\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural diff --git a/Tools/XcodeCapp/mod_pbxproj.py b/Tools/XcodeCapp/mod_pbxproj.py new file mode 100755 index 000000000..c7aaed2fc --- /dev/null +++ b/Tools/XcodeCapp/mod_pbxproj.py @@ -0,0 +1,968 @@ +# Copyright 2012 Calvin Rien +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# A pbxproj file is an OpenStep format plist +# {} represents dictionary of key=value pairs delimited by ; +# () represents list of values delimited by , +# file starts with a comment specifying the character type +# // !$*UTF8*$! + +# when adding a file to a project, create the PBXFileReference +# add the PBXFileReference's guid to a group +# create a PBXBuildFile with the PBXFileReference's guid +# add the PBXBuildFile to the appropriate build phase + +# when adding a header search path add +# HEADER_SEARCH_PATHS = "path/**"; +# to each XCBuildConfiguration object + +# Xcode4 will read either a OpenStep or XML plist. +# this script uses `plutil` to validate, read and write +# the pbxproj file. Plutil is available in OS X 10.2 and higher +# Plutil can't write OpenStep plists, so I save as XML + +import re, uuid, sys, os, shutil, subprocess, datetime, json + +from UserDict import IterableUserDict +from UserList import UserList + +class PBXEncoder(json.JSONEncoder): + + def default(self, obj): + """Tests the input object, obj, to encode as JSON.""" + + if isinstance(obj, (PBXList, PBXDict)): + return obj.data + + return json.JSONEncoder.default(self, obj) + + +class PBXDict(IterableUserDict): + def __init__(self, d=None): + if d: + d = dict([(PBXType.Convert(k),PBXType.Convert(v)) for k,v in d.items()]) + + IterableUserDict.__init__(self, d) + + def __setitem__(self, key, value): + IterableUserDict.__setitem__(self, PBXType.Convert(key), PBXType.Convert(value)) + + def remove(self, key): + self.data.pop(PBXType.Convert(key), None) + + + +class PBXList(UserList): + def __init__(self, l=None): + if isinstance(l, basestring): + UserList.__init__(self) + self.add(l) + return + elif l: + l = [PBXType.Convert(v) for v in l] + + UserList.__init__(self, l) + + def add(self, value): + value = PBXType.Convert(value) + + if value in self.data: + return False + + self.data.append(value) + return True + + def remove(self, value): + value = PBXType.Convert(value) + + if value in self.data: + self.data.remove(value) + + def __setitem__(self, key, value): + UserList.__setitem__(self, PBXType.Convert(key), PBXType.Convert(value)) + + +class PBXType(PBXDict): + def __init__(self, d=None): + PBXDict.__init__(self, d) + + if not self.has_key('isa'): + self['isa'] = self.__class__.__name__ + self.id = None + + @staticmethod + def Convert(o): + if isinstance(o, list): + return PBXList(o) + elif isinstance(o, dict): + isa = o.get('isa') + + if not isa: + return PBXDict(o) + + cls = globals().get(isa) + + if cls and issubclass(cls, PBXType): + return cls(o) + + print 'warning: unknown PBX type: %s' % isa + return PBXDict(o) + else: + return o + + @staticmethod + def IsGuid(o): + return re.match('^[A-F0-9]{24}$', str(o)) + + @classmethod + def GenerateId(cls): + return ''.join(str(uuid.uuid4()).upper().split('-')[1:]) + + @classmethod + def Create(cls, *args, **kwargs): + return cls(*args, **kwargs) + + +class PBXFileReference(PBXType): + def __init__(self, d=None): + PBXType.__init__(self, d) + self.build_phase = None + + types = { + '.a':('archive.ar', 'PBXFrameworksBuildPhase'), + '.app': ('wrapper.application', None), + '.s': ('sourcecode.asm', 'PBXSourcesBuildPhase'), + '.c': ('sourcecode.c.c', 'PBXSourcesBuildPhase'), + '.cpp': ('sourcecode.cpp.cpp', 'PBXSourcesBuildPhase'), + '.framework': ('wrapper.framework','PBXFrameworksBuildPhase'), + '.h': ('sourcecode.c.h', None), + '.icns': ('image.icns','PBXResourcesBuildPhase'), + '.m': ('sourcecode.c.objc', 'PBXSourcesBuildPhase'), + '.mm': ('sourcecode.cpp.objcpp', 'PBXSourcesBuildPhase'), + '.nib': ('wrapper.nib', 'PBXResourcesBuildPhase'), + '.plist': ('text.plist.xml', 'PBXResourcesBuildPhase'), + '.png': ('image.png', 'PBXResourcesBuildPhase'), + '.rtf': ('text.rtf', 'PBXResourcesBuildPhase'), + '.tiff': ('image.tiff', 'PBXResourcesBuildPhase'), + '.txt': ('text', 'PBXResourcesBuildPhase'), + '.xcodeproj': ('wrapper.pb-project', None), + '.xib': ('file.xib', 'PBXResourcesBuildPhase'), + '.strings': ('text.plist.strings', 'PBXResourcesBuildPhase'), + '.bundle': ('wrapper.plug-in', 'PBXResourcesBuildPhase'), + '.dylib': ('compiled.mach-o.dylib', 'PBXFrameworksBuildPhase') + } + + trees = [ + '', + '', + 'BUILT_PRODUCTS_DIR', + 'DEVELOPER_DIR', + 'SDKROOT', + 'SOURCE_ROOT', + ] + + def guess_file_type(self): + self.remove('explicitFileType') + self.remove('lastKnownFileType') + ext = os.path.splitext(self.get('name', ''))[1] + + f_type, build_phase = PBXFileReference.types.get(ext, ('?', None)) + + self['lastKnownFileType'] = f_type + self.build_phase = build_phase + + if f_type == '?': + print 'unknown file extension: %s' % ext + print 'please add extension and Xcode type to PBXFileReference.types' + + return f_type + + def set_file_type(self, ft): + self.remove('explicitFileType') + self.remove('lastKnownFileType') + + self['explicitFileType'] = ft + + @classmethod + def Create(cls, os_path, tree='SOURCE_ROOT'): + if tree not in cls.trees: + print 'Not a valid sourceTree type: %s' % tree + return None + + fr = cls() + fr.id = cls.GenerateId() + fr['path'] = os_path + fr['name'] = os.path.split(os_path)[1] + fr['sourceTree'] = '' if os.path.isabs(os_path) else tree + fr.guess_file_type() + + return fr + +class PBXBuildFile(PBXType): + def set_weak_link(self, weak=False): + k_settings = 'settings' + k_attributes = 'ATTRIBUTES' + + s = self.get(k_settings) + + if not s: + if weak: + self[k_settings] = PBXDict({k_attributes:PBXList(['Weak'])}) + + return True + + atr = s.get(k_attributes) + + if not atr: + if weak: + atr = PBXList() + else: + return False + + if weak: + atr.add('Weak') + else: + atr.remove('Weak') + + self[k_settings][k_attributes] = atr + + return True + + def add_compiler_flag(self, flag): + k_settings = 'settings' + k_attributes = 'COMPILER_FLAGS' + + if not self.has_key(k_settings): + self[k_settings] = PBXDict() + + if not self[k_settings].has_key(k_attributes): + self[k_settings][k_attributes] = flag + return True + + flags = self[k_settings][k_attributes].split(' ') + + if flag in flags: + return False + + flags.append(flag) + + self[k_settings][k_attributes] = ' '.join(flags) + + @classmethod + def Create(cls, file_ref, weak=False): + if isinstance(file_ref, PBXFileReference): + file_ref = file_ref.id + + bf = cls() + bf.id = cls.GenerateId() + bf['fileRef'] = file_ref + + if weak: + bf.set_weak_link(True) + + return bf + +class PBXGroup(PBXType): + def add_child(self, ref): + if not isinstance(ref, PBXDict): + return None + + isa = ref.get('isa') + + if isa != 'PBXFileReference' and isa != 'PBXGroup': + return None + + if not self.has_key('children'): + self['children'] = PBXList() + + self['children'].add(ref.id) + + return ref.id + + def remove_child(self, id): + if not self.has_key('children'): + self['children'] = PBXList() + return + + if not PBXType.IsGuid(id): + id = id.id + + self['children'].remove(id) + + def has_child(self, id): + if not self.has_key('children'): + self['children'] = PBXList() + return False + + if not PBXType.IsGuid(id): + id = id.id + + return id in self['children'] + + def get_name(self): + path_name = os.path.split(self.get('path',''))[1] + return self.get('name', path_name) + + @classmethod + def Create(cls, name, path=None, tree='SOURCE_ROOT'): + grp = cls() + grp.id = cls.GenerateId() + grp['name'] = name + grp['children'] = PBXList() + + if path: + grp['path'] = path + grp['sourceTree'] = tree + else: + grp['sourceTree'] = '' + + return grp + + +class PBXNativeTarget(PBXType): + pass + + +class PBXProject(PBXType): + pass + + +class PBXContainerItemProxy(PBXType): + pass + + +class PBXReferenceProxy(PBXType): + pass + + +class PBXVariantGroup(PBXType): + pass + + +class PBXBuildPhase(PBXType): + def add_build_file(self, bf): + if bf.get('isa') != 'PBXBuildFile': + return False + + if not self.has_key('files'): + self['files'] = PBXList() + + self['files'].add(bf.id) + + return True + + def remove_build_file(self, id): + if not self.has_key('files'): + self['files'] = PBXList() + return + + self['files'].remove(id) + + def has_build_file(self, id): + if not self.has_key('files'): + self['files'] = PBXList() + return False + + if not PBXType.IsGuid(id): + id = id.id + + return id in self['files'] + + +class PBXFrameworksBuildPhase(PBXBuildPhase): + pass + + +class PBXResourcesBuildPhase(PBXBuildPhase): + pass + + +class PBXShellScriptBuildPhase(PBXBuildPhase): + pass + + +class PBXSourcesBuildPhase(PBXBuildPhase): + pass + + +class PBXCopyFilesBuildPhase(PBXBuildPhase): + pass + + +class XCBuildConfiguration(PBXType): + def add_search_paths(self, paths, base, key, recursive=True): + modified = False + + if not isinstance(paths, list): + paths = [paths] + + if not self.has_key(base): + self[base] = PBXDict() + + for path in paths: + if recursive and not path.endswith('/**'): + path = os.path.join(path, '**') + + if not self[base].has_key(key): + self[base][key] = PBXList() + elif isinstance(self[base][key], basestring): + self[base][key] = PBXList(self[base][key]) + + if self[base][key].add('\\"%s\\"' % path): + modified = True + + return modified + + def add_header_search_paths(self, paths, recursive=True): + return self.add_search_paths(paths, 'buildSettings', 'HEADER_SEARCH_PATHS', recursive=recursive) + + def add_library_search_paths(self, paths, recursive=True): + return self.add_search_paths(paths, 'buildSettings', 'LIBRARY_SEARCH_PATHS', recursive=recursive) + + def add_other_cflags(self, flags): + modified = False + + base = 'buildSettings' + key = 'OTHER_CFLAGS' + + if isinstance(flags, basestring): + flags = PBXList(flags) + + if not self.has_key(base): + self[base] = PBXDict() + + for flag in flags: + + if not self[base].has_key(key): + self[base][key] = PBXList() + elif isinstance(self[base][key], basestring): + self[base][key] = PBXList(self[base][key]) + + if self[base][key].add(flag): + self[base][key] = [e for e in self[base][key] if e] + modified = True + + return modified + + +class XCConfigurationList(PBXType): + pass + + +class XcodeProject(PBXDict): + plutil_path = 'plutil' + special_folders = ['.bundle', '.framework', '.xcodeproj'] + + def __init__(self, d=None, path=None): + if not path: + path = os.path.join(os.getcwd(), 'project.pbxproj') + + self.pbxproj_path =os.path.abspath(path) + self.source_root = os.path.abspath(os.path.join(os.path.split(path)[0], '..')) + + IterableUserDict.__init__(self, d) + + self.data = PBXDict(self.data) + self.objects = self.get('objects') + self.modified = False + + root_id = self.get('rootObject') + if root_id: + self.root_object = self.objects[root_id] + root_group_id = self.root_object.get('mainGroup') + self.root_group = self.objects[root_group_id] + else: + print "error: project has no root object" + self.root_object = None + self.root_group = None + + for k,v in self.objects.iteritems(): + v.id = k + + def add_other_cflags(self, flags): + build_configs = [b for b in self.objects.values() if b.get('isa') == 'XCBuildConfiguration'] + + for b in build_configs: + if b.add_other_cflags(flags): + self.modified = True + + def add_header_search_paths(self, paths, recursive=True): + build_configs = [b for b in self.objects.values() if b.get('isa') == 'XCBuildConfiguration'] + + for b in build_configs: + if b.add_header_search_paths(paths, recursive): + self.modified = True + + def add_library_search_paths(self, paths, recursive=True): + build_configs = [b for b in self.objects.values() if b.get('isa') == 'XCBuildConfiguration'] + + for b in build_configs: + if b.add_library_search_paths(paths, recursive): + self.modified = True + + # TODO: need to return value if project has been modified + + def get_obj(self, id): + return self.objects.get(id) + + def get_files_by_os_path(self, os_path, tree='SOURCE_ROOT'): + files = [f for f in self.objects.values() if f.get('isa') == 'PBXFileReference' + and f.get('path') == os_path] + + return files + + def get_files_by_name(self, name, parent=None): + if parent: + files = [f for f in self.objects.values() if f.get('isa') == 'PBXFileReference' + and f.get(name) == name + and parent.has_child(f)] + else: + files = [f for f in self.objects.values() if f.get('isa') == 'PBXFileReference' + and f.get(name) == name] + + return files + + def get_build_files(self, id): + files = [f for f in self.objects.values() if f.get('isa') == 'PBXBuildFile' + and f.get('fileRef') == id] + + return files + + def get_groups_by_name(self, name, parent=None): + if parent: + groups = [g for g in self.objects.values() if g.get('isa') == 'PBXGroup' + and g.get_name() == name + and parent.has_child(g)] + else: + groups = [g for g in self.objects.values() if g.get('isa') == 'PBXGroup' + and g.get_name() == name] + + return groups + + def get_or_create_group(self, name, path=None, parent=None): + if not name: + return None + + if not parent: + parent = self.root_group + elif not isinstance(parent, PBXGroup): + # assume it's an id + parent = self.objects.get(parent, self.root_group) + + groups = self.get_groups_by_name(name) + + for grp in groups: + if parent.has_child(grp.id): + return grp + + grp = PBXGroup.Create(name, path) + parent.add_child(grp) + + self.objects[grp.id] = grp + + self.modified = True + + return grp + + def get_groups_by_os_path(self, path): + path = os.path.abspath(path) + + groups = [g for g in self.objects.values() if g.get('isa') == 'PBXGroup' + and os.path.abspath(g.get('path','/dev/null')) == path] + + return groups + + def get_build_phases(self, phase_name): + phases = [p for p in self.objects.values() if p.get('isa') == phase_name] + + return phases + + def get_relative_path(self, os_path): + return os.path.relpath(os_path, self.source_root) + + def verify_files(self, file_list, parent=None): + # returns list of files not in the current project. + if not file_list: + return [] + + if parent: + exists_list = [f.get('name') for f in self.objects.values() if f.get('isa') == 'PBXFileReference' and f.get('name') in file_list and parent.has_child(f)] + else: + exists_list = [f.get('name') for f in self.objects.values() if f.get('isa') == 'PBXFileReference' and f.get('name') in file_list] + + return set(file_list).difference(exists_list) + + def add_folder(self, os_path, parent=None, excludes=None, recursive=True, create_build_files=True): + if not os.path.isdir(os_path): + return [] + + if not excludes: + excludes = [] + + results = [] + + if not parent: + parent = self.root_group + elif not isinstance(parent, PBXGroup): + # assume it's an id + parent = self.objects.get(parent, self.root_group) + + path_dict = {os.path.split(os_path)[0]:parent} + special_list = [] + + for (grp_path, subdirs, files) in os.walk(os_path): + parent_folder, folder_name = os.path.split(grp_path) + parent = path_dict.get(parent_folder, parent) + + if [sp for sp in special_list if parent_folder.startswith(sp)]: + continue + + if folder_name.startswith('.'): + special_list.append(grp_path) + continue + + if os.path.splitext(grp_path)[1] in XcodeProject.special_folders: + # if this file has a special extension (bundle or framework mainly) treat it as a file + special_list.append(grp_path) + + new_files = self.verify_files([folder_name], parent=parent) + + if new_files: + results.extend(self.add_file(grp_path, parent, create_build_files=create_build_files)) + + continue + + # create group + grp = self.get_or_create_group(folder_name, path=self.get_relative_path(grp_path) , parent=parent) + path_dict[grp_path] = grp + + results.append(grp) + + file_dict = {} + + for f in files: + if f[0] == '.' or [m for m in excludes if re.match(m,f)]: + continue + + kwds = { + 'create_build_files': create_build_files, + 'parent': grp, + 'name': f + } + + f_path = os.path.join(grp_path, f) + + file_dict[f_path] = kwds + + new_files = self.verify_files([n.get('name') for n in file_dict.values()], parent=grp) + + add_files = [(k,v) for k,v in file_dict.items() if v.get('name') in new_files] + + for path, kwds in add_files: + kwds.pop('name', None) + + self.add_file(path, **kwds) + + if not recursive: + break + + for r in results: + self.objects[r.id] = r + + return results + + def add_file(self, f_path, parent=None, tree='SOURCE_ROOT', create_build_files=True, weak=False): + results = [] + + abs_path = '' + + if os.path.isabs(f_path): + abs_path = f_path + + if not os.path.exists(f_path): + return results + elif tree == 'SOURCE_ROOT': + f_path = os.path.relpath(f_path, self.source_root) + else: + tree = '' + + if not parent: + parent = self.root_group + elif not isinstance(parent, PBXGroup): + # assume it's an id + parent = self.objects.get(parent, self.root_group) + + file_ref = PBXFileReference.Create(f_path, tree) + parent.add_child(file_ref) + results.append(file_ref) + # create a build file for the file ref + if file_ref.build_phase and create_build_files: + phases = self.get_build_phases(file_ref.build_phase) + + for phase in phases: + build_file = PBXBuildFile.Create(file_ref, weak=weak) + + phase.add_build_file(build_file) + results.append(build_file) + + if abs_path and tree == 'SOURCE_ROOT' and os.path.isfile(abs_path)\ + and file_ref.build_phase == 'PBXFrameworksBuildPhase': + + library_path = os.path.join('$(SRCROOT)', os.path.split(f_path)[0]) + + self.add_library_search_paths([library_path], recursive=False) + + for r in results: + self.objects[r.id] = r + + if results: + self.modified = True + + return results + + def remove_group(self, grp): + pass + + def remove_file(self, path, parent): + files = self.get_files_by_os_path(path) + for r in files: + del self.objects[r.id] + self.modified = True + + def move_file(self, id, dest_grp=None): + pass + + def apply_patch(self, patch_path, xcode_path): + if not os.path.isfile(patch_path) or not os.path.isdir(xcode_path): + print 'ERROR: couldn\'t apply "%s" to "%s"' % (patch_path, xcode_path) + return + + print 'applying "%s" to "%s"' % (patch_path, xcode_path) + + return subprocess.call(['patch', '-p1', '--forward', '--directory=%s'%xcode_path, '--input=%s'%patch_path]) + + def apply_mods(self, mod_dict, default_path=None): + if not default_path: + default_path = os.getcwd() + + keys = mod_dict.keys() + + for k in keys: + v = mod_dict.pop(k) + + mod_dict[k.lower()] = v + + parent = mod_dict.pop('group', None) + + if parent: + parent = self.get_or_create_group(parent) + + excludes = mod_dict.pop('excludes', []) + + if excludes: + excludes = [re.compile(e) for e in excludes] + + compiler_flags = mod_dict.pop('compiler_flags', {}) + + for k,v in mod_dict.items(): + if k == 'patches': + for p in v: + if not os.path.isabs(p): + p = os.path.join(default_path, p) + + self.apply_patch(p, self.source_root) + elif k == 'folders': + # get and compile excludes list + # do each folder individually + for folder in v: + kwds = {} + + # if path contains ':' remove it and set recursive to False + if ':' in folder: + args = folder.split(':') + kwds['recursive'] = False + folder = args.pop(0) + + if os.path.isabs(folder) and os.path.isdir(folder): + pass + else: + folder = os.path.join(default_path, folder) + if not os.path.isdir(folder): + continue + + if parent: + kwds['parent'] = parent + + if excludes: + kwds['excludes'] = excludes + + self.add_folder(folder, **kwds) + elif k == 'headerpaths' or k == 'librarypaths': + paths = [] + + for p in v: + if p.endswith('/**'): + p = os.path.split(p)[0] + + if not os.path.isabs(p): + p = os.path.join(default_path, p) + + if not os.path.exists(p): + continue + + p = self.get_relative_path(p) + + paths.append(os.path.join('$(SRCROOT)', p, "**")) + + if k == 'headerpaths': + self.add_header_search_paths(paths) + else: + self.add_library_search_paths(paths) + elif k == 'other_cflags': + self.add_other_cflags(v) + elif k == 'libs' or k == 'frameworks' or k == 'files': + paths = {} + + for p in v: + kwds = {} + + if ':' in p: + args = p.split(':') + p = args.pop(0) + + if 'weak' in args: + kwds['weak'] = True + + file_path = os.path.join(default_path, p) + search_path, file_name = os.path.split(file_path) + + if [m for m in excludes if re.match(m,file_name)]: + continue + + try: + expr = re.compile(file_name) + except re.error: + expr = None + + if expr and os.path.isdir(search_path): + file_list = os.listdir(search_path) + + for f in file_list: + if [m for m in excludes if re.match(m,f)]: + continue + + if re.search(expr,f): + kwds['name'] = f + paths[os.path.join(search_path, f)] = kwds + p = None + + if k == 'libs': + kwds['parent'] = self.get_or_create_group('Libraries', parent=parent) + elif k == 'frameworks': + kwds['parent'] = self.get_or_create_group('Frameworks', parent=parent) + + if p: + kwds['name'] = file_name + + if k == 'libs': + p = os.path.join('usr','lib',p) + kwds['tree'] = 'SDKROOT' + elif k == 'frameworks': + p = os.path.join('System','Library','Frameworks',p) + kwds['tree'] = 'SDKROOT' + elif k == 'files' and not os.path.exists(file_path): + # don't add non-existent files to the project. + continue + + paths[p] = kwds + + new_files = self.verify_files([n.get('name') for n in paths.values()]) + + add_files = [(k,v) for k,v in paths.items() if v.get('name') in new_files] + + for path, kwds in add_files: + kwds.pop('name', None) + + if not kwds.has_key('parent') and parent: + kwds['parent'] = parent + + self.add_file(path, **kwds) + + if compiler_flags: + for k,v in compiler_flags.items(): + filerefs = [] + + for f in v: + filerefs.extend([fr.id for fr in self.objects.values() if fr.get('isa') == 'PBXFileReference' + and fr.get('name') == f]) + + + buildfiles = [bf for bf in self.objects.values() if bf.get('isa') == 'PBXBuildFile' + and bf.get('fileRef') in filerefs] + + for bf in buildfiles: + if bf.add_compiler_flag(k): + self.modified = True + + + def backup(self, file_name=None): + if not file_name: + file_name = self.pbxproj_path + + backup_name = "%s.%s.backup" % (file_name, datetime.datetime.now().strftime('%d%m%y-%H%M%S')) + + shutil.copy2(file_name, backup_name) + + def save(self, file_name=None): + if not file_name: + file_name = self.pbxproj_path + + # JSON serialize the project and convert that json to an xml plist + p = subprocess.Popen([XcodeProject.plutil_path, '-convert', 'xml1', '-o', file_name, '-'], stdin=subprocess.PIPE) + p.communicate(PBXEncoder().encode(self.data)) + + @classmethod + def Load(cls, path): + cls.plutil_path = os.path.join(os.path.split(__file__)[0], 'plutil') + + if not os.path.isfile(XcodeProject.plutil_path): + cls.plutil_path = 'plutil' + + if subprocess.call([XcodeProject.plutil_path,'-lint','-s',path]): + print 'ERROR: not a valid .pbxproj file' + return None + + # load project by converting to JSON and parse + p = subprocess.Popen([XcodeProject.plutil_path, '-convert', 'json', '-o', '-', path], stdout=subprocess.PIPE) + tree = json.loads(p.communicate()[0]) + + return XcodeProject(tree, path) + + +def test(argv=None): + if not argv: + argv = sys.argv + + proj = XcodeProject.Load('../../Build/Unity-iPhone.xcodeproj/project.pbxproj') + + proj.add_folder('../Assets/Editor/Airship/UI/Default/StoreFront') + + proj.add_file('../Assets/Editor/Airship/libUAirship-1.1.4.a') + proj.add_file('../Assets/Plugins/Airship/AirshipConfig.plist') + + proj.backup() + proj.save() + + print str(proj) + diff --git a/Tools/XcodeCapp/parser.j b/Tools/XcodeCapp/parser.j index 25067a9d2..f765fb598 100644 --- a/Tools/XcodeCapp/parser.j +++ b/Tools/XcodeCapp/parser.j @@ -86,7 +86,7 @@ function main(args) types[anIndex] = NSCompatibleClassName(aType, YES); }); - outlets.push(" " + types.join(" ") + " " + ivar_getName(anIvar) + ";"); + outlets.push("@property (assign) " + types.join(" ") + " " + ivar_getName(anIvar) + ";"); } }); @@ -105,13 +105,17 @@ function main(args) superClassName = superClasses[className]; ObjectiveCSource += + "#import \n" + + "#import \n" + "\n@interface " + class_getName(aClass) + (superClassName === "Nil" ? "" : (" : " + NSCompatibleClassName(superClassName))) + - "\n{\n" + + "\n\n" + outlets.join("\n") + - "\n}\n" + + "\n" + actions.join("\n") + - "\n@end"; + "\n@end\n\n"+ + "\n@implementation " + class_getName(aClass) + + "\n@end\n"; }); if (ObjectiveCSource.length) diff --git a/Tools/XcodeCapp/pbxprojModifier.py b/Tools/XcodeCapp/pbxprojModifier.py new file mode 100755 index 000000000..b81ebb29d --- /dev/null +++ b/Tools/XcodeCapp/pbxprojModifier.py @@ -0,0 +1,51 @@ +import sys, os +from mod_pbxproj import XcodeProject + +XCODESUPPORTFOLDER = ".XcodeSupport" + +def add_file(project, shadowGroup, sourceGroup, shadowPath, sourcePath, projectBaseURL): + project.add_file(shadowPath, parent=shadowGroup) + project.add_file(sourcePath, parent=sourceGroup) + project.save() + +def remove_file(project, shadowGroup, sourceGroup, shadowPath, sourcePath, projectBaseURL): + project.remove_file("%s/%s" % (XCODESUPPORTFOLDER, os.path.basename(shadowPath)), parent=shadowGroup) + project.remove_file(os.path.relpath(sourcePath, projectBaseURL), parent=sourceGroup) + project.save() + + +if __name__ == '__main__': + + action = sys.argv[1] + PBXProjectFilePath = sys.argv[2] + shadowFilePath = sys.argv[3] + sourceFilePath = sys.argv[4] + projectBaseURL = sys.argv[5] + + project = XcodeProject.Load(PBXProjectFilePath) + + shadowGroup = project.get_or_create_group('Classes') + sourceGroup = project.get_or_create_group('Sources') + + if "main.m" in shadowFilePath: + sys.exit(0) + + files = project.get_files_by_os_path("%s/%s" % (XCODESUPPORTFOLDER, os.path.basename(shadowFilePath))) + + if action == "add" and len(files) == 0: + add_file(project, shadowGroup, sourceGroup, shadowFilePath, sourceFilePath, projectBaseURL) + + elif action == "remove" and len(files) == 1: + remove_file(project, shadowGroup, sourceGroup, shadowFilePath, sourceFilePath, projectBaseURL) + + + + + + + + + + + + \ No newline at end of file diff --git a/Tools/XcodeCapp/project.pbxproj.sample b/Tools/XcodeCapp/project.pbxproj.sample index 88efdb71f..45e5b705f 100644 --- a/Tools/XcodeCapp/project.pbxproj.sample +++ b/Tools/XcodeCapp/project.pbxproj.sample @@ -8,28 +8,16 @@ /* Begin PBXBuildFile section */ 9EEC4498135749D200615446 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EEC4497135749D200615446 /* Cocoa.framework */; }; - 9EEC44B5135749D300615446 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EEC4497135749D200615446 /* Cocoa.framework */; }; - 9EEC44CC13574A0B00615446 /* ${CappuccinoProjectName} in Resources */ = {isa = PBXBuildFile; fileRef = 9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */; }; + 9EEC44CC13574A0B00615446 /* CappuccinoResources in Resources */ = {isa = PBXBuildFile; fileRef = 9EEC44CB13574A0B00615446 /* CappuccinoResources */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 9EEC44B6135749D300615446 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 9EEC448A135749D200615446 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9EEC4492135749D200615446; - remoteInfo = Another; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ 9EEC4493135749D200615446 /* Another.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Another.app; sourceTree = BUILT_PRODUCTS_DIR; }; 9EEC4497135749D200615446 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 9EEC449A135749D300615446 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 9EEC449B135749D300615446 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 9EEC449C135749D300615446 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 9EEC44B4135749D300615446 /* AnotherTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AnotherTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; - 9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ${CappuccinoProjectName}; path = ${CappuccinoProjectRelativePath}; sourceTree = ""; }; + 9EEC44CB13574A0B00615446 /* CappuccinoResources */ = {isa = PBXFileReference; lastKnownFileType = folder; name = CappuccinoResources; path = Resources; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -41,23 +29,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9EEC44B0135749D300615446 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9EEC44B5135749D300615446 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 9EEC4488135749D200615446 = { isa = PBXGroup; children = ( - 9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */, + 9EEC44CB13574A0B00615446 /* CappuccinoResources */, 9EEC4496135749D200615446 /* Frameworks */, - 9EEC4494135749D200615446 /* Products */, ); sourceTree = ""; }; @@ -65,7 +44,6 @@ isa = PBXGroup; children = ( 9EEC4493135749D200615446 /* Another.app */, - 9EEC44B4135749D300615446 /* AnotherTests.octest */, ); name = Products; sourceTree = ""; @@ -109,34 +87,16 @@ productReference = 9EEC4493135749D200615446 /* Another.app */; productType = "com.apple.product-type.application"; }; - 9EEC44B3135749D300615446 /* AnotherTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */; - buildPhases = ( - 9EEC44AF135749D300615446 /* Sources */, - 9EEC44B0135749D300615446 /* Frameworks */, - 9EEC44B1135749D300615446 /* Resources */, - 9EEC44B2135749D300615446 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - 9EEC44B7135749D300615446 /* PBXTargetDependency */, - ); - name = AnotherTests; - productName = AnotherTests; - productReference = 9EEC44B4135749D300615446 /* AnotherTests.octest */; - productType = "com.apple.product-type.bundle"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 9EEC448A135749D200615446 /* Project object */ = { isa = PBXProject; attributes = { + LastUpgradeCheck = 0440; ORGANIZATIONNAME = "280 North, Inc."; }; - buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */; + buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "XCCSampleProj" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -149,7 +109,6 @@ projectRoot = ""; targets = ( 9EEC4492135749D200615446 /* Another */, - 9EEC44B3135749D300615446 /* AnotherTests */, ); }; /* End PBXProject section */ @@ -159,35 +118,12 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9EEC44CC13574A0B00615446 /* ${CappuccinoProjectName} in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9EEC44B1135749D300615446 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + 9EEC44CC13574A0B00615446 /* CappuccinoResources in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 9EEC44B2135749D300615446 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 9EEC448F135749D200615446 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -196,23 +132,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9EEC44AF135749D300615446 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 9EEC44B7135749D300615446 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 9EEC4492135749D200615446 /* Another */; - targetProxy = 9EEC44B6135749D300615446 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ 9EEC44C3135749D300615446 /* Debug */ = { isa = XCBuildConfiguration; @@ -250,6 +171,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; @@ -265,6 +187,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_OBJC_EXCEPTIONS = YES; @@ -276,54 +199,10 @@ }; name = Release; }; - 9EEC44C9135749D300615446 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Another.app/Contents/MacOS/Another"; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "AnotherTests/AnotherTests-Prefix.pch"; - INFOPLIST_FILE = "AnotherTests/AnotherTests-Info.plist"; - OTHER_LDFLAGS = ( - "-framework", - SenTestingKit, - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = octest; - }; - name = Debug; - }; - 9EEC44CA135749D300615446 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Another.app/Contents/MacOS/Another"; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "AnotherTests/AnotherTests-Prefix.pch"; - INFOPLIST_FILE = "AnotherTests/AnotherTests-Info.plist"; - OTHER_LDFLAGS = ( - "-framework", - SenTestingKit, - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = octest; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */ = { + 9EEC448D135749D200615446 /* Build configuration list for PBXProject "XCCSampleProj" */ = { isa = XCConfigurationList; buildConfigurations = ( 9EEC44C3135749D300615446 /* Debug */, @@ -339,16 +218,9 @@ 9EEC44C7135749D300615446 /* Release */, ); defaultConfigurationIsVisible = 0; - }; - 9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9EEC44C9135749D300615446 /* Debug */, - 9EEC44CA135749D300615446 /* Release */, - ); - defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 9EEC448A135749D200615446 /* Project object */; -} \ No newline at end of file +} diff --git a/Tools/XcodeCapp/xcodecapp-icon-active.png b/Tools/XcodeCapp/xcodecapp-icon-active.png index dc3abcf7c..0189c9df0 100644 Binary files a/Tools/XcodeCapp/xcodecapp-icon-active.png and b/Tools/XcodeCapp/xcodecapp-icon-active.png differ diff --git a/Tools/XcodeCapp/xcodecapp-icon-inactive.png b/Tools/XcodeCapp/xcodecapp-icon-inactive.png index 6ee8fea8a..679c6c158 100644 Binary files a/Tools/XcodeCapp/xcodecapp-icon-inactive.png and b/Tools/XcodeCapp/xcodecapp-icon-inactive.png differ diff --git a/Tools/XcodeCapp/xcodecapp-icon-working.png b/Tools/XcodeCapp/xcodecapp-icon-working.png index aeb981ca5..149ab622c 100644 Binary files a/Tools/XcodeCapp/xcodecapp-icon-working.png and b/Tools/XcodeCapp/xcodecapp-icon-working.png differ diff --git a/Tools/capp/Resources/Templates/Application/Resources/spinner.gif b/Tools/capp/Resources/Templates/Application/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tools/capp/Resources/Templates/Application/Resources/spinner.gif and b/Tools/capp/Resources/Templates/Application/Resources/spinner.gif differ diff --git a/Tools/capp/Resources/Templates/NibApplication/Resources/spinner.gif b/Tools/capp/Resources/Templates/NibApplication/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tools/capp/Resources/Templates/NibApplication/Resources/spinner.gif and b/Tools/capp/Resources/Templates/NibApplication/Resources/spinner.gif differ diff --git a/Tools/capp/Resources/Templates/ThemeDescriptor/Resources/spinner.gif b/Tools/capp/Resources/Templates/ThemeDescriptor/Resources/spinner.gif index 06dbc2bc2..77b36416b 100644 Binary files a/Tools/capp/Resources/Templates/ThemeDescriptor/Resources/spinner.gif and b/Tools/capp/Resources/Templates/ThemeDescriptor/Resources/spinner.gif differ diff --git a/Tools/nib2cib/NSCell.j b/Tools/nib2cib/NSCell.j index 23ba1264f..47e6fb233 100644 --- a/Tools/nib2cib/NSCell.j +++ b/Tools/nib2cib/NSCell.j @@ -78,12 +78,12 @@ _controlSize = (flags2 & 0xE0000) >> 17; _sendsActionOnEndEditing = (flags2 & 0x00400000) ? YES : NO; + _tag = [aCoder decodeIntForKey:@"NSTag"]; + _objectValue = [aCoder decodeObjectForKey:@"NSContents"]; _font = [aCoder decodeObjectForKey:@"NSSupport"]; _formatter = [aCoder decodeObjectForKey:@"NSFormatter"]; - - _tag = [aCoder decodeIntForKey:@"NSTag"]; } return self; diff --git a/bootstrap.sh b/bootstrap.sh index 5491ddb04..dd4d6948f 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -139,7 +139,7 @@ install_directory="" tmp_zip="/tmp/cappuccino.zip" github_user="cappuccino" -github_ref="v0.9.6-RC1" +github_ref="v0.9.6-RC2" noprompt="" install_capp=""