blob: e982d92529f3329d1037a2f72531db70c99524e3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "tab_view_picker_table.h"
#include "base/logging.h"
@implementation TabViewPickerTable
- (id)initWithFrame:(NSRect)frame {
if ((self = [super initWithFrame:frame])) {
[self setDelegate:self];
[self setDataSource:self];
}
return self;
}
- (id)initWithCoder:(NSCoder*)coder {
if ((self = [super initWithCoder:coder])) {
[self setDelegate:self];
[self setDataSource:self];
}
return self;
}
- (void)awakeFromNib {
DCHECK(tabView_);
DCHECK_EQ([self delegate], self);
DCHECK_EQ([self dataSource], self);
DCHECK(![self allowsEmptySelection]);
DCHECK(![self allowsMultipleSelection]);
// Suppress the "Selection changed" message that's sent while the table is
// being built for the first time (this causes a selection change to index 0
// and back to the prior index).
id oldTabViewDelegate = [tabView_ delegate];
[tabView_ setDelegate:nil];
NSInteger index =
[tabView_ indexOfTabViewItem:[tabView_ selectedTabViewItem]];
[self reloadData];
[self selectRowIndexes:[NSIndexSet indexSetWithIndex:index]
byExtendingSelection:NO];
oldTabViewDelegate_ = oldTabViewDelegate;
[tabView_ setDelegate:self];
}
// Table view delegate method.
- (void)tableViewSelectionDidChange:(NSNotification*)aNotification {
[tabView_ selectTabViewItemAtIndex:[self selectedRow]];
}
// Table view data source methods.
- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
return [tabView_ numberOfTabViewItems];
}
- (id) tableView:(NSTableView*)tableView
objectValueForTableColumn:(NSTableColumn*)tableColumn
row:(NSInteger)rowIndex {
return [[tabView_ tabViewItemAtIndex:rowIndex] label];
}
// NSTabViewDelegate methods.
- (void) tabView:(NSTabView*)tabView
didSelectTabViewItem:(NSTabViewItem*)tabViewItem {
DCHECK_EQ(tabView_, tabView);
NSInteger index =
[tabView_ indexOfTabViewItem:[tabView_ selectedTabViewItem]];
[self selectRowIndexes:[NSIndexSet indexSetWithIndex:index]
byExtendingSelection:NO];
if ([oldTabViewDelegate_
respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) {
[oldTabViewDelegate_ tabView:tabView didSelectTabViewItem:tabViewItem];
}
}
- (BOOL) tabView:(NSTabView*)tabView
shouldSelectTabViewItem:(NSTabViewItem*)tabViewItem {
if ([oldTabViewDelegate_
respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)]) {
return [oldTabViewDelegate_ tabView:tabView
shouldSelectTabViewItem:tabViewItem];
}
return YES;
}
- (void) tabView:(NSTabView*)tabView
willSelectTabViewItem:(NSTabViewItem*)tabViewItem {
if ([oldTabViewDelegate_
respondsToSelector:@selector(tabView:willSelectTabViewItem:)]) {
[oldTabViewDelegate_ tabView:tabView willSelectTabViewItem:tabViewItem];
}
}
@end
|