Adding Kent's ITTabView class to the ITKit. Please add this class to ITKitTester.
[ITKit.git] / ITTabView.m
diff --git a/ITTabView.m b/ITTabView.m
new file mode 100755 (executable)
index 0000000..9fbfe56
--- /dev/null
@@ -0,0 +1,50 @@
+#import "ITTabView.h"
+
+@implementation ITTabView
+
+- (id)initWithFrame:(NSRect)frame
+{
+    if ( (self = [super initWithFrame:frame]) ) {
+        _draggedTab = nil;
+    }
+    return self;
+}
+
+- (void)mouseDown:(NSEvent *)event
+{
+    NSPoint clickedPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]];
+    NSTabViewItem *clickedTab = [self tabViewItemAtPoint:clickedPoint];
+    _draggedTab = clickedTab;
+    [super mouseDown:event];
+}
+
+- (void)mouseUp:(NSEvent *)event
+{
+    NSPoint releasedPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]];
+    NSTabViewItem *releasedTab = [self tabViewItemAtPoint:releasedPoint];
+    if (releasedTab && ![releasedTab isEqualTo:_draggedTab]) {
+        int releasedTabIndex = [self indexOfTabViewItem:releasedTab];
+        [_draggedTab retain];
+        [self removeTabViewItem:_draggedTab];
+        [self insertTabViewItem:_draggedTab atIndex:releasedTabIndex];
+        [self selectTabViewItem:_draggedTab];
+    }
+    _draggedTab = nil;
+    [super mouseUp:event];
+}
+
+- (void)mouseDragged:(NSEvent *)event
+{
+    NSPoint currentPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]];
+    NSTabViewItem *curTab = [self tabViewItemAtPoint:currentPoint];
+    if (curTab && ![curTab isEqualTo:_draggedTab]) {
+        int curTabIndex = [self indexOfTabViewItem:curTab];
+        [_draggedTab retain];
+        [self removeTabViewItem:_draggedTab];
+        [self insertTabViewItem:_draggedTab atIndex:curTabIndex];
+        [self selectTabViewItem:_draggedTab];
+    }
+    [super mouseDragged:event];
+}
+
+@end