23 #include "../Foundation/Foundation.h"
32 - (BOOL)splitView:(
CPSplitView)splitView shouldAdjustSizeOfSubview:(
CPView)subview;
33 - (BOOL)splitView:(
CPSplitView)splitView shouldCollapseSubview:(
CPView)subview forDoubleClickOnDividerAtIndex:(CPInteger)dividerIndex;
34 - (CGRect)splitView:(
CPSplitView)splitView additionalEffectiveRectOfDividerAtIndex:(CPInteger)dividerIndex;
35 - (CGRect)splitView:(
CPSplitView)splitView effectiveRect:(CGRect)proposedEffectiveRect forDrawnRect:(CGRect)drawnRect ofDividerAtIndex:(CPInteger)dividerIndex;
36 - (float)splitView:(
CPSplitView)splitView constrainMaxCoordinate:(
float)proposedMax ofSubviewAt:(CPInteger)dividerIndex;
37 - (float)splitView:(
CPSplitView)splitView constrainMinCoordinate:(
float)proposedMin ofSubviewAt:(CPInteger)dividerIndex;
38 - (float)splitView:(
CPSplitView)splitView constrainSplitPosition:(
float)proposedPosition ofSubviewAt:(CPInteger)dividerIndex;
39 - (void)splitView:(
CPSplitView)splitView resizeSubviewsWithOldSize:(CGSize)oldSize;
55 #define SPLIT_VIEW_MAYBE_POST_WILL_RESIZE() \
56 if ((_suppressResizeNotificationsMask & DidPostWillResizeNotification) === 0) \
58 [self _postNotificationWillResize]; \
59 _suppressResizeNotificationsMask |= DidPostWillResizeNotification; \
62 #define SPLIT_VIEW_MAYBE_POST_DID_RESIZE() \
63 if ((_suppressResizeNotificationsMask & ShouldSuppressResizeNotifications) !== 0) \
64 _suppressResizeNotificationsMask |= DidSuppressResizeNotification; \
66 [self _postNotificationDidResize];
68 #define SPLIT_VIEW_DID_SUPPRESS_RESIZE_NOTIFICATION() \
69 ((_suppressResizeNotificationsMask & DidSuppressResizeNotification) !== 0)
71 #define SPLIT_VIEW_SUPPRESS_RESIZE_NOTIFICATIONS(shouldSuppress) \
73 _suppressResizeNotificationsMask |= ShouldSuppressResizeNotifications; \
75 _suppressResizeNotificationsMask = 0;
97 id <CPSplitViewDelegate> _delegate;
102 float _initialOffset;
108 CPArray _DOMDividerElements;
113 BOOL _shouldAutosave;
114 CGSize _shouldRestoreFromAutosaveUnlessFrameSize;
116 BOOL _needsResizeSubviews;
117 int _suppressResizeNotificationsMask;
121 unsigned _implementedDelegateMethods;
132 @"divider-thickness": 1.0,
133 @"pane-divider-thickness": 10.0,
140 - (id)initWithFrame:(CGRect)aFrame
142 if (
self = [super initWithFrame:aFrame])
144 _suppressResizeNotificationsMask = 0;
148 _DOMDividerElements = [];
151 _shouldAutosave = YES;
153 [
self _setVertical:YES];
163 - (float)dividerThickness
181 - (void)setVertical:(BOOL)shouldBeVertical
183 if (![
self _setVertical:shouldBeVertical])
190 [
self _postNotificationWillResize];
192 var eachSize = ROUND((
frame.size[_sizeComponent] - dividerThickness * (_subviews.length - 1)) / _subviews.length),
194 count = _subviews.length;
196 if ([
self isVertical])
198 for (; index < count; ++index)
199 [_subviews[index] setFrame:CGRectMake(ROUND((eachSize + dividerThickness) * index), 0, eachSize,
frame.size.height)];
203 for (; index < count; ++index)
204 [_subviews[index] setFrame:CGRectMake(0, ROUND((eachSize + dividerThickness) * index),
frame.size.width, eachSize)];
208 [
self _postNotificationDidResize];
212 - (BOOL)_setVertical:(BOOL)shouldBeVertical
214 var changed = (_isVertical != shouldBeVertical);
216 _isVertical = shouldBeVertical;
218 _originComponent = [
self isVertical] ?
"x" :
"y";
219 _sizeComponent = [
self isVertical] ?
"width" :
"height";
220 _dividerImagePath = [
self isVertical] ? [[
self valueForThemeAttribute:@"vertical-divider-color"] filename] : [[
self valueForThemeAttribute:@"horizontal-divider-color"] filename];
230 - (BOOL)isPaneSplitter
232 return _isPaneSplitter;
240 - (void)setIsPaneSplitter:(BOOL)shouldBePaneSplitter
242 if (_isPaneSplitter == shouldBePaneSplitter)
245 _isPaneSplitter = shouldBePaneSplitter;
247 if (_DOMDividerElements[_drawingDivider])
248 [
self _setupDOMDivider];
252 _needsResizeSubviews = YES;
258 _needsResizeSubviews = YES;
266 - (BOOL)isSubviewCollapsed:(
CPView)subview
268 return [subview
frame].size[_sizeComponent] < 1 ? YES : NO;
277 - (CGRect)rectOfDividerAtIndex:(
int)aDivider
279 var
frame = [_subviews[aDivider] frame],
280 rect = CGRectMakeZero();
282 rect.size = [
self frame].size;
284 rect.origin[_originComponent] =
frame.origin[_originComponent] +
frame.size[_sizeComponent];
295 - (CGRect)effectiveRectOfDividerAtIndex:(
int)aDivider
300 realRect.size[_sizeComponent] += padding * 2;
301 realRect.origin[_originComponent] -= padding;
306 - (void)drawRect:(CGRect)rect
308 var count = [_subviews count] - 1;
310 while ((count--) > 0)
312 _drawingDivider = count;
325 var dividerToRemove = _DOMDividerElements.pop();
329 CPDOMDisplayServerRemoveChild(_DOMElement, dividerToRemove);
332 _needsResizeSubviews = YES;
337 - (void)layoutSubviews
339 [
self _adjustSubviewsWithCalculatedSize]
346 - (void)drawDividerInRect:(CGRect)aRect
349 if (!_DOMDividerElements[_drawingDivider])
351 _DOMDividerElements[_drawingDivider] = document.createElement(
"div");
353 _DOMDividerElements[_drawingDivider].style.position =
"absolute";
354 _DOMDividerElements[_drawingDivider].style.backgroundRepeat =
"repeat";
356 CPDOMDisplayServerAppendChild(_DOMElement, _DOMDividerElements[_drawingDivider]);
359 [
self _setupDOMDivider];
360 CPDOMDisplayServerSetStyleLeftTop(_DOMDividerElements[_drawingDivider], NULL, CGRectGetMinX(aRect), CGRectGetMinY(aRect));
361 CPDOMDisplayServerSetStyleSize(_DOMDividerElements[_drawingDivider], CGRectGetWidth(aRect), CGRectGetHeight(aRect));
365 - (void)_setupDOMDivider
369 _DOMDividerElements[_drawingDivider].style.backgroundColor =
"";
370 _DOMDividerElements[_drawingDivider].style.backgroundImage =
"url('"+_dividerImagePath+"')";
374 _DOMDividerElements[_drawingDivider].style.backgroundColor = [[
self currentValueForThemeAttribute:@"pane-divider-color"] cssString];
375 _DOMDividerElements[_drawingDivider].style.backgroundImage =
"";
381 [
self _adjustSubviewsWithCalculatedSize];
384 - (void)_adjustSubviewsWithCalculatedSize
386 if (!_needsResizeSubviews)
389 _needsResizeSubviews = NO;
391 [
self resizeSubviewsWithOldSize:[
self _calculateSize]];
394 - (CGSize)_calculateSize
396 var subviews = [
self subviews],
397 count = subviews.length,
398 size = CGSizeMakeZero();
400 if ([
self isVertical])
402 size.width += [self dividerThickness] * (count - 1);
403 size.height = CGRectGetHeight([
self frame]);
407 size.width = CGRectGetWidth([
self frame]);
408 size.height += [self dividerThickness] * (count - 1);
412 size[_sizeComponent] += [subviews[count]
frame].size[_sizeComponent];
417 - (BOOL)cursorAtPoint:(CGPoint)aPoint hitDividerAtIndex:(
int)anIndex
419 var
frame = [_subviews[anIndex] frame],
420 startPosition = frame.origin[_originComponent] + frame.size[_sizeComponent],
422 buttonBar = _buttonBars[anIndex],
423 buttonBarRect = null,
424 additionalRect = null;
426 if (buttonBar != null)
428 buttonBarRect = [buttonBar resizeControlFrame];
432 effectiveRect = [
self _sendDelegateSplitViewEffectiveRect:effectiveRect forDrawnRect:effectiveRect ofDividerAtIndex:anIndex];
433 additionalRect = [
self _sendDelegateSplitViewAdditionalEffectiveRectOfDividerAtIndex:anIndex];
435 return CGRectContainsPoint(effectiveRect, aPoint) ||
436 (additionalRect && CGRectContainsPoint(additionalRect, aPoint)) ||
437 (buttonBarRect && CGRectContainsPoint(buttonBarRect, aPoint));
442 if ([
self isHidden] || ![
self hitTests] || !CGRectContainsPoint([
self frame], aPoint))
446 count = [_subviews count] - 1;
448 for (var i = 0; i < count; i++)
450 if ([
self cursorAtPoint:point hitDividerAtIndex:i])
463 var type = [anEvent
type];
468 _shouldAutosave = YES;
474 [
self _updateResizeCursor:anEvent];
483 count = [_subviews count] - 1;
487 for (var i = 0; i < count; i++)
489 var
frame = [_subviews[i] frame],
490 startPosition = frame.origin[_originComponent] + frame.size[_sizeComponent];
492 if ([
self cursorAtPoint:point hitDividerAtIndex:i])
494 if ([anEvent clickCount] == 2 &&
495 [
self _delegateRespondsToSplitViewCanCollapseSubview] &&
496 [
self _delegateRespondsToSplitViewshouldCollapseSubviewForDoubleClickOnDividerAtIndex])
500 preCollapsePosition = [_preCollapsePositions objectForKey:"" + i] || 0;
502 if ([
self _sendDelegateSplitViewCanCollapseSubview:_subviews[i]] && [
self _sendDelegateSplitViewShouldCollapseSubview:_subviews[i] forDoubleClickOnDividerAtIndex:i])
504 if ([
self isSubviewCollapsed:_subviews[i]])
505 [
self setPosition:preCollapsePosition ? preCollapsePosition : (minPosition + (maxPosition - minPosition) / 2) ofDividerAtIndex:i];
509 else if ([
self _sendDelegateSplitViewCanCollapseSubview:_subviews[i + 1]] && [
self _sendDelegateSplitViewShouldCollapseSubview:_subviews[i + 1] forDoubleClickOnDividerAtIndex:i])
511 if ([
self isSubviewCollapsed:_subviews[i + 1]])
512 [
self setPosition:preCollapsePosition ? preCollapsePosition : (minPosition + (maxPosition - minPosition) / 2) ofDividerAtIndex:i];
520 _initialOffset = startPosition - point[_originComponent];
523 _shouldAutosave = NO;
524 [
self _postNotificationWillResize];
539 [
self _updateResizeCursor:anEvent];
542 [CPApp setTarget:self selector:@selector(trackDivider:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES];
551 - (void)viewDidMoveToWindow
561 [
self _updateResizeCursor:anEvent];
567 [
self _updateResizeCursor:anEvent];
577 - (void)_updateResizeCursor:(
CPEvent)anEvent
581 if ([anEvent type] ===
CPLeftMouseUp && ![[
self window] acceptsMouseMovedEvents])
587 for (var i = 0, count = [_subviews count] - 1; i < count; i++)
590 if (_currentDivider === i || (_currentDivider ==
CPNotFound && [
self cursorAtPoint:point hitDividerAtIndex:i]))
592 var frameA = [_subviews[i] frame],
593 sizeA = frameA.size[_sizeComponent],
594 startPosition = frameA.origin[_originComponent] + sizeA,
595 frameB = [_subviews[i + 1]
frame],
596 sizeB = frameB.size[_sizeComponent],
597 canShrink = [self _realPositionForPosition:startPosition - 1 ofDividerAtIndex:i] < startPosition,
598 canGrow = [self _realPositionForPosition:startPosition + 1 ofDividerAtIndex:i] > startPosition,
599 cursor = [CPCursor arrowCursor];
603 else if (!canShrink && [
self _sendDelegateSplitViewCanCollapseSubview:_subviews[i]])
613 else if (!canGrow && [
self _sendDelegateSplitViewCanCollapseSubview:_subviews[i + 1]])
618 if (_isVertical && canShrink && canGrow)
620 else if (_isVertical && canShrink)
622 else if (_isVertical && canGrow)
624 else if (canShrink && canGrow)
644 - (float)maxPossiblePositionOfDividerAtIndex:(
int)dividerIndex
646 var
frame = [_subviews[dividerIndex + 1] frame];
648 if (dividerIndex + 1 < [_subviews count] - 1)
649 return frame.origin[_originComponent] + frame.size[_sizeComponent] - [
self dividerThickness];
659 - (float)minPossiblePositionOfDividerAtIndex:(
int)dividerIndex
661 if (dividerIndex > 0)
663 var
frame = [_subviews[dividerIndex - 1] frame];
665 return frame.origin[_originComponent] + frame.size[_sizeComponent] + [
self dividerThickness];
671 - (int)_realPositionForPosition:(
float)position ofDividerAtIndex:(
int)dividerIndex
674 var proposedPosition = [
self _sendDelegateSplitViewConstrainSplitPosition:position ofSubviewAt:dividerIndex];
679 if (_IS_NUMERIC(proposedPosition))
680 position = proposedPosition;
682 var proposedMax = [
self maxPossiblePositionOfDividerAtIndex:dividerIndex],
683 proposedMin = [
self minPossiblePositionOfDividerAtIndex:dividerIndex],
684 actualMax = proposedMax,
685 actualMin = proposedMin,
686 proposedActualMin = [
self _sendDelegateSplitViewConstrainMinCoordinate:proposedMin ofSubviewAt:dividerIndex],
687 proposedActualMax = [
self _sendDelegateSplitViewConstrainMaxCoordinate:proposedMax ofSubviewAt:dividerIndex];
689 if (_IS_NUMERIC(proposedActualMin))
690 actualMin = proposedActualMin;
692 if (_IS_NUMERIC(proposedActualMax))
693 actualMax = proposedActualMax;
695 var viewA = _subviews[dividerIndex],
696 viewB = _subviews[dividerIndex + 1],
697 realPosition = MAX(MIN(position, actualMax), actualMin);
700 if ((position < proposedMin + (actualMin - proposedMin) / 2) && [
self _sendDelegateSplitViewCanCollapseSubview:viewA])
701 realPosition = proposedMin;
704 if ((position > proposedMax - (proposedMax - actualMax) / 2) && [
self _sendDelegateSplitViewCanCollapseSubview:viewB])
705 realPosition = proposedMax;
715 - (void)setPosition:(
float)position ofDividerAtIndex:(
int)dividerIndex
719 _shouldRestoreFromAutosaveUnlessFrameSize = nil;
722 [
self _adjustSubviewsWithCalculatedSize];
724 var realPosition = [
self _realPositionForPosition:position ofDividerAtIndex:dividerIndex],
725 viewA = _subviews[dividerIndex],
726 frameA = [viewA frame],
727 viewB = _subviews[dividerIndex + 1],
728 frameB = [viewB frame],
729 preCollapsePosition = 0,
730 preSize = frameA.size[_sizeComponent];
732 frameA.size[_sizeComponent] = realPosition - frameA.origin[_originComponent];
734 if (preSize !== 0 && frameA.size[_sizeComponent] === 0)
735 preCollapsePosition = preSize;
737 if (preSize !== frameA.size[_sizeComponent])
740 [_subviews[dividerIndex] setFrame:frameA];
744 preSize = frameB.size[_sizeComponent];
746 var preOrigin = frameB.origin[_originComponent];
747 frameB.size[_sizeComponent] = frameB.origin[_originComponent] + frameB.size[_sizeComponent] - realPosition - [
self dividerThickness];
749 if (preSize !== 0 && frameB.size[_sizeComponent] === 0)
750 preCollapsePosition = frameB.origin[_originComponent];
754 if (preSize !== frameB.size[_sizeComponent] || preOrigin !== frameB.origin[_originComponent])
757 [_subviews[dividerIndex + 1] setFrame:frameB];
761 if (preCollapsePosition)
762 [_preCollapsePositions setObject:preCollapsePosition forKey:"" + dividerIndex];
767 [
self _postNotificationDidResize];
772 - (void)setFrameSize:(CGSize)aSize
774 if (_shouldRestoreFromAutosaveUnlessFrameSize)
775 _shouldAutosave = NO;
777 [
self _adjustSubviewsWithCalculatedSize];
781 if (_shouldRestoreFromAutosaveUnlessFrameSize)
782 _shouldAutosave = YES;
787 - (void)resizeSubviewsWithOldSize:(CGSize)oldSize
789 if ([
self _delegateRespondsToSplitViewResizeSubviewsWithOldSize])
791 [
self _sendDelegateSplitViewResizeSubviewsWithOldSize:oldSize];
798 - (void)adjustSubviews
800 var count = [_subviews count];
806 [
self _postNotificationWillResize];
810 boundsSize =
bounds.size[_sizeComponent],
811 oldSize = [
self _calculateSize],
813 totalDividers = count - 1,
814 oldFlexibleSpace = 0,
815 totalSizablePanes = 0,
830 for (index = 0; index < count; ++index)
832 var view = _subviews[index],
833 isSizable = [
self _sendDelegateSplitViewShouldAdjustSizeOfSubview:view],
834 size = [view frame].size[_sizeComponent];
836 isSizableMap[index] = isSizable;
837 viewSizes.push(size);
841 oldFlexibleSpace += size;
847 var nonSizableSpace = oldSize[_sizeComponent] - oldFlexibleSpace,
848 newFlexibleSpace = boundsSize - nonSizableSpace,
849 remainingFixedPixelsToRemove = 0;
851 if (newFlexibleSpace < 0)
853 remainingFixedPixelsToRemove = -newFlexibleSpace;
854 newFlexibleSpace = 0;
857 var remainingFixedPanes = count - totalSizablePanes;
859 for (index = 0; index < count; ++index)
861 var view = _subviews[index],
862 viewFrame = CGRectMakeCopy(
bounds),
863 isSizable = isSizableMap[index],
867 if (index + 1 === count)
868 targetSize = boundsSize - viewFrame.origin[_originComponent];
872 var removedFixedPixels = MIN(remainingFixedPixelsToRemove / remainingFixedPanes, viewSizes[index]);
873 targetSize = viewSizes[index] - removedFixedPixels;
874 remainingFixedPixelsToRemove -= removedFixedPixels;
875 remainingFixedPanes--;
878 else if (oldFlexibleSpace > 0)
879 targetSize = newFlexibleSpace * viewSizes[index] / oldFlexibleSpace;
883 targetSize = newFlexibleSpace / totalSizablePanes;
885 targetSize = MAX(0, ROUND(targetSize));
886 viewFrame.size[_sizeComponent] = targetSize;
887 [view setFrame:viewFrame];
888 bounds.origin[_originComponent] += targetSize + dividerThickness;
961 if (_delegate === aDelegate)
964 if ([_delegate respondsToSelector:
@selector(splitViewDidResizeSubviews:)])
967 if ([_delegate respondsToSelector:
@selector(splitViewWillResizeSubviews:)])
970 _delegate = aDelegate;
971 _implementedDelegateMethods = 0;
973 if ([_delegate respondsToSelector:
@selector(splitViewDidResizeSubviews:)])
976 name:CPSplitViewDidResizeSubviewsNotification
979 if ([_delegate respondsToSelector:
@selector(splitViewWillResizeSubviews:)])
982 name:CPSplitViewWillResizeSubviewsNotification
985 if ([_delegate respondsToSelector:
@selector(splitView:canCollapseSubview:)])
988 if ([_delegate respondsToSelector:
@selector(splitView:shouldAdjustSizeOfSubview:)])
991 if ([_delegate respondsToSelector:
@selector(splitView:shouldCollapseSubview:forDoubleClickOnDividerAtIndex:)])
994 if ([_delegate respondsToSelector:
@selector(splitView:additionalEffectiveRectOfDividerAtIndex:)])
997 if ([_delegate respondsToSelector:
@selector(splitView:effectiveRect:forDrawnRect:ofDividerAtIndex:)])
1000 if ([_delegate respondsToSelector:
@selector(splitView:constrainMaxCoordinate:ofSubviewAt:)])
1003 if ([_delegate respondsToSelector:
@selector(splitView:constrainMinCoordinate:ofSubviewAt:)])
1006 if ([_delegate respondsToSelector:
@selector(splitView:constrainSplitPosition:ofSubviewAt:)])
1009 if ([_delegate respondsToSelector:
@selector(splitView:resizeSubviewsWithOldSize:)])
1030 - (void)setButtonBar:(
CPButtonBar)aButtonBar forDividerAtIndex:(CPUInteger)dividerIndex
1034 _buttonBars[dividerIndex] = nil;
1039 subview = aButtonBar;
1041 while (view && view !==
self)
1044 view = [view superview];
1049 reason:@"CPSplitView button bar must be a subview of the split view."];
1051 var viewIndex = [[
self subviews] indexOfObject:subview];
1056 _buttonBars[dividerIndex] = aButtonBar;
1059 - (void)_postNotificationWillResize
1064 userInfo = @{
@"CPSplitViewDividerIndex": _currentDivider };
1071 - (void)_postNotificationDidResize
1076 userInfo = @{
@"CPSplitViewDividerIndex": _currentDivider };
1095 if (_autosaveName == autosaveName)
1098 _autosaveName = autosaveName;
1108 return _autosaveName;
1116 if (_shouldRestoreFromAutosaveUnlessFrameSize || !_shouldAutosave || !_autosaveName)
1120 autosaveName = [
self _framesKeyForAutosaveName:[
self autosaveName]],
1121 autosavePrecollapseName = [
self _precollapseKeyForAutosaveName:[
self autosaveName]],
1122 count = [_subviews count],
1126 for (var i = 0; i < count; i++)
1128 var
frame = [_subviews[i] frame];
1129 [positions addObject:CGStringFromRect(frame)];
1130 [preCollapseArray addObject:[_preCollapsePositions objectForKey:"" + i]];
1133 [userDefaults setObject:positions forKey:autosaveName];
1134 [userDefaults setObject:preCollapseArray forKey:autosavePrecollapseName];
1143 - (void)_restoreFromAutosaveIfNeeded
1145 if (_shouldRestoreFromAutosaveUnlessFrameSize && !CGSizeEqualToSize([
self frameSize], _shouldRestoreFromAutosaveUnlessFrameSize))
1147 [
self _restoreFromAutosave];
1150 _shouldRestoreFromAutosaveUnlessFrameSize = nil;
1156 - (void)_restoreFromAutosave
1161 var autosaveName = [
self _framesKeyForAutosaveName:[
self autosaveName]],
1162 autosavePrecollapseName = [
self _precollapseKeyForAutosaveName:[
self autosaveName]],
1164 frames = [userDefaults objectForKey:autosaveName],
1165 preCollapseArray = [userDefaults objectForKey:autosavePrecollapseName];
1169 var dividerThickness = [
self dividerThickness],
1172 _shouldAutosave = NO;
1174 for (var i = 0, count = [frames count] - 1; i < count; i++)
1176 var
frame = CGRectFromString(frames[i]);
1177 position += frame.size[_sizeComponent];
1179 [
self setPosition:position ofDividerAtIndex:i];
1181 position += dividerThickness;
1184 _shouldAutosave = YES;
1187 if (preCollapseArray)
1191 for (var i = 0, count = [preCollapseArray count]; i < count; i++)
1193 var item = preCollapseArray[i];
1196 [_preCollapsePositions removeObjectForKey:String(i)];
1198 [_preCollapsePositions setObject:item forKey:String(i)];
1208 if (!theAutosaveName)
1211 return @"CPSplitView Subview Frames " + theAutosaveName;
1219 if (!theAutosaveName)
1222 return @"CPSplitView Subview Precollapse Positions " + theAutosaveName;
1234 - (BOOL)_delegateRespondsToSplitViewResizeSubviewsWithOldSize
1243 - (BOOL)_delegateRespondsToSplitViewCanCollapseSubview
1252 - (BOOL)_delegateRespondsToSplitViewshouldCollapseSubviewForDoubleClickOnDividerAtIndex
1262 - (BOOL)_sendDelegateSplitViewCanCollapseSubview:(
CPView)aView
1267 return [_delegate splitView:self canCollapseSubview:aView];
1274 - (BOOL)_sendDelegateSplitViewShouldAdjustSizeOfSubview:(
CPView)aView
1279 return [_delegate splitView:self shouldAdjustSizeOfSubview:aView];
1286 - (BOOL)_sendDelegateSplitViewShouldCollapseSubview:(
CPView)aView forDoubleClickOnDividerAtIndex:(
int)anIndex
1291 return [_delegate splitView:self shouldCollapseSubview:aView forDoubleClickOnDividerAtIndex:anIndex];
1298 - (CGRect)_sendDelegateSplitViewAdditionalEffectiveRectOfDividerAtIndex:(
int)anIndex
1303 return [_delegate splitView:self additionalEffectiveRectOfDividerAtIndex:anIndex];
1310 - (CGRect)_sendDelegateSplitViewEffectiveRect:(CGRect)proposedEffectiveRect forDrawnRect:(CGRect)drawnRect ofDividerAtIndex:(CPInteger)dividerIndex
1313 return proposedEffectiveRect;
1315 return [_delegate splitView:self effectiveRect:proposedEffectiveRect forDrawnRect:drawnRect ofDividerAtIndex:dividerIndex];
1322 - (float)_sendDelegateSplitViewConstrainMaxCoordinate:(
float)proposedMax ofSubviewAt:(CPInteger)dividerIndex
1327 return [_delegate splitView:self constrainMaxCoordinate:proposedMax ofSubviewAt:dividerIndex];
1334 - (float)_sendDelegateSplitViewConstrainMinCoordinate:(
float)proposedMin ofSubviewAt:(CPInteger)dividerIndex
1339 return [_delegate splitView:self constrainMinCoordinate:proposedMin ofSubviewAt:dividerIndex];
1346 - (float)_sendDelegateSplitViewConstrainSplitPosition:(
float)proposedMax ofSubviewAt:(CPInteger)dividerIndex
1351 return [_delegate splitView:self constrainSplitPosition:proposedMax ofSubviewAt:dividerIndex];
1358 - (void)_sendDelegateSplitViewResizeSubviewsWithOldSize:(CGSize)oldSize
1363 [_delegate splitView:self resizeSubviewsWithOldSize:oldSize];
1384 _autosaveName = [aCoder decodeObjectForKey:CPSplitViewAutosaveNameKey];
1415 _suppressResizeNotificationsMask = 0;
1419 _shouldAutosave = YES;
1421 _DOMDividerElements = [];
1423 _buttonBars = [aCoder decodeObjectForKey:CPSplitViewButtonBarsKey] || [];
1425 [
self setDelegate:[aCoder decodeObjectForKey:CPSplitViewDelegateKey]];
1427 _isPaneSplitter = [aCoder decodeBoolForKey:CPSplitViewIsPaneSplitterKey];
1428 [
self _setVertical:[aCoder decodeBoolForKey:CPSplitViewIsVerticalKey]];
1432 [
self _restoreFromAutosave];
1435 _shouldRestoreFromAutosaveUnlessFrameSize = [
self frameSize];
1453 [aCoder encodeConditionalObject:_delegate forKey:CPSplitViewDelegateKey];
1455 [aCoder encodeBool:_isVertical forKey:CPSplitViewIsVerticalKey];
1456 [aCoder encodeBool:_isPaneSplitter forKey:CPSplitViewIsPaneSplitterKey];
1458 [aCoder encodeObject:_autosaveName forKey:CPSplitViewAutosaveNameKey];