Adding Kent's ITTabView class to the ITKit. Please add this class to ITKitTester.
authorMatthew Judy <mjudy@ithinksw.com>
Tue, 17 Dec 2002 12:31:37 +0000 (12:31 +0000)
committerMatthew Judy <mjudy@ithinksw.com>
Tue, 17 Dec 2002 12:31:37 +0000 (12:31 +0000)
ITKit.h
ITTabView.h [new file with mode: 0755]
ITTabView.m [new file with mode: 0755]

diff --git a/ITKit.h b/ITKit.h
index b4a974c..7168191 100755 (executable)
--- a/ITKit.h
+++ b/ITKit.h
@@ -1,4 +1,5 @@
 #import <Cocoa/Cocoa.h>
 
 #import <ITKit/ITChasingArrowsView.h>
-#import <ITKit/ITStatusItem.h>
\ No newline at end of file
+#import <ITKit/ITStatusItem.h>
+#import <ITKit/ITTabView.h>
diff --git a/ITTabView.h b/ITTabView.h
new file mode 100755 (executable)
index 0000000..7f86e74
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ *     ITKit
+ *  ITTabView
+ *    NSTabView subclass which includes convenience features
+ *
+ *  Original Author : Joseph Spiros <kent.sutherland@ithinksw.com>
+ *   Responsibility : Matt Judy <mjudy@ithinksw.com>
+ *   Responsibility : Kent Sutherland <kent.sutherland@ithinksw.com>
+ *
+ *  Copyright (c) 2002 iThink Software.
+ *  All Rights Reserved
+ *
+ */
+
+/*
+ *     This subclass enables drag-and-drop for tab view items.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+@interface ITTabView : NSTabView
+{
+    NSTabViewItem *_draggedTab;
+}
+@end
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