diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j
index adafffca9..1ff6f56ac 100644
--- a/AppKit/CPSplitView.j
+++ b/AppKit/CPSplitView.j
@@ -72,8 +72,8 @@ var CPSplitViewHorizontalImage = nil,
_DOMDividerElements = [];
- [self setVertical:YES];
[self setIsPaneSplitter:YES];
+ [self _setVertical:YES];
}
return self;
@@ -81,7 +81,7 @@ var CPSplitViewHorizontalImage = nil,
- (float)dividerThickness
{
- return 10.0;
+ return _isPaneSplitter ? 1.0 : 10.0;
}
- (BOOL)isVertical
@@ -90,14 +90,18 @@ var CPSplitViewHorizontalImage = nil,
}
- (void)setVertical:(BOOL)flag
{
- _isVertical = flag;
-
- _originComponent = [self isVertical] ? "x" : "y";
- _sizeComponent = [self isVertical] ? "width" : "height";
- _dividerImagePath = [self isVertical] ? [CPSplitViewVerticalImage filename] : [CPSplitViewHorizontalImage filename];
+ [self _setVertical:flag];
[self adjustSubviews];
}
+- (void)_setVertical:(BOOL)flag
+{
+ _isVertical = flag;
+
+ _originComponent = [self isVertical] ? "x" : "y";
+ _sizeComponent = [self isVertical] ? "width" : "height";
+ _dividerImagePath = [self isVertical] ? [CPSplitViewVerticalImage filename] : [CPSplitViewHorizontalImage filename];
+}
- (BOOL)isPaneSplitter
{
@@ -122,7 +126,8 @@ var CPSplitViewHorizontalImage = nil,
var eachSize = (frame.size[_sizeComponent] - dividerThickness * (_subviews.length - 1)) / _subviews.length;
- for (var i = 0; i < [_subviews count]; i++)
+ var count = [_subviews count]
+ for (var i = 0; i < count; i++)
{
if ([self isVertical])
[_subviews[i] setFrame:CGRectMake(Math.round((eachSize + dividerThickness) * i), 0, Math.round(eachSize), frame.size.height)];
@@ -157,8 +162,10 @@ var CPSplitViewHorizontalImage = nil,
{
var realRect = [self rectOfDividerAtIndex:aDivider];
- realRect.size[_sizeComponent] += 4;
- realRect.origin[_originComponent] -= 2;
+ var padding = 2;
+
+ realRect.size[_sizeComponent] += padding * 2;
+ realRect.origin[_originComponent] -= padding;
return realRect;
}
@@ -187,7 +194,16 @@ var CPSplitViewHorizontalImage = nil,
CPDOMDisplayServerSetStyleLeftTop(_DOMDividerElements[_drawingDivider], NULL, _CGRectGetMinX(aRect), _CGRectGetMinY(aRect));
CPDOMDisplayServerSetStyleSize(_DOMDividerElements[_drawingDivider], _CGRectGetWidth(aRect), _CGRectGetHeight(aRect));
- _DOMDividerElements[_drawingDivider].style.backgroundImage = "url('"+_dividerImagePath+"')";
+ if (_isPaneSplitter)
+ {
+ _DOMDividerElements[_drawingDivider].style.backgroundColor = "#A5A5A5";
+ _DOMDividerElements[_drawingDivider].style.backgroundImage = "";
+ }
+ else
+ {
+ _DOMDividerElements[_drawingDivider].style.backgroundColor = "";
+ _DOMDividerElements[_drawingDivider].style.backgroundImage = "url('"+_dividerImagePath+"')";
+ }
#endif
}
@@ -207,6 +223,22 @@ var CPSplitViewHorizontalImage = nil,
return CGRectContainsPoint(effectiveRect, aPoint) || (additionalRect && CGRectContainsPoint(additionalRect, aPoint));
}
+- (CPView)hitTest:(CGPoint)aPoint
+{
+ if ([self isHidden] || ![self hitTests] || !CGRectContainsPoint([self frame], aPoint))
+ return nil;
+
+ var point = [self convertPoint:aPoint fromView:[self superview]];
+
+ var count = [_subviews count] - 1;
+ for (var i = 0; i < count; i++)
+ {
+ if ([self cursorAtPoint:point hitDividerAtIndex:i])
+ return self;
+ }
+
+ return [super hitTest:aPoint];
+}
/*
Tracks the divider.
@@ -229,11 +261,11 @@ var CPSplitViewHorizontalImage = nil,
if (type == CPLeftMouseDown)
{
- var location = [anEvent locationInWindow],
- point = [self convertPoint:location fromView:nil];
+ var point = [self convertPoint:[anEvent locationInWindow] fromView:nil];
_currentDivider = CPNotFound;
- for (var i = 0; i < [_subviews count] - 1; i++)
+ var count = [_subviews count] - 1;
+ for (var i = 0; i < count; i++)
{
var frame = [_subviews[i] frame],
startPosition = frame.origin[_originComponent] + frame.size[_sizeComponent];
@@ -277,8 +309,7 @@ var CPSplitViewHorizontalImage = nil,
{
if (_currentDivider != CPNotFound)
{
- var location = [anEvent locationInWindow],
- point = [self convertPoint:location fromView:nil];
+ var point = [self convertPoint:[anEvent locationInWindow] fromView:nil];
[self setPosition:(point[_originComponent] + _initialOffset) ofDividerAtIndex:_currentDivider];
}
@@ -331,9 +362,9 @@ var CPSplitViewHorizontalImage = nil,
var frame = [self frame],
viewA = _subviews[dividerIndex],
- frameA = CGRectCreateCopy([viewA frame]),
+ frameA = [viewA frame],
viewB = _subviews[dividerIndex+1],
- frameB = CGRectCreateCopy([viewB frame]);
+ frameB = [viewB frame];
var realPosition = MAX(MIN(position, actualMax), actualMin);
@@ -364,12 +395,13 @@ var CPSplitViewHorizontalImage = nil,
var frame = CGRectCreateCopy([self frame]);
- for (var i = 0; i < [_subviews count]; i++)
+ var count = [_subviews count];
+ for (var i = 0; i < count; i++)
{
var view = [_subviews objectAtIndex:i],
newFrame = CGRectCreateCopy(frame);
- if(i + 1 == [_subviews count])
+ if (i + 1 == count)
newFrame.size[_sizeComponent] = frame.size[_sizeComponent] - newFrame.origin[_originComponent];
else
newFrame.size[_sizeComponent] = frame.size[_sizeComponent] * ([view frame].size[_sizeComponent] / oldSize[_sizeComponent]);
@@ -418,6 +450,51 @@ var CPSplitViewHorizontalImage = nil,
@end
+var CPSplitViewDelegateKey = "CPSplitViewDelegateKey",
+ CPSplitViewIsVerticalKey = "CPSplitViewIsVerticalKey",
+ CPSplitViewIsPaneSplitterKey = "CPSplitViewIsPaneSplitterKey";
+
+@implementation CPSplitView (CPCoding)
+
+/*
+ Initializes the split view by unarchiving data from aCoder.
+ @param aCoder the coder containing the archived CPSplitView.
+*/
+- (id)initWithCoder:(CPCoder)aCoder
+{
+ self = [super initWithCoder:aCoder];
+
+ if (self)
+ {
+ _currentDivider = CPNotFound;
+
+ _DOMDividerElements = [];
+
+ _delegate = [aCoder decodeObjectForKey:CPSplitViewDelegateKey];;
+
+ _isPaneSplitter = [aCoder decodeBoolForKey:CPSplitViewIsPaneSplitterKey];
+ [self _setVertical:[aCoder decodeBoolForKey:CPSplitViewIsVerticalKey]];
+ }
+
+ return self;
+}
+
+/*
+ Archives this split view into the provided coder.
+ @param aCoder the coder to which the button's instance data will be written.
+*/
+- (void)encodeWithCoder:(CPCoder)aCoder
+{
+ [super encodeWithCoder:aCoder];
+
+ [aCoder encodeConditionalObject:_delegate forKey:CPSplitViewDelegateKey];
+
+ [aCoder encodeBool:_isVertical forKey:CPSplitViewIsVerticalKey];
+ [aCoder encodeBool:_isPaneSplitter forKey:CPSplitViewIsPaneSplitterKey];
+}
+
+@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)];
diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j
index e307708da..efb30c17b 100644
--- a/Tools/nib2cib/NSAppKit.j
+++ b/Tools/nib2cib/NSAppKit.j
@@ -32,6 +32,7 @@ import "NSResponder.j"
import "NSSlider.j"
import "NSView.j"
import "NSWindowTemplate.j"
+import "NSSplitView.j"
function CP_NSMapClassName(aClassName)
{
diff --git a/Tools/nib2cib/NSSplitView.j b/Tools/nib2cib/NSSplitView.j
new file mode 100644
index 000000000..8dc7d83ab
--- /dev/null
+++ b/Tools/nib2cib/NSSplitView.j
@@ -0,0 +1,55 @@
+/*
+ * NSSplitView.j
+ * nib2cib
+ *
+ * Created by Thomas Robinson.
+ * Copyright 2008, 280 North, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+import
+
+
+@implementation CPSplitView (CPCoding)
+
+- (id)NS_initWithCoder:(CPCoder)aCoder
+{
+ if (self = [super NS_initWithCoder:aCoder])
+ {
+ _isVertical = [aCoder decodeBoolForKey:@"NSIsVertical"];
+ _isPaneSplitter = [aCoder decodeIntForKey:@"NSDividerStyle"] == 2 ? YES : NO;
+ }
+
+ return self;
+}
+
+@end
+
+@implementation NSSplitView : CPSplitView
+{
+}
+
+- (id)initWithCoder:(CPCoder)aCoder
+{
+ return [self NS_initWithCoder:aCoder];
+}
+
+- (Class)classForKeyedArchiver
+{
+ return [CPSplitView class];
+}
+
+@end
diff --git a/Tools/nib2cib/main.j b/Tools/nib2cib/main.j
index 8a822799d..43866e029 100644
--- a/Tools/nib2cib/main.j
+++ b/Tools/nib2cib/main.j
@@ -30,6 +30,7 @@ import "NSAppKit.j"
importClass(java.io.FileWriter);
importClass(java.io.BufferedWriter);
+CPLogRegister(CPLogPrint);
function exec(command)
{