#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>
--- /dev/null
+/*
+ * 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
--- /dev/null
+#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