From 25633f03c554ef2447eb8473e93f1e68e4ee804d Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Sun, 27 Jan 2013 01:06:16 +0800 Subject: [PATCH 1/4] Child window support - Added child window support with test app - Miscellaneous cleanup - Reformatted switches --- AppKit/CPAnimation.j | 28 +- AppKit/CPWindow/_CPWindow.j | 118 ++- AppKit/CPWindow/_CPWindowView.j | 38 +- AppKit/Platform/DOM/CPDOMWindowLayer.j | 6 +- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 109 ++- Tests/Manual/ChildWindows/AppController.j | 37 + .../ChildWindows.xcodeproj/project.pbxproj | 500 +++++++++++++ .../contents.xcworkspacedata | 7 + Tests/Manual/ChildWindows/Info.plist | 10 + Tests/Manual/ChildWindows/Jakefile | 94 +++ .../ChildWindows/Resources/MainMenu.cib | 1 + .../ChildWindows/Resources/MainMenu.xib | 680 ++++++++++++++++++ .../Manual/ChildWindows/Resources/spinner.gif | Bin 0 -> 1434 bytes Tests/Manual/ChildWindows/index-debug.html | 107 +++ Tests/Manual/ChildWindows/index.html | 77 ++ Tests/Manual/ChildWindows/main.j | 18 + 16 files changed, 1778 insertions(+), 52 deletions(-) create mode 100644 Tests/Manual/ChildWindows/AppController.j create mode 100644 Tests/Manual/ChildWindows/ChildWindows.xcodeproj/project.pbxproj create mode 100644 Tests/Manual/ChildWindows/ChildWindows.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Tests/Manual/ChildWindows/Info.plist create mode 100644 Tests/Manual/ChildWindows/Jakefile create mode 100644 Tests/Manual/ChildWindows/Resources/MainMenu.cib create mode 100644 Tests/Manual/ChildWindows/Resources/MainMenu.xib create mode 100644 Tests/Manual/ChildWindows/Resources/spinner.gif create mode 100644 Tests/Manual/ChildWindows/index-debug.html create mode 100644 Tests/Manual/ChildWindows/index.html create mode 100644 Tests/Manual/ChildWindows/main.j diff --git a/AppKit/CPAnimation.j b/AppKit/CPAnimation.j index 77ef2b4c4..c79f1e2bb 100644 --- a/AppKit/CPAnimation.j +++ b/AppKit/CPAnimation.j @@ -123,23 +123,29 @@ ACTUAL_FRAME_RATE = 0; - (void)setAnimationCurve:(CPAnimationCurve)anAnimationCurve { var timingFunctionName; + switch (anAnimationCurve) { - case CPAnimationEaseInOut: timingFunctionName = kCAMediaTimingFunctionEaseInEaseOut; - break; + case CPAnimationEaseInOut: + timingFunctionName = kCAMediaTimingFunctionEaseInEaseOut; + break; - case CPAnimationEaseIn: timingFunctionName = kCAMediaTimingFunctionEaseIn; - break; + case CPAnimationEaseIn: + timingFunctionName = kCAMediaTimingFunctionEaseIn; + break; - case CPAnimationEaseOut: timingFunctionName = kCAMediaTimingFunctionEaseOut; - break; + case CPAnimationEaseOut: + timingFunctionName = kCAMediaTimingFunctionEaseOut; + break; - case CPAnimationLinear: timingFunctionName = kCAMediaTimingFunctionLinear; - break; + case CPAnimationLinear: + timingFunctionName = kCAMediaTimingFunctionLinear; + break; - default: [CPException raise:CPInvalidArgumentException - reason:"Invalid value provided for animation curve"]; - break; + default: + [CPException raise:CPInvalidArgumentException + reason:@"Invalid value provided for animation curve"]; + break; } _animationCurve = anAnimationCurve; diff --git a/AppKit/CPWindow/_CPWindow.j b/AppKit/CPWindow/_CPWindow.j index 890e9e94a..016e03696 100644 --- a/AppKit/CPWindow/_CPWindow.j +++ b/AppKit/CPWindow/_CPWindow.j @@ -198,6 +198,10 @@ var CPWindowActionMessageKeys = [ BOOL _isFullPlatformWindow; _CPWindowFullPlatformWindowSession _fullPlatformWindowSession; + CPWindow _parentWindow; + CPArray _childWindows; + CPWindowOrderingMode _childOrdering @accessors(setter=_setChildOrdering); + CPDictionary _sheetContext; CPWindow _parentView; BOOL _isSheet; @@ -259,6 +263,10 @@ CPTexturedBackgroundWindowMask _acceptsMouseMovedEvents = YES; _isMovable = YES; + _parentWindow = nil; + _childWindows = []; + _childOrdering = CPWindowOut; + _isSheet = NO; _sheetContext = nil; _parentView = nil; @@ -663,10 +671,12 @@ CPTexturedBackgroundWindowMask else { var origin = _frame.origin, - newOrigin = aFrame.origin; + newOrigin = aFrame.origin, + originMoved = !_CGPointEqualToPoint(origin, newOrigin); - if (!_CGPointEqualToPoint(origin, newOrigin)) + if (originMoved) { + delta = _CGPointMake(newOrigin.x - origin.x, newOrigin.y - origin.y); origin.x = newOrigin.x; origin.y = newOrigin.y; @@ -699,9 +709,22 @@ CPTexturedBackgroundWindowMask if ([self _sharesChromeWithPlatformWindow]) [_platformWindow setContentRect:_frame]; + + if (originMoved) + [self _moveChildWindows:delta]; } } +- (void)_moveChildWindows:(CGPoint)delta +{ + [_childWindows enumerateObjectsUsingBlock:function(childWindow) + { + var origin = [childWindow frame].origin; + + [childWindow setFrameOrigin:_CGPointMake(origin.x + delta.x, origin.y + delta.y)]; + }]; +} + /*! Sets the window's frame rect. @param aFrame - The new CGRect of the window. @@ -748,6 +771,11 @@ CPTexturedBackgroundWindowMask @param aSender the object that requested this */ - (void)orderFront:(id)aSender +{ + [self orderWindow:CPWindowAbove relativeTo:0]; +} + +- (void)_orderFront { #if PLATFORM(DOM) // -dw- if a sheet is clicked, the parent window should come up too @@ -775,7 +803,12 @@ CPTexturedBackgroundWindowMask */ - (void)orderBack:(id)aSender { - //[_platformWindow order:CPWindowBelow + [self orderWindow:CPWindowBelow relativeTo:0]; +} + +- (void)_orderBack +{ + // FIXME: Implement this } /*! @@ -783,6 +816,11 @@ CPTexturedBackgroundWindowMask @param the object that requested this */ - (void)orderOut:(id)aSender +{ + [self orderWindow:CPWindowOut relativeTo:0]; +} + +- (void)_orderOut { if ([self isSheet]) { @@ -791,15 +829,13 @@ CPTexturedBackgroundWindowMask return; } + [_parentWindow removeChildWindow:self]; + [_childWindows makeObjectsPerformSelector:@selector(_orderOut)]; + #if PLATFORM(DOM) if ([self _sharesChromeWithPlatformWindow]) [_platformWindow orderOut:self]; -#endif - if ([_delegate respondsToSelector:@selector(windowWillClose:)]) - [_delegate windowWillClose:self]; - -#if PLATFORM(DOM) [_platformWindow order:CPWindowOut window:self relativeTo:nil]; #endif @@ -808,13 +844,20 @@ CPTexturedBackgroundWindowMask /*! Relocates the window in the screen list. - @param aPlace the positioning relative to \c otherWindowNumber + @param orderingMode the positioning relative to \c otherWindowNumber @param otherWindowNumber the window relative to which the receiver should be placed */ -- (void)orderWindow:(CPWindowOrderingMode)aPlace relativeTo:(int)otherWindowNumber +- (void)orderWindow:(CPWindowOrderingMode)orderingMode relativeTo:(int)otherWindowNumber { + if (orderingMode === CPWindowOut) + [self _orderOut]; + else if (orderingMode === CPWindowAbove && otherWindowNumber === 0) + [self _orderFront]; + else if (orderingMode === CPWindowBelow && otherWindowNumber === 0) + [self _orderBack]; #if PLATFORM(DOM) - [_platformWindow order:aPlace window:self relativeTo:CPApp._windows[otherWindowNumber]]; + else + [_platformWindow order:orderingMode window:self relativeTo:CPApp._windows[otherWindowNumber]]; #endif } @@ -1617,7 +1660,7 @@ CPTexturedBackgroundWindowMask var theWindow = [anEvent window], selector = type == CPRightMouseDown ? @selector(rightMouseDown:) : @selector(mouseDown:); - if ([theWindow isKeyWindow] || [theWindow becomesKeyOnlyIfNeeded] && ![_leftMouseDownView needsPanelToBecomeKey]) + if ([theWindow isKeyWindow] || ([theWindow becomesKeyOnlyIfNeeded] && ![_leftMouseDownView needsPanelToBecomeKey])) return [_leftMouseDownView performSelector:selector withObject:anEvent]; else { @@ -2107,6 +2150,9 @@ CPTexturedBackgroundWindowMask */ - (void)close { + if ([_delegate respondsToSelector:@selector(windowWillClose:)]) + [_delegate windowWillClose:self]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowWillCloseNotification object:self]; [self orderOut:nil]; @@ -2315,6 +2361,54 @@ CPTexturedBackgroundWindowMask */ } +/*! + Do NOT modify the array returned by this method! +*/ +- (CPArray)childWindows +{ + return _childWindows; +} + +- (void)addChildWindow:(CPWindow)childWindow ordered:(CPWindowOrderingMode)orderingMode +{ + // Don't add the child if it is already in our list + if ([_childWindows indexOfObject:childWindow] >= 0) + return; + + if (orderingMode === CPWindowAbove || orderingMode === CPWindowBelow) + [_childWindows addObject:childWindow]; + else + [CPException raise:CPInvalidArgumentException + reason:_cmd + @" unrecognized ordering mode " + orderingMode]; + + [childWindow setParentWindow:self]; + [childWindow _setChildOrdering:orderingMode]; + + if ([self isVisible] && ![childWindow isVisible]) + [childWindow orderWindow:orderingMode relativeTo:_windowNumber]; +} + +- (void)removeChildWindow:(CPWindow)childWindow +{ + var index = [_childWindows indexOfObject:childWindow]; + + if (index === CPNotFound) + return; + + [_childWindows removeObjectAtIndex:index]; + [childWindow setParentWindow:nil]; +} + +- (CPWindow)parentWindow +{ + return _parentWindow; +} + +- (CPWindow)setParentWindow:(CPWindow)parentWindow +{ + _parentWindow = parentWindow; +} + - (void)_setFrame:(CGRect)aFrame delegate:(id)delegate duration:(int)duration curve:(CPAnimationCurve)curve { [_frameAnimation stopAnimation]; diff --git a/AppKit/CPWindow/_CPWindowView.j b/AppKit/CPWindow/_CPWindowView.j index 4266085ce..beede5298 100644 --- a/AppKit/CPWindow/_CPWindowView.j +++ b/AppKit/CPWindow/_CPWindowView.j @@ -453,8 +453,8 @@ _CPWindowViewResizeSlop = 3; else if (type === CPLeftMouseDragged) { - var diffX = globalLocation.x - _mouseDraggedPoint.x, - diffY = globalLocation.y - _mouseDraggedPoint.y, + var deltaX = globalLocation.x - _mouseDraggedPoint.x, + deltaY = globalLocation.y - _mouseDraggedPoint.y, newX = _CGRectGetMinX(_resizeFrame), newY = _CGRectGetMinY(_resizeFrame), newWidth = _CGRectGetWidth(_resizeFrame), @@ -469,19 +469,19 @@ _CPWindowViewResizeSlop = 3; case _CPWindowViewResizeRegionTopLeft: case _CPWindowViewResizeRegionLeft: case _CPWindowViewResizeRegionBottomLeft: - if (minSize && diffX > 0) - diffX = MIN(newWidth - minSize.width, diffX); - else if (maxSize && diffX < 0) - diffX = MAX(newWidth - maxSize.width, diffX); + if (minSize && deltaX > 0) + deltaX = MIN(newWidth - minSize.width, deltaX); + else if (maxSize && deltaX < 0) + deltaX = MAX(newWidth - maxSize.width, deltaX); - newX += diffX, - newWidth -= diffX; + newX += deltaX, + newWidth -= deltaX; break; case _CPWindowViewResizeRegionTopRight: case _CPWindowViewResizeRegionRight: case _CPWindowViewResizeRegionBottomRight: - newWidth += diffX; + newWidth += deltaX; break; } @@ -491,19 +491,19 @@ _CPWindowViewResizeSlop = 3; case _CPWindowViewResizeRegionTopLeft: case _CPWindowViewResizeRegionTop: case _CPWindowViewResizeRegionTopRight: - if (minSize && diffY > 0) - diffY = MIN(newHeight - minSize.height, diffY); - else if (maxSize && diffY < 0) - diffY = MAX(newHeight - maxSize.height, diffY); + if (minSize && deltaY > 0) + deltaY = MIN(newHeight - minSize.height, deltaY); + else if (maxSize && deltaY < 0) + deltaY = MAX(newHeight - maxSize.height, deltaY); - newY += diffY, - newHeight -= diffY; + newY += deltaY, + newHeight -= deltaY; break; case _CPWindowViewResizeRegionBottomLeft: case _CPWindowViewResizeRegionBottom: case _CPWindowViewResizeRegionBottomRight: - newHeight += diffY; + newHeight += deltaY; break; } @@ -566,8 +566,10 @@ _CPWindowViewResizeSlop = 3; var theWindow = [self window], frame = [theWindow frame], location = [theWindow convertBaseToGlobal:[anEvent locationInWindow]], - origin = [self _pointWithinScreenFrame:_CGPointMake(_CGRectGetMinX(frame) + (location.x - _mouseDraggedPoint.x), - _CGRectGetMinY(frame) + (location.y - _mouseDraggedPoint.y))]; + deltaX = location.x - _mouseDraggedPoint.x, + deltaY = location.y - _mouseDraggedPoint.y, + origin = [self _pointWithinScreenFrame:_CGPointMake(frame.origin.x + deltaX, + frame.origin.y + deltaY)]; [theWindow setFrameOrigin:origin]; _mouseDraggedPoint = [self _pointWithinScreenFrame:location]; diff --git a/AppKit/Platform/DOM/CPDOMWindowLayer.j b/AppKit/Platform/DOM/CPDOMWindowLayer.j index a919dcff6..ad6a76e4e 100644 --- a/AppKit/Platform/DOM/CPDOMWindowLayer.j +++ b/AppKit/Platform/DOM/CPDOMWindowLayer.j @@ -82,7 +82,7 @@ { // We will have to adjust the z-index of all windows starting at this index. var count = [_windows count], - zIndex = (anIndex == CPNotFound ? count : anIndex), + zIndex = (anIndex === CPNotFound ? count : anIndex), isVisible = aWindow._isVisible; // If the window is already a resident of this layer, remove it. @@ -94,7 +94,7 @@ else ++count; - if (anIndex == CPNotFound || anIndex >= count) + if (anIndex === CPNotFound || anIndex >= count) [_windows addObject:aWindow]; else [_windows insertObject:aWindow atIndex:anIndex]; @@ -113,7 +113,7 @@ aWindow._isVisible = YES; - if ([aWindow isFullBridge]) + if ([aWindow isFullPlatformWindow]) [aWindow setFrame:[aWindow._platformWindow usableContentFrame]]; } } diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index e67c3b7ff..5be94f802 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -284,7 +284,7 @@ var resizeTimer = nil; } } -- (void)orderBack:(id)aSender +- (void)orderBack:(CPWindow)aWindow { if (_DOMWindow) _DOMWindow.blur(); @@ -541,8 +541,11 @@ var resizeTimer = nil; return PlatformWindows; } -- (void)orderFront:(id)aSender +- (void)orderFront:(CPWindow)aWindow { + if ([aWindow parentWindow]) + return; + if (_DOMWindow) return _DOMWindow.focus(); @@ -571,7 +574,7 @@ var resizeTimer = nil; _DOMBodyElement.style.cursor = [[CPCursor currentCursor] _cssString]; } -- (void)orderOut:(id)aSender +- (void)orderOut:(CPWindow)aWindow { if (!_DOMWindow) return; @@ -1399,26 +1402,116 @@ var resizeTimer = nil; return layer; } -- (void)order:(CPWindowOrderingMode)aPlace window:(CPWindow)aWindow relativeTo:(CPWindow)otherWindow +- (void)order:(CPWindowOrderingMode)orderingMode window:(CPWindow)aWindow relativeTo:(CPWindow)otherWindow { [CPPlatform initializeScreenIfNecessary]; // Grab the appropriate level for the layer, and create it if // necessary (if we are not simply removing the window). - var layer = [self layerAtLevel:[aWindow level] create:aPlace !== CPWindowOut]; + var layer = [self layerAtLevel:[aWindow level] create:orderingMode !== CPWindowOut]; - // Ignore otherWindow, simply remove this window from it's level. + // When ordering out, ignore otherWindow, simply remove aWindow from its level. // If layer is nil, this will be a no-op. - if (aPlace === CPWindowOut) + if (orderingMode === CPWindowOut) return [layer removeWindow:aWindow]; + /* + If aWindow is a child of otherWindow and is not yet visible, + aWindow must actually be ordered relative to: + + - otherWindow's last child which is not aWindow, or + - the furthest parent of aWindow + + whichever is frontmost (orderingMode === CPWindowAbove) or rearmost + (orderingMode === CPWindowBelow). + */ + + if (![aWindow isVisible] && otherWindow && [aWindow parentWindow] === otherWindow) + { + var children = [otherWindow childWindows], + lastChild = [children lastObject]; + + if (lastChild === aWindow) + { + if ([children count] > 1) + otherWindow = [children objectAtIndex:[children count] - 2]; + } + else if (lastChild) + otherWindow = lastChild; + + var furthestParent = [self _furthestParentOf:otherWindow]; + + if ((orderingMode === CPWindowAbove && furthestParent._index > otherWindow._index) || + (orderingMode === CPWindowBelow && furthestParent._index < otherWindow._index)) + otherWindow = furthestParent; + } + + /* + If a child window is ordered front, the furthest parent is actually + the one that is ordered front, and all of the descendent children + are ordered after it. + */ + else if (orderingMode === CPWindowAbove && !otherWindow) + aWindow = [self _furthestParentOf:aWindow]; + var insertionIndex = CPNotFound; if (otherWindow) - insertionIndex = aPlace === CPWindowAbove ? otherWindow._index + 1 : otherWindow._index; + insertionIndex = orderingMode === CPWindowAbove ? otherWindow._index + 1 : otherWindow._index; // Place the window at the appropriate index. [layer insertWindow:aWindow atIndex:insertionIndex]; + + // If aWindow is a parent, recursively order all of its children after it + if ([[aWindow childWindows] count]) + [self _orderChildWindowsOf:aWindow furthestParent:[self _furthestParentOf:aWindow] layer:layer]; +} + +- (CPWindow)_furthestParentOf:(CPWindow)aWindow +{ + var parent; + + while ((parent = [aWindow parentWindow])) + aWindow = parent; + + return aWindow; +} + +- (int)_orderChildWindowsOf:(CPWindow)aWindow furthestParent:(CPWindow)furthestParent layer:(CPDOMWindowLayer)aLayer +{ + // When a parent window is ordered, Cocoa orders its child windows + // relative to it or the furthest parent. + var children = [aWindow childWindows], + count = [children count], + parent = aWindow, + index; + + for (var i = 0; i < count; ++i) + { + var child = children[i]; + + if (![child isVisible]) + continue; + + var ordering = [child _childOrdering]; + + if ((ordering === CPWindowAbove && furthestParent._index > parent._index) || + (ordering === CPWindowBelow && furthestParent._index < parent._index)) + parent = furthestParent; + + index = ordering === CPWindowAbove ? parent._index : parent._index - 1; + + [aLayer insertWindow:child atIndex:index]; + + if ([[child childWindows] count]) + index = [self _orderChildWindowsOf:child furthestParent:furthestParent layer:aLayer]; + else + index = [child _childOrdering] === CPWindowAbove ? child._index : child._index - 1; + + parent = child; + } + + return index; } - (void)_removeLayers diff --git a/Tests/Manual/ChildWindows/AppController.j b/Tests/Manual/ChildWindows/AppController.j new file mode 100644 index 000000000..b6837848c --- /dev/null +++ b/Tests/Manual/ChildWindows/AppController.j @@ -0,0 +1,37 @@ +/* + * AppController.j + * ChildWindows + * + * Created by You on January 17, 2013. + * Copyright 2013, Your Company All rights reserved. + */ + +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow parent; + @outlet CPWindow child; + @outlet CPWindow grandchild; + @outlet CPWindow other; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + [parent addChildWindow:child ordered:CPWindowAbove]; + [child addChildWindow:grandchild ordered:CPWindowBelow]; + + [other orderFront:self]; + [parent orderFront:self]; +} + +- (@action)move:(id)sender +{ + var origin = [[sender window] frame].origin, + newOrigin = CGPointMake(origin.x + 20, origin.y + 20); + + [[sender window] setFrameOrigin:newOrigin]; +} + +@end diff --git a/Tests/Manual/ChildWindows/ChildWindows.xcodeproj/project.pbxproj b/Tests/Manual/ChildWindows/ChildWindows.xcodeproj/project.pbxproj new file mode 100644 index 000000000..d5d7a4e7d --- /dev/null +++ b/Tests/Manual/ChildWindows/ChildWindows.xcodeproj/project.pbxproj @@ -0,0 +1,500 @@ + + + + + archiveVersion + 1 + classes + + objectVersion + 46 + objects + + 0AF74EFC9A920DFF170E38ED + + children + + FDAB46DEBA3FCECEBACF597D + 4D954F6889E4AF7ECD2955EE + 911D41BBBEC5022E7FE88960 + + isa + PBXGroup + name + Classes + sourceTree + <group> + + 4D954F6889E4AF7ECD2955EE + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + _Users_aparajita_Development_Projects_Clients_SlevenBits_cappuccino_Tests_Manual_ChildWindows_AppController.h + path + .XcodeSupport/_Users_aparajita_Development_Projects_Clients_SlevenBits_cappuccino_Tests_Manual_ChildWindows_AppController.h + sourceTree + SOURCE_ROOT + + 6949447C9F5AEB0551AC5495 + + isa + PBXFileReference + lastKnownFileType + ? + name + AppController.j + path + AppController.j + sourceTree + SOURCE_ROOT + + 911D41BBBEC5022E7FE88960 + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + _Users_aparajita_Development_Projects_Clients_SlevenBits_cappuccino_Tests_Manual_ChildWindows_AppController.m + path + .XcodeSupport/_Users_aparajita_Development_Projects_Clients_SlevenBits_cappuccino_Tests_Manual_ChildWindows_AppController.m + sourceTree + SOURCE_ROOT + + 94AA4B948739AA205B2E5434 + + fileRef + 911D41BBBEC5022E7FE88960 + isa + PBXBuildFile + + 9EEC4488135749D200615446 + + children + + 9EEC44CB13574A0B00615446 + 9EEC4496135749D200615446 + 0AF74EFC9A920DFF170E38ED + BD4D45AF8334AF37B29B9174 + + isa + PBXGroup + sourceTree + <group> + + 9EEC448A135749D200615446 + + attributes + + LastUpgradeCheck + 0440 + ORGANIZATIONNAME + 280 North, Inc. + + buildConfigurationList + 9EEC448D135749D200615446 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + en + + mainGroup + 9EEC4488135749D200615446 + productRefGroup + 9EEC4494135749D200615446 + projectDirPath + + projectRoot + + targets + + 9EEC4492135749D200615446 + + + 9EEC448D135749D200615446 + + buildConfigurations + + 9EEC44C3135749D300615446 + 9EEC44C4135749D300615446 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 9EEC448F135749D200615446 + + buildActionMask + 2147483647 + files + + 94AA4B948739AA205B2E5434 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9EEC4490135749D200615446 + + buildActionMask + 2147483647 + files + + 9EEC4498135749D200615446 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9EEC4491135749D200615446 + + buildActionMask + 2147483647 + files + + 9EEC44CC13574A0B00615446 + + isa + PBXResourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9EEC4492135749D200615446 + + buildConfigurationList + 9EEC44C5135749D300615446 + buildPhases + + 9EEC448F135749D200615446 + 9EEC4490135749D200615446 + 9EEC4491135749D200615446 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Another + productName + Another + productReference + 9EEC4493135749D200615446 + productType + com.apple.product-type.application + + 9EEC4493135749D200615446 + + explicitFileType + wrapper.application + includeInIndex + 0 + isa + PBXFileReference + path + Another.app + sourceTree + BUILT_PRODUCTS_DIR + + 9EEC4494135749D200615446 + + children + + 9EEC4493135749D200615446 + + isa + PBXGroup + name + Products + sourceTree + <group> + + 9EEC4496135749D200615446 + + children + + 9EEC4497135749D200615446 + 9EEC4499135749D300615446 + + isa + PBXGroup + name + Frameworks + sourceTree + <group> + + 9EEC4497135749D200615446 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + Cocoa.framework + path + System/Library/Frameworks/Cocoa.framework + sourceTree + SDKROOT + + 9EEC4498135749D200615446 + + fileRef + 9EEC4497135749D200615446 + isa + PBXBuildFile + + 9EEC4499135749D300615446 + + children + + 9EEC449A135749D300615446 + 9EEC449B135749D300615446 + 9EEC449C135749D300615446 + + isa + PBXGroup + name + Other Frameworks + sourceTree + <group> + + 9EEC449A135749D300615446 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + AppKit.framework + path + System/Library/Frameworks/AppKit.framework + sourceTree + SDKROOT + + 9EEC449B135749D300615446 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + CoreData.framework + path + System/Library/Frameworks/CoreData.framework + sourceTree + SDKROOT + + 9EEC449C135749D300615446 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + Foundation.framework + path + System/Library/Frameworks/Foundation.framework + sourceTree + SDKROOT + + 9EEC44C3135749D300615446 + + buildSettings + + ARCHS + $(ARCHS_STANDARD_32_64_BIT) + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + DEBUG + 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_UNUSED_VARIABLE + YES + MACOSX_DEPLOYMENT_TARGET + 10.6 + ONLY_ACTIVE_ARCH + YES + SDKROOT + macosx + + isa + XCBuildConfiguration + name + Debug + + 9EEC44C4135749D300615446 + + buildSettings + + ARCHS + $(ARCHS_STANDARD_32_64_BIT) + GCC_C_LANGUAGE_STANDARD + gnu99 + 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_UNUSED_VARIABLE + YES + MACOSX_DEPLOYMENT_TARGET + 10.6 + SDKROOT + macosx + + isa + XCBuildConfiguration + name + Release + + 9EEC44C5135749D300615446 + + buildConfigurations + + 9EEC44C6135749D300615446 + 9EEC44C7135749D300615446 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 9EEC44C6135749D300615446 + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COMBINE_HIDPI_IMAGES + YES + COPY_PHASE_STRIP + NO + GCC_DYNAMIC_NO_PIC + NO + GCC_ENABLE_OBJC_EXCEPTIONS + YES + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Another/Another-Prefix.pch + INFOPLIST_FILE + Another/Another-Info.plist + PRODUCT_NAME + $(TARGET_NAME) + WRAPPER_EXTENSION + app + + isa + XCBuildConfiguration + name + Debug + + 9EEC44C7135749D300615446 + + 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 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Another/Another-Prefix.pch + INFOPLIST_FILE + Another/Another-Info.plist + PRODUCT_NAME + $(TARGET_NAME) + WRAPPER_EXTENSION + app + + isa + XCBuildConfiguration + name + Release + + 9EEC44CB13574A0B00615446 + + isa + PBXFileReference + lastKnownFileType + folder + name + CappuccinoResources + path + Resources + sourceTree + <group> + + 9EEC44CC13574A0B00615446 + + fileRef + 9EEC44CB13574A0B00615446 + isa + PBXBuildFile + + BD4D45AF8334AF37B29B9174 + + children + + 6949447C9F5AEB0551AC5495 + + isa + PBXGroup + name + Sources + sourceTree + <group> + + FDAB46DEBA3FCECEBACF597D + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + xcc_general_include.h + path + .XcodeSupport/xcc_general_include.h + sourceTree + SOURCE_ROOT + + + rootObject + 9EEC448A135749D200615446 + + diff --git a/Tests/Manual/ChildWindows/ChildWindows.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tests/Manual/ChildWindows/ChildWindows.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..6de0920af --- /dev/null +++ b/Tests/Manual/ChildWindows/ChildWindows.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Tests/Manual/ChildWindows/Info.plist b/Tests/Manual/ChildWindows/Info.plist new file mode 100644 index 000000000..b912d882b --- /dev/null +++ b/Tests/Manual/ChildWindows/Info.plist @@ -0,0 +1,10 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + ChildWindows + + diff --git a/Tests/Manual/ChildWindows/Jakefile b/Tests/Manual/ChildWindows/Jakefile new file mode 100644 index 000000000..91e834bb8 --- /dev/null +++ b/Tests/Manual/ChildWindows/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * ChildWindows + * + * Created by You on January 17, 2013. + * Copyright 2013, 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 ("ChildWindows", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "ChildWindows.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("ChildWindows"); + task.setIdentifier("com.yourcompany.ChildWindows"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("ChildWindows"); + 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", ["ChildWindows"], 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", "ChildWindows", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "ChildWindows", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "ChildWindows")); + OS.system(["press", "-f", FILE.join("Build", "Release", "ChildWindows"), FILE.join("Build", "Deployment", "ChildWindows")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "ChildWindows")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "ChildWindows"), FILE.join("Build", "Desktop", "ChildWindows", "ChildWindows.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "ChildWindows", "ChildWindows.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "ChildWindows")); + print("----------------------------"); +} diff --git a/Tests/Manual/ChildWindows/Resources/MainMenu.cib b/Tests/Manual/ChildWindows/Resources/MainMenu.cib new file mode 100644 index 000000000..e0b9e3c7c --- /dev/null +++ b/Tests/Manual/ChildWindows/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;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;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;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;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;11E;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;11E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;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;41E;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;42E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;46E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;47E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;41E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;52E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;54E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;55E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;26E;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;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;57E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;59E;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;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;60E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;68E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;73E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;68E;K;31;CPTextFieldPlaceholderStringKeyD;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;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;74E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;75E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;77E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;79E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;56E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;56E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;68E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;80E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;70E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;82E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;56E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;69E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;67E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;56E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;84E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;54E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;85E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;33E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;86E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;86E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;68E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;73E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;68E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;89E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;54E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;90E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;91E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;68E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;73E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;68E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;94E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;54E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;95E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;57E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;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;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;39E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;60E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;39E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;68E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;73E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;68E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;8;delegateS;5;childS;10;grandchildS;5;otherS;6;parentS;5;move:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;22;{{62, 67}, {207, 169}}S;21;{{0, 0}, {1440, 878}}d;1;7S;6;Parentd;1;0S;20;{{0, 0}, {207, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;E;E;S;6;normalS;21;{{49, 70}, {104, 29}}S;19;{{0, 0}, {104, 29}}d;2;45S;9;textfieldS;28;bezeled+editable+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;97E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;98E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;81E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;81E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;69E;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;2;72E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;99E;E;S;20;{{70, 27}, {62, 25}}S;18;{{0, 0}, {62, 25}}d;2;36S;6;buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;97E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;98E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;69E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;81E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;69E;E;S;4;MoveF;d;2;14S;13;AppControllerS;24;{{223, 149}, {303, 169}}S;20;Parent/Child - AboveS;20;{{0, 0}, {303, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;21;{{97, 70}, {104, 29}}S;24;{{484, 110}, {294, 169}}S;24;Child/Grandchild - BelowS;20;{{0, 0}, {294, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;S;21;{{93, 70}, {104, 29}}S;24;{{182, 370}, {207, 169}}S;5;OtherD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;40E;E;E;S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;E;E;d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/ChildWindows/Resources/MainMenu.xib b/Tests/Manual/ChildWindows/Resources/MainMenu.xib new file mode 100644 index 000000000..e99dcdc1a --- /dev/null +++ b/Tests/Manual/ChildWindows/Resources/MainMenu.xib @@ -0,0 +1,680 @@ + + + + 1050 + 12C3012 + 2844 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2844 + + + YES + NSButton + NSButtonCell + NSCustomObject + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{62, 642}, {207, 169}} + 1948778496 + Parent + NSWindow + + + + + 256 + + YES + + + 301 + {{55, 73}, {96, 22}} + + + + YES + + -1804599231 + 272630784 + + + LucidaGrande + 13 + 1044 + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + NO + + + + 268 + {{66, 111}, {74, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Move + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {207, 169} + + + + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + YES + + + AppController + + + 7 + 2 + {{223, 560}, {303, 169}} + 1948778496 + Parent/Child - Above + NSWindow + + + + + 256 + + YES + + + 301 + {{103, 73}, {96, 22}} + + + + YES + + -1804599231 + 272630784 + + + + YES + + + + NO + + + {303, 169} + + + + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + YES + + + 7 + 2 + {{484, 599}, {294, 169}} + 1948778496 + Child/Grandchild - Below + NSWindow + + + + + 256 + + YES + + + 301 + {{99, 73}, {96, 22}} + + + + YES + + -1804599231 + 272630784 + + + + YES + + + + NO + + + {294, 169} + + + + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + YES + + + 7 + 2 + {{182, 339}, {207, 169}} + 1948778496 + Other + NSWindow + + + + + 256 + + YES + + + 301 + {{55, 73}, {96, 22}} + + + + YES + + -1804599231 + 272630784 + + + + YES + + + + NO + + + {207, 169} + + + + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + YES + + + + + YES + + + delegate + + + + 451 + + + + child + + + + 468 + + + + grandchild + + + + 469 + + + + parent + + + + 470 + + + + other + + + + 475 + + + + move: + + + + 478 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 371 + + + YES + + + + + + 372 + + + YES + + + + + + + 450 + + + + + 456 + + + YES + + + + + + 457 + + + + + 460 + + + YES + + + + + + 461 + + + YES + + + + + + 462 + + + YES + + + + + + 463 + + + + + 464 + + + YES + + + + + + 465 + + + YES + + + + + + 466 + + + YES + + + + + + 467 + + + + + 471 + + + YES + + + + + + 472 + + + YES + + + + + + 473 + + + YES + + + + + + 474 + + + + + 476 + + + YES + + + + + + 477 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 371.IBNSWindowAutoPositionCentersHorizontal + 371.IBNSWindowAutoPositionCentersVertical + 371.IBPluginDependency + 371.IBWindowTemplateEditedContentRect + 371.NSWindowTemplate.visibleAtLaunch + 372.IBPluginDependency + 450.IBPluginDependency + 456.IBPluginDependency + 457.IBPluginDependency + 460.IBNSWindowAutoPositionCentersHorizontal + 460.IBNSWindowAutoPositionCentersVertical + 460.IBPluginDependency + 460.IBWindowTemplateEditedContentRect + 460.NSWindowTemplate.visibleAtLaunch + 461.IBPluginDependency + 462.IBPluginDependency + 463.IBPluginDependency + 464.IBNSWindowAutoPositionCentersHorizontal + 464.IBNSWindowAutoPositionCentersVertical + 464.IBPluginDependency + 464.IBWindowTemplateEditedContentRect + 464.NSWindowTemplate.visibleAtLaunch + 465.IBPluginDependency + 466.IBPluginDependency + 467.IBPluginDependency + 471.IBNSWindowAutoPositionCentersHorizontal + 471.IBNSWindowAutoPositionCentersVertical + 471.IBPluginDependency + 471.IBWindowTemplateEditedContentRect + 471.NSWindowTemplate.visibleAtLaunch + 472.IBPluginDependency + 473.IBPluginDependency + 474.IBPluginDependency + 476.IBPluginDependency + 477.IBPluginDependency + + + YES + 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 + {{303, 221}, {480, 360}} + + 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 + {{303, 221}, {480, 360}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 478 + + + + YES + + AppController + NSObject + + move: + id + + + move: + + move: + id + + + + YES + + YES + child + grandchild + other + parent + + + YES + NSWindow + NSWindow + NSWindow + NSWindow + + + + YES + + YES + child + grandchild + other + parent + + + YES + + child + NSWindow + + + grandchild + NSWindow + + + other + NSWindow + + + parent + NSWindow + + + + + IBProjectSource + ./Classes/AppController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + diff --git a/Tests/Manual/ChildWindows/Resources/spinner.gif b/Tests/Manual/ChildWindows/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..a5e705f6cbdf914e5e714c35a8dfef807f19e3c2 GIT binary patch literal 1434 zcmZvbdrVVj7{t$-UNOu86#VHu^|s&3rWfwHBbPG_8{SrlB{Tv1uvvj4t6zP!)#d!Ogc zP^62J^$0+~?-ZcXXpBaq%jFsw8L`=H2?+@R02Yg-*Xw;gACBV^i3CMahr>Z667S!? zk3LDe>VLEsU;sWo$Py~o!gWuaIAnaG3Sv``&tvc+8DJO!| zt4fcbQ8tW}a&xZfgtQ9BnFYLvGG|PvCNlg&uh@Q^w9Pz}+I^hCj`vu9JQADPqdkyk zR40xycD9geUgJu1e;$L`Fpa)?Wl-2&6hO@U*KrPqK(I1H=1h?2fce}6GhhP1oBZC# z1e@gt-qFa6lZrl%s1>bdxg*W)Ebt__O(4sj6(*2X@ciUClwHH#U(NRM7XAjS z+scDZ32J*PCoslsgS~#ZlCCGo`r>S6F)Ghw5wVlqHioFaw?ucD(XoLJ0j;28oPoPV z9A}dR$0SKn>uExfkl#j09o;v$BZ909R=*p{ATNq8BJW;YduX2QMOU7$a$_L5e!G^g zpbkx5G4&FZ%7m14rTN}5YB(;x7$5XOc_hf3E|Hw$TVg)P#qf~}nOn03uqsp>UG>vi zWThIoO)-1Q#@u#O;fMC#WAf@Xj70-0g9YZ;dA$HH1fW1q=9-c>>_yA0S$7M*5?}vi z)8MU`Q%P!7sEBBnd$DrKgFQ2?O%6LpdaC%F8Pn-)EC2t=j~ zoaLamla$FX!GQqWi!%s>sj-#5SJX0IF!TP=r21Z}s)k#btN0?=I7uD9C)Gb$fZ#sm zaVq7g`LwZ%PfNpN^_N-IGLHj@AV`s#4&va7_{Hw63G6BkSGXHdogTZ%QOiRb bDpZ@qYcJKM>x%b%*HX74c8MnqfHi*u-bC?g literal 0 HcmV?d00001 diff --git a/Tests/Manual/ChildWindows/index-debug.html b/Tests/Manual/ChildWindows/index-debug.html new file mode 100644 index 000000000..0d7b3e2f2 --- /dev/null +++ b/Tests/Manual/ChildWindows/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + ChildWindows + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/ChildWindows/index.html b/Tests/Manual/ChildWindows/index.html new file mode 100644 index 000000000..9d778d2dd --- /dev/null +++ b/Tests/Manual/ChildWindows/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + ChildWindows + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/ChildWindows/main.j b/Tests/Manual/ChildWindows/main.j new file mode 100644 index 000000000..ce0e04ccf --- /dev/null +++ b/Tests/Manual/ChildWindows/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * ChildWindows + * + * Created by You on January 17, 2013. + * Copyright 2013, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From c29a54e21a6371e50efa2df7901dabdbfd77bfdf Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Sun, 27 Jan 2013 09:33:57 +0800 Subject: [PATCH 2/4] More work on child windows - Popovers are implemented as child windows. - Renamed _CPAttachedWindow/_CPAttachedWindowView to _CPPopoverWindow/_CPPopoverWindowView, since that is its only use. - The default for CPView -acceptsFirstMouse is now NO, per Cocoa. Subclasses override this as necessary. - _CPWindowView -hitTest returns self it the mouse is within a resize region, which may be outside the window's frame. - Fixed an off by one bug in CPDomWindowLayer -insertWindow:atIndex:, where inserting a visible window behind a window it is already behind would cause it to move up one from its intended position. - Updated the ChildWindows and CPPopover test apps. --- AppKit/CPApplication.j | 2 +- AppKit/CPColorPanel.j | 1 + AppKit/CPControl.j | 8 + AppKit/CPMenu/_CPMenuBarWindow.j | 5 + AppKit/CPPopover.j | 67 +-- AppKit/CPView.j | 3 +- AppKit/CPWindow/CPWindow.j | 2 +- ...hedWindowView.j => _CPPopoverWindowView.j} | 52 +- AppKit/CPWindow/_CPWindow.j | 46 +- AppKit/CPWindow/_CPWindowView.j | 10 + AppKit/Cib/_CPCibWindowTemplate.j | 2 - AppKit/Platform/DOM/CPDOMWindowLayer.j | 7 + AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 16 +- AppKit/_CPImageAndTextView.j | 1 + ..._CPAttachedWindow.j => _CPPopoverWindow.j} | 123 ++-- Tests/Manual/CPPopover/AppController.j | 38 +- Tests/Manual/CPPopover/Resources/MainMenu.cib | 2 +- Tests/Manual/CPPopover/Resources/MainMenu.xib | 541 +++++++++++++++--- Tests/Manual/ChildWindows/AppController.j | 16 +- .../ChildWindows/Resources/MainMenu.cib | 2 +- .../ChildWindows/Resources/MainMenu.xib | 211 ++++++- 21 files changed, 921 insertions(+), 234 deletions(-) rename AppKit/CPWindow/{_CPAttachedWindowView.j => _CPPopoverWindowView.j} (90%) rename AppKit/{_CPAttachedWindow.j => _CPPopoverWindow.j} (80%) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index fef213203..d02917652 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -1232,7 +1232,7 @@ _CPRunModalLoop = function(anEvent) 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 isKindOfClass:_CPPopoverWindow] && [[theWindow targetView] window] === modalSession._window)) [theWindow sendEvent:anEvent]; }; diff --git a/AppKit/CPColorPanel.j b/AppKit/CPColorPanel.j index a3959ecaa..88b2f1f3c 100644 --- a/AppKit/CPColorPanel.j +++ b/AppKit/CPColorPanel.j @@ -35,6 +35,7 @@ @group CPColorPanelMode */ CPWheelColorPickerMode = 1; + /* Slider based picker @global diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index b668bd5d2..b7346e86e 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -401,6 +401,14 @@ var CPControlBlackColor = [CPColor blackColor]; [self highlight:YES]; } +/*! + Enabled controls accept first mouse by default. +*/ +- (BOOL)acceptsFirstMouse:(CPEvent)anEvent +{ + return [self isEnabled]; +} + - (void)mouseDown:(CPEvent)anEvent { if (![self isEnabled]) diff --git a/AppKit/CPMenu/_CPMenuBarWindow.j b/AppKit/CPMenu/_CPMenuBarWindow.j index 5cfeb5d3e..60cc01b72 100644 --- a/AppKit/CPMenu/_CPMenuBarWindow.j +++ b/AppKit/CPMenu/_CPMenuBarWindow.j @@ -320,6 +320,11 @@ [self tile]; } +- (BOOL)acceptsFirstMouse:(CPEvent)anEvent +{ + return YES; +} + - (void)mouseDown:(CPEvent)anEvent { var constraintRect = CGRectInset([[self platformWindow] visibleFrame], 5.0, 0.0); diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index 98d80f4b7..dc77006d8 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -28,7 +28,7 @@ @import "CPImageView.j" @import "CPResponder.j" @import "CPView.j" -@import "_CPAttachedWindow.j" +@import "_CPPopoverWindow.j" CPPopoverBehaviorApplicationDefined = 0; @@ -45,7 +45,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, /*! @ingroup appkit @class CPPopover - This class represent a widget that displays a attached + This class represent a widget that displays a popover view relative to another one. Delegate can implement: @@ -67,7 +67,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, int _appearance @accessors(property=appearance); int _behavior @accessors(getter=behavior); - _CPAttachedWindow _attachedWindow; + _CPPopoverWindow _popoverWindow; int _implementedDelegateMethods; } @@ -103,9 +103,10 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (CGRect)positioningRect { - if (![_attachedWindow isVisible]) + if (![_popoverWindow isVisible]) return CGRectMakeZero(); - return [_attachedWindow frame]; + + return [_popoverWindow frame]; } /*! Sets the frame of the popover @@ -113,9 +114,10 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (void)setPositioningRect:(CGRect)aRect { - if (![_attachedWindow isVisible]) + if (![_popoverWindow isVisible]) return; - [_attachedWindow setFrame:aRect]; + + [_popoverWindow setFrame:aRect]; } /*! @@ -125,8 +127,9 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (CGSize)contentSize { - if (![_attachedWindow isVisible]) + if (![_popoverWindow isVisible]) return CGRectMakeZero(); + return [[_contentViewController view] frameSize]; } @@ -147,7 +150,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (BOOL)isShown { - return [_attachedWindow isVisible]; + return [_popoverWindow isVisible]; } /*! @@ -164,7 +167,7 @@ Set the behavior of the CPPopover. It can be: return; _behavior = aBehavior; - [_attachedWindow setStyleMask:[self styleMaskForBehavior]]; + [_popoverWindow setStyleMask:[self styleMaskForBehavior]]; } - (void)setDelegate:(id)aDelegate @@ -210,29 +213,29 @@ Set the behavior of the CPPopover. It can be: [CPException raise:CPInternalInconsistencyException reason:@"contentViewController must not be nil"]; // If the popover is currently closing, do nothing. That is what Cocoa does. - if ([_attachedWindow isClosing]) + if ([_popoverWindow isClosing]) return; if (_implementedDelegateMethods & CPPopoverDelegate_popover_willShow_) [_delegate popoverWillShow:self]; - if (!_attachedWindow) + if (!_popoverWindow) { - _attachedWindow = [[_CPAttachedWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[self styleMaskForBehavior]]; + _popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[self styleMaskForBehavior]]; var parentWindow = [positioningView window]; - if (![parentWindow isKindOfClass:_CPAttachedWindow]) + if (![parentWindow isKindOfClass:_CPPopoverWindow]) [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(parentWindowWillClose:) name:CPWindowWillCloseNotification object:parentWindow]; } - [_attachedWindow setAppearance:_appearance]; - [_attachedWindow setAnimates:_animates]; - [_attachedWindow setDelegate:self]; - [_attachedWindow setMovableByWindowBackground:NO]; - [_attachedWindow setFrame:[_attachedWindow frameRectForContentRect:[[_contentViewController view] frame]]]; - [_attachedWindow setContentView:[_contentViewController view]]; - [_attachedWindow positionRelativeToRect:positioningRect ofView:positioningView preferredEdge:preferredEdge]; + [_popoverWindow setAppearance:_appearance]; + [_popoverWindow setAnimates:_animates]; + [_popoverWindow setDelegate:self]; + [_popoverWindow setMovableByWindowBackground:NO]; + [_popoverWindow setFrame:[_popoverWindow frameRectForContentRect:[[_contentViewController view] frame]]]; + [_popoverWindow setContentView:[_contentViewController view]]; + [_popoverWindow positionRelativeToRect:positioningRect ofView:positioningView preferredEdge:preferredEdge]; if (!_animates && _implementedDelegateMethods & CPPopoverDelegate_popover_didShow_) [_delegate popoverDidShow:self]; @@ -256,16 +259,16 @@ Set the behavior of the CPPopover. It can be: */ - (void)_close { - if ([_attachedWindow isClosing] || ![self isShown]) + if ([_popoverWindow isClosing] || ![self isShown]) return; if (_implementedDelegateMethods & CPPopoverDelegate_popover_willClose_) [_delegate popoverWillClose:self]; - [_attachedWindow close]; + [_popoverWindow close]; - // popoverDidClose will be sent from attachedWindowDidClose, since - // the attached window will close asynchronously when animating. + // popoverDidClose will be sent from popoverWindowDidClose, since + // the popover window will close asynchronously when animating. } @@ -279,7 +282,7 @@ Set the behavior of the CPPopover. It can be: */ - (IBAction)performClose:(id)sender { - if ([_attachedWindow isClosing]) + if ([_popoverWindow isClosing]) return; if (_implementedDelegateMethods & CPPopoverDelegate_popover_shouldClose_) @@ -294,25 +297,25 @@ Set the behavior of the CPPopover. It can be: #pragma mark Delegates /*! @ignore */ -- (BOOL)attachedWindowShouldClose:(_CPAttachedWindow)anAttachedWindow +- (BOOL)popoverWindowShouldClose:(_CPPopoverWindow)aPopoverWindow { [self performClose:self]; // We return NO, because we want the CPPopover to determine - // if the attached window can be closed and to give us a chance + // if the popover window can be closed and to give us a chance // to send delegate messages. return NO; } /*! @ignore */ -- (void)attachedWindowDidClose:(_CPAttachedWindow)anAttachedWindow +- (void)popoverWindowDidClose:(_CPPopoverWindow)aPopoverWindow { if (_implementedDelegateMethods & CPPopoverDelegate_popover_didClose_) [_delegate popoverDidClose:self]; } /*! @ignore */ -- (void)attachedWindowDidShow:(_CPAttachedWindow)anAttachedWindow +- (void)popoverWindowDidShow:(_CPPopoverWindow)aPopoverWindow { if (_implementedDelegateMethods & CPPopoverDelegate_popover_didShow_) [_delegate popoverDidShow:self]; @@ -330,7 +333,7 @@ Set the behavior of the CPPopover. It can be: */ - (void)parentWindowWillClose:(CPNotification)aNotification { - [_attachedWindow orderOut:nil]; + [_popoverWindow orderOut:nil]; [self performClose:nil]; } @@ -347,7 +350,7 @@ Set the behavior of the CPPopover. It can be: @end -var CPPopoverNeedsNewAttachedWindowKey = @"CPPopoverNeedsNewAttachedWindowKey", +var CPPopoverNeedsNewPopoverWindowKey = @"CPPopoverNeedsNewPopoverWindowKey", CPPopoverAppearanceKey = @"CPPopoverAppearanceKey", CPPopoverAnimatesKey = @"CPPopoverAnimatesKey", CPPopoverContentViewControllerKey = @"CPPopoverContentViewControllerKey", diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 922e87681..d60fdf42a 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -1497,10 +1497,9 @@ var CPViewFlags = { }, Returns \c YES by default. @return \c YES, if the view object accepts first mouse-down event. \c NO, otherwise. */ -//FIXME: should be NO by default? - (BOOL)acceptsFirstMouse:(CPEvent)anEvent { - return YES; + return NO; } /*! diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 677e2f07e..5124faa30 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -29,7 +29,7 @@ @import "_CPHUDWindowView.j" @import "_CPBorderlessWindowView.j" @import "_CPBorderlessBridgeWindowView.j" -@import "_CPAttachedWindowView.j" +@import "_CPPopoverWindowView.j" @import "_CPModalWindowView.j" @import "_CPShadowWindowView.j" @import "CPDragServer.j" diff --git a/AppKit/CPWindow/_CPAttachedWindowView.j b/AppKit/CPWindow/_CPPopoverWindowView.j similarity index 90% rename from AppKit/CPWindow/_CPAttachedWindowView.j rename to AppKit/CPWindow/_CPPopoverWindowView.j index d2d163e08..8dc7f8348 100644 --- a/AppKit/CPWindow/_CPAttachedWindowView.j +++ b/AppKit/CPWindow/_CPPopoverWindowView.j @@ -1,5 +1,5 @@ /* - * _CPAttachedWindowView.j + * _CPPopoverWindowView.j * AppKit * * Created by Antoine Mercadal @@ -30,18 +30,18 @@ #define ALIGN_STROKE(point) (FLOOR(point) === (point) ? (point) + halfStrokeWidth : (point)) #define ALIGN_COORD(point) (FLOOR(point)) -var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), - _CPAttachedWindowViewRadius = 5.0, - _CPAttachedWindowViewStrokeWidth = 1.0, - _CPAttachedWindowViewShadowSize = CGSizeMake(0, 6), - _CPAttachedWindowViewShadowBlur = 15.0; +var _CPPopoverWindowViewDefaultCursorSize = _CGSizeMake(16, 10), + _CPPopoverWindowViewRadius = 5.0, + _CPPopoverWindowViewStrokeWidth = 1.0, + _CPPopoverWindowViewShadowSize = _CGSizeMake(0, 6), + _CPPopoverWindowViewShadowBlur = 15.0; /*! @ignore A custom CPWindowView that manages a border and cursor */ -@implementation _CPAttachedWindowView : _CPWindowView +@implementation _CPPopoverWindowView : _CPWindowView { float _arrowOffsetX @accessors(property=arrowOffsetX); float _arrowOffsetY @accessors(property=arrowOffsetY); @@ -58,7 +58,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), */ - (CGRect)contentRectForFrameRect:(CGRect)aFrameRect { - var contentRect = CGRectMakeCopy(aFrameRect), + var contentRect = _CGRectMakeCopy(aFrameRect), modifierX = 16, modifierY = 19; @@ -66,7 +66,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), // // @comment: If we use this, each time we open the popover, the content // view is reduced a little over and over - // return CGRectInset(contentRect, modifierX, modifierY); + // return _CGRectInset(contentRect, modifierX, modifierY); contentRect.origin.x += modifierX; contentRect.origin.y += modifierY; @@ -83,7 +83,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), */ + (CGRect)frameRectForContentRect:(CGRect)aContentRect { - var frameRect = CGRectMakeCopy(aContentRect), + var frameRect = _CGRectMakeCopy(aContentRect), modifierX = 16, modifierY = 19; @@ -91,7 +91,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), // @comment: If we use this, each time we open the popover, the content // // view is reduced a little over and over - // return CGRectOffset(frameRect, modifierX, modifierY); + // return _CGRectOffset(frameRect, modifierX, modifierY); frameRect.origin.x -= modifierX; frameRect.origin.y -= modifierY; @@ -111,7 +111,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), _arrowOffsetX = 0.0; _arrowOffsetY = 0.0; _appearance = CPPopoverAppearanceMinimal; - _cursorSize = CGSizeMakeCopy(_CPAttachedWindowViewDefaultCursorSize); + _cursorSize = _CGSizeMakeCopy(_CPPopoverWindowViewDefaultCursorSize); } return self; @@ -122,7 +122,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), */ - (void)hideCursor { - _cursorSize = CGSizeMakeZero(); + _cursorSize = _CGSizeMakeZero(); [self setNeedsDisplay:YES]; } @@ -131,7 +131,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), */ - (void)showCursor { - _cursorSize = CGSizeMakeCopy(_CPAttachedWindowViewDefaultCursorSize); + _cursorSize = _CGSizeMakeCopy(_CPPopoverWindowViewDefaultCursorSize); [self setNeedsDisplay:YES]; } @@ -143,15 +143,15 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), [super drawRect:aRect]; var context = [[CPGraphicsContext currentContext] graphicsPort], - radius = _CPAttachedWindowViewRadius, + radius = _CPPopoverWindowViewRadius, arrowWidth = _cursorSize.width, arrowHeight = _cursorSize.height, - strokeWidth = _CPAttachedWindowViewStrokeWidth, + strokeWidth = _CPPopoverWindowViewStrokeWidth, halfStrokeWidth = strokeWidth / 2.0, strokeColor, shadowColor = [[CPColor blackColor] colorWithAlphaComponent:.2], - shadowSize = _CPAttachedWindowViewShadowSize, - shadowBlur = _CPAttachedWindowViewShadowBlur, + shadowSize = _CPPopoverWindowViewShadowSize, + shadowBlur = _CPPopoverWindowViewShadowBlur, gradient, frame = [self bounds]; @@ -191,7 +191,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), CGContextSetLineWidth(context, strokeWidth); CGContextBeginPath(context); CGContextSetShadowWithColor(context, shadowSize, shadowBlur, shadowColor); - CGContextDrawLinearGradient(context, gradient, CGPointMake(CGRectGetMidX(frame), 0.0), CGPointMake(CGRectGetMidX(frame), frame.size.height), 0); + CGContextDrawLinearGradient(context, gradient, _CGPointMake(_CGRectGetMidX(frame), 0.0), _CGPointMake(_CGRectGetMidX(frame), frame.size.height), 0); var xMin = _CGRectGetMinX(frame), xMax = _CGRectGetMaxX(frame), @@ -201,9 +201,9 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), arrowMaxX = ALIGN_COORD(xMax - radius - strokeWidth), arrowMinY = ALIGN_COORD(yMin + radius + strokeWidth), arrowMaxY = ALIGN_COORD(yMax - radius + strokeWidth), - arrowAnchor = CGPointMakeZero(), - arrowStart = CGPointMakeZero(), - pt = CGPointMakeZero(); + arrowAnchor = _CGPointMakeZero(), + arrowStart = _CGPointMakeZero(), + pt = _CGPointMakeZero(); // draw! switch (_preferredEdge) @@ -236,7 +236,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), pt.y = arrowMaxY - arrowWidth; pt.x = arrowAnchor.x; - arrowStart = CGPointMakeCopy(pt); + arrowStart = _CGPointMakeCopy(pt); CGContextAddLineToPoint(context, pt.x, pt.y); // top edge -> point @@ -278,7 +278,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), pt.y = arrowMaxY; pt.x = arrowAnchor.x; - arrowStart = CGPointMakeCopy(pt); + arrowStart = _CGPointMakeCopy(pt); CGContextAddLineToPoint(context, pt.x, pt.y); // bottom edge -> point @@ -327,7 +327,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), pt.x = arrowMaxX - arrowWidth; pt.y = arrowAnchor.y; - arrowStart = CGPointMakeCopy(pt); + arrowStart = _CGPointMakeCopy(pt); CGContextAddLineToPoint(context, pt.x, pt.y); // left edge -> point @@ -369,7 +369,7 @@ var _CPAttachedWindowViewDefaultCursorSize = CGSizeMake(16, 10), pt.x = arrowMaxX; pt.y = arrowAnchor.y; - arrowStart = CGPointMakeCopy(pt); + arrowStart = _CGPointMakeCopy(pt); CGContextAddLineToPoint(context, pt.x, pt.y); // right edge -> point diff --git a/AppKit/CPWindow/_CPWindow.j b/AppKit/CPWindow/_CPWindow.j index 016e03696..7cfce3c77 100644 --- a/AppKit/CPWindow/_CPWindow.j +++ b/AppKit/CPWindow/_CPWindow.j @@ -131,6 +131,7 @@ var CPWindowActionMessageKeys = [ CGRect _frame; int _level; BOOL _isVisible; + BOOL _hasBeenOrderedIn @accessors; BOOL _isMiniaturized; BOOL _isAnimating; BOOL _hasShadow; @@ -253,6 +254,7 @@ CPTexturedBackgroundWindowMask _frame.origin.x = (visibleFrame.size.width - _frame.size.width) / 2; _frame.origin.y = (visibleFrame.size.height - _frame.size.height) / 2; } + [self setPlatformWindow:[[CPPlatformWindow alloc] initWithContentRect:_frame]]; [self platformWindow]._only = self; } @@ -262,6 +264,7 @@ CPTexturedBackgroundWindowMask _registeredDraggedTypesArray = []; _acceptsMouseMovedEvents = YES; _isMovable = YES; + _hasBeenOrderedIn = NO; _parentWindow = nil; _childWindows = []; @@ -722,7 +725,8 @@ CPTexturedBackgroundWindowMask var origin = [childWindow frame].origin; [childWindow setFrameOrigin:_CGPointMake(origin.x + delta.x, origin.y + delta.y)]; - }]; + } + ]; } /*! @@ -820,7 +824,7 @@ CPTexturedBackgroundWindowMask [self orderWindow:CPWindowOut relativeTo:0]; } -- (void)_orderOut +- (void)_orderOutRecursively:(BOOL)recursive { if ([self isSheet]) { @@ -829,8 +833,8 @@ CPTexturedBackgroundWindowMask return; } - [_parentWindow removeChildWindow:self]; - [_childWindows makeObjectsPerformSelector:@selector(_orderOut)]; + if (recursive) + [_childWindows makeObjectsPerformSelector:@selector(_orderOutRecursively:) withObject:recursive]; #if PLATFORM(DOM) if ([self _sharesChromeWithPlatformWindow]) @@ -850,7 +854,15 @@ CPTexturedBackgroundWindowMask - (void)orderWindow:(CPWindowOrderingMode)orderingMode relativeTo:(int)otherWindowNumber { if (orderingMode === CPWindowOut) - [self _orderOut]; + { + var hasParent = !!_parentWindow; + + // Directly ordering out will detach a child window + [_parentWindow removeChildWindow:self]; + + // In Cocoa, a window orders out its child windows only if it has no parent + [self _orderOutRecursively:!hasParent]; + } else if (orderingMode === CPWindowAbove && otherWindowNumber === 0) [self _orderFront]; else if (orderingMode === CPWindowBelow && otherWindowNumber === 0) @@ -2155,7 +2167,31 @@ CPTexturedBackgroundWindowMask [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowWillCloseNotification object:self]; + var hasParent = !!_parentWindow; + [self orderOut:nil]; + + // If a window has no parent, close all of the children + [self _detachFromChildrenClosing:!hasParent]; +} + +- (void)_detachFromChildrenClosing:(BOOL)shouldClose +{ + // When a window is closed, it must detach itself from all children + [_childWindows enumerateObjectsUsingBlock:function(child) + { + [child setParentWindow:nil]; + } + ]; + + if (shouldClose) + [_childWindows enumerateObjectsUsingBlock:function(child) + { + [child close]; + } + ]; + + _childWindows = []; } // Managing Main Status diff --git a/AppKit/CPWindow/_CPWindowView.j b/AppKit/CPWindow/_CPWindowView.j index beede5298..40dfa42e7 100644 --- a/AppKit/CPWindow/_CPWindowView.j +++ b/AppKit/CPWindow/_CPWindowView.j @@ -158,6 +158,16 @@ _CPWindowViewResizeSlop = 3; { } +- (CPView)hitTest:(CGPoint)locationInWindow +{ + var region = [self resizeRegionForPoint:[_window convertBaseToGlobal:locationInWindow]]; + + if (region !== _CPWindowViewResizeRegionNone) + return self; + else + return [super hitTest:locationInWindow]; +} + - (BOOL)acceptsFirstMouse:(CPEvent)anEvent { return YES; diff --git a/AppKit/Cib/_CPCibWindowTemplate.j b/AppKit/Cib/_CPCibWindowTemplate.j index b224b7214..a6c210a79 100644 --- a/AppKit/Cib/_CPCibWindowTemplate.j +++ b/AppKit/Cib/_CPCibWindowTemplate.j @@ -111,9 +111,7 @@ [_windowView setAutoresizesSubviews:YES]; if ([_viewClass isKindOfClass:[CPToolbar class]]) - { [theWindow setToolbar:_viewClass]; - } [theWindow setAutorecalculatesKeyViewLoop:_windowAutorecalculatesKeyViewLoop]; [theWindow setFullPlatformWindow:_windowIsFullPlatformWindow]; diff --git a/AppKit/Platform/DOM/CPDOMWindowLayer.j b/AppKit/Platform/DOM/CPDOMWindowLayer.j index ad6a76e4e..926074a3d 100644 --- a/AppKit/Platform/DOM/CPDOMWindowLayer.j +++ b/AppKit/Platform/DOM/CPDOMWindowLayer.j @@ -88,7 +88,14 @@ // If the window is already a resident of this layer, remove it. if (isVisible) { + // Adjust the z-index to start at the window being inserted zIndex = MIN(zIndex, aWindow._index); + + // If the window being inserted is below the insertion index, + // the index will be one less after we remove the window below. + if (aWindow._index < anIndex) + --anIndex; + [_windows removeObjectAtIndex:aWindow._index]; } else diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 5be94f802..f42465e53 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1465,6 +1465,8 @@ var resizeTimer = nil; // If aWindow is a parent, recursively order all of its children after it if ([[aWindow childWindows] count]) [self _orderChildWindowsOf:aWindow furthestParent:[self _furthestParentOf:aWindow] layer:layer]; + + [aWindow _setHasBeenOrderedIn:YES]; } - (CPWindow)_furthestParentOf:(CPWindow)aWindow @@ -1477,20 +1479,20 @@ var resizeTimer = nil; return aWindow; } -- (int)_orderChildWindowsOf:(CPWindow)aWindow furthestParent:(CPWindow)furthestParent layer:(CPDOMWindowLayer)aLayer +- (void)_orderChildWindowsOf:(CPWindow)aWindow furthestParent:(CPWindow)furthestParent layer:(CPDOMWindowLayer)aLayer { // When a parent window is ordered, Cocoa orders its child windows // relative to it or the furthest parent. var children = [aWindow childWindows], count = [children count], - parent = aWindow, - index; + parent = aWindow; for (var i = 0; i < count; ++i) { var child = children[i]; - if (![child isVisible]) + // If a child is not visible and has not yet been ordered in, skip it + if (![child isVisible] && ![child _hasBeenOrderedIn]) continue; var ordering = [child _childOrdering]; @@ -1499,14 +1501,12 @@ var resizeTimer = nil; (ordering === CPWindowBelow && furthestParent._index < parent._index)) parent = furthestParent; - index = ordering === CPWindowAbove ? parent._index : parent._index - 1; + var index = ordering === CPWindowAbove ? parent._index + 1 : parent._index; [aLayer insertWindow:child atIndex:index]; if ([[child childWindows] count]) - index = [self _orderChildWindowsOf:child furthestParent:furthestParent layer:aLayer]; - else - index = [child _childOrdering] === CPWindowAbove ? child._index : child._index - 1; + [self _orderChildWindowsOf:child furthestParent:furthestParent layer:aLayer]; parent = child; } diff --git a/AppKit/_CPImageAndTextView.j b/AppKit/_CPImageAndTextView.j index 5398166e8..131beeb61 100644 --- a/AppKit/_CPImageAndTextView.j +++ b/AppKit/_CPImageAndTextView.j @@ -105,6 +105,7 @@ var _CPimageAndTextViewFrameSizeChangedFlag = 1 << 0, } _textSize = nil; + [self setHitTests:NO]; } return self; diff --git a/AppKit/_CPAttachedWindow.j b/AppKit/_CPPopoverWindow.j similarity index 80% rename from AppKit/_CPAttachedWindow.j rename to AppKit/_CPPopoverWindow.j index ceba344e3..818acd207 100644 --- a/AppKit/_CPAttachedWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -1,5 +1,5 @@ /* - * _CPAttachedWindow.j + * _CPPopoverWindow.j * AppKit * * Created by Antoine Mercadal @@ -23,25 +23,25 @@ @import @import "CPButton.j" -@import "CPWindow.j" +@import "CPPanel.j" CPClosableOnBlurWindowMask = 1 << 4; CPPopoverAppearanceMinimal = 0; CPPopoverAppearanceHUD = 1; -var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, - _CPAttachedWindow_attachedWindowDidClose_ = 1 << 1, - _CPAttachedWindow_attachedWindowDidShow_ = 1 << 2; +var _CPPopoverWindow_shouldClose_ = 1 << 0, + _CPPopoverWindow_didClose_ = 1 << 1, + _CPPopoverWindow_didShow_ = 1 << 2; /*! @ignore - This is a simple attached window like the one that pops up + This is a simple popover window like the one that pops up when you double click on a meeting in iCal. */ -@implementation _CPAttachedWindow : CPWindow +@implementation _CPPopoverWindow : CPPanel { BOOL _animates @accessors(property=animates); id _targetView @accessors(property=targetView); @@ -66,7 +66,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, */ + (Class)_windowViewClassForStyleMask:(unsigned)aStyleMask { - return _CPAttachedWindowView; + return _CPPopoverWindowView; } @@ -74,39 +74,40 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, #pragma mark Initialization /*! - Create and init a _CPAttachedWindow with the given size and view. + Create and init a _CPPopoverWindow with the given size and view. - @param aSize the size of the attached window + @param aSize the size of the popover window @param aView the target view - @return ready to use _CPAttachedWindow + @return ready to use _CPPopoverWindow */ -+ (id)attachedWindowWithSize:(CGSize)aSize forView:(CPView)aView ++ (id)popoverWindowWithSize:(CGSize)aSize forView:(CPView)aView { - return [_CPAttachedWindow attachedWindowWithSize:aSize forView:aView styleMask:0]; + return [_CPPopoverWindow popoverWindowWithSize:aSize forView:aView styleMask:0]; } /*! - Create and init a _CPAttachedWindow with given the size, view and style mask. + Create and init a _CPPopoverWindow with given the size, view and style mask. - @param aSize the size of the attached window + @param aSize the size of the popover window @param aView the target view @param styleMask the window style mask (combine CPClosableWindowMask and CPClosableOnBlurWindowMask) - @return ready to use _CPAttachedWindow + @return ready to use _CPPopoverWindow */ -+ (id)attachedWindowWithSize:(CGSize)aSize forView:(CPView)aView styleMask:(int)aMask ++ (id)popoverWindowWithSize:(CGSize)aSize forView:(CPView)aView styleMask:(int)aMask { - var attachedWindow = [[_CPAttachedWindow alloc] initWithContentRect:_CGRectMake(0.0, 0.0, aSize.width, aSize.height) styleMask:aMask]; + var popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:_CGRectMake(0.0, 0.0, aSize.width, aSize.height) styleMask:aMask]; - [attachedWindow attachToView:aView]; + // FIXME: There is no attachToView method + // [popoverWindow attachToView:aView]; - return attachedWindow; + return popoverWindow; } /*! - Create and init a _CPAttachedWindow with given the given frame. + Create and init a _CPPopoverWindow with given the given frame. - @param aFrame the frame of the attached window - @return ready to use _CPAttachedWindow + @param aFrame the frame of the popover window + @return ready to use _CPPopoverWindow */ - (id)initWithContentRect:(CGRect)aFrame { @@ -114,11 +115,11 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, } /*! - Designated initializer. Create and init a _CPAttachedWindow with the given frame and style mask. + Designated initializer. Create and init a _CPPopoverWindow with the given frame and style mask. - @param aFrame the frame of the attached window + @param aFrame the frame of the popover window @param styleMask the window style mask (combine CPClosableWindowMask and CPClosableOnBlurWindowMask) - @return ready to use _CPAttachedWindow + @return ready to use _CPPopoverWindow */ - (id)initWithContentRect:(CGRect)aFrame styleMask:(unsigned)aStyleMask { @@ -130,7 +131,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, _browserAnimates = [self browserSupportsAnimation]; _shouldPerformAnimation = YES; - [self setLevel:CPStatusWindowLevel]; + [self setBecomesKeyOnlyIfNeeded:YES]; [self setMovableByWindowBackground:YES]; [self setHasShadow:NO]; @@ -166,21 +167,21 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, _delegate = aDelegate; _implementedDelegateMethods = 0; - if ([_delegate respondsToSelector:@selector(attachedWindowShouldClose:)]) - _implementedDelegateMethods |= _CPAttachedWindow_attachedWindowShouldClose_; + if ([_delegate respondsToSelector:@selector(popoverWindowShouldClose:)]) + _implementedDelegateMethods |= _CPPopoverWindow_shouldClose_; - if ([_delegate respondsToSelector:@selector(attachedWindowDidClose:)]) - _implementedDelegateMethods |= _CPAttachedWindow_attachedWindowDidClose_; + if ([_delegate respondsToSelector:@selector(popoverWindowDidClose:)]) + _implementedDelegateMethods |= _CPPopoverWindow_didClose_; - if ([_delegate respondsToSelector:@selector(attachedWindowDidShow:)]) - _implementedDelegateMethods |= _CPAttachedWindow_attachedWindowDidShow_; + if ([_delegate respondsToSelector:@selector(popoverWindowDidShow:)]) + _implementedDelegateMethods |= _CPPopoverWindow_didShow_; } #pragma mark - #pragma mark Observer /*! - Update the _CPAttachedWindow frame if a resize event is observed. + Update the _CPPopoverWindow frame if a resize event is observed. */ - (void)observeValueForKeyPath:(CPString)aPath ofObject:(id)anObject change:(CPDictionary)theChange context:(void)aContext { @@ -318,9 +319,9 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, /*! Compute the frame needed to be placed to the given view - and position the attached window according to this view (edge will be automatic) + and position the popover window according to this view (edge will be automatic) - @param aView the view where _CPAttachedWindow must be attached + @param aView the view where _CPPopoverWindow must be popover */ - (void)positionRelativeToView:(CPView)aView { @@ -328,10 +329,10 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, } /*! - Position the _CPAttachedWindow relative to a given rect's edge. + Position the _CPPopoverWindow relative to a given rect's edge. - @param aRect the rect relative to which the attached window will be positioned - @param positioningView the view to which the attached window is attached + @param aRect the rect relative to which the popover window will be positioned + @param positioningView the view to which the popover window is popover @param anEdge the prefered edge */ - (void)positionRelativeToRect:(CGRect)aRect ofView:(CPView)positioningView preferredEdge:(int)anEdge @@ -343,16 +344,21 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, [self setFrameOrigin:point]; [_windowView showCursor]; - [self setLevel:CPStatusWindowLevel]; [_windowView setNeedsDisplay:YES]; [self makeKeyAndOrderFront:nil]; if (positioningView !== _targetView) { + [[_targetView window] removeChildWindow:self]; [_targetView removeObserver:self forKeyPath:@"frame"]; + _targetView = positioningView; [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; } + + // Always add us as a child, because when we close we are detached from + // the parent, and the parent may cache this window and reopen it. + [[_targetView window] addChildWindow:self ordered:CPWindowAbove]; } /*! @ignore */ @@ -376,7 +382,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, #pragma mark Actions /*! - Closes the _CPAttachedWindow + Closes the _CPPopoverWindow @param sender the sender of the action */ @@ -389,32 +395,18 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, #pragma mark - #pragma mark Overrides -/*! - Attached windows, such as pop overs, can usually become the key window. -*/ -- (BOOL)canBecomeKeyWindow -{ - return YES; -} - -/*! - Normally untitled windows cannot become main, but popovers can. -*/ -- (BOOL)canBecomeMainWindow -{ - return [self isVisible]; -} - /*! Called when the window is losing focus. */ -- (void)resignMainWindow +- (void)resignKeyWindow { + [super resignKeyWindow]; + if (_closeOnBlur && !_isClosing) { if (!_delegate || - ((_implementedDelegateMethods & _CPAttachedWindow_attachedWindowShouldClose_) && - [_delegate attachedWindowShouldClose:self])) + ((_implementedDelegateMethods & _CPPopoverWindow_shouldClose_) && + [_delegate popoverWindowShouldClose:self])) { [self close]; } @@ -438,8 +430,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, var transformOrigin = "50% 100%", frame = [self frame], preferredEdge = [_windowView preferredEdge], - posX, - posY; + posX, posY; switch (preferredEdge) { @@ -490,8 +481,8 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, #if PLATFORM(DOM) _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), transitionCompleteFunction, YES); #endif - if (_implementedDelegateMethods & _CPAttachedWindow_attachedWindowDidShow_) - [_delegate attachedWindowDidShow:self]; + if (_implementedDelegateMethods & _CPPopoverWindow_didShow_) + [_delegate popoverWindowDidShow:self]; } #if PLATFORM(DOM) @@ -562,8 +553,8 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, _shouldPerformAnimation = YES; _isClosing = NO; - if (_implementedDelegateMethods & _CPAttachedWindow_attachedWindowDidClose_) - [_delegate attachedWindowDidClose:self]; + if (_implementedDelegateMethods & _CPPopoverWindow_didClose_) + [_delegate popoverWindowDidClose:self]; } @end diff --git a/Tests/Manual/CPPopover/AppController.j b/Tests/Manual/CPPopover/AppController.j index 6d58f9762..7df7a12d4 100644 --- a/Tests/Manual/CPPopover/AppController.j +++ b/Tests/Manual/CPPopover/AppController.j @@ -18,9 +18,11 @@ CPPopUpButton buttonBehaviour; CPButton lastButton; int lastPreferredEdge; + @outlet CPTextField titleLabel; @outlet CPPopover popover; @outlet CPPopover windowPopover; @outlet CPWindow popoverWindow; + @outlet CPPopover nestedPopover; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification @@ -98,7 +100,9 @@ [button setFrameOrigin:CGPointMake(CGRectGetMinX([button frame]), 70)]; [contentView addSubview:button]; - buttonEdge = [[CPPopUpButton alloc] initWithFrame:CGRectMake(150, 10, 130, 24)]; + var buttonHeight = [[CPTheme defaultTheme] valueForAttributeWithName:@"min-size" forClass:CPPopUpButton].height; + + buttonEdge = [[CPPopUpButton alloc] initWithFrame:CGRectMake(150, 10, 130, buttonHeight)]; [buttonEdge addItemWithTitle:"Automatic"]; [buttonEdge addItemWithTitle:"Bottom"]; [buttonEdge addItemWithTitle:"Top"]; @@ -106,21 +110,24 @@ [buttonEdge addItemWithTitle:"Left"]; [contentView addSubview:buttonEdge]; - buttonStyle = [[CPPopUpButton alloc] initWithFrame:CGRectMake(290, 10, 130, 24)]; + buttonStyle = [[CPPopUpButton alloc] initWithFrame:CGRectMake(290, 10, 130, buttonHeight)]; [buttonStyle addItemWithTitle:"Minimal"]; [buttonStyle addItemWithTitle:"HUD"]; [contentView addSubview:buttonStyle]; - buttonAnimation = [[CPPopUpButton alloc] initWithFrame:CGRectMake(430, 10, 130, 24)]; + buttonAnimation = [[CPPopUpButton alloc] initWithFrame:CGRectMake(430, 10, 130, buttonHeight)]; [buttonAnimation addItemWithTitle:"With animation"]; [buttonAnimation addItemWithTitle:"No animation"]; [contentView addSubview:buttonAnimation]; - buttonBehaviour = [[CPPopUpButton alloc] initWithFrame:CGRectMake(570, 10, 130, 24)]; + buttonBehaviour = [[CPPopUpButton alloc] initWithFrame:CGRectMake(570, 10, 130, buttonHeight)]; [buttonBehaviour addItemWithTitle:"Transient"]; [buttonBehaviour addItemWithTitle:"Not managed"]; [contentView addSubview:buttonBehaviour]; + [windowPopover setDelegate:self]; + [nestedPopover setDelegate:self]; + [theWindow orderFront:self]; } @@ -146,18 +153,23 @@ - (@action)open:(id)sender { var edge = [self popoverEdge], - appearance; + appearance, + color; switch ([buttonStyle title]) { case "Minimal": appearance = CPPopoverAppearanceMinimal; + color = [CPColor blackColor]; break; + case "HUD": appearance = CPPopoverAppearanceHUD; + color = [CPColor whiteColor]; break; } + [titleLabel setTextColor:color]; [self initPopover:popover withAppearance:appearance]; lastButton = sender; lastPreferredEdge = edge; @@ -166,7 +178,7 @@ - (void)openWindow:(id)sender { - [popoverWindow orderFront:nil]; + [popoverWindow makeKeyAndOrderFront:nil]; } - (@action)openWindowPopover:(id)sender @@ -174,6 +186,17 @@ [windowPopover showRelativeToRect:nil ofView:sender preferredEdge:[self popoverEdge]]; } +- (@action)openNestedPopover:(id)sender +{ + [nestedPopover showRelativeToRect:nil ofView:sender preferredEdge:[self popoverEdge]]; +} + +- (@action)setTransient:(id)sender +{ + [windowPopover setBehavior:[sender state] === CPOnState ? CPPopoverBehaviorTransient : CPPopoverBehaviorApplicationDefined]; + [nestedPopover setBehavior:[sender state] === CPOnState ? CPPopoverBehaviorTransient : CPPopoverBehaviorApplicationDefined]; +} + - (@action)movePopover:(id)sender { if (++lastPreferredEdge > CPMaxYEdge) @@ -206,6 +229,9 @@ - (void)popoverDidShow:(CPPopover)aPopover { CPLog.info("popover " + aPopover + " did show"); + + var popWindow = [[[aPopover contentViewController] view] window]; + [popWindow makeFirstResponder:[[popWindow contentView] nextValidKeyView]]; } - (BOOL)popoverShouldClose:(CPPopover)aPopover diff --git a/Tests/Manual/CPPopover/Resources/MainMenu.cib b/Tests/Manual/CPPopover/Resources/MainMenu.cib index 7a8642f47..d982964c4 100644 --- a/Tests/Manual/CPPopover/Resources/MainMenu.cib +++ b/Tests/Manual/CPPopover/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;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;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;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;47E;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;2;50E;D;K;6;CP$UIDd;2;51E;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;54E;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;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;43E;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;48E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;54E;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;55E;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;56E;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;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;57E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;50E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;60E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;36E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;61E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;61E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;50E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;62E;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;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;65E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;53E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;50E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;55E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;67E;E;D;K;10;$classnameS;16;CPViewControllerK;8;$classesA;S;16;CPViewControllerS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;23;CPViewControllerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPViewControllerTitleKeyD;K;6;CP$UIDd;1;0E;K;26;CPViewControllerCibNameKeyD;K;6;CP$UIDd;1;0E;K;25;CPViewControllerBundleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;9;CPPopoverK;8;$classesA;S;9;CPPopoverS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;22;CPPopoverAppearanceKeyD;K;6;CP$UIDd;2;68E;K;20;CPPopoverAnimatesKeyD;K;6;CP$UIDd;2;69E;K;33;CPPopoverContentViewControllerKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverDelegateKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverBehaviorKeyD;K;6;CP$UIDd;2;70E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;71E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;72E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;75E;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;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;76E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;77E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;78E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;79E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;6;$afontD;K;6;CP$UIDd;2;81E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;70E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;83E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;84E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;85E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;85E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;85E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;87E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;70E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;82E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;79E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;91E;K;6;$afontD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;93E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;84E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;95E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;82E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;93E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;96E;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;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;101E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;68E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;68E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;93E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;103E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;94E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;85E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;104E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;68E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;69E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;68E;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;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;105E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;106E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;101E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;68E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;68E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;93E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;107E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;94E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;85E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;104E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;68E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;69E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;68E;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;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;108E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;101E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;68E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;68E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;93E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;110E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;94E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;85E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;104E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;68E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;69E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;68E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;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;111E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;112E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;113E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;114E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;115E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;116E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;117E;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;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;118E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;118E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;119E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;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;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;120E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;121E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;101E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;68E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;68E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;93E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;122E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;94E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;85E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;104E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;68E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;69E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;68E;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;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;23;CPViewControllerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPViewControllerTitleKeyD;K;6;CP$UIDd;1;0E;K;26;CPViewControllerCibNameKeyD;K;6;CP$UIDd;1;0E;K;25;CPViewControllerBundleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;22;CPPopoverAppearanceKeyD;K;6;CP$UIDd;2;68E;K;20;CPPopoverAnimatesKeyD;K;6;CP$UIDd;2;69E;K;33;CPPopoverContentViewControllerKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverDelegateKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverBehaviorKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;124E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;79E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;6;$afontD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;128E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;84E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;85E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;85E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;85E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;87E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;82E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;82E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;129E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;101E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;68E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;68E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;93E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;110E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;94E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;85E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;104E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;68E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;69E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;68E;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;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;130E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;131E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;79E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;6;$afontD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;93E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;132E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;84E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;85E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;85E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;85E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;87E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;82E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;93E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;delegateS;7;popoverS;13;popoverWindowS;13;windowPopoverS;4;viewS;21;contentViewControllerS;13;performClose:S;12;movePopover:S;18;openWindowPopover:S;13;closePopover:S;13;AppControllerd;1;0T;d;1;1S;20;{{0, 0}, {301, 261}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;38E;E;E;d;2;12S;6;normalS;6;CPViewS;21;{{28, 45}, {239, 32}}S;19;{{0, 0}, {239, 32}}d;2;37S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;80E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;133E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;134E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;69E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;85E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;69E;E;d;1;2S;14;I’m a popover!d;4;3072F;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;135E;E;S;21;{{25, 98}, {247, 29}}S;19;{{0, 0}, {247, 29}}d;2;45S;19;bezeled+placeholderD;K;6;$classD;K;6;CP$UIDd;2;80E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;133E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;85E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;85E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;69E;E;d;1;4S;0;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;137E;E;S;15;Write somethingS;22;{{118, 181}, {61, 24}}S;18;{{0, 0}, {61, 24}}d;2;13S;6;buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;80E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;133E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;69E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;85E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;69E;E;S;5;closed;2;14S;22;{{117, 213}, {62, 24}}S;18;{{0, 0}, {62, 24}}S;4;MoveS;22;{{91, 149}, {114, 24}}S;19;{{0, 0}, {114, 24}}S;12;performCloseS;32;{10000000000000, 10000000000000}S;8;CPWindowd;9;607650816S;24;{{344, 485}, {212, 112}}S;22;{{0, 0}, {2560, 1418}}d;2;15S;6;WindowS;20;{{0, 0}, {212, 112}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;S;20;{{60, 43}, {87, 24}}S;18;{{0, 0}, {87, 24}}S;9;Click me!S;19;{{0, 0}, {163, 96}}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;52E;E;E;S;20;{{37, 21}, {83, 17}}S;18;{{0, 0}, {83, 17}}d;2;36S;11;From windowS;21;{{22, 54}, {114, 24}}S;19;{{0, -1}, {32, 17}}S;18;{{0, 0}, {32, 17}}S;5;LabelS;28;_CPFontSystemFacePlaceholderd;2;20D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;70E;E;E;d;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;E;E;f;18;0.6862745098039216E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;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;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;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;37E;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;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;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;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;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;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;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;2;73E;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;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;74E;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;75E;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;38E;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;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;73E;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;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;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;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;53E;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;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;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;61E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;40E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;44E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;40E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;62E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;60E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;68E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;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;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;51E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;50E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;58E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;61E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;73E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;53E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;16;CPViewControllerK;8;$classesA;S;16;CPViewControllerS;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;23;CPViewControllerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPViewControllerTitleKeyD;K;6;CP$UIDd;1;0E;K;26;CPViewControllerCibNameKeyD;K;6;CP$UIDd;1;0E;K;25;CPViewControllerBundleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;9;CPPopoverK;8;$classesA;S;9;CPPopoverS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;22;CPPopoverAppearanceKeyD;K;6;CP$UIDd;2;92E;K;20;CPPopoverAnimatesKeyD;K;6;CP$UIDd;2;93E;K;33;CPPopoverContentViewControllerKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverDelegateKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverBehaviorKeyD;K;6;CP$UIDd;2;94E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;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;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;99E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;100E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;105E;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;2;93E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;107E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;108E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;109E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;109E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;109E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;111E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;112E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;113E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;6;$afontD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;106E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;93E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;108E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;93E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;93E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;93E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;119E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;120E;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;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;121E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;6;$afontD;K;6;CP$UIDd;3;126E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;127E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;128E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;129E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;130E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;6;$afontD;K;6;CP$UIDd;3;126E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;131E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;128E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;132E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;133E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;6;$afontD;K;6;CP$UIDd;3;126E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;134E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;128E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;52E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;135E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;136E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;137E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;138E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;139E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;140E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;141E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;55E;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;54E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;142E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;142E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;143E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;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;56E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;55E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;55E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;147E;K;16;$aimage-positionD;K;6;CP$UIDd;3;106E;K;6;$afontD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;148E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;94E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;94E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;55E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;55E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;6;$afontD;K;6;CP$UIDd;3;126E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;128E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;55E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;152E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;55E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;6;$afontD;K;6;CP$UIDd;3;126E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;154E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;128E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;23;CPViewControllerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPViewControllerTitleKeyD;K;6;CP$UIDd;1;0E;K;26;CPViewControllerCibNameKeyD;K;6;CP$UIDd;1;0E;K;25;CPViewControllerBundleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;22;CPPopoverAppearanceKeyD;K;6;CP$UIDd;2;92E;K;20;CPPopoverAnimatesKeyD;K;6;CP$UIDd;2;93E;K;33;CPPopoverContentViewControllerKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverDelegateKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverBehaviorKeyD;K;6;CP$UIDd;2;94E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;155E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;156E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;62E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;157E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;158E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;62E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;159E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;106E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;93E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;160E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;108E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;109E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;109E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;109E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;111E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;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;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;62E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;161E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;133E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;62E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;6;$afontD;K;6;CP$UIDd;3;126E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;134E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;128E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;62E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;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;62E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;6;$afontD;K;6;CP$UIDd;3;126E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;164E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;128E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;62E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;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;62E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;159E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;6;$afontD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;106E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;93E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;108E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;93E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;93E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;93E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;119E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;167E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;168E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;106E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;93E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;169E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;108E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;109E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;109E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;109E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;111E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;155E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;170E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;68E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;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;68E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;159E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;6;$afontD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;106E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;93E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;108E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;93E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;93E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;93E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;119E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;68E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;171E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;172E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;68E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;159E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;106E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;93E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;108E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;109E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;109E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;109E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;111E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;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;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;68E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;161E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;133E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;68E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;6;$afontD;K;6;CP$UIDd;3;126E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;117E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;134E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;118E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;128E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;93E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;23;CPViewControllerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPViewControllerTitleKeyD;K;6;CP$UIDd;1;0E;K;26;CPViewControllerCibNameKeyD;K;6;CP$UIDd;1;0E;K;25;CPViewControllerBundleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;22;CPPopoverAppearanceKeyD;K;6;CP$UIDd;2;92E;K;20;CPPopoverAnimatesKeyD;K;6;CP$UIDd;2;93E;K;33;CPPopoverContentViewControllerKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverDelegateKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopoverBehaviorKeyD;K;6;CP$UIDd;2;94E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;delegateS;13;nestedPopoverS;7;popoverS;13;popoverWindowS;10;titleLabelS;13;windowPopoverS;4;viewS;21;contentViewControllerS;13;performClose:S;12;movePopover:S;18;openWindowPopover:S;13;closePopover:S;13;setTransient:S;18;openNestedPopover:S;9;orderOut:S;13;AppControllerd;1;0T;d;1;1S;20;{{0, 0}, {301, 261}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;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;46E;E;E;d;2;12S;6;normalS;6;CPViewS;21;{{31, 44}, {239, 32}}S;19;{{0, 0}, {239, 32}}d;2;37S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;174E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;175E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;93E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;109E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;93E;E;d;1;2S;14;I’m a popover!d;4;3072F;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;110E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;176E;E;S;21;{{27, 98}, {247, 29}}S;19;{{0, 0}, {247, 29}}d;2;45S;28;bezeled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;174E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;177E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;109E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;109E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;93E;E;d;1;4S;0;D;K;6;$classD;K;6;CP$UIDd;3;110E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;178E;E;S;15;Write somethingS;22;{{118, 180}, {61, 25}}S;18;{{0, 0}, {61, 25}}d;2;13S;6;buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;174E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;177E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;93E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;109E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;93E;E;S;5;closed;2;14S;22;{{117, 212}, {62, 25}}S;18;{{0, 0}, {62, 25}}S;4;MoveS;22;{{91, 148}, {114, 25}}S;19;{{0, 0}, {114, 25}}S;12;performCloseS;32;{10000000000000, 10000000000000}S;8;CPWindowd;9;606602240S;24;{{181, 163}, {212, 167}}S;21;{{0, 0}, {1440, 878}}d;2;15S;6;WindowS;20;{{0, 0}, {212, 167}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;57E;E;E;S;20;{{66, 29}, {82, 18}}S;18;{{0, 0}, {82, 18}}S;9;check-boxS;8;selectedS;9;TransientS;20;{{65, 70}, {79, 25}}S;18;{{0, 0}, {79, 25}}S;7;PopoverS;21;{{62, 114}, {85, 25}}S;18;{{0, 0}, {85, 25}}S;8;orderOutS;20;{{0, 0}, {201, 168}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;63E;E;E;S;20;{{59, 20}, {83, 17}}S;18;{{0, 0}, {83, 17}}d;2;36S;11;From windowS;22;{{41, 124}, {114, 25}}S;21;{{31, 86}, {135, 25}}S;19;{{0, 0}, {135, 25}}S;15;Another popoverS;21;{{48, 48}, {104, 29}}S;19;{{0, 0}, {104, 29}}S;18;{{3, 0}, {32, 17}}S;18;{{0, 0}, {32, 17}}S;5;LabelD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;70E;E;E;S;20;{{55, 20}, {91, 17}}S;18;{{0, 0}, {91, 17}}S;12;From popoverS;28;_CPFontSystemFacePlaceholderd;2;20D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;2;94E;E;E;d;2;-1D;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;f;18;0.6862745098039216E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPPopover/Resources/MainMenu.xib b/Tests/Manual/CPPopover/Resources/MainMenu.xib index 48341fcdb..ed221696e 100644 --- a/Tests/Manual/CPPopover/Resources/MainMenu.xib +++ b/Tests/Manual/CPPopover/Resources/MainMenu.xib @@ -2,26 +2,26 @@ 1050 - 11E53 - 2182 - 1138.47 - 569.00 + 12C3012 + 2844 + 1187.34 + 625.00 com.apple.InterfaceBuilder.CocoaPlugin - 2182 + 2844 YES - NSTextField - NSCustomObject - NSWindowTemplate - NSView - NSCustomView - NSViewController - NSButtonCell - NSPopover NSButton + NSButtonCell + NSCustomObject + NSCustomView + NSPopover + NSTextField NSTextFieldCell + NSView + NSViewController + NSWindowTemplate YES @@ -55,7 +55,7 @@ YES - + 268 YES @@ -64,12 +64,11 @@ 301 {{31, 137}, {239, 22}} - _NS:9 YES - -1804468671 + -1804599231 272630784 @@ -81,7 +80,7 @@ _NS:9 YES - + 6 System textBackgroundColor @@ -90,7 +89,7 @@ MQA - + 6 System textColor @@ -100,89 +99,89 @@ + NO 293 {{114, 50}, {73, 32}} - + _NS:9 YES - 67239424 + 67108864 134217728 close _NS:9 - -2038284033 + -2038284288 129 200 25 + NO 293 {{113, 18}, {74, 32}} - - _NS:9 YES - 67239424 + 67108864 134217728 Move _NS:9 - -2038284033 + -2038284288 129 200 25 + NO 293 {{87, 82}, {126, 32}} - - + _NS:9 YES - 67239424 + 67108864 134217728 performClose _NS:9 - -2038284033 + -2038284288 129 200 25 + NO 269 {{28, 185}, {245, 32}} - _NS:1505 YES - 67239424 + 67108864 138412544 I’m a popover! @@ -208,11 +207,10 @@ + NO {301, 261} - - _NS:9 NSView @@ -220,8 +218,8 @@ 15 2 - {{344, 821}, {212, 112}} - 607650816 + {{181, 548}, {212, 167}} + 606602240 Window NSWindow @@ -234,35 +232,93 @@ 301 - {{56, 39}, {99, 32}} + {{61, 66}, {91, 32}} - + _NS:9 YES - 67239424 + 67108864 134217728 - Click me! + Popover _NS:9 - -2038284033 + -2038284288 129 200 25 + NO + + + + 301 + {{58, 22}, {97, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + orderOut + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 301 + {{66, 120}, {82, 18}} + + + + _NS:9 + YES + + -2080374784 + 268435456 + Transient + + _NS:9 + + 1211912448 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + NO - {212, 112} + {212, 167} - + _NS:20 - {{0, 0}, {2560, 1418}} + {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} YES @@ -270,51 +326,94 @@ 0 - 0 + 1 0.0 0.0 YES - + 268 YES - + - 293 - {{18, 12}, {126, 32}} + 268 + {{52, 94}, {96, 22}} - - + _NS:9 YES - - 67239424 - 134217728 - performClose + + -1804599231 + 272630784 + _NS:9 - - -2038284033 + + YES + + + + NO + + + + 293 + {{27, 51}, {147, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Another popover + + _NS:9 + + -2038284288 129 200 25 + NO + + + + 293 + {{37, 13}, {126, 32}} + + _NS:9 + YES + + 67108864 + 134217728 + performClose + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO 268 - {{37, 59}, {89, 17}} + {{56, 131}, {89, 17}} - - + _NS:1505 YES - 68288064 + 68157504 138413056 From window @@ -323,11 +422,10 @@ + NO - {163, 96} - - + {201, 168} _NS:9 NSView @@ -339,7 +437,7 @@ _NS:1505 YES - 68288064 + 68157504 272630784 Label @@ -348,6 +446,91 @@ + NO + + + + 268 + + YES + + + 268 + {{52, 94}, {96, 22}} + + + _NS:9 + YES + + -1804599231 + 272630784 + + + _NS:9 + + YES + + + + NO + + + + 293 + {{37, 13}, {126, 32}} + + _NS:9 + YES + + 67108864 + 134217728 + performClose + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{52, 131}, {97, 17}} + + + _NS:1505 + YES + + 68157504 + 138413056 + From popover + + _NS:1505 + + + + + NO + + + {201, 168} + + _NS:9 + NSView + + + + + 0 + 1 + 0.0 + 0.0 + YES @@ -409,6 +592,38 @@ 559 + + + nestedPopover + + + + 582 + + + + openNestedPopover: + + + + 584 + + + + titleLabel + + + + 585 + + + + setTransient: + + + + 586 + view @@ -433,6 +648,14 @@ 484 + + + orderOut: + + + + 590 + view @@ -457,6 +680,30 @@ 554 + + + view + + + + 581 + + + + contentViewController + + + + 580 + + + + performClose: + + + + 583 + @@ -586,7 +833,9 @@ YES + + @@ -623,6 +872,8 @@ YES + + Parent View @@ -683,6 +934,128 @@ + + 560 + + + YES + + + + + + 561 + + + + + 562 + + + YES + + + + + + 563 + + + + + 564 + + + YES + + + + + + 565 + + + + + 567 + + + YES + + + + + + Parent View + + + 568 + + + YES + + + + + + 570 + + + YES + + + + + + 571 + + + YES + + + + + + 572 + + + + + 573 + + + + + 575 + + + + + 578 + + + Nested popover view controller + + + 579 + + + Nested popover + + + 587 + + + YES + + + + + + 588 + + + @@ -722,6 +1095,23 @@ 552.IBPluginDependency 556.IBPluginDependency 557.IBPluginDependency + 560.IBPluginDependency + 561.IBPluginDependency + 562.IBPluginDependency + 563.IBPluginDependency + 564.IBPluginDependency + 565.IBPluginDependency + 567.IBPluginDependency + 568.IBPluginDependency + 570.IBPluginDependency + 571.IBPluginDependency + 572.IBPluginDependency + 573.IBPluginDependency + 575.IBPluginDependency + 578.IBPluginDependency + 579.IBPluginDependency + 587.IBPluginDependency + 588.IBPluginDependency YES @@ -758,6 +1148,23 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -772,7 +1179,7 @@ - 559 + 590 @@ -884,5 +1291,9 @@ YES 3 + + NSSwitch + {15, 15} + diff --git a/Tests/Manual/ChildWindows/AppController.j b/Tests/Manual/ChildWindows/AppController.j index b6837848c..d121cfb10 100644 --- a/Tests/Manual/ChildWindows/AppController.j +++ b/Tests/Manual/ChildWindows/AppController.j @@ -15,6 +15,8 @@ @outlet CPWindow child; @outlet CPWindow grandchild; @outlet CPWindow other; + + CPWindow outWindow; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification @@ -23,7 +25,7 @@ [child addChildWindow:grandchild ordered:CPWindowBelow]; [other orderFront:self]; - [parent orderFront:self]; + [parent makeKeyAndOrderFront:self]; } - (@action)move:(id)sender @@ -34,4 +36,16 @@ [[sender window] setFrameOrigin:newOrigin]; } +- (@action)out:(id)sender +{ + outWindow = [sender window]; + [outWindow orderOut:self]; + [CPTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(in:) userInfo:nil repeats:NO]; +} + +- (void)in:(id)sender +{ + [outWindow makeKeyAndOrderFront:self]; +} + @end diff --git a/Tests/Manual/ChildWindows/Resources/MainMenu.cib b/Tests/Manual/ChildWindows/Resources/MainMenu.cib index e0b9e3c7c..fc9f0c7d9 100644 --- a/Tests/Manual/ChildWindows/Resources/MainMenu.cib +++ b/Tests/Manual/ChildWindows/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;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;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;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;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;11E;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;11E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;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;41E;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;42E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;46E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;47E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;41E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;52E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;54E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;55E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;26E;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;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;57E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;59E;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;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;60E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;68E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;73E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;68E;K;31;CPTextFieldPlaceholderStringKeyD;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;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;74E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;75E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;77E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;79E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;56E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;56E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;68E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;80E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;70E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;82E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;56E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;69E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;67E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;56E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;84E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;54E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;85E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;33E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;86E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;86E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;68E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;73E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;68E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;89E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;54E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;90E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;91E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;68E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;73E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;68E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;94E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;53E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;54E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;95E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;57E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;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;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;39E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;60E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;39E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;68E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;69E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;69E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;73E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;68E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;8;delegateS;5;childS;10;grandchildS;5;otherS;6;parentS;5;move:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;22;{{62, 67}, {207, 169}}S;21;{{0, 0}, {1440, 878}}d;1;7S;6;Parentd;1;0S;20;{{0, 0}, {207, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;E;E;S;6;normalS;21;{{49, 70}, {104, 29}}S;19;{{0, 0}, {104, 29}}d;2;45S;9;textfieldS;28;bezeled+editable+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;97E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;98E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;81E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;81E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;69E;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;2;72E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;99E;E;S;20;{{70, 27}, {62, 25}}S;18;{{0, 0}, {62, 25}}d;2;36S;6;buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;97E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;98E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;69E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;81E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;69E;E;S;4;MoveF;d;2;14S;13;AppControllerS;24;{{223, 149}, {303, 169}}S;20;Parent/Child - AboveS;20;{{0, 0}, {303, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;21;{{97, 70}, {104, 29}}S;24;{{484, 110}, {294, 169}}S;24;Child/Grandchild - BelowS;20;{{0, 0}, {294, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;S;21;{{93, 70}, {104, 29}}S;24;{{182, 370}, {207, 169}}S;5;OtherD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;40E;E;E;S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;E;E;d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;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;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;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;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;1;0E;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;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;2;45E;D;K;6;CP$UIDd;2;46E;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;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;11E;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;41E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;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;47E;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;48E;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;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;36E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;40E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;44E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;27E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;53E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;55E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;55E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;55E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;47E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;56E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;57E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;58E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;59E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;60E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;61E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;62E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;29E;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;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;64E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;64E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;65E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;66E;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;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;67E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;6;$afontD;K;6;CP$UIDd;2;73E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;74E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;76E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;80E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;74E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;75E;K;31;CPTextFieldPlaceholderStringKeyD;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;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;81E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;6;$afontD;K;6;CP$UIDd;2;86E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;63E;K;11;$aalignmentD;K;6;CP$UIDd;2;74E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;63E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;87E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;77E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;89E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;63E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;76E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;74E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;63E;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;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;6;$afontD;K;6;CP$UIDd;2;86E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;63E;K;11;$aalignmentD;K;6;CP$UIDd;2;74E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;63E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;92E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;77E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;89E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;63E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;76E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;74E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;63E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;56E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;57E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;58E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;94E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;60E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;61E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;95E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;37E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;96E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;6;$afontD;K;6;CP$UIDd;2;73E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;74E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;76E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;80E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;74E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;75E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;99E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;6;$afontD;K;6;CP$UIDd;2;86E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;63E;K;11;$aalignmentD;K;6;CP$UIDd;2;74E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;63E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;92E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;77E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;89E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;63E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;76E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;74E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;63E;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;26E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;56E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;57E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;58E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;100E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;60E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;61E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;101E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;102E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;102E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;104E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;41E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;6;$afontD;K;6;CP$UIDd;2;73E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;74E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;76E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;80E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;74E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;75E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;105E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;41E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;6;$afontD;K;6;CP$UIDd;2;86E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;63E;K;11;$aalignmentD;K;6;CP$UIDd;2;74E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;63E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;92E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;77E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;89E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;63E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;76E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;74E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;63E;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;26E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;56E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;57E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;58E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;106E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;60E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;61E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;107E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;64E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;64E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;45E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;63E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;67E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;45E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;6;$afontD;K;6;CP$UIDd;2;73E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;74E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;76E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;80E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;74E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;75E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;E;E;S;8;delegateS;5;childS;10;grandchildS;5;otherS;6;parentS;5;move:S;4;out:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;22;{{62, 67}, {207, 169}}S;21;{{0, 0}, {1440, 878}}d;1;7S;6;Parentd;1;0S;20;{{0, 0}, {207, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;E;E;S;6;normalS;21;{{51, 70}, {104, 29}}S;19;{{0, 0}, {104, 29}}d;2;45S;9;textfieldS;28;bezeled+editable+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;72E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;109E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;110E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;76E;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;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;111E;E;S;20;{{70, 27}, {62, 25}}S;18;{{0, 0}, {62, 25}}d;2;36S;6;buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;72E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;109E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;110E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;76E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;76E;E;S;4;MoveF;d;2;14S;21;{{76, 125}, {51, 25}}S;18;{{0, 0}, {51, 25}}S;3;OutS;13;AppControllerS;24;{{223, 149}, {303, 169}}S;20;Parent/Child - AboveS;20;{{0, 0}, {303, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;E;E;S;21;{{99, 48}, {104, 29}}S;22;{{124, 104}, {51, 25}}S;24;{{484, 110}, {294, 169}}S;24;Child/Grandchild - BelowS;20;{{0, 0}, {294, 169}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;E;E;S;21;{{95, 48}, {104, 29}}S;22;{{120, 105}, {51, 25}}S;24;{{182, 370}, {207, 169}}S;5;OtherD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;E;E;d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/ChildWindows/Resources/MainMenu.xib b/Tests/Manual/ChildWindows/Resources/MainMenu.xib index e99dcdc1a..b2ba38d5c 100644 --- a/Tests/Manual/ChildWindows/Resources/MainMenu.xib +++ b/Tests/Manual/ChildWindows/Resources/MainMenu.xib @@ -59,7 +59,7 @@ {{55, 73}, {96, 22}} - + YES -1804599231 @@ -118,6 +118,31 @@ NO + + + 268 + {{72, 13}, {63, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Out + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + {207, 169} @@ -126,7 +151,7 @@ {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} - YES + NO AppController @@ -148,10 +173,10 @@ 301 - {{103, 73}, {96, 22}} + {{103, 95}, {96, 22}} - + YES -1804599231 @@ -165,6 +190,31 @@ NO + + + 268 + {{120, 34}, {63, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Out + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + {303, 169} @@ -173,7 +223,7 @@ {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} - YES + NO 7 @@ -192,10 +242,10 @@ 301 - {{99, 73}, {96, 22}} + {{99, 95}, {96, 22}} - + YES -1804599231 @@ -209,6 +259,31 @@ NO + + + 268 + {{116, 33}, {63, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Out + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + {294, 169} @@ -217,7 +292,7 @@ {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} - YES + NO 7 @@ -261,7 +336,7 @@ {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} - YES + NO @@ -315,6 +390,30 @@ 478 + + + out: + + + + 482 + + + + out: + + + + 485 + + + + out: + + + + 488 + @@ -361,6 +460,7 @@ YES + @@ -398,6 +498,7 @@ YES + @@ -430,6 +531,7 @@ YES + @@ -493,6 +595,48 @@ + + 479 + + + YES + + + + + + 480 + + + + + 483 + + + YES + + + + + + 484 + + + + + 486 + + + YES + + + + + + 487 + + + @@ -537,6 +681,12 @@ 474.IBPluginDependency 476.IBPluginDependency 477.IBPluginDependency + 479.IBPluginDependency + 480.IBPluginDependency + 483.IBPluginDependency + 484.IBPluginDependency + 486.IBPluginDependency + 487.IBPluginDependency YES @@ -547,7 +697,7 @@ com.apple.InterfaceBuilder.CocoaPlugin {{303, 221}, {480, 360}} - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -578,6 +728,12 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -592,7 +748,7 @@ - 478 + 488 @@ -601,14 +757,35 @@ AppController NSObject - move: - id + YES + + YES + move: + out: + + + YES + id + id + - move: - - move: - id + YES + + YES + move: + out: + + + YES + + move: + id + + + out: + id + From fdbef474f0b24b2cdb5eb0ba0d532ce253f1a47a Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Mon, 28 Jan 2013 09:32:37 +0800 Subject: [PATCH 3/4] Final fixes for popovers as child windows - Fixed case where a dangling transition function was left when closing a popover. - Fixed case where closing a popover, moving the target view, then reopening the same popover would not reposition the popover when resizing the target view's window. - Optimized repositioning of popover on target view change. - Implemented transitional popovers via trapped mouse down events. - Implemented dequeue: argument of CPApplication -setTarget:selector:forNextEventMatchingMask:untilDate:inMode:dequeue: and -setCallback:forNextEventMatchingMask:untilDate:inMode:dequeue:. - Fixed some child window behavior when ordering/closing. - Eliminated no longer necessary window close notification in CPPopover. - Fixed window title in theme so it doesn't dim when window is main but not key. --- AppKit/CPApplication.j | 27 ++-- AppKit/CPDragServer.j | 3 +- AppKit/CPPopover.j | 21 --- AppKit/CPSegmentedControl.j | 1 + AppKit/CPWindow/_CPWindow.j | 40 +++--- AppKit/Themes/Aristo2/ThemeDescriptors.j | 2 + AppKit/_CPPopoverWindow.j | 167 ++++++++++++----------- 7 files changed, 126 insertions(+), 135 deletions(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index d02917652..bf574ab43 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -620,9 +620,13 @@ CPRunContinuesResponse = -1002; if (_eventListeners.length) { if (_eventListeners[_eventListeners.length - 1]._mask & (1 << [anEvent type])) - _eventListeners.pop()._callback(anEvent); + { + var listener = _eventListeners.pop(); + listener._callback(anEvent); - return; + if (listener._shouldDequeue) + return; + } } if ([anEvent type] == CPMouseMoved) @@ -919,7 +923,7 @@ CPRunContinuesResponse = -1002; */ - (void)setCallback:(Function)aCallback forNextEventMatchingMask:(unsigned int)aMask untilDate:(CPDate)anExpiration inMode:(CPString)aMode dequeue:(BOOL)shouldDequeue { - _eventListeners.push(_CPEventListenerMake(aMask, aCallback)); + _eventListeners.push(_CPEventListenerMake(aMask, aCallback, shouldDequeue)); } /*! @@ -935,7 +939,7 @@ CPRunContinuesResponse = -1002; */ - (void)setTarget:(id)aTarget selector:(SEL)aSelector forNextEventMatchingMask:(unsigned int)aMask untilDate:(CPDate)anExpiration inMode:(CPString)aMode dequeue:(BOOL)shouldDequeue { - _eventListeners.push(_CPEventListenerMake(aMask, function (anEvent) { objj_msgSend(aTarget, aSelector, anEvent); })); + _eventListeners.push(_CPEventListenerMake(aMask, function (anEvent) { objj_msgSend(aTarget, aSelector, anEvent); }, shouldDequeue)); } /*! @@ -1212,28 +1216,29 @@ var _CPModalSessionMake = function(aWindow, aStopCode) return { _window:aWindow, _state:CPRunContinuesResponse , _previous:nil }; }; -var _CPEventListenerMake = function(anEventMask, aCallback) +var _CPEventListenerMake = function(anEventMask, aCallback, shouldDequeue) { - return { _mask:anEventMask, _callback:aCallback }; + return { _mask:anEventMask, _callback:aCallback, _dequeue:shouldDequeue }; }; // Make this a global for use in CPPlatformWindow+DOM.j. _CPRunModalLoop = function(anEvent) { - [CPApp setCallback:_CPRunModalLoop forNextEventMatchingMask:CPAnyEventMask untilDate:nil inMode:0 dequeue:NO]; + [CPApp setCallback:_CPRunModalLoop forNextEventMatchingMask:CPAnyEventMask untilDate:nil inMode:0 dequeue:YES]; var theWindow = [anEvent window], modalSession = CPApp._currentSession; - // The special case for popovers here is not clear. In Cocoa the popover window does not respond YES to worksWhenModal, - // 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. + /* + The special case for popovers here is not clear. In Cocoa the popover window does not respond YES to worksWhenModal, 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 attachedSheet] == modalSession._window || // -dw- allow modal parent of sheet to be repositioned ([theWindow isKindOfClass:_CPPopoverWindow] && [[theWindow targetView] window] === modalSession._window)) + { [theWindow sendEvent:anEvent]; + } }; /*! diff --git a/AppKit/CPDragServer.j b/AppKit/CPDragServer.j index cde39ce54..75dd6bd9b 100644 --- a/AppKit/CPDragServer.j +++ b/AppKit/CPDragServer.j @@ -455,6 +455,7 @@ var CPDraggingSource_draggedImage_movedTo_ = 1 << 0, else if (type === CPKeyDown) { var characters = [anEvent characters]; + if (characters === CPEscapeFunctionKey) { _dragOperation = CPDragOperationNone; @@ -471,7 +472,7 @@ var CPDraggingSource_draggedImage_movedTo_ = 1 << 0, // If we're not a mouse up, then we're going to want to grab the next event. [CPApp setTarget:self selector:@selector(trackDragging:) forNextEventMatchingMask:CPMouseMovedMask | CPLeftMouseDraggedMask | CPLeftMouseUpMask | CPKeyDownMask - untilDate:nil inMode:0 dequeue:NO]; + untilDate:nil inMode:0 dequeue:YES]; } @end diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index dc77006d8..46991f0d9 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -222,11 +222,6 @@ Set the behavior of the CPPopover. It can be: if (!_popoverWindow) { _popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[self styleMaskForBehavior]]; - - var parentWindow = [positioningView window]; - - if (![parentWindow isKindOfClass:_CPPopoverWindow]) - [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(parentWindowWillClose:) name:CPWindowWillCloseNotification object:parentWindow]; } [_popoverWindow setAppearance:_appearance]; @@ -321,22 +316,6 @@ Set the behavior of the CPPopover. It can be: [_delegate popoverDidShow:self]; } - -#pragma mark - -#pragma mark Notifications - -/*! - @ignore - - This method is called only when a non-popover parent window - is closing. In that case popovers should order out. -*/ -- (void)parentWindowWillClose:(CPNotification)aNotification -{ - [_popoverWindow orderOut:nil]; - [self performClose:nil]; -} - @end @implementation CPPopover (Deprecated) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 24aabeaef..b94cc8ea0 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -804,6 +804,7 @@ CPSegmentSwitchTrackingMomentary = 2; return; var highlighted = [self testSegment:location] === _trackingSegment; + if (highlighted != _trackingHighlighted) { _trackingHighlighted = highlighted; diff --git a/AppKit/CPWindow/_CPWindow.j b/AppKit/CPWindow/_CPWindow.j index 7cfce3c77..0a3b39725 100644 --- a/AppKit/CPWindow/_CPWindow.j +++ b/AppKit/CPWindow/_CPWindow.j @@ -826,6 +826,9 @@ CPTexturedBackgroundWindowMask - (void)_orderOutRecursively:(BOOL)recursive { + if (!_isVisible) + return; + if ([self isSheet]) { // -dw- as in Cocoa, orderOut: detaches the sheet and animates out @@ -855,13 +858,11 @@ CPTexturedBackgroundWindowMask { if (orderingMode === CPWindowOut) { - var hasParent = !!_parentWindow; - // Directly ordering out will detach a child window [_parentWindow removeChildWindow:self]; // In Cocoa, a window orders out its child windows only if it has no parent - [self _orderOutRecursively:!hasParent]; + [self _orderOutRecursively:!_parentWindow]; } else if (orderingMode === CPWindowAbove && otherWindowNumber === 0) [self _orderFront]; @@ -1650,20 +1651,9 @@ CPTexturedBackgroundWindowMask case CPLeftMouseDown: case CPRightMouseDown: + // This will return _windowView if it is within a resize region _leftMouseDownView = [_windowView hitTest:point]; - /* - hitTest: will only test within the window's frame. - If that fails, check if a left mousedown is within - the resize slop outside the frame. - */ - if (!_leftMouseDownView && - type === CPLeftMouseDown && - [self _isValidMousePoint:[self convertBaseToGlobal:point]]) - { - _leftMouseDownView = _windowView; - } - if (_leftMouseDownView !== _firstResponder && [_leftMouseDownView acceptsFirstResponder]) [self makeFirstResponder:_leftMouseDownView]; @@ -2167,15 +2157,12 @@ CPTexturedBackgroundWindowMask [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowWillCloseNotification object:self]; - var hasParent = !!_parentWindow; - - [self orderOut:nil]; - - // If a window has no parent, close all of the children - [self _detachFromChildrenClosing:!hasParent]; + [_parentWindow removeChildWindow:self]; + [self _orderOutRecursively:NO]; + [self _detachFromChildrenClosing:!_parentWindow]; } -- (void)_detachFromChildrenClosing:(BOOL)shouldClose +- (void)_detachFromChildrenClosing:(BOOL)shouldCloseChildren { // When a window is closed, it must detach itself from all children [_childWindows enumerateObjectsUsingBlock:function(child) @@ -2184,12 +2171,17 @@ CPTexturedBackgroundWindowMask } ]; - if (shouldClose) + if (shouldCloseChildren) + { [_childWindows enumerateObjectsUsingBlock:function(child) { - [child close]; + // Cocoa does NOT call close or orderOut when closing child windows, + // they are summarily closed. + [child _orderOutRecursively:NO]; + [child _detachFromChildrenClosing:![child parentWindow]]; } ]; + } _childWindows = []; } diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index 569545a34..722b40819 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -1798,6 +1798,7 @@ var themedButtonValues = nil, [@"title-font", [CPFont systemFontOfSize:14]], [@"title-text-color", [CPColor colorWithWhite:255.0 / 255.0 alpha:1]], [@"title-text-color", [CPColor colorWithWhite:255.0 / 255.0 alpha:1], CPThemeStateKeyWindow], + [@"title-text-color", [CPColor colorWithWhite:255.0 / 255.0 alpha:1], CPThemeStateMainWindow], [@"title-text-shadow-color", [CPColor blackColor]], [@"title-text-shadow-offset", CGSizeMake(0.0, 1.0)], [@"title-alignment", CPCenterTextAlignment], @@ -1865,6 +1866,7 @@ var themedButtonValues = nil, [@"title-font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]], [@"title-text-color", [CPColor colorWithHexString:@"848484"]], [@"title-text-color", [CPColor colorWithWhite:22.0 / 255.0 alpha:1], CPThemeStateKeyWindow], + [@"title-text-color", [CPColor colorWithWhite:22.0 / 255.0 alpha:1], CPThemeStateMainWindow], [@"title-text-shadow-color", [CPColor whiteColor]], [@"title-text-shadow-offset", CGSizeMake(0.0, 1.0)], [@"title-alignment", CPCenterTextAlignment], diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 818acd207..e96c97b1d 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -25,6 +25,10 @@ @import "CPButton.j" @import "CPPanel.j" +// Use forward declaration because this file is imported by CPPopover +@class CPPopover + +@global CPApp CPClosableOnBlurWindowMask = 1 << 4; CPPopoverAppearanceMinimal = 0; @@ -52,6 +56,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, BOOL _browserAnimates; BOOL _shouldPerformAnimation; CPInteger _implementedDelegateMethods; + JSObject _orderOutTransitionFunction; } @@ -73,36 +78,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, #pragma mark - #pragma mark Initialization -/*! - Create and init a _CPPopoverWindow with the given size and view. - - @param aSize the size of the popover window - @param aView the target view - @return ready to use _CPPopoverWindow -*/ -+ (id)popoverWindowWithSize:(CGSize)aSize forView:(CPView)aView -{ - return [_CPPopoverWindow popoverWindowWithSize:aSize forView:aView styleMask:0]; -} - -/*! - Create and init a _CPPopoverWindow with given the size, view and style mask. - - @param aSize the size of the popover window - @param aView the target view - @param styleMask the window style mask (combine CPClosableWindowMask and CPClosableOnBlurWindowMask) - @return ready to use _CPPopoverWindow -*/ -+ (id)popoverWindowWithSize:(CGSize)aSize forView:(CPView)aView styleMask:(int)aMask -{ - var popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:_CGRectMake(0.0, 0.0, aSize.width, aSize.height) styleMask:aMask]; - - // FIXME: There is no attachToView method - // [popoverWindow attachToView:aView]; - - return popoverWindow; -} - /*! Create and init a _CPPopoverWindow with given the given frame. @@ -126,11 +101,13 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, if (self = [super initWithContentRect:aFrame styleMask:aStyleMask]) { _animates = YES; - _closeOnBlur = (aStyleMask & CPClosableOnBlurWindowMask); _isClosing = NO; _browserAnimates = [self browserSupportsAnimation]; _shouldPerformAnimation = YES; + _orderOutTransitionFunction = function() { [self _orderOutRecursively:YES]; }; + + [self setStyleMask:aStyleMask]; [self setBecomesKeyOnlyIfNeeded:YES]; [self setMovableByWindowBackground:YES]; [self setHasShadow:NO]; @@ -185,18 +162,14 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, */ - (void)observeValueForKeyPath:(CPString)aPath ofObject:(id)anObject change:(CPDictionary)theChange context:(void)aContext { - if ([aPath isEqual:@"frame"]) + if (aPath === @"frame") { - // TODO: don't recompute everything, just compute the move offset - var edge = [_windowView preferredEdge]; - if (![_targetView window]) - { - [self _close] return; - } - [self positionRelativeToRect:nil ofView:_targetView preferredEdge:edge]; + var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + + [self setFrameOrigin:point]; } } @@ -337,6 +310,8 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, */ - (void)positionRelativeToRect:(CGRect)aRect ofView:(CPView)positioningView preferredEdge:(int)anEdge { + var wasVisible = [self isVisible]; + if (!aRect || _CGRectIsEmpty(aRect)) aRect = [positioningView bounds]; @@ -351,14 +326,23 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, { [[_targetView window] removeChildWindow:self]; [_targetView removeObserver:self forKeyPath:@"frame"]; - _targetView = positioningView; - [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; } - // Always add us as a child, because when we close we are detached from - // the parent, and the parent may cache this window and reopen it. - [[_targetView window] addChildWindow:self ordered:CPWindowAbove]; + [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; + + /* + If _targetView's window is not a full platform window, + add us as a child, because when we close we are detached from + the parent, and the parent may cache this window and reopen it. + */ + var targetWindow = [_targetView window]; + + if (![targetWindow isFullPlatformWindow]) + [[_targetView window] addChildWindow:self ordered:CPWindowAbove]; + + if (!wasVisible) + [self _trapNextMouseDown]; } /*! @ignore */ @@ -382,6 +366,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, #pragma mark Actions /*! + @ignore Closes the _CPPopoverWindow @param sender the sender of the action @@ -396,24 +381,17 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, #pragma mark Overrides /*! - Called when the window is losing focus. + @ignore + Show animation if necessary. */ -- (void)resignKeyWindow +- (void)close { - [super resignKeyWindow]; - - if (_closeOnBlur && !_isClosing) - { - if (!_delegate || - ((_implementedDelegateMethods & _CPPopoverWindow_shouldClose_) && - [_delegate popoverWindowShouldClose:self])) - { - [self close]; - } - } + [self orderOut:self]; + [self _detachFromChildrenClosing:YES]; } /*! + @ignore When the window appears, show animation if necessary. Also take this opportunity to keep track of window moves. @@ -421,7 +399,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, */ - (IBAction)orderFront:(is)aSender { - if (![self isMainWindow]) + if (![self isKeyWindow]) { [super orderFront:aSender]; @@ -465,10 +443,10 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, [self setCSS3Property:@"Transform" value:@"scale(1.1)"]; [self setCSS3Property:@"Transition" value:CPBrowserCSSProperty('transform') + @" 200ms ease-in"]; - var transitionEndFunction = function() + var orderFrontTransitionFunction = function() { #if PLATFORM(DOM) - _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), transitionEndFunction, YES); + _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), orderFrontTransitionFunction, YES); #endif // Now set up the pop-in to normal size transition. @@ -491,7 +469,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, }; #if PLATFORM(DOM) - _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), transitionEndFunction, YES); + _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), orderFrontTransitionFunction, YES); #endif }, 0); } @@ -509,14 +487,14 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, } /*! + @ignore Animate window closing. */ -- (void)close +- (void)orderOut:(id)aSender { if (![self isVisible]) return; - // set a flag to avoid an infinite loop in resignMainWindow _isClosing = YES; if (_animates && _browserAnimates) @@ -525,30 +503,24 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, [self setCSS3Property:@"Transition" value:@"opacity 250ms linear"]; #if PLATFORM(DOM) _DOMElement.style.opacity = 0; -#endif - - var transitionEndFunction = function() - { -#if PLATFORM(DOM) - _DOMElement.removeEventListener(CPBrowserStyleProperty("transitionend"), transitionEndFunction, YES); -#endif - [self _close]; - }; - -#if PLATFORM(DOM) - _DOMElement.addEventListener(CPBrowserStyleProperty("transitionend"), transitionEndFunction, YES); + _DOMElement.addEventListener(CPBrowserStyleProperty("transitionend"), _orderOutTransitionFunction, YES); #endif } else { - [self _close]; + [self _orderOutRecursively:YES]; } } -- (void)_close +- (void)_orderOutRecursively:(BOOL)recursive { - [super close]; + // Make absolutely sure no dangling event listeners are left +#if PLATFORM(DOM) + _DOMElement.removeEventListener(CPBrowserStyleProperty("transitionend"), _orderOutTransitionFunction, YES); +#endif + [_targetView removeObserver:self forKeyPath:@"frame"]; + [super _orderOutRecursively:recursive]; _shouldPerformAnimation = YES; _isClosing = NO; @@ -557,4 +529,43 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, [_delegate popoverWindowDidClose:self]; } + +#pragma mark - +#pragma mark Private + +- (void)_mouseWasClicked:(CPEvent)anEvent +{ + /* + If the mouse was clicked inside us, trap the next mouse down. + If the mouse was clicked outside of us, we close and send this + message to any parent popovers so they have a chance to close + if necessary. + */ + if (![self isVisible]) + return; + + var mouseWindow = [anEvent window]; + + if (mouseWindow === self) + [self _trapNextMouseDown]; + else + { + // Send _close to the delegate so popoverWillClose is sent to the popover's delegate + if (_closeOnBlur) + [_delegate _close]; + + // Give a transient parent popover a chance to close + var parent = [self parentWindow]; + + if ([parent isKindOfClass:[self class]]) + [parent _mouseWasClicked:anEvent]; + } +} + +- (void)_trapNextMouseDown +{ + // Don't dequeue the event so clicks in controls will work + [CPApp setTarget:self selector:@selector(_mouseWasClicked:) forNextEventMatchingMask:CPLeftMouseDownMask untilDate:nil inMode:CPDefaultRunLoopMode dequeue:NO]; +} + @end From b7d1ccf9b65c17e2a1b36ee5a0a697e362124ea7 Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Mon, 28 Jan 2013 12:36:59 +0800 Subject: [PATCH 4/4] Child window/popover fixes - Added CPWindow -_parentWindowDidOrderInChild to notify a window when it is directly ordered in by a parent. - Fixed observing of target view frame changes to work in all possible cases. - Fixed typo in code introduced in last commit in CPApplication -sendEvent. --- AppKit/CPApplication.j | 2 +- AppKit/CPWindow/_CPWindow.j | 8 ++++++++ AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 10 ++++++---- AppKit/_CPPopoverWindow.j | 15 +++++++++++++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index bf574ab43..ebf440b6d 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -624,7 +624,7 @@ CPRunContinuesResponse = -1002; var listener = _eventListeners.pop(); listener._callback(anEvent); - if (listener._shouldDequeue) + if (listener._dequeue) return; } } diff --git a/AppKit/CPWindow/_CPWindow.j b/AppKit/CPWindow/_CPWindow.j index 0a3b39725..c3431415d 100644 --- a/AppKit/CPWindow/_CPWindow.j +++ b/AppKit/CPWindow/_CPWindow.j @@ -800,6 +800,14 @@ CPTexturedBackgroundWindowMask [self makeMainWindow]; } +/* + Called when a parent window orders in a child window directly. + without going through the ordering methods in CPWindow. +*/ +- (void)_parentDidOrderInChild +{ +} + /* Makes the receiver the last window in the screen ordering. @param aSender the object that requested this diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index f42465e53..ae91f7f5c 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1489,10 +1489,11 @@ var resizeTimer = nil; for (var i = 0; i < count; ++i) { - var child = children[i]; + var child = children[i], + childWasVisible = [child isVisible]; // If a child is not visible and has not yet been ordered in, skip it - if (![child isVisible] && ![child _hasBeenOrderedIn]) + if (!childWasVisible && ![child _hasBeenOrderedIn]) continue; var ordering = [child _childOrdering]; @@ -1505,13 +1506,14 @@ var resizeTimer = nil; [aLayer insertWindow:child atIndex:index]; + if (!childWasVisible) + [child _parentDidOrderInChild]; + if ([[child childWindows] count]) [self _orderChildWindowsOf:child furthestParent:furthestParent layer:aLayer]; parent = child; } - - return index; } - (void)_removeLayers diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index e96c97b1d..d1649e257 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -329,8 +329,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, _targetView = positioningView; } - [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; - /* If _targetView's window is not a full platform window, add us as a child, because when we close we are detached from @@ -486,6 +484,19 @@ var _CPPopoverWindow_shouldClose_ = 1 << 0, _isClosing = NO; } +- (void)_orderFront +{ + if (![self isVisible]) + [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; + + [super _orderFront]; +} + +- (void)_parentDidOrderInChild +{ + [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; +} + /*! @ignore Animate window closing.