Adopted to changes in header. Use [insertTabViewItem:atIndex:] in

[addTabViewItem:]. Corrected [selectNextTabViewItem:] and
[selectPreviousTabViewItem:]. In [selectTabViewItem:] set the
first responder of the tab view. Other small cleanup.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@11308 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
FredKiefer 2001-11-04 00:10:46 +00:00
parent 0a49cfbdde
commit bf72c90bd9

View file

@ -26,7 +26,6 @@
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#include <AppKit/NSColor.h> #include <AppKit/NSColor.h>
#include <AppKit/NSFont.h> #include <AppKit/NSFont.h>
#include <AppKit/NSGraphics.h> #include <AppKit/NSGraphics.h>
@ -38,23 +37,24 @@
#include <AppKit/PSOperators.h> #include <AppKit/PSOperators.h>
@implementation NSTabView @implementation NSTabView
- (id) initWithFrame: (NSRect)rect - (id) initWithFrame: (NSRect)rect
{ {
[super initWithFrame: rect]; [super initWithFrame: rect];
// setup variables // setup variables
ASSIGN (tab_items, [NSMutableArray array]); ASSIGN (_items, [NSMutableArray array]);
ASSIGN (tab_font, [NSFont systemFontOfSize: 0]); ASSIGN (_font, [NSFont systemFontOfSize: 0]);
tab_selected = nil; _selected = nil;
return self; return self;
} }
- (void) dealloc - (void) dealloc
{ {
RELEASE(tab_items); RELEASE(_items);
RELEASE(tab_font); RELEASE(_font);
[super dealloc]; [super dealloc];
} }
@ -62,63 +62,56 @@
- (void) addTabViewItem: (NSTabViewItem*)tabViewItem - (void) addTabViewItem: (NSTabViewItem*)tabViewItem
{ {
[tabViewItem _setTabView: self]; [self insertTabViewItem: tabViewItem atIndex: [_items count]];
[tab_items insertObject: tabViewItem atIndex: [tab_items count]];
if ([tab_delegate respondsToSelector:
@selector(tabViewDidChangeNumberOfTabViewItems:)])
{
[tab_delegate tabViewDidChangeNumberOfTabViewItems: self];
}
} }
- (void) insertTabViewItem: (NSTabViewItem*)tabViewItem - (void) insertTabViewItem: (NSTabViewItem*)tabViewItem
atIndex: (int)index atIndex: (int)index
{ {
[tabViewItem _setTabView: self]; [tabViewItem _setTabView: self];
[tab_items insertObject: tabViewItem atIndex: index]; [_items insertObject: tabViewItem atIndex: index];
if ([tab_delegate respondsToSelector: if ([_delegate respondsToSelector:
@selector(tabViewDidChangeNumberOfTabViewItems:)]) @selector(tabViewDidChangeNumberOfTabViewItems:)])
{ {
[tab_delegate tabViewDidChangeNumberOfTabViewItems: self]; [_delegate tabViewDidChangeNumberOfTabViewItems: self];
} }
} }
- (void) removeTabViewItem: (NSTabViewItem*)tabViewItem - (void) removeTabViewItem: (NSTabViewItem*)tabViewItem
{ {
unsigned i = [tab_items indexOfObject: tabViewItem]; unsigned i = [_items indexOfObject: tabViewItem];
if (i == NSNotFound) if (i == NSNotFound)
return; return;
if ([tabViewItem isEqual: tab_selected]) if ([tabViewItem isEqual: _selected])
{ {
tab_selected = nil; _selected = nil;
} }
[tab_items removeObjectAtIndex: i]; [_items removeObjectAtIndex: i];
if ([tab_delegate respondsToSelector: if ([_delegate respondsToSelector:
@selector(tabViewDidChangeNumberOfTabViewItems:)]) @selector(tabViewDidChangeNumberOfTabViewItems:)])
{ {
[tab_delegate tabViewDidChangeNumberOfTabViewItems: self]; [_delegate tabViewDidChangeNumberOfTabViewItems: self];
} }
} }
- (int) indexOfTabViewItem: (NSTabViewItem*)tabViewItem - (int) indexOfTabViewItem: (NSTabViewItem*)tabViewItem
{ {
return [tab_items indexOfObject: tabViewItem]; return [_items indexOfObject: tabViewItem];
} }
- (int) indexOfTabViewItemWithIdentifier: (id)identifier - (int) indexOfTabViewItemWithIdentifier: (id)identifier
{ {
unsigned howMany = [tab_items count]; unsigned howMany = [_items count];
unsigned i; unsigned i;
for (i = 0; i < howMany; i++) for (i = 0; i < howMany; i++)
{ {
id anItem = [tab_items objectAtIndex: i]; id anItem = [_items objectAtIndex: i];
if ([[anItem identifier] isEqual: identifier]) if ([[anItem identifier] isEqual: identifier])
return i; return i;
@ -129,17 +122,17 @@
- (int) numberOfTabViewItems - (int) numberOfTabViewItems
{ {
return [tab_items count]; return [_items count];
} }
- (NSTabViewItem*) tabViewItemAtIndex: (int)index - (NSTabViewItem*) tabViewItemAtIndex: (int)index
{ {
return [tab_items objectAtIndex: index]; return [_items objectAtIndex: index];
} }
- (NSArray*) tabViewItems - (NSArray*) tabViewItems
{ {
return (NSArray*)tab_items; return (NSArray*)_items;
} }
- (void) selectFirstTabViewItem: (id)sender - (void) selectFirstTabViewItem: (id)sender
@ -149,66 +142,71 @@
- (void) selectLastTabViewItem: (id)sender - (void) selectLastTabViewItem: (id)sender
{ {
[self selectTabViewItem: [tab_items lastObject]]; [self selectTabViewItem: [_items lastObject]];
} }
- (void) selectNextTabViewItem: (id)sender - (void) selectNextTabViewItem: (id)sender
{ {
[self selectTabViewItemAtIndex: tab_selected_item+1]; if (_selected_item + 1 < [_items count])
[self selectTabViewItemAtIndex: _selected_item+1];
} }
- (void) selectPreviousTabViewItem: (id)sender - (void) selectPreviousTabViewItem: (id)sender
{ {
[self selectTabViewItemAtIndex: tab_selected_item-1]; if (_selected_item > 0)
[self selectTabViewItemAtIndex: _selected_item-1];
} }
- (NSTabViewItem*) selectedTabViewItem - (NSTabViewItem*) selectedTabViewItem
{ {
return [tab_items objectAtIndex: tab_selected_item]; if (_selected_item == NSNotFound)
return nil;
return [_items objectAtIndex: _selected_item];
} }
- (void) selectTabViewItem: (NSTabViewItem*)tabViewItem - (void) selectTabViewItem: (NSTabViewItem*)tabViewItem
{ {
BOOL canSelect = YES; BOOL canSelect = YES;
if ([tab_delegate respondsToSelector: if ([_delegate respondsToSelector:
@selector(tabView: shouldSelectTabViewItem:)]) @selector(tabView: shouldSelectTabViewItem:)])
{ {
canSelect = [tab_delegate tabView: self canSelect = [_delegate tabView: self
shouldSelectTabViewItem: tabViewItem]; shouldSelectTabViewItem: tabViewItem];
} }
if (canSelect) if (canSelect)
{ {
if (tab_selected) if (_selected)
{ {
[tab_selected _setTabState: NSBackgroundTab]; [_selected _setTabState: NSBackgroundTab];
if ([tab_selected view]) if ([_selected view])
[[tab_selected view] removeFromSuperview]; [[_selected view] removeFromSuperview];
} }
tab_selected = tabViewItem; _selected = tabViewItem;
if ([tab_delegate respondsToSelector: if ([_delegate respondsToSelector:
@selector(tabView: willSelectTabViewItem:)]) @selector(tabView: willSelectTabViewItem:)])
{ {
[tab_delegate tabView: self willSelectTabViewItem: tab_selected]; [_delegate tabView: self willSelectTabViewItem: _selected];
} }
tab_selected_item = [tab_items indexOfObject: tab_selected]; _selected_item = [_items indexOfObject: _selected];
[tab_selected _setTabState: NSSelectedTab]; [_selected _setTabState: NSSelectedTab];
if ([tab_selected view]) if ([_selected view])
{ {
[self addSubview: [tab_selected view]]; [self addSubview: [_selected view]];
[[_selected initialFirstResponder] becomeFirstResponder];
} }
[self setNeedsDisplay: YES]; [self setNeedsDisplay: YES];
if ([tab_delegate respondsToSelector: if ([_delegate respondsToSelector:
@selector(tabView: didSelectTabViewItem:)]) @selector(tabView: didSelectTabViewItem:)])
{ {
[tab_delegate tabView: self didSelectTabViewItem: tab_selected]; [_delegate tabView: self didSelectTabViewItem: _selected];
} }
} }
} }
@ -218,7 +216,7 @@
if (index < 0) if (index < 0)
[self selectTabViewItem: nil]; [self selectTabViewItem: nil];
else else
[self selectTabViewItem: [tab_items objectAtIndex: index]]; [self selectTabViewItem: [_items objectAtIndex: index]];
} }
- (void) takeSelectedTabViewItemFromSender: (id)sender - (void) takeSelectedTabViewItemFromSender: (id)sender
@ -240,57 +238,57 @@
index = row * cols + col; index = row * cols + col;
} }
} }
[self selectTabViewItem: [tab_items objectAtIndex: index]]; [self selectTabViewItemAtIndex: index];
} }
- (void) setFont: (NSFont*)font - (void) setFont: (NSFont*)font
{ {
ASSIGN(tab_font, font); ASSIGN(_font, font);
} }
- (NSFont*) font - (NSFont*) font
{ {
return tab_font; return _font;
} }
- (void) setTabViewType: (NSTabViewType)tabViewType - (void) setTabViewType: (NSTabViewType)tabViewType
{ {
tab_type = tabViewType; _type = tabViewType;
} }
- (NSTabViewType) tabViewType - (NSTabViewType) tabViewType
{ {
return tab_type; return _type;
} }
- (void) setDrawsBackground: (BOOL)flag - (void) setDrawsBackground: (BOOL)flag
{ {
tab_draws_background = flag; _draws_background = flag;
} }
- (BOOL) drawsBackground - (BOOL) drawsBackground
{ {
return tab_draws_background; return _draws_background;
} }
- (void) setAllowsTruncatedLabels: (BOOL)allowTruncatedLabels - (void) setAllowsTruncatedLabels: (BOOL)allowTruncatedLabels
{ {
tab_truncated_label = allowTruncatedLabels; _truncated_label = allowTruncatedLabels;
} }
- (BOOL) allowsTruncatedLabels - (BOOL) allowsTruncatedLabels
{ {
return tab_truncated_label; return _truncated_label;
} }
- (void) setDelegate: (id)anObject - (void) setDelegate: (id)anObject
{ {
tab_delegate = anObject; _delegate = anObject;
} }
- (id) delegate - (id) delegate
{ {
return tab_delegate; return _delegate;
} }
// content and size // content and size
@ -304,7 +302,7 @@
{ {
NSRect cRect = _bounds; NSRect cRect = _bounds;
if (tab_type == NSTopTabsBezelBorder) if (_type == NSTopTabsBezelBorder)
{ {
cRect.origin.y += 1; cRect.origin.y += 1;
cRect.origin.x += 0.5; cRect.origin.x += 0.5;
@ -312,7 +310,7 @@
cRect.size.height -= 18.5; cRect.size.height -= 18.5;
} }
if (tab_type == NSNoTabsBezelBorder) if (_type == NSNoTabsBezelBorder)
{ {
cRect.origin.y += 1; cRect.origin.y += 1;
cRect.origin.x += 0.5; cRect.origin.x += 0.5;
@ -320,7 +318,7 @@
cRect.size.height -= 2; cRect.size.height -= 2;
} }
if (tab_type == NSBottomTabsBezelBorder) if (_type == NSBottomTabsBezelBorder)
{ {
cRect.size.height -= 8; cRect.size.height -= 8;
cRect.origin.y = 8; cRect.origin.y = 8;
@ -335,7 +333,7 @@
{ {
NSGraphicsContext *ctxt = GSCurrentContext(); NSGraphicsContext *ctxt = GSCurrentContext();
float borderThickness; float borderThickness;
int howMany = [tab_items count]; int howMany = [_items count];
int i; int i;
NSRect previousRect; NSRect previousRect;
int previousState = 0; int previousState = 0;
@ -343,8 +341,9 @@
DPSgsave(ctxt); DPSgsave(ctxt);
switch (tab_type) switch (_type)
{ {
default:
case NSTopTabsBezelBorder: case NSTopTabsBezelBorder:
aRect.size.height -= 16; aRect.size.height -= 16;
NSDrawButton(aRect, NSZeroRect); NSDrawButton(aRect, NSZeroRect);
@ -375,16 +374,16 @@
break; break;
} }
if (!tab_selected) if (!_selected)
[self selectFirstTabViewItem: nil]; [self selectFirstTabViewItem: nil];
if (tab_type == NSNoTabsBezelBorder || tab_type == NSNoTabsLineBorder) if (_type == NSNoTabsBezelBorder || _type == NSNoTabsLineBorder)
{ {
DPSgrestore(ctxt); DPSgrestore(ctxt);
return; return;
} }
if (tab_type == NSBottomTabsBezelBorder) if (_type == NSBottomTabsBezelBorder)
{ {
for (i = 0; i < howMany; i++) for (i = 0; i < howMany; i++)
{ {
@ -392,7 +391,7 @@
NSSize s; NSSize s;
NSRect r; NSRect r;
NSPoint iP; NSPoint iP;
NSTabViewItem *anItem = [tab_items objectAtIndex: i]; NSTabViewItem *anItem = [_items objectAtIndex: i];
NSTabState itemState; NSTabState itemState;
itemState = [anItem tabState]; itemState = [anItem tabState];
@ -517,7 +516,7 @@
} }
} }
} }
else if (tab_type == NSTopTabsBezelBorder) else if (_type == NSTopTabsBezelBorder)
{ {
for (i = 0; i < howMany; i++) for (i = 0; i < howMany; i++)
{ {
@ -525,7 +524,7 @@
NSSize s; NSSize s;
NSRect r; NSRect r;
NSPoint iP; NSPoint iP;
NSTabViewItem *anItem = [tab_items objectAtIndex: i]; NSTabViewItem *anItem = [_items objectAtIndex: i];
NSTabState itemState; NSTabState itemState;
itemState = [anItem tabState]; itemState = [anItem tabState];
@ -642,14 +641,14 @@
- (NSTabViewItem*) tabViewItemAtPoint: (NSPoint)point - (NSTabViewItem*) tabViewItemAtPoint: (NSPoint)point
{ {
int howMany = [tab_items count]; int howMany = [_items count];
int i; int i;
point = [self convertPoint: point fromView: nil]; point = [self convertPoint: point fromView: nil];
for (i = 0; i < howMany; i++) for (i = 0; i < howMany; i++)
{ {
NSTabViewItem *anItem = [tab_items objectAtIndex: i]; NSTabViewItem *anItem = [_items objectAtIndex: i];
if(NSPointInRect(point,[anItem _tabRect])) if(NSPointInRect(point,[anItem _tabRect]))
return anItem; return anItem;
@ -662,7 +661,7 @@
{ {
NSTabViewItem *anItem = [self tabViewItemAtPoint: aPoint]; NSTabViewItem *anItem = [self tabViewItemAtPoint: aPoint];
if (anItem && ![anItem isEqual: tab_selected]) if (anItem && ![anItem isEqual: _selected])
{ {
[self selectTabViewItem: anItem]; [self selectTabViewItem: anItem];
} }
@ -670,32 +669,54 @@
return [super hitTest: aPoint]; return [super hitTest: aPoint];
} }
- (NSControlSize)controlSize
{
// FIXME
return NSRegularControlSize;
}
- (void)setControlSize:(NSControlSize)size
{
// FIXME
}
- (NSControlTint)controlTint
{
// FIXME
return NSDefaultControlTint;
}
- (void)setControlTint:(NSControlTint)tint
{
// FIXME
}
// Coding. // Coding.
- (void) encodeWithCoder: (NSCoder*)aCoder - (void) encodeWithCoder: (NSCoder*)aCoder
{ {
[super encodeWithCoder: aCoder]; [super encodeWithCoder: aCoder];
[aCoder encodeObject: tab_items]; [aCoder encodeObject: _items];
[aCoder encodeObject: tab_font]; [aCoder encodeObject: _font];
[aCoder encodeValueOfObjCType: @encode(NSTabViewType) at: &tab_type]; [aCoder encodeValueOfObjCType: @encode(NSTabViewType) at: &_type];
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &tab_draws_background]; [aCoder encodeValueOfObjCType: @encode(BOOL) at: &_draws_background];
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &tab_truncated_label]; [aCoder encodeValueOfObjCType: @encode(BOOL) at: &_truncated_label];
[aCoder encodeObject: tab_delegate]; [aCoder encodeObject: _delegate];
[aCoder encodeValueOfObjCType: "i" at: &tab_selected_item]; [aCoder encodeValueOfObjCType: "i" at: &_selected_item];
} }
- (id) initWithCoder: (NSCoder*)aDecoder - (id) initWithCoder: (NSCoder*)aDecoder
{ {
[super initWithCoder: aDecoder]; [super initWithCoder: aDecoder];
[aDecoder decodeValueOfObjCType: @encode(id) at: &tab_items]; [aDecoder decodeValueOfObjCType: @encode(id) at: &_items];
[aDecoder decodeValueOfObjCType: @encode(id) at: &tab_font]; [aDecoder decodeValueOfObjCType: @encode(id) at: &_font];
[aDecoder decodeValueOfObjCType: @encode(NSTabViewType) at: &tab_type]; [aDecoder decodeValueOfObjCType: @encode(NSTabViewType) at: &_type];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &tab_draws_background]; [aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_draws_background];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &tab_truncated_label]; [aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_truncated_label];
[aDecoder decodeValueOfObjCType: @encode(id) at: &tab_delegate]; [aDecoder decodeValueOfObjCType: @encode(id) at: &_delegate];
[aDecoder decodeValueOfObjCType: "i" at: &tab_selected_item]; [aDecoder decodeValueOfObjCType: "i" at: &_selected_item];
return self; return self;
} }