diff options
author | dubroy@chromium.org <dubroy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-24 12:03:59 +0000 |
---|---|---|
committer | dubroy@chromium.org <dubroy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-24 12:03:59 +0000 |
commit | 2ced8f2a531efae7917500dd2b7b6ac249166ca6 (patch) | |
tree | 1c9982c45aa704485c4c48737be056eb501a02c4 /chrome | |
parent | c02eb6b182f3266238edec77f99466e060f62e3c (diff) | |
download | chromium_src-2ced8f2a531efae7917500dd2b7b6ac249166ca6.zip chromium_src-2ced8f2a531efae7917500dd2b7b6ac249166ca6.tar.gz chromium_src-2ced8f2a531efae7917500dd2b7b6ac249166ca6.tar.bz2 |
[Mac] Website settings: Implement method for setting the selected tab.
BUG=143922
Review URL: https://chromiumcodereview.appspot.com/10872038
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@153191 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
4 files changed, 57 insertions, 6 deletions
diff --git a/chrome/browser/ui/cocoa/website_settings_bubble_controller.h b/chrome/browser/ui/cocoa/website_settings_bubble_controller.h index 2ccddb6..b77500c 100644 --- a/chrome/browser/ui/cocoa/website_settings_bubble_controller.h +++ b/chrome/browser/ui/cocoa/website_settings_bubble_controller.h @@ -110,6 +110,7 @@ class WebsiteSettingsUIBridge : public WebsiteSettingsUI { const PermissionInfoList& permission_info_list) OVERRIDE; virtual void SetIdentityInfo(const IdentityInfo& identity_info) OVERRIDE; virtual void SetFirstVisit(const string16& first_visit) OVERRIDE; + virtual void SetSelectedTab(TabId tab_id) OVERRIDE; private: // The Cocoa controller for the bubble UI. diff --git a/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm b/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm index 2da94ca..4010af1 100644 --- a/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm +++ b/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm @@ -359,15 +359,16 @@ NSColor* IdentityVerifiedTextColor() { // Create the "Permissions" tab. NSString* label = l10n_util::GetNSString( IDS_WEBSITE_SETTINGS_TAB_LABEL_PERMISSIONS); + [segmentedControl_ setLabel:label + forSegment:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; NSSize textSize = [label sizeWithAttributes:textAttributes]; CGFloat tabWidth = textSize.width + 2 * kTabLabelXPadding; - [segmentedControl_ setLabel:label forSegment:0]; - [segmentedControl_ setWidth:tabWidth + kTabStripXPadding forSegment:0]; // Create the "Connection" tab. label = l10n_util::GetNSString(IDS_WEBSITE_SETTINGS_TAB_LABEL_CONNECTION); textSize = [label sizeWithAttributes:textAttributes]; - [segmentedControl_ setLabel:label forSegment:1]; + [segmentedControl_ setLabel:label + forSegment:WebsiteSettingsUI::TAB_ID_CONNECTION]; // Make both tabs the width of the widest. The first segment has some // additional padding that is not part of the tab, which is used for drawing @@ -378,7 +379,6 @@ NSColor* IdentityVerifiedTextColor() { [segmentedControl_ setWidth:tabWidth forSegment:1]; [segmentedControl_ setFont:smallSystemFont]; - [segmentedControl_ setSelectedSegment:0]; [contentView_ addSubview:segmentedControl_]; NSRect tabFrame = NSMakeRect(0, 0, kWindowWidth, 300); @@ -390,6 +390,7 @@ NSColor* IdentityVerifiedTextColor() { permissionsTabContentView_ = [self addPermissionsTabToTabView:tabView_]; connectionTabContentView_ = [self addConnectionTabToTabView:tabView_]; + [self setSelectedTab:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; [self performLayout]; } @@ -398,7 +399,8 @@ NSColor* IdentityVerifiedTextColor() { // Returns a weak reference to the tab view item's view. - (NSView*)addPermissionsTabToTabView:(NSTabView*)tabView { scoped_nsobject<NSTabViewItem> item([[NSTabViewItem alloc] init]); - [tabView_ addTabViewItem:item.get()]; + [tabView_ insertTabViewItem:item.get() + atIndex:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; scoped_nsobject<NSView> contentView([[WebsiteSettingsContentView alloc] initWithFrame:[tabView_ contentRect]]); [item setView:contentView.get()]; @@ -494,7 +496,8 @@ NSColor* IdentityVerifiedTextColor() { atPoint:textPosition]; [item setView:contentView.get()]; - [tabView_ addTabViewItem:item.get()]; + [tabView_ insertTabViewItem:item.get() + atIndex:WebsiteSettingsUI::TAB_ID_CONNECTION]; return contentView.get(); } @@ -779,6 +782,7 @@ NSColor* IdentityVerifiedTextColor() { return button.get(); } +// Called when the user changes the selected segment in the segmented control. - (void)tabSelected:(id)sender { [tabView_ selectTabViewItemAtIndex:[segmentedControl_ selectedSegment]]; } @@ -999,6 +1003,12 @@ NSColor* IdentityVerifiedTextColor() { [self performLayout]; } +- (void)setSelectedTab:(WebsiteSettingsUI::TabId)tabId { + NSInteger index = static_cast<NSInteger>(tabId); + [segmentedControl_ setSelectedSegment:index]; + [tabView_ selectTabViewItemAtIndex:index]; +} + @end WebsiteSettingsUIBridge::WebsiteSettingsUIBridge() @@ -1066,3 +1076,7 @@ void WebsiteSettingsUIBridge::SetPermissionInfo( void WebsiteSettingsUIBridge::SetFirstVisit(const string16& first_visit) { [bubble_controller_ setFirstVisit:first_visit]; } + +void WebsiteSettingsUIBridge::SetSelectedTab(TabId tab_id) { + [bubble_controller_ setSelectedTab:tab_id]; +} diff --git a/chrome/browser/ui/cocoa/website_settings_bubble_controller_unittest.mm b/chrome/browser/ui/cocoa/website_settings_bubble_controller_unittest.mm index f6e0e00..ab0816a 100644 --- a/chrome/browser/ui/cocoa/website_settings_bubble_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/website_settings_bubble_controller_unittest.mm @@ -9,6 +9,8 @@ #include "testing/gtest_mac.h" @interface WebsiteSettingsBubbleController (ExposedForTesting) +- (NSSegmentedControl*)segmentedControl; +- (NSTabView*)tabView; - (NSView*)permissionsView; - (NSView*)connectionTabContentView; - (NSImageView*)identityStatusIcon; @@ -19,6 +21,12 @@ @end @implementation WebsiteSettingsBubbleController (ExposedForTesting) +- (NSSegmentedControl*)segmentedControl { + return segmentedControl_.get(); +} +- (NSTabView*)tabView { + return tabView_.get(); +} - (NSView*)permissionsView { return permissionsView_; } @@ -301,4 +309,20 @@ TEST_F(WebsiteSettingsBubbleControllerTest, SetPermissionInfo) { EXPECT_EQ(arraysize(kTestPermissionTypes), [labels count]); } +TEST_F(WebsiteSettingsBubbleControllerTest, SetSelectedTab) { + CreateBubble(); + NSSegmentedControl* segmentedControl = [controller_ segmentedControl]; + NSTabView* tabView = [controller_ tabView]; + + // Test whether SetSelectedTab properly changes both the segmented control + // (which implements the tabs) as well as the visible tab contents. + // NOTE: This implicitly (and deliberately) tests that the tabs appear in a + // specific order: Permissions, Connection. + EXPECT_EQ(0, [segmentedControl selectedSegment]); + EXPECT_EQ(0, [tabView indexOfTabViewItem:[tabView selectedTabViewItem]]); + bridge_->SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION); + EXPECT_EQ(1, [segmentedControl selectedSegment]); + EXPECT_EQ(1, [tabView indexOfTabViewItem:[tabView selectedTabViewItem]]); +} + } // namespace diff --git a/chrome/browser/ui/website_settings/website_settings_ui.h b/chrome/browser/ui/website_settings/website_settings_ui.h index c6a9d22..e159df0 100644 --- a/chrome/browser/ui/website_settings/website_settings_ui.h +++ b/chrome/browser/ui/website_settings/website_settings_ui.h @@ -34,6 +34,13 @@ class Image; // etc.). class WebsiteSettingsUI { public: + // The Website Settings UI contains several tabs. Each tab is assiciated with + // a unique tab id. The enum |TabId| contains all the ids for the tabs. + enum TabId { + TAB_ID_PERMISSIONS, + TAB_ID_CONNECTION, + }; + // |CookieInfo| contains information about the cookies from a specific source. // A source can for example be a specific origin or an entire domain. struct CookieInfo { @@ -133,6 +140,11 @@ class WebsiteSettingsUI { // Sets the first visited data. |first_visit| can be an empty string. virtual void SetFirstVisit(const string16& first_visit) = 0; + + // Selects the tab with the given |tab_id|. + // TODO(markusheintz): Implement this on other platforms and make it a pure + // virtual function. + virtual void SetSelectedTab(TabId tab_id) {} }; typedef WebsiteSettingsUI::CookieInfoList CookieInfoList; |