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