summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/tab_view_picker_table.mm
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