Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4693)

Unified Diff: chrome/browser/cocoa/tab_view_picker_table.mm

Issue 2932009: Mac: Tweak content settings window. (Closed)
Patch Set: fffffffffffffffff Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/cocoa/tab_view_picker_table.mm
diff --git a/chrome/browser/cocoa/tab_view_picker_table.mm b/chrome/browser/cocoa/tab_view_picker_table.mm
index e982d92529f3329d1037a2f72531db70c99524e3..95dec3b4aa86d239f2ede7f57aadbcc802465d9f 100644
--- a/chrome/browser/cocoa/tab_view_picker_table.mm
+++ b/chrome/browser/cocoa/tab_view_picker_table.mm
@@ -6,6 +6,22 @@
#include "base/logging.h"
+@interface TabViewPickerTable (Private)
+// If a heading is shown, the indices between the tab items and the table rows
+// are shifted by one. These functions convert between tab indices and table
+// indices.
+- (NSInteger)tabIndexFromTableIndex:(NSInteger)tableIndex;
+- (NSInteger)tableIndexFromTabIndex:(NSInteger)tabIndex;
+
+// Returns if |item| is the item shown as heading. If |heading_| is nil, this
+// always returns |NO|.
+- (BOOL)isHeadingItem:(id)item;
+
+// Reloads the outline view and sets the selection to the row corresponding to
+// the currently selected tab.
+- (void)reloadDataWhileKeepingCurrentTabSelected;
+@end
+
@implementation TabViewPickerTable
- (id)initWithFrame:(NSRect)frame {
@@ -37,30 +53,30 @@
id oldTabViewDelegate = [tabView_ delegate];
[tabView_ setDelegate:nil];
- NSInteger index =
- [tabView_ indexOfTabViewItem:[tabView_ selectedTabViewItem]];
- [self reloadData];
- [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index]
- byExtendingSelection:NO];
+ [self reloadDataWhileKeepingCurrentTabSelected];
oldTabViewDelegate_ = oldTabViewDelegate;
[tabView_ setDelegate:self];
}
-// Table view delegate method.
-- (void)tableViewSelectionDidChange:(NSNotification*)aNotification {
- [tabView_ selectTabViewItemAtIndex:[self selectedRow]];
+- (NSString*)heading {
+ return heading_.get();
}
-// Table view data source methods.
-- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
- return [tabView_ numberOfTabViewItems];
+- (void)setHeading:(NSString*)str {
+ heading_.reset([str copy]);
+ [self reloadDataWhileKeepingCurrentTabSelected];
}
-- (id) tableView:(NSTableView*)tableView
- objectValueForTableColumn:(NSTableColumn*)tableColumn
- row:(NSInteger)rowIndex {
- return [[tabView_ tabViewItemAtIndex:rowIndex] label];
+- (void)reloadDataWhileKeepingCurrentTabSelected {
+ NSInteger index =
+ [tabView_ indexOfTabViewItem:[tabView_ selectedTabViewItem]];
+ [self reloadData];
+ if (heading_)
+ [self expandItem:[self outlineView:self child:0 ofItem:nil]];
+ NSIndexSet* indexSet =
+ [NSIndexSet indexSetWithIndex:[self tableIndexFromTabIndex:index]];
+ [self selectRowIndexes:indexSet byExtendingSelection:NO];
}
// NSTabViewDelegate methods.
@@ -69,8 +85,9 @@
DCHECK_EQ(tabView_, tabView);
NSInteger index =
[tabView_ indexOfTabViewItem:[tabView_ selectedTabViewItem]];
- [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index]
- byExtendingSelection:NO];
+ NSIndexSet* indexSet =
+ [NSIndexSet indexSetWithIndex:[self tableIndexFromTabIndex:index]];
+ [self selectRowIndexes:indexSet byExtendingSelection:NO];
if ([oldTabViewDelegate_
respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) {
[oldTabViewDelegate_ tabView:tabView didSelectTabViewItem:tabViewItem];
@@ -95,4 +112,82 @@
}
}
+- (NSInteger)tabIndexFromTableIndex:(NSInteger)tableIndex {
+ if (!heading_)
+ return tableIndex;
+ DCHECK(tableIndex > 0);
+ return tableIndex - 1;
+}
+
+- (NSInteger)tableIndexFromTabIndex:(NSInteger)tabIndex {
+ DCHECK_GE(tabIndex, 0);
+ DCHECK_LT(tabIndex, [tabView_ numberOfTabViewItems]);
+ if (!heading_)
+ return tabIndex;
+ return tabIndex + 1;
+}
+
+- (BOOL)isHeadingItem:(id)item {
+ return item && item == heading_.get();
+}
+
+// NSOutlineViewDataSource methods.
+- (NSInteger) outlineView:(NSOutlineView*)outlineView
+ numberOfChildrenOfItem:(id)item {
+ if (!item)
+ return heading_ ? 1 : [tabView_ numberOfTabViewItems];
+ return (item == heading_.get()) ? [tabView_ numberOfTabViewItems] : 0;
+}
+
+- (BOOL)outlineView:(NSOutlineView*)outlineView isItemExpandable:(id)item {
+ return [self isHeadingItem:item];
+}
+
+- (id)outlineView:(NSOutlineView*)outlineView
+ child:(NSInteger)index
+ ofItem:(id)item {
+ if (!item) {
+ return heading_.get() ?
+ heading_.get() : static_cast<id>([tabView_ tabViewItemAtIndex:index]);
+ }
+ return (item == heading_.get()) ? [tabView_ tabViewItemAtIndex:index] : nil;
+}
+
+- (id) outlineView:(NSOutlineView*)outlineView
+ objectValueForTableColumn:(NSTableColumn*)tableColumn
+ byItem:(id)item {
+ if ([item isKindOfClass:[NSTabViewItem class]])
+ return [static_cast<NSTabViewItem*>(item) label];
+ if ([self isHeadingItem:item])
+ return [item uppercaseString];
+ return nil;
+}
+
+// NSOutlineViewDelegate methods.
+- (void)outlineViewSelectionDidChange:(NSNotification*)notification {
+ int row = [self selectedRow];
+ [tabView_ selectTabViewItemAtIndex:[self tabIndexFromTableIndex:row]];
+}
+
+- (BOOL)outlineView:(NSOutlineView *)sender isGroupItem:(id)item {
+ return [self isHeadingItem:item];
+}
+
+- (BOOL)outlineView:(NSOutlineView*)outlineView shouldExpandItem:(id)item {
+ return [self isHeadingItem:item];
+}
+
+- (BOOL)outlineView:(NSOutlineView*)outlineView shouldCollapseItem:(id)item {
+ return NO;
+}
+
+- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item {
+ return ![self isHeadingItem:item];
+}
+
+// -outlineView:shouldShowOutlineCellForItem: is 10.6-only.
+- (NSRect)frameOfOutlineCellAtRow:(NSInteger)row {
+ return NSZeroRect;
+}
+
@end
« no previous file with comments | « chrome/browser/cocoa/tab_view_picker_table.h ('k') | chrome/browser/cocoa/tab_view_picker_table_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698