X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/08f7c7656d8938806db994a646bb6e2f1a7783a7..7a218424c6a92eb4979564a7260f862edd46052d:/ITTabView.m?ds=sidebyside diff --git a/ITTabView.m b/ITTabView.m old mode 100755 new mode 100644 index 66f0bcc..a94825a --- a/ITTabView.m +++ b/ITTabView.m @@ -1,95 +1,79 @@ #import "ITTabView.h" -/*************************************************************************/ -#pragma mark - -#pragma mark EVIL HACKERY -/*************************************************************************/ - -@interface NSTabViewItem (HACKHACKHACKHACK) +@interface NSTabViewItem (ITTabViewHacks) - (NSRect)_tabRect; @end - @implementation ITTabView -- (id)initWithFrame:(NSRect)frame -{ - if ( (self = [super initWithFrame:frame]) ) { - _draggedTab = nil; - _allowsDragging = NO; - _requiredModifiers = NSCommandKeyMask; - } - return self; +- (id)initWithFrame:(NSRect)frame { + if ((self = [super initWithFrame:frame])) { + _draggedTab = nil; + _allowsDragging = NO; + _requiredModifiers = NSCommandKeyMask; + } + return self; } -- (void)setAllowsDragging:(bool)flag -{ - _allowsDragging = flag; - _requiredModifiers = NSCommandKeyMask; +- (void)setAllowsDragging:(BOOL)flag { + _allowsDragging = flag; } -- (bool)allowsDragging -{ - return _allowsDragging; +- (BOOL)allowsDragging { + return _allowsDragging; } -- (void)setRequiredModifiers:(unsigned int)modifiers -{ - _requiredModifiers = modifiers; +- (void)setRequiredModifiers:(unsigned int)modifiers { + _requiredModifiers = modifiers; } -- (unsigned int)requiredModifiers -{ - return _requiredModifiers; +- (unsigned int)requiredModifiers { + return _requiredModifiers; } -- (void)moveTab:(NSTabViewItem *)tab toIndex:(int)index -{ - if ([self indexOfTabViewItem:tab] != index) - { - [tab retain]; - [self removeTabViewItem:tab]; - [self insertTabViewItem:tab atIndex:index]; - [self selectTabViewItem:tab]; - } +- (void)moveTab:(NSTabViewItem *)tab toIndex:(int)index { + int oldIndex = [self indexOfTabViewItem:tab]; + if ((oldIndex != NSNotFound) && (oldIndex != index)) { + [tab retain]; + [self removeTabViewItem:tab]; + [self insertTabViewItem:tab atIndex:index]; + [self selectTabViewItem:tab]; + [tab release]; + } } -- (void)mouseDown:(NSEvent *)event -{ - if ((_requiredModifiers == 0 || ([[NSApp currentEvent] modifierFlags] & _requiredModifiers)) && [self allowsDragging]) { - NSPoint clickedPoint; - clickedPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]]; - NSTabViewItem *clickedTab = [self tabViewItemAtPoint:clickedPoint]; - _draggedTab = clickedTab; - } - [super mouseDown:event]; +- (void)mouseDown:(NSEvent *)event { + if ((_requiredModifiers == 0 || ([[NSApp currentEvent] modifierFlags] & _requiredModifiers)) && [self allowsDragging]) { + NSPoint clickedPoint; + clickedPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]]; + NSTabViewItem *clickedTab = [self tabViewItemAtPoint:clickedPoint]; + _draggedTab = clickedTab; + } + [super mouseDown:event]; } -- (void)mouseUp:(NSEvent *)event -{ - if (_draggedTab && [self allowsDragging]) { - NSPoint releasedPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]]; - NSTabViewItem *releasedTab = [self tabViewItemAtPoint:releasedPoint]; - if (releasedTab && ![releasedTab isEqualTo:_draggedTab]) { - [self moveTab:_draggedTab toIndex:[self indexOfTabViewItem:releasedTab]]; - } - _draggedTab = nil; - } - [super mouseUp:event]; +- (void)mouseUp:(NSEvent *)event { + if (_draggedTab && [self allowsDragging]) { + NSPoint releasedPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]]; + NSTabViewItem *releasedTab = [self tabViewItemAtPoint:releasedPoint]; + if (releasedTab && ![releasedTab isEqualTo:_draggedTab]) { + [self moveTab:_draggedTab toIndex:[self indexOfTabViewItem:releasedTab]]; + } + _draggedTab = nil; + } + [super mouseUp:event]; } -- (void)mouseDragged:(NSEvent *)event -{ - if (_draggedTab && [self allowsDragging]) { - NSPoint currentPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]]; - NSTabViewItem *curTab = [self tabViewItemAtPoint:currentPoint]; - if (curTab && ![curTab isEqualTo:_draggedTab]) { - [self moveTab:_draggedTab toIndex:[self indexOfTabViewItem:curTab]]; - [self selectTabViewItem:_draggedTab]; - } - } - [super mouseDragged:event]; +- (void)mouseDragged:(NSEvent *)event { + if (_draggedTab && [self allowsDragging]) { + NSPoint currentPoint = [self convertPoint:[event locationInWindow] fromView:[[self window] contentView]]; + NSTabViewItem *curTab = [self tabViewItemAtPoint:currentPoint]; + if (curTab && ![curTab isEqualTo:_draggedTab]) { + [self moveTab:_draggedTab toIndex:[self indexOfTabViewItem:curTab]]; + [self selectTabViewItem:_draggedTab]; + } + } + [super mouseDragged:event]; } - -@end +@end \ No newline at end of file