#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