Skip to content

Commit

Permalink
Merge branch 'master' into kvo
Browse files Browse the repository at this point in the history
  • Loading branch information
Ross Boucher committed Sep 25, 2008
2 parents df3264d + dbedbfd commit 3b39b64
Show file tree
Hide file tree
Showing 10 changed files with 410 additions and 127 deletions.
145 changes: 93 additions & 52 deletions AppKit/CPSplitView.j
Expand Up @@ -49,21 +49,22 @@ var CPSplitViewHorizontalImage = nil,
CPArray _DOMDividerElements;
CPString _dividerImagePath;
int _drawingDivider;

BOOL _needsResizeSubviews;
}

/*
@ignore
*/
//+ (void)initialize
//{
// if (self != [CPSplitView class])
// return;
//
// var bundle = [CPBundle bundleForClass:self];
//
// CPSplitViewHorizontalImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSplitView/CPSplitViewHorizontal.png"] size:CPSizeMake(5.0, 10.0)];
// CPSplitViewVerticalImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSplitView/CPSplitViewVertical.png"] size:CPSizeMake(10.0, 5.0)];
//}
+ (void)initialize
{
if (self != [CPSplitView class])
return;

var bundle = [CPBundle bundleForClass:self];
CPSplitViewHorizontalImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSplitView/CPSplitViewHorizontal.png"] size:CPSizeMake(5.0, 10.0)];
CPSplitViewVerticalImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSplitView/CPSplitViewVertical.png"] size:CPSizeMake(10.0, 5.0)];
}

- (id)initWithFrame:(CGRect)aFrame
{
Expand All @@ -89,20 +90,45 @@ var CPSplitViewHorizontalImage = nil,
return _isVertical;
}

- (void)setVertical:(BOOL)flag
- (void)setVertical:(BOOL)shouldBeVertical
{
[self _setVertical:flag];
if (![self _setVertical:shouldBeVertical])
return;

// Just re-adjust evenly.
var frame = [self frame],
dividerThickness = [self dividerThickness];

[self _postNotificationWillResize];

var eachSize = ROUND((frame.size[_sizeComponent] - dividerThickness * (_subviews.length - 1)) / _subviews.length),
index = 0,
count = _subviews.length;

if ([self isVertical])
for (; index < count; ++index)
[_subviews[index] setFrame:CGRectMake(ROUND((eachSize + dividerThickness) * index), 0, eachSize, frame.size.height)];
else
for (; index < count; ++index)
[_subviews[index] setFrame:CGRectMake(0, ROUND((eachSize + dividerThickness) * index), frame.size.width, eachSize)];

[self adjustSubviews];
[self setNeedsDisplay:YES];

[self _postNotificationDidResize];

}

- (void)_setVertical:(BOOL)flag
- (BOOL)_setVertical:(BOOL)shouldBeVertical
{
_isVertical = flag;
var changed = (_isVertical != shouldBeVertical);

_isVertical = shouldBeVertical;

_originComponent = [self isVertical] ? "x" : "y";
_sizeComponent = [self isVertical] ? "width" : "height";
_dividerImagePath = [self isVertical] ? [CPSplitViewVerticalImage filename] : [CPSplitViewHorizontalImage filename];

_originComponent = [self isVertical] ? "x" : "y";
_sizeComponent = [self isVertical] ? "width" : "height";
_dividerImagePath = [self isVertical] ? [CPSplitViewVerticalImage filename] : [CPSplitViewHorizontalImage filename];
return changed;
}

- (BOOL)isPaneSplitter
Expand All @@ -124,32 +150,10 @@ var CPSplitViewHorizontalImage = nil,
[self setNeedsDisplay:YES];
}

- (void)didAddSubview:(CPView)subview
{
[self adjustSubviews];
}

- (void)adjustSubviews
- (void)didAddSubview:(CPView)aSubview
{
var frame = [self frame],
dividerThickness = [self dividerThickness];

[self _postNotificationWillResize];

var eachSize = ROUND((frame.size[_sizeComponent] - dividerThickness * (_subviews.length - 1)) / _subviews.length),
index = 0,
count = _subviews.length;

if ([self isVertical])
for (; index < count; ++index)
[_subviews[index] setFrame:CGRectMake(ROUND((eachSize + dividerThickness) * index), 0, eachSize, frame.size.height)];
else
for (; index < count; ++index)
[_subviews[index] setFrame:CGRectMake(0, ROUND((eachSize + dividerThickness) * index), frame.size.width, eachSize)];

[self setNeedsDisplay:YES];

[self _postNotificationDidResize];
_needsResizeSubviews = YES;
// [self adjustSubviews];
}

- (BOOL)isSubviewCollapsed:(CPView)subview
Expand Down Expand Up @@ -219,6 +223,39 @@ var CPSplitViewHorizontalImage = nil,
#endif
}

- (void)viewWillDraw
{
[self _adjustSubviewsWithCalculatedSize];
}

- (void)_adjustSubviewsWithCalculatedSize
{
if (!_needsResizeSubviews)
return;

_needsResizeSubviews = NO;

var subviews = [self subviews],
count = subviews.length,
oldSize = CGSizeMakeZero();

if ([self isVertical])
{
oldSize.width += [self dividerThickness] * (count - 1);
oldSize.height = CGRectGetHeight([self frame]);
}
else
{
oldSize.width = CGRectGetWidth([self frame]);
oldSize.height += [self dividerThickness] * (count - 1);
}

while (count--)
oldSize[_sizeComponent] += [subviews[count] frame].size[_sizeComponent];

[self resizeSubviewsWithOldSize:oldSize];
}

- (BOOL)cursorAtPoint:(CPPoint)aPoint hitDividerAtIndex:(int)anIndex
{
var frame = [_subviews[anIndex] frame],
Expand Down Expand Up @@ -354,6 +391,8 @@ var CPSplitViewHorizontalImage = nil,

- (void)setPosition:(float)position ofDividerAtIndex:(int)dividerIndex
{
[self _adjustSubviewsWithCalculatedSize];

// not sure where this should override other positions?
if ([_delegate respondsToSelector:@selector(splitView:constrainSplitPosition:ofSubviewAt:)])
position = [_delegate splitView:self constrainSplitPosition:position ofSubviewAt:dividerIndex];
Expand Down Expand Up @@ -387,13 +426,22 @@ var CPSplitViewHorizontalImage = nil,

frameB.size[_sizeComponent] = frameB.origin[_originComponent] + frameB.size[_sizeComponent] - realPosition - [self dividerThickness];
frameB.origin[_originComponent] = realPosition + [self dividerThickness];
[_subviews[dividerIndex+1] setFrame:frameB];
[_subviews[dividerIndex + 1] setFrame:frameB];

[self setNeedsDisplay:YES];
}

- (void)resizeSubviewsWithOldSize:(CPSize)oldSize
- (void)setFrameSize:(CGSize)aSize
{
[self _adjustSubviewsWithCalculatedSize];

[super setFrameSize:aSize];

[self setNeedsDisplay:YES];
}

- (void)resizeSubviewsWithOldSize:(CPSize)oldSize
{
if ([_delegate respondsToSelector:@selector(splitView:resizeSubviewsWithOldSize:)])
{
[_delegate splitView:self resizeSubviewsWithOldSize:oldSize];
Expand Down Expand Up @@ -422,8 +470,6 @@ var CPSplitViewHorizontalImage = nil,

[view setFrame:newFrame];
}

[self setNeedsDisplay:YES];

[self _postNotificationDidResize];
}
Expand Down Expand Up @@ -505,8 +551,3 @@ var CPSplitViewDelegateKey = "CPSplitViewDelegateKey",
}

@end

// FIXME: once +initialize is fixed for superclasses, remove this and uncomment +initialize
var bundle = [CPBundle bundleForClass:CPSplitView];
CPSplitViewHorizontalImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSplitView/CPSplitViewHorizontal.png"] size:CPSizeMake(5.0, 10.0)];
CPSplitViewVerticalImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPSplitView/CPSplitViewVertical.png"] size:CPSizeMake(10.0, 5.0)];

0 comments on commit 3b39b64

Please sign in to comment.