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/CPApplication.j b/AppKit/CPApplication.j index fef213203..ebf440b6d 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._dequeue) + 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:_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/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/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..46991f0d9 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,24 @@ 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]]; - - var parentWindow = [positioningView window]; - - if (![parentWindow isKindOfClass:_CPAttachedWindow]) - [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(parentWindowWillClose:) name:CPWindowWillCloseNotification object:parentWindow]; + _popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[self styleMaskForBehavior]]; } - [_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 +254,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 +277,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,46 +292,30 @@ 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]; } - -#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 -{ - [_attachedWindow orderOut:nil]; - [self performClose:nil]; -} - @end @implementation CPPopover (Deprecated) @@ -347,7 +329,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/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/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 890e9e94a..c3431415d 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; @@ -198,6 +199,10 @@ var CPWindowActionMessageKeys = [ BOOL _isFullPlatformWindow; _CPWindowFullPlatformWindowSession _fullPlatformWindowSession; + CPWindow _parentWindow; + CPArray _childWindows; + CPWindowOrderingMode _childOrdering @accessors(setter=_setChildOrdering); + CPDictionary _sheetContext; CPWindow _parentView; BOOL _isSheet; @@ -249,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; } @@ -258,6 +264,11 @@ CPTexturedBackgroundWindowMask _registeredDraggedTypesArray = []; _acceptsMouseMovedEvents = YES; _isMovable = YES; + _hasBeenOrderedIn = NO; + + _parentWindow = nil; + _childWindows = []; + _childOrdering = CPWindowOut; _isSheet = NO; _sheetContext = nil; @@ -663,10 +674,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 +712,23 @@ 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 +775,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 @@ -768,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 @@ -775,7 +815,12 @@ CPTexturedBackgroundWindowMask */ - (void)orderBack:(id)aSender { - //[_platformWindow order:CPWindowBelow + [self orderWindow:CPWindowBelow relativeTo:0]; +} + +- (void)_orderBack +{ + // FIXME: Implement this } /*! @@ -784,6 +829,14 @@ CPTexturedBackgroundWindowMask */ - (void)orderOut:(id)aSender { + [self orderWindow:CPWindowOut relativeTo:0]; +} + +- (void)_orderOutRecursively:(BOOL)recursive +{ + if (!_isVisible) + return; + if ([self isSheet]) { // -dw- as in Cocoa, orderOut: detaches the sheet and animates out @@ -791,15 +844,13 @@ CPTexturedBackgroundWindowMask return; } + if (recursive) + [_childWindows makeObjectsPerformSelector:@selector(_orderOutRecursively:) withObject:recursive]; + #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 +859,26 @@ 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) + { + // 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:!_parentWindow]; + } + 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 } @@ -1595,20 +1659,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]; @@ -1617,7 +1670,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,9 +2160,38 @@ CPTexturedBackgroundWindowMask */ - (void)close { + if ([_delegate respondsToSelector:@selector(windowWillClose:)]) + [_delegate windowWillClose:self]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPWindowWillCloseNotification object:self]; - [self orderOut:nil]; + [_parentWindow removeChildWindow:self]; + [self _orderOutRecursively:NO]; + [self _detachFromChildrenClosing:!_parentWindow]; +} + +- (void)_detachFromChildrenClosing:(BOOL)shouldCloseChildren +{ + // When a window is closed, it must detach itself from all children + [_childWindows enumerateObjectsUsingBlock:function(child) + { + [child setParentWindow:nil]; + } + ]; + + if (shouldCloseChildren) + { + [_childWindows enumerateObjectsUsingBlock:function(child) + { + // Cocoa does NOT call close or orderOut when closing child windows, + // they are summarily closed. + [child _orderOutRecursively:NO]; + [child _detachFromChildrenClosing:![child parentWindow]]; + } + ]; + } + + _childWindows = []; } // Managing Main Status @@ -2315,6 +2397,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..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; @@ -453,8 +463,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 +479,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 +501,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 +576,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/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 a919dcff6..926074a3d 100644 --- a/AppKit/Platform/DOM/CPDOMWindowLayer.j +++ b/AppKit/Platform/DOM/CPDOMWindowLayer.j @@ -82,19 +82,26 @@ { // 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. 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 ++count; - if (anIndex == CPNotFound || anIndex >= count) + if (anIndex === CPNotFound || anIndex >= count) [_windows addObject:aWindow]; else [_windows insertObject:aWindow atIndex:anIndex]; @@ -113,7 +120,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..ae91f7f5c 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,118 @@ 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]; + + [aWindow _setHasBeenOrderedIn:YES]; +} + +- (CPWindow)_furthestParentOf:(CPWindow)aWindow +{ + var parent; + + while ((parent = [aWindow parentWindow])) + aWindow = parent; + + return aWindow; +} + +- (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; + + for (var i = 0; i < count; ++i) + { + var child = children[i], + childWasVisible = [child isVisible]; + + // If a child is not visible and has not yet been ordered in, skip it + if (!childWasVisible && ![child _hasBeenOrderedIn]) + continue; + + var ordering = [child _childOrdering]; + + if ((ordering === CPWindowAbove && furthestParent._index > parent._index) || + (ordering === CPWindowBelow && furthestParent._index < parent._index)) + parent = furthestParent; + + var index = ordering === CPWindowAbove ? parent._index + 1 : parent._index; + + [aLayer insertWindow:child atIndex:index]; + + if (!childWasVisible) + [child _parentDidOrderInChild]; + + if ([[child childWindows] count]) + [self _orderChildWindowsOf:child furthestParent:furthestParent layer:aLayer]; + + parent = child; + } } - (void)_removeLayers 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/_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 71% rename from AppKit/_CPAttachedWindow.j rename to AppKit/_CPPopoverWindow.j index ceba344e3..d1649e257 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,29 @@ @import @import "CPButton.j" -@import "CPWindow.j" +@import "CPPanel.j" +// Use forward declaration because this file is imported by CPPopover +@class CPPopover + +@global CPApp 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); @@ -52,6 +56,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, BOOL _browserAnimates; BOOL _shouldPerformAnimation; CPInteger _implementedDelegateMethods; + JSObject _orderOutTransitionFunction; } @@ -66,7 +71,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, */ + (Class)_windowViewClassForStyleMask:(unsigned)aStyleMask { - return _CPAttachedWindowView; + return _CPPopoverWindowView; } @@ -74,39 +79,10 @@ 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 given the given frame. - @param aSize the size of the attached window - @param aView the target view - @return ready to use _CPAttachedWindow -*/ -+ (id)attachedWindowWithSize:(CGSize)aSize forView:(CPView)aView -{ - return [_CPAttachedWindow attachedWindowWithSize:aSize forView:aView styleMask:0]; -} - -/*! - Create and init a _CPAttachedWindow with given the size, view and style mask. - - @param aSize the size of the attached window - @param aView the target view - @param styleMask the window style mask (combine CPClosableWindowMask and CPClosableOnBlurWindowMask) - @return ready to use _CPAttachedWindow -*/ -+ (id)attachedWindowWithSize:(CGSize)aSize forView:(CPView)aView styleMask:(int)aMask -{ - var attachedWindow = [[_CPAttachedWindow alloc] initWithContentRect:_CGRectMake(0.0, 0.0, aSize.width, aSize.height) styleMask:aMask]; - - [attachedWindow attachToView:aView]; - - return attachedWindow; -} - -/*! - Create and init a _CPAttachedWindow 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,23 +90,25 @@ 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 { 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 setLevel:CPStatusWindowLevel]; + + [self setStyleMask:aStyleMask]; + [self setBecomesKeyOnlyIfNeeded:YES]; [self setMovableByWindowBackground:YES]; [self setHasShadow:NO]; @@ -166,36 +144,32 @@ 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 { - 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]; } } @@ -318,9 +292,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,14 +302,16 @@ 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 { + var wasVisible = [self isVisible]; + if (!aRect || _CGRectIsEmpty(aRect)) aRect = [positioningView bounds]; @@ -343,16 +319,28 @@ 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]; } + + /* + 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 */ @@ -376,7 +364,8 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, #pragma mark Actions /*! - Closes the _CPAttachedWindow + @ignore + Closes the _CPPopoverWindow @param sender the sender of the action */ @@ -390,38 +379,17 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, #pragma mark Overrides /*! - Attached windows, such as pop overs, can usually become the key window. + @ignore + Show animation if necessary. */ -- (BOOL)canBecomeKeyWindow +- (void)close { - 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 -{ - if (_closeOnBlur && !_isClosing) - { - if (!_delegate || - ((_implementedDelegateMethods & _CPAttachedWindow_attachedWindowShouldClose_) && - [_delegate attachedWindowShouldClose: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. @@ -429,7 +397,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, */ - (IBAction)orderFront:(is)aSender { - if (![self isMainWindow]) + if (![self isKeyWindow]) { [super orderFront:aSender]; @@ -438,8 +406,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, var transformOrigin = "50% 100%", frame = [self frame], preferredEdge = [_windowView preferredEdge], - posX, - posY; + posX, posY; switch (preferredEdge) { @@ -474,10 +441,10 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 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. @@ -490,8 +457,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) @@ -500,7 +467,7 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 1 << 0, }; #if PLATFORM(DOM) - _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), transitionEndFunction, YES); + _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), orderFrontTransitionFunction, YES); #endif }, 0); } @@ -517,15 +484,28 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 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. */ -- (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) @@ -534,36 +514,69 @@ var _CPAttachedWindow_attachedWindowShouldClose_ = 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; - if (_implementedDelegateMethods & _CPAttachedWindow_attachedWindowDidClose_) - [_delegate attachedWindowDidClose:self]; + if (_implementedDelegateMethods & _CPPopoverWindow_didClose_) + [_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 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 new file mode 100644 index 000000000..d121cfb10 --- /dev/null +++ b/Tests/Manual/ChildWindows/AppController.j @@ -0,0 +1,51 @@ +/* + * 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; + + CPWindow outWindow; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + [parent addChildWindow:child ordered:CPWindowAbove]; + [child addChildWindow:grandchild ordered:CPWindowBelow]; + + [other orderFront:self]; + [parent makeKeyAndOrderFront:self]; +} + +- (@action)move:(id)sender +{ + var origin = [[sender window] frame].origin, + newOrigin = CGPointMake(origin.x + 20, origin.y + 20); + + [[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/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..fc9f0c7d9 --- /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;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 new file mode 100644 index 000000000..b2ba38d5c --- /dev/null +++ b/Tests/Manual/ChildWindows/Resources/MainMenu.xib @@ -0,0 +1,857 @@ + + + + 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 + + + + 268 + {{72, 13}, {63, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Out + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {207, 169} + + + + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + NO + + + AppController + + + 7 + 2 + {{223, 560}, {303, 169}} + 1948778496 + Parent/Child - Above + NSWindow + + + + + 256 + + YES + + + 301 + {{103, 95}, {96, 22}} + + + + YES + + -1804599231 + 272630784 + + + + YES + + + + NO + + + + 268 + {{120, 34}, {63, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Out + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {303, 169} + + + + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + NO + + + 7 + 2 + {{484, 599}, {294, 169}} + 1948778496 + Child/Grandchild - Below + NSWindow + + + + + 256 + + YES + + + 301 + {{99, 95}, {96, 22}} + + + + YES + + -1804599231 + 272630784 + + + + YES + + + + NO + + + + 268 + {{116, 33}, {63, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Out + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {294, 169} + + + + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + NO + + + 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} + NO + + + + + YES + + + delegate + + + + 451 + + + + child + + + + 468 + + + + grandchild + + + + 469 + + + + parent + + + + 470 + + + + other + + + + 475 + + + + move: + + + + 478 + + + + out: + + + + 482 + + + + out: + + + + 485 + + + + out: + + + + 488 + + + + + 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 + + + + + 479 + + + YES + + + + + + 480 + + + + + 483 + + + YES + + + + + + 484 + + + + + 486 + + + YES + + + + + + 487 + + + + + + + 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 + 479.IBPluginDependency + 480.IBPluginDependency + 483.IBPluginDependency + 484.IBPluginDependency + 486.IBPluginDependency + 487.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 + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 488 + + + + YES + + AppController + NSObject + + YES + + YES + move: + out: + + + YES + id + id + + + + YES + + YES + move: + out: + + + YES + + move: + id + + + out: + 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 000000000..a5e705f6c Binary files /dev/null and b/Tests/Manual/ChildWindows/Resources/spinner.gif differ 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); +}