Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/website_settings_bubble_controller.h" | 5 #import "chrome/browser/ui/cocoa/website_settings_bubble_controller.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #import <AppKit/AppKit.h> | 9 #import <AppKit/AppKit.h> |
| 10 | 10 |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 30 #include "grit/generated_resources.h" | 30 #include "grit/generated_resources.h" |
| 31 #include "grit/theme_resources.h" | 31 #include "grit/theme_resources.h" |
| 32 #include "grit/ui_resources.h" | 32 #include "grit/ui_resources.h" |
| 33 #import "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" | 33 #import "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
| 34 #include "ui/base/l10n/l10n_util.h" | 34 #include "ui/base/l10n/l10n_util.h" |
| 35 #include "ui/base/resource/resource_bundle.h" | 35 #include "ui/base/resource/resource_bundle.h" |
| 36 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" | 36 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" |
| 37 | 37 |
| 38 namespace { | 38 namespace { |
| 39 | 39 |
| 40 // The width of the window, in view coordinates. The height will be determined | 40 // The default width of the window, in view coordinates. It may be larger to |
| 41 // by the content. | 41 // fit the content. |
| 42 const CGFloat kWindowWidth = 310; | 42 const CGFloat kDefaultWindowWidth = 310; |
| 43 | 43 |
| 44 // Spacing in between sections. | 44 // Spacing in between sections. |
| 45 const CGFloat kVerticalSpacing = 10; | 45 const CGFloat kVerticalSpacing = 10; |
| 46 | 46 |
| 47 // Padding between the window frame and content. | 47 // Padding between the window frame and content. |
| 48 const CGFloat kFramePadding = 20; | 48 const CGFloat kFramePadding = 20; |
| 49 | 49 |
| 50 // Padding between the window frame and content for the internal page bubble. | 50 // Padding between the window frame and content for the internal page bubble. |
| 51 const CGFloat kInternalPageFramePadding = 10; | 51 const CGFloat kInternalPageFramePadding = 10; |
| 52 | 52 |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 77 | 77 |
| 78 // The spacing between individual items in the Permissions tab. | 78 // The spacing between individual items in the Permissions tab. |
| 79 const CGFloat kPermissionsTabSpacing = 12; | 79 const CGFloat kPermissionsTabSpacing = 12; |
| 80 | 80 |
| 81 // Extra spacing after a headline on the Permissions tab. | 81 // Extra spacing after a headline on the Permissions tab. |
| 82 const CGFloat kPermissionsHeadlineSpacing = 2; | 82 const CGFloat kPermissionsHeadlineSpacing = 2; |
| 83 | 83 |
| 84 // The amount of horizontal space between a permission label and the popup. | 84 // The amount of horizontal space between a permission label and the popup. |
| 85 const CGFloat kPermissionPopUpXSpacing = 3; | 85 const CGFloat kPermissionPopUpXSpacing = 3; |
| 86 | 86 |
| 87 // The amount of horizontal space between the permission popup title and the | |
| 88 // arrow icon. | |
| 89 const CGFloat kPermissionButtonTitleRightPadding = 4; | |
| 90 | |
| 87 // The extra space to the left of the first tab in the tab strip. | 91 // The extra space to the left of the first tab in the tab strip. |
| 88 const CGFloat kTabStripXPadding = kFramePadding; | 92 const CGFloat kTabStripXPadding = kFramePadding; |
| 89 | 93 |
| 90 // The amount of space between the visual borders of adjacent tabs. | 94 // The amount of space between the visual borders of adjacent tabs. |
| 91 const CGFloat kTabSpacing = 4; | 95 const CGFloat kTabSpacing = 4; |
| 92 | 96 |
| 93 // The amount of space above the tab strip. | 97 // The amount of space above the tab strip. |
| 94 const CGFloat kTabStripTopSpacing = 14; | 98 const CGFloat kTabStripTopSpacing = 14; |
| 95 | 99 |
| 96 // The height of the clickable area of the tab. | 100 // The height of the clickable area of the tab. |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 193 nil, | 197 nil, |
| 194 tabstripCenterImage_, | 198 tabstripCenterImage_, |
| 195 tabstripLeftImage_, | 199 tabstripLeftImage_, |
| 196 /*vertical=*/ NO, | 200 /*vertical=*/ NO, |
| 197 NSCompositeSourceOver, | 201 NSCompositeSourceOver, |
| 198 1, | 202 1, |
| 199 /*flipped=*/ YES); | 203 /*flipped=*/ YES); |
| 200 | 204 |
| 201 // Draw the background to the right of the selected tab. | 205 // Draw the background to the right of the selected tab. |
| 202 backgroundRect.origin.x = NSMaxX(tabRect); | 206 backgroundRect.origin.x = NSMaxX(tabRect); |
| 203 backgroundRect.size.width = kWindowWidth - NSMaxX(tabRect); | 207 backgroundRect.size.width = NSMaxX(cellFrame) - NSMaxX(tabRect); |
| 204 NSDrawThreePartImage(backgroundRect, | 208 NSDrawThreePartImage(backgroundRect, |
| 205 tabstripRightImage_, | 209 tabstripRightImage_, |
| 206 tabstripCenterImage_, | 210 tabstripCenterImage_, |
| 207 nil, | 211 nil, |
| 208 /*vertical=*/ NO, | 212 /*vertical=*/ NO, |
| 209 NSCompositeSourceOver, | 213 NSCompositeSourceOver, |
| 210 1, | 214 1, |
| 211 /*flipped=*/ YES); | 215 /*flipped=*/ YES); |
| 212 | 216 |
| 213 // Call the superclass method to trigger drawing of the tab labels. | 217 // Call the superclass method to trigger drawing of the tab labels. |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 278 // Returns the minimum size required to display this cell. | 282 // Returns the minimum size required to display this cell. |
| 279 // It should always be exactly as tall as the tabstrip background image. | 283 // It should always be exactly as tall as the tabstrip background image. |
| 280 - (NSSize)cellSize { | 284 - (NSSize)cellSize { |
| 281 return NSMakeSize([super cellSize].width, | 285 return NSMakeSize([super cellSize].width, |
| 282 [tabstripCenterImage_ size].height); | 286 [tabstripCenterImage_ size].height); |
| 283 } | 287 } |
| 284 @end | 288 @end |
| 285 | 289 |
| 286 @implementation WebsiteSettingsBubbleController | 290 @implementation WebsiteSettingsBubbleController |
| 287 | 291 |
| 292 // Return the default width of the window. It may be wider to fit the content. | |
|
Robert Sesek
2012/11/26 17:06:56
Move this to the .h since it's a public member.
Patrick Dubroy
2012/11/27 12:11:30
Done.
| |
| 293 // This may be overriden by a subclass for testing purposes. | |
| 294 - (CGFloat)defaultWindowWidth { | |
| 295 return kDefaultWindowWidth; | |
| 296 } | |
| 297 | |
| 288 - (id)initWithParentWindow:(NSWindow*)parentWindow | 298 - (id)initWithParentWindow:(NSWindow*)parentWindow |
| 289 websiteSettingsUIBridge:(WebsiteSettingsUIBridge*)bridge | 299 websiteSettingsUIBridge:(WebsiteSettingsUIBridge*)bridge |
| 290 tabContents:(TabContents*)tabContents | 300 tabContents:(TabContents*)tabContents |
| 291 isInternalPage:(BOOL)isInternalPage { | 301 isInternalPage:(BOOL)isInternalPage { |
| 292 DCHECK(parentWindow); | 302 DCHECK(parentWindow); |
| 293 | 303 |
| 294 tabContents_ = tabContents; | 304 tabContents_ = tabContents; |
| 295 | 305 |
| 296 // Use an arbitrary height; it will be changed in performLayout. | 306 // Use an arbitrary height; it will be changed in performLayout. |
| 297 NSRect contentRect = NSMakeRect(0, 0, kWindowWidth, 1); | 307 NSRect contentRect = NSMakeRect(0, 0, [self defaultWindowWidth], 1); |
| 298 // Create an empty window into which content is placed. | 308 // Create an empty window into which content is placed. |
| 299 scoped_nsobject<InfoBubbleWindow> window( | 309 scoped_nsobject<InfoBubbleWindow> window( |
| 300 [[InfoBubbleWindow alloc] initWithContentRect:contentRect | 310 [[InfoBubbleWindow alloc] initWithContentRect:contentRect |
| 301 styleMask:NSBorderlessWindowMask | 311 styleMask:NSBorderlessWindowMask |
| 302 backing:NSBackingStoreBuffered | 312 backing:NSBackingStoreBuffered |
| 303 defer:NO]); | 313 defer:NO]); |
| 304 | 314 |
| 305 if ((self = [super initWithWindow:window.get() | 315 if ((self = [super initWithWindow:window.get() |
| 306 parentWindow:parentWindow | 316 parentWindow:parentWindow |
| 307 anchoredAt:NSZeroPoint])) { | 317 anchoredAt:NSZeroPoint])) { |
| 308 [[self bubble] setArrowLocation:info_bubble::kTopLeft]; | 318 [[self bubble] setArrowLocation:info_bubble::kTopLeft]; |
| 309 | 319 |
| 310 // Create the container view that uses flipped coordinates. | 320 // Create the container view that uses flipped coordinates. |
| 311 NSRect contentFrame = NSMakeRect(0, 0, kWindowWidth, 300); | 321 NSRect contentFrame = NSMakeRect(0, 0, [self defaultWindowWidth], 300); |
| 312 contentView_.reset( | 322 contentView_.reset( |
| 313 [[FlippedView alloc] initWithFrame:contentFrame]); | 323 [[FlippedView alloc] initWithFrame:contentFrame]); |
| 314 | 324 |
| 315 // Replace the window's content. | 325 // Replace the window's content. |
| 316 [[[self window] contentView] setSubviews: | 326 [[[self window] contentView] setSubviews: |
| 317 [NSArray arrayWithObject:contentView_.get()]]; | 327 [NSArray arrayWithObject:contentView_.get()]]; |
| 318 | 328 |
| 319 if (isInternalPage) | 329 if (isInternalPage) |
| 320 [self initializeContentsForInternalPage]; | 330 [self initializeContentsForInternalPage]; |
| 321 else | 331 else |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 359 toView:contentView_ | 369 toView:contentView_ |
| 360 atPoint:controlOrigin]; | 370 atPoint:controlOrigin]; |
| 361 // Center the text vertically with the image. | 371 // Center the text vertically with the image. |
| 362 NSRect textFrame = [textField frame]; | 372 NSRect textFrame = [textField frame]; |
| 363 textFrame.origin.y += (imageSize.height - NSHeight(textFrame)) / 2; | 373 textFrame.origin.y += (imageSize.height - NSHeight(textFrame)) / 2; |
| 364 [textField setFrame:textFrame]; | 374 [textField setFrame:textFrame]; |
| 365 | 375 |
| 366 // Adjust the contentView to fit everything. | 376 // Adjust the contentView to fit everything. |
| 367 CGFloat maxY = std::max(NSMaxY([imageView frame]), NSMaxY(textFrame)); | 377 CGFloat maxY = std::max(NSMaxY([imageView frame]), NSMaxY(textFrame)); |
| 368 [contentView_ setFrame:NSMakeRect( | 378 [contentView_ setFrame:NSMakeRect( |
| 369 0, 0, kWindowWidth, maxY + kInternalPageFramePadding)]; | 379 0, 0, [self defaultWindowWidth], maxY + kInternalPageFramePadding)]; |
| 370 | 380 |
| 371 [self sizeAndPositionWindow]; | 381 [self sizeAndPositionWindow]; |
| 372 } | 382 } |
| 373 | 383 |
| 374 // Create the subviews for the website settings bubble. | 384 // Create the subviews for the website settings bubble. |
| 375 - (void)initializeContents { | 385 - (void)initializeContents { |
| 376 // Keeps track of the position that the next control should be drawn at. | 386 // Keeps track of the position that the next control should be drawn at. |
| 377 NSPoint controlOrigin = NSMakePoint( | 387 NSPoint controlOrigin = NSMakePoint( |
| 378 kFramePadding, | 388 kFramePadding, |
| 379 kFramePadding + info_bubble::kBubbleArrowHeight); | 389 kFramePadding + info_bubble::kBubbleArrowHeight); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 392 withSize:[NSFont smallSystemFontSize] | 402 withSize:[NSFont smallSystemFontSize] |
| 393 bold:NO | 403 bold:NO |
| 394 toView:contentView_ | 404 toView:contentView_ |
| 395 atPoint:controlOrigin]; | 405 atPoint:controlOrigin]; |
| 396 | 406 |
| 397 // Create the tab view and its two tabs. | 407 // Create the tab view and its two tabs. |
| 398 | 408 |
| 399 scoped_nsobject<WebsiteSettingsTabSegmentedCell> cell( | 409 scoped_nsobject<WebsiteSettingsTabSegmentedCell> cell( |
| 400 [[WebsiteSettingsTabSegmentedCell alloc] init]); | 410 [[WebsiteSettingsTabSegmentedCell alloc] init]); |
| 401 CGFloat tabstripHeight = [cell cellSize].height; | 411 CGFloat tabstripHeight = [cell cellSize].height; |
| 402 NSRect tabstripFrame = NSMakeRect(0, 0, kWindowWidth, tabstripHeight); | 412 NSRect tabstripFrame = NSMakeRect( |
| 413 0, 0, [self defaultWindowWidth], tabstripHeight); | |
| 403 segmentedControl_.reset( | 414 segmentedControl_.reset( |
| 404 [[NSSegmentedControl alloc] initWithFrame:tabstripFrame]); | 415 [[NSSegmentedControl alloc] initWithFrame:tabstripFrame]); |
| 405 [segmentedControl_ setCell:cell]; | 416 [segmentedControl_ setCell:cell]; |
| 406 [segmentedControl_ setSegmentCount:WebsiteSettingsUI::NUM_TAB_IDS]; | 417 [segmentedControl_ setSegmentCount:WebsiteSettingsUI::NUM_TAB_IDS]; |
| 407 [segmentedControl_ setTarget:self]; | 418 [segmentedControl_ setTarget:self]; |
| 408 [segmentedControl_ setAction:@selector(tabSelected:)]; | 419 [segmentedControl_ setAction:@selector(tabSelected:)]; |
| 420 [segmentedControl_ setAutoresizingMask:NSViewWidthSizable]; | |
| 409 | 421 |
| 410 NSFont* smallSystemFont = | 422 NSFont* smallSystemFont = |
| 411 [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; | 423 [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; |
| 412 NSDictionary* textAttributes = | 424 NSDictionary* textAttributes = |
| 413 [NSDictionary dictionaryWithObject:smallSystemFont | 425 [NSDictionary dictionaryWithObject:smallSystemFont |
| 414 forKey:NSFontAttributeName]; | 426 forKey:NSFontAttributeName]; |
| 415 | 427 |
| 416 // Create the "Permissions" tab. | 428 // Create the "Permissions" tab. |
| 417 NSString* label = l10n_util::GetNSString( | 429 NSString* label = l10n_util::GetNSString( |
| 418 IDS_WEBSITE_SETTINGS_TAB_LABEL_PERMISSIONS); | 430 IDS_WEBSITE_SETTINGS_TAB_LABEL_PERMISSIONS); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 437 tabWidth = std::max(tabWidth, | 449 tabWidth = std::max(tabWidth, |
| 438 textSize.width + 2 * kTabLabelXPadding); | 450 textSize.width + 2 * kTabLabelXPadding); |
| 439 [segmentedControl_ setWidth:tabWidth + kTabStripXPadding | 451 [segmentedControl_ setWidth:tabWidth + kTabStripXPadding |
| 440 forSegment:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; | 452 forSegment:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; |
| 441 [segmentedControl_ setWidth:tabWidth | 453 [segmentedControl_ setWidth:tabWidth |
| 442 forSegment:WebsiteSettingsUI::TAB_ID_CONNECTION]; | 454 forSegment:WebsiteSettingsUI::TAB_ID_CONNECTION]; |
| 443 | 455 |
| 444 [segmentedControl_ setFont:smallSystemFont]; | 456 [segmentedControl_ setFont:smallSystemFont]; |
| 445 [contentView_ addSubview:segmentedControl_]; | 457 [contentView_ addSubview:segmentedControl_]; |
| 446 | 458 |
| 447 NSRect tabFrame = NSMakeRect(0, 0, kWindowWidth, 300); | 459 NSRect tabFrame = NSMakeRect(0, 0, [self defaultWindowWidth], 300); |
| 448 tabView_.reset([[NSTabView alloc] initWithFrame:tabFrame]); | 460 tabView_.reset([[NSTabView alloc] initWithFrame:tabFrame]); |
| 449 [tabView_ setTabViewType:NSNoTabsNoBorder]; | 461 [tabView_ setTabViewType:NSNoTabsNoBorder]; |
| 450 [tabView_ setDrawsBackground:NO]; | 462 [tabView_ setDrawsBackground:NO]; |
| 451 [tabView_ setControlSize:NSSmallControlSize]; | 463 [tabView_ setControlSize:NSSmallControlSize]; |
| 452 [contentView_ addSubview:tabView_.get()]; | 464 [contentView_ addSubview:tabView_.get()]; |
| 453 | 465 |
| 454 permissionsTabContentView_ = [self addPermissionsTabToTabView:tabView_]; | 466 permissionsTabContentView_ = [self addPermissionsTabToTabView:tabView_]; |
| 455 connectionTabContentView_ = [self addConnectionTabToTabView:tabView_]; | 467 connectionTabContentView_ = [self addConnectionTabToTabView:tabView_]; |
| 456 [self setSelectedTab:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; | 468 [self setSelectedTab:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; |
| 457 | 469 |
| 458 [self performLayout]; | 470 [self performLayout]; |
| 459 } | 471 } |
| 460 | 472 |
| 461 // Create the contents of the Permissions tab and add it to the given tab view. | 473 // Create the contents of the Permissions tab and add it to the given tab view. |
| 462 // Returns a weak reference to the tab view item's view. | 474 // Returns a weak reference to the tab view item's view. |
| 463 - (NSView*)addPermissionsTabToTabView:(NSTabView*)tabView { | 475 - (NSView*)addPermissionsTabToTabView:(NSTabView*)tabView { |
| 464 scoped_nsobject<NSTabViewItem> item([[NSTabViewItem alloc] init]); | 476 scoped_nsobject<NSTabViewItem> item([[NSTabViewItem alloc] init]); |
| 465 [tabView_ insertTabViewItem:item.get() | 477 [tabView_ insertTabViewItem:item.get() |
| 466 atIndex:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; | 478 atIndex:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; |
| 467 scoped_nsobject<NSView> contentView([[FlippedView alloc] | 479 scoped_nsobject<NSView> contentView([[FlippedView alloc] |
| 468 initWithFrame:[tabView_ contentRect]]); | 480 initWithFrame:[tabView_ contentRect]]); |
| 481 [contentView setAutoresizingMask:NSViewWidthSizable]; | |
| 469 [item setView:contentView.get()]; | 482 [item setView:contentView.get()]; |
| 470 | 483 |
| 471 // Initialize the two containers that hold the controls. The initial frames | 484 // Initialize the two containers that hold the controls. The initial frames |
| 472 // are arbitrary, and will be adjusted after the controls are laid out. | 485 // are arbitrary, and will be adjusted after the controls are laid out. |
| 473 cookiesView_ = [[[FlippedView alloc] | 486 cookiesView_ = [[[FlippedView alloc] |
| 474 initWithFrame:[tabView_ contentRect]] autorelease]; | 487 initWithFrame:[tabView_ contentRect]] autorelease]; |
| 488 [cookiesView_ setAutoresizingMask:NSViewWidthSizable]; | |
| 489 | |
| 475 permissionsView_ = [[[FlippedView alloc] | 490 permissionsView_ = [[[FlippedView alloc] |
| 476 initWithFrame:[tabView_ contentRect]] autorelease]; | 491 initWithFrame:[tabView_ contentRect]] autorelease]; |
| 477 | 492 |
| 478 [contentView addSubview:cookiesView_]; | 493 [contentView addSubview:cookiesView_]; |
| 479 [contentView addSubview:permissionsView_]; | 494 [contentView addSubview:permissionsView_]; |
| 480 | 495 |
| 481 // Create the link button to view cookies and site data. | 496 // Create the link button to view cookies and site data. |
| 482 // Its position will be set in performLayout. | 497 // Its position will be set in performLayout. |
| 483 NSString* cookieButtonText = l10n_util::GetNSString( | 498 NSString* cookieButtonText = l10n_util::GetNSString( |
| 484 IDS_WEBSITE_SETTINGS_SHOW_SITE_DATA); | 499 IDS_WEBSITE_SETTINGS_SHOW_SITE_DATA); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 515 content::PAGE_TRANSITION_LINK, | 530 content::PAGE_TRANSITION_LINK, |
| 516 false)); | 531 false)); |
| 517 } | 532 } |
| 518 | 533 |
| 519 // Create the contents of the Connection tab and add it to the given tab view. | 534 // Create the contents of the Connection tab and add it to the given tab view. |
| 520 // Returns a weak reference to the tab view item's view. | 535 // Returns a weak reference to the tab view item's view. |
| 521 - (NSView*)addConnectionTabToTabView:(NSTabView*)tabView { | 536 - (NSView*)addConnectionTabToTabView:(NSTabView*)tabView { |
| 522 scoped_nsobject<NSTabViewItem> item([[NSTabViewItem alloc] init]); | 537 scoped_nsobject<NSTabViewItem> item([[NSTabViewItem alloc] init]); |
| 523 scoped_nsobject<NSView> contentView([[FlippedView alloc] | 538 scoped_nsobject<NSView> contentView([[FlippedView alloc] |
| 524 initWithFrame:[tabView_ contentRect]]); | 539 initWithFrame:[tabView_ contentRect]]); |
| 540 [contentView setAutoresizingMask:NSViewWidthSizable]; | |
| 525 | 541 |
| 526 // Place all the text and images at the same position. The positions will be | 542 // Place all the text and images at the same position. The positions will be |
| 527 // adjusted in performLayout. | 543 // adjusted in performLayout. |
| 528 NSPoint textPosition = NSMakePoint( | 544 NSPoint textPosition = NSMakePoint( |
| 529 kFramePadding + kConnectionImageSize + kConnectionImageSpacing, | 545 kFramePadding + kConnectionImageSize + kConnectionImageSpacing, |
| 530 kFramePadding); | 546 kFramePadding); |
| 531 NSPoint imagePosition = NSMakePoint(kFramePadding, kFramePadding); | 547 NSPoint imagePosition = NSMakePoint(kFramePadding, kFramePadding); |
| 532 NSSize imageSize = NSMakeSize(kConnectionImageSize, kConnectionImageSize); | 548 NSSize imageSize = NSMakeSize(kConnectionImageSize, kConnectionImageSize); |
| 533 | 549 |
| 534 identityStatusIcon_ = [self addImageWithSize:imageSize | 550 identityStatusIcon_ = [self addImageWithSize:imageSize |
| 535 toView:contentView | 551 toView:contentView |
| 536 atPoint:imagePosition]; | 552 atPoint:imagePosition]; |
| 537 identityStatusDescriptionField_ = | 553 identityStatusDescriptionField_ = |
| 538 [self addText:string16() | 554 [self addText:string16() |
| 539 withSize:[NSFont smallSystemFontSize] | 555 withSize:[NSFont smallSystemFontSize] |
| 540 bold:NO | 556 bold:NO |
| 541 toView:contentView.get() | 557 toView:contentView.get() |
| 542 atPoint:textPosition]; | 558 atPoint:textPosition]; |
| 559 | |
| 543 separatorAfterIdentity_ = [self addSeparatorToView:contentView]; | 560 separatorAfterIdentity_ = [self addSeparatorToView:contentView]; |
| 561 [separatorAfterIdentity_ setAutoresizingMask:NSViewWidthSizable]; | |
| 544 | 562 |
| 545 connectionStatusIcon_ = [self addImageWithSize:imageSize | 563 connectionStatusIcon_ = [self addImageWithSize:imageSize |
| 546 toView:contentView | 564 toView:contentView |
| 547 atPoint:imagePosition]; | 565 atPoint:imagePosition]; |
| 548 connectionStatusDescriptionField_ = | 566 connectionStatusDescriptionField_ = |
| 549 [self addText:string16() | 567 [self addText:string16() |
| 550 withSize:[NSFont smallSystemFontSize] | 568 withSize:[NSFont smallSystemFontSize] |
| 551 bold:NO | 569 bold:NO |
| 552 toView:contentView.get() | 570 toView:contentView.get() |
| 553 atPoint:textPosition]; | 571 atPoint:textPosition]; |
| 554 certificateInfoButton_ = nil; // This will be created only if necessary. | 572 certificateInfoButton_ = nil; // This will be created only if necessary. |
| 555 separatorAfterConnection_ = [self addSeparatorToView:contentView]; | 573 separatorAfterConnection_ = [self addSeparatorToView:contentView]; |
| 574 [separatorAfterConnection_ setAutoresizingMask:NSViewWidthSizable]; | |
| 556 | 575 |
| 557 firstVisitIcon_ = [self addImageWithSize:imageSize | 576 firstVisitIcon_ = [self addImageWithSize:imageSize |
| 558 toView:contentView | 577 toView:contentView |
| 559 atPoint:imagePosition]; | 578 atPoint:imagePosition]; |
| 560 firstVisitHeaderField_ = | 579 firstVisitHeaderField_ = |
| 561 [self addText:l10n_util::GetStringUTF16(IDS_PAGE_INFO_SITE_INFO_TITLE) | 580 [self addText:l10n_util::GetStringUTF16(IDS_PAGE_INFO_SITE_INFO_TITLE) |
| 562 withSize:[NSFont smallSystemFontSize] | 581 withSize:[NSFont smallSystemFontSize] |
| 563 bold:YES | 582 bold:YES |
| 564 toView:contentView.get() | 583 toView:contentView.get() |
| 565 atPoint:textPosition]; | 584 atPoint:textPosition]; |
| 566 firstVisitDescriptionField_ = | 585 firstVisitDescriptionField_ = |
| 567 [self addText:string16() | 586 [self addText:string16() |
| 568 withSize:[NSFont smallSystemFontSize] | 587 withSize:[NSFont smallSystemFontSize] |
| 569 bold:NO | 588 bold:NO |
| 570 toView:contentView.get() | 589 toView:contentView.get() |
| 571 atPoint:textPosition]; | 590 atPoint:textPosition]; |
| 572 | 591 |
| 573 separatorAfterFirstVisit_ = [self addSeparatorToView:contentView]; | 592 separatorAfterFirstVisit_ = [self addSeparatorToView:contentView]; |
| 593 [separatorAfterFirstVisit_ setAutoresizingMask:NSViewWidthSizable]; | |
| 594 | |
| 574 NSString* helpButtonText = l10n_util::GetNSString( | 595 NSString* helpButtonText = l10n_util::GetNSString( |
| 575 IDS_PAGE_INFO_HELP_CENTER_LINK); | 596 IDS_PAGE_INFO_HELP_CENTER_LINK); |
| 576 helpButton_ = [self addLinkButtonWithText:helpButtonText | 597 helpButton_ = [self addLinkButtonWithText:helpButtonText |
| 577 toView:contentView]; | 598 toView:contentView]; |
| 578 [helpButton_ setTarget:self]; | 599 [helpButton_ setTarget:self]; |
| 579 [helpButton_ setAction:@selector(showHelpPage:)]; | 600 [helpButton_ setAction:@selector(showHelpPage:)]; |
| 580 | 601 |
| 581 [item setView:contentView.get()]; | 602 [item setView:contentView.get()]; |
| 582 [tabView_ insertTabViewItem:item.get() | 603 [tabView_ insertTabViewItem:item.get() |
| 583 atIndex:WebsiteSettingsUI::TAB_ID_CONNECTION]; | 604 atIndex:WebsiteSettingsUI::TAB_ID_CONNECTION]; |
| 584 | 605 |
| 585 return contentView.get(); | 606 return contentView.get(); |
| 586 } | 607 } |
| 587 | 608 |
| 588 // Set the Y position of |view| to the given position, and return the position | 609 // Set the Y position of |view| to the given position, and return the position |
| 589 // of its bottom edge. | 610 // of its bottom edge. |
| 590 - (CGFloat)setYPositionOfView:(NSView*)view to:(CGFloat)position { | 611 - (CGFloat)setYPositionOfView:(NSView*)view to:(CGFloat)position { |
| 591 NSRect frame = [view frame]; | 612 NSRect frame = [view frame]; |
| 592 frame.origin.y = position; | 613 frame.origin.y = position; |
| 593 [view setFrame:frame]; | 614 [view setFrame:frame]; |
| 594 return position + NSHeight(frame); | 615 return position + NSHeight(frame); |
| 595 } | 616 } |
| 596 | 617 |
| 618 - (void)setWidthOfView:(NSView*)view to:(CGFloat)width { | |
| 619 [view setFrameSize:NSMakeSize(width, NSHeight([view frame]))]; | |
| 620 } | |
| 621 | |
| 597 // Layout all of the controls in the window. This should be called whenever | 622 // Layout all of the controls in the window. This should be called whenever |
| 598 // the content has changed. | 623 // the content has changed. |
| 599 - (void)performLayout { | 624 - (void)performLayout { |
| 625 // Make the content at least as wide as the permissions view. | |
| 626 CGFloat contentWidth = std::max([self defaultWindowWidth], | |
| 627 NSWidth([permissionsView_ frame])); | |
| 628 | |
| 629 // Set the width of the content view now, so that all the text fields will | |
| 630 // be sized to fit before their heights and vertical positions are adjusted. | |
| 631 // The tab view will only resize the currently selected tab, so resize both | |
| 632 // tab content views manually. | |
| 633 [self setWidthOfView:contentView_ to:contentWidth]; | |
| 634 [self setWidthOfView:permissionsTabContentView_ to:contentWidth]; | |
| 635 [self setWidthOfView:connectionTabContentView_ to:contentWidth]; | |
| 636 | |
| 600 // Place the identity status immediately below the identity. | 637 // Place the identity status immediately below the identity. |
| 601 [self sizeTextFieldHeightToFit:identityField_]; | 638 [self sizeTextFieldHeightToFit:identityField_]; |
| 602 [self sizeTextFieldHeightToFit:identityStatusField_]; | 639 [self sizeTextFieldHeightToFit:identityStatusField_]; |
| 603 CGFloat yPos = NSMaxY([identityField_ frame]) + kConnectionHeadlineSpacing; | 640 CGFloat yPos = NSMaxY([identityField_ frame]) + kConnectionHeadlineSpacing; |
| 604 yPos = [self setYPositionOfView:identityStatusField_ to:yPos]; | 641 yPos = [self setYPositionOfView:identityStatusField_ to:yPos]; |
| 605 | 642 |
| 606 // Lay out the Permissions tab. | 643 // Lay out the Permissions tab. |
| 644 | |
| 607 yPos = [self setYPositionOfView:cookiesView_ to:kFramePadding]; | 645 yPos = [self setYPositionOfView:cookiesView_ to:kFramePadding]; |
| 608 | 646 |
| 609 // Put the link button for cookies and site data just below the cookie info. | 647 // Put the link button for cookies and site data just below the cookie info. |
| 610 NSRect cookiesButtonFrame = [cookiesButton_ frame]; | 648 NSRect cookiesButtonFrame = [cookiesButton_ frame]; |
| 611 cookiesButtonFrame.origin.y = yPos; | 649 cookiesButtonFrame.origin.y = yPos; |
| 612 cookiesButtonFrame.origin.x = kFramePadding; | 650 cookiesButtonFrame.origin.x = kFramePadding; |
| 613 [cookiesButton_ setFrame:cookiesButtonFrame]; | 651 [cookiesButton_ setFrame:cookiesButtonFrame]; |
| 614 | 652 |
| 615 // Put the permission info just below the link button. | 653 // Put the permission info just below the link button. |
| 616 [self setYPositionOfView:permissionsView_ | 654 [self setYPositionOfView:permissionsView_ |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 654 yPos = [self setYPositionOfView:separatorAfterFirstVisit_ | 692 yPos = [self setYPositionOfView:separatorAfterFirstVisit_ |
| 655 to:yPos + kVerticalSpacing]; | 693 to:yPos + kVerticalSpacing]; |
| 656 yPos += kVerticalSpacing; | 694 yPos += kVerticalSpacing; |
| 657 [self setYPositionOfView:helpButton_ to:yPos]; | 695 [self setYPositionOfView:helpButton_ to:yPos]; |
| 658 | 696 |
| 659 // Adjust the tab view size and place it below the identity status. | 697 // Adjust the tab view size and place it below the identity status. |
| 660 | 698 |
| 661 yPos = NSMaxY([identityStatusField_ frame]) + kTabStripTopSpacing; | 699 yPos = NSMaxY([identityStatusField_ frame]) + kTabStripTopSpacing; |
| 662 yPos = [self setYPositionOfView:segmentedControl_ to:yPos]; | 700 yPos = [self setYPositionOfView:segmentedControl_ to:yPos]; |
| 663 | 701 |
| 702 CGFloat connectionTabHeight = NSMaxY([helpButton_ frame]) + kVerticalSpacing; | |
| 703 | |
| 664 NSRect tabViewFrame = [tabView_ frame]; | 704 NSRect tabViewFrame = [tabView_ frame]; |
| 665 tabViewFrame.origin.y = yPos; | 705 tabViewFrame.origin.y = yPos; |
| 666 | 706 tabViewFrame.size.height = |
| 667 // Determine the height of the tab contents. | 707 std::max(connectionTabHeight, NSMaxY([permissionsView_ frame])); |
| 668 | 708 tabViewFrame.size.width = contentWidth; |
| 669 CGFloat connectionTabHeight = std::max( | |
| 670 NSMaxY([firstVisitDescriptionField_ frame]), | |
| 671 NSMaxY([firstVisitIcon_ frame ])); | |
| 672 connectionTabHeight += kVerticalSpacing; | |
| 673 | |
| 674 CGFloat permissionsTabHeight = NSMaxY([permissionsView_ frame]); | |
| 675 CGFloat tabContentHeight = std::max(connectionTabHeight, | |
| 676 permissionsTabHeight); | |
| 677 tabViewFrame.size.height = tabContentHeight + | |
| 678 NSHeight(tabViewFrame) - NSHeight([tabView_ contentRect]); | |
| 679 [tabView_ setFrame:tabViewFrame]; | 709 [tabView_ setFrame:tabViewFrame]; |
| 680 | 710 |
| 681 // Adjust the contentView to fit everything. | 711 // Adjust the contentView to fit everything. |
| 682 [contentView_ setFrame:NSMakeRect( | 712 [contentView_ setFrame:NSMakeRect( |
| 683 0, 0, kWindowWidth, NSMaxY([tabView_ frame]))]; | 713 0, 0, NSWidth(tabViewFrame), NSMaxY(tabViewFrame))]; |
| 684 | 714 |
| 685 [self sizeAndPositionWindow]; | 715 [self sizeAndPositionWindow]; |
| 686 } | 716 } |
| 687 | 717 |
| 688 // Adjust the size of the window to match the size of the content, and position | 718 // Adjust the size of the window to match the size of the content, and position |
| 689 // the bubble anchor appropriately. | 719 // the bubble anchor appropriately. |
| 690 - (void)sizeAndPositionWindow { | 720 - (void)sizeAndPositionWindow { |
| 691 NSRect windowFrame = | 721 NSRect windowFrame = [contentView_ frame]; |
| 692 NSMakeRect(0, 0, kWindowWidth, NSHeight([contentView_ frame])); | |
| 693 windowFrame.size = [[[self window] contentView] convertSize:windowFrame.size | 722 windowFrame.size = [[[self window] contentView] convertSize:windowFrame.size |
| 694 toView:nil]; | 723 toView:nil]; |
| 695 // Adjust the origin by the difference in height. | 724 // Adjust the origin by the difference in height. |
| 696 windowFrame.origin = [[self window] frame].origin; | 725 windowFrame.origin = [[self window] frame].origin; |
| 697 windowFrame.origin.y -= NSHeight(windowFrame) - | 726 windowFrame.origin.y -= NSHeight(windowFrame) - |
| 698 NSHeight([[self window] frame]); | 727 NSHeight([[self window] frame]); |
| 699 | 728 |
| 700 // Resize the window. Only animate if the window is visible, otherwise it | 729 // Resize the window. Only animate if the window is visible, otherwise it |
| 701 // could be "growing" while it's opening, looking awkward. | 730 // could be "growing" while it's opening, looking awkward. |
| 702 [[self window] setFrame:windowFrame | 731 [[self window] setFrame:windowFrame |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 757 CGFloat width = NSWidth([view frame]) - point.x - kFramePadding; | 786 CGFloat width = NSWidth([view frame]) - point.x - kFramePadding; |
| 758 NSRect frame = NSMakeRect(point.x, point.y, width, 100); | 787 NSRect frame = NSMakeRect(point.x, point.y, width, 100); |
| 759 scoped_nsobject<NSTextField> textField( | 788 scoped_nsobject<NSTextField> textField( |
| 760 [[NSTextField alloc] initWithFrame:frame]); | 789 [[NSTextField alloc] initWithFrame:frame]); |
| 761 [self configureTextFieldAsLabel:textField.get()]; | 790 [self configureTextFieldAsLabel:textField.get()]; |
| 762 [textField setStringValue:base::SysUTF16ToNSString(text)]; | 791 [textField setStringValue:base::SysUTF16ToNSString(text)]; |
| 763 NSFont* font = bold ? [NSFont boldSystemFontOfSize:fontSize] | 792 NSFont* font = bold ? [NSFont boldSystemFontOfSize:fontSize] |
| 764 : [NSFont systemFontOfSize:fontSize]; | 793 : [NSFont systemFontOfSize:fontSize]; |
| 765 [textField setFont:font]; | 794 [textField setFont:font]; |
| 766 [self sizeTextFieldHeightToFit:textField]; | 795 [self sizeTextFieldHeightToFit:textField]; |
| 796 [textField setAutoresizingMask:NSViewWidthSizable]; | |
| 767 [view addSubview:textField.get()]; | 797 [view addSubview:textField.get()]; |
| 768 return textField.get(); | 798 return textField.get(); |
| 769 } | 799 } |
| 770 | 800 |
| 771 // Add an image as a subview of the given view, placed at a pre-determined x | 801 // Add an image as a subview of the given view, placed at a pre-determined x |
| 772 // position and the given y position. Return the new NSImageView. | 802 // position and the given y position. Return the new NSImageView. |
| 773 - (NSImageView*)addImageWithSize:(NSSize)size | 803 - (NSImageView*)addImageWithSize:(NSSize)size |
| 774 toView:(NSView*)view | 804 toView:(NSView*)view |
| 775 atPoint:(NSPoint)point { | 805 atPoint:(NSPoint)point { |
| 776 NSRect frame = NSMakeRect(point.x, point.y, size.width, size.height); | 806 NSRect frame = NSMakeRect(point.x, point.y, size.width, size.height); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 799 NSRect frame = NSMakeRect(kFramePadding, 0, 100, 10); | 829 NSRect frame = NSMakeRect(kFramePadding, 0, 100, 10); |
| 800 scoped_nsobject<NSButton> button([[NSButton alloc] initWithFrame:frame]); | 830 scoped_nsobject<NSButton> button([[NSButton alloc] initWithFrame:frame]); |
| 801 scoped_nsobject<HyperlinkButtonCell> cell( | 831 scoped_nsobject<HyperlinkButtonCell> cell( |
| 802 [[HyperlinkButtonCell alloc] initTextCell:text]); | 832 [[HyperlinkButtonCell alloc] initTextCell:text]); |
| 803 [cell setControlSize:NSSmallControlSize]; | 833 [cell setControlSize:NSSmallControlSize]; |
| 804 [button setCell:cell.get()]; | 834 [button setCell:cell.get()]; |
| 805 [button setButtonType:NSMomentaryPushInButton]; | 835 [button setButtonType:NSMomentaryPushInButton]; |
| 806 [button setBezelStyle:NSRegularSquareBezelStyle]; | 836 [button setBezelStyle:NSRegularSquareBezelStyle]; |
| 807 [view addSubview:button.get()]; | 837 [view addSubview:button.get()]; |
| 808 | 838 |
| 809 // Call size-to-fit to fixup for the localized string. | |
| 810 [GTMUILocalizerAndLayoutTweaker sizeToFitView:button.get()]; | 839 [GTMUILocalizerAndLayoutTweaker sizeToFitView:button.get()]; |
| 811 return button.get(); | 840 return button.get(); |
| 812 } | 841 } |
| 813 | 842 |
| 843 // Determine the size of a popup button with the given title. | |
| 844 - (NSSize)sizeForPopUpButton:(NSPopUpButton*)button | |
| 845 withTitle:(NSString*)title { | |
| 846 NSDictionary* textAttributes = | |
| 847 [NSDictionary dictionaryWithObject:[button font] | |
| 848 forKey:NSFontAttributeName]; | |
| 849 NSSize titleSize = [title sizeWithAttributes:textAttributes]; | |
| 850 | |
| 851 NSRect buttonFrame = [button frame]; | |
| 852 NSRect titleRect = [[button cell] titleRectForBounds:buttonFrame]; | |
| 853 CGFloat width = titleSize.width + NSWidth(buttonFrame) - NSWidth(titleRect); | |
| 854 | |
| 855 return NSMakeSize(width + kPermissionButtonTitleRightPadding, | |
| 856 NSHeight(buttonFrame)); | |
| 857 } | |
| 858 | |
| 814 // Add a pop-up button for |permissionInfo| to the given view. | 859 // Add a pop-up button for |permissionInfo| to the given view. |
| 815 - (NSPopUpButton*)addPopUpButtonForPermission: | 860 - (NSPopUpButton*)addPopUpButtonForPermission: |
| 816 (const WebsiteSettingsUI::PermissionInfo&)permissionInfo | 861 (const WebsiteSettingsUI::PermissionInfo&)permissionInfo |
| 817 toView:(NSView*)view | 862 toView:(NSView*)view |
| 818 atPoint:(NSPoint)point { | 863 atPoint:(NSPoint)point { |
| 819 // Use an arbitrary width and height; it will be sized to fit. | 864 // Use an arbitrary width and height; it will be sized to fit. |
| 820 NSRect frame = NSMakeRect(point.x, point.y, 1, 1); | 865 NSRect frame = NSMakeRect(point.x, point.y, 1, 1); |
| 821 scoped_nsobject<NSPopUpButton> button( | 866 scoped_nsobject<NSPopUpButton> button( |
| 822 [[NSPopUpButton alloc] initWithFrame:frame pullsDown:NO]); | 867 [[NSPopUpButton alloc] initWithFrame:frame pullsDown:NO]); |
| 823 [button setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; | 868 [button setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 857 scoped_nsobject<NSMenuItem> titleItem([[NSMenuItem alloc] init]); | 902 scoped_nsobject<NSMenuItem> titleItem([[NSMenuItem alloc] init]); |
| 858 string16 buttonTitle = WebsiteSettingsUI::PermissionActionToUIString( | 903 string16 buttonTitle = WebsiteSettingsUI::PermissionActionToUIString( |
| 859 permissionInfo.setting, | 904 permissionInfo.setting, |
| 860 permissionInfo.default_setting, | 905 permissionInfo.default_setting, |
| 861 permissionInfo.source); | 906 permissionInfo.source); |
| 862 [titleItem setTitle:base::SysUTF16ToNSString(buttonTitle)]; | 907 [titleItem setTitle:base::SysUTF16ToNSString(buttonTitle)]; |
| 863 [[button cell] setUsesItemFromMenu:NO]; | 908 [[button cell] setUsesItemFromMenu:NO]; |
| 864 [[button cell] setMenuItem:titleItem.get()]; | 909 [[button cell] setMenuItem:titleItem.get()]; |
| 865 [button sizeToFit]; | 910 [button sizeToFit]; |
| 866 | 911 |
| 867 // Determine the size of the title, and size the control accordingly. | 912 // Determine the largest possible size for this button. |
| 868 // Using |sizeToFit| results in way too much extra space after the text. | 913 CGFloat maxTitleWidth = 0; |
| 869 NSDictionary* textAttributes = | 914 for (NSInteger i = 0; i < [button numberOfItems]; i++) { |
|
Robert Sesek
2012/11/26 17:06:56
nit: use prefix operator: ++i
Patrick Dubroy
2012/11/27 12:11:30
Done.
| |
| 870 [NSDictionary dictionaryWithObject:[button font] | 915 string16 title = WebsiteSettingsUI::PermissionActionToUIString( |
| 871 forKey:NSFontAttributeName]; | 916 static_cast<ContentSetting>([[button itemAtIndex:i] tag]), |
| 872 NSSize titleSize = [[button title] sizeWithAttributes:textAttributes]; | 917 permissionInfo.default_setting, |
| 918 content_settings::SETTING_SOURCE_USER); | |
| 919 NSSize size = [self sizeForPopUpButton:button | |
| 920 withTitle:base::SysUTF16ToNSString(title)]; | |
| 921 maxTitleWidth = std::max(maxTitleWidth, size.width); | |
| 922 } | |
| 923 // Ensure the containing view is large enough to contain the button with its | |
| 924 // widest possible title. | |
| 925 NSRect containerFrame = [view frame]; | |
| 926 containerFrame.size.width = std::max( | |
| 927 NSWidth(containerFrame), point.x + maxTitleWidth + kFramePadding); | |
| 928 [view setFrame:containerFrame]; | |
| 873 | 929 |
| 874 // Adjust the button frame to have a titleRect that exactly fits the title. | 930 // Size the button to just fit the title. |
| 875 NSRect buttonFrame = [button frame]; | 931 [button setFrameSize:[self sizeForPopUpButton:button |
| 876 NSRect titleRect = [[button cell] titleRectForBounds:buttonFrame]; | 932 withTitle:[button title]]]; |
| 877 buttonFrame.size.width = | |
| 878 titleSize.width + NSWidth(buttonFrame) - NSWidth(titleRect); | |
| 879 [button setFrame:buttonFrame]; | |
| 880 DCHECK_EQ(NSWidth([[button cell] titleRectForBounds:buttonFrame]), | |
| 881 titleSize.width); | |
| 882 | 933 |
| 883 [view addSubview:button.get()]; | 934 [view addSubview:button.get()]; |
| 884 return button.get(); | 935 return button.get(); |
| 885 } | 936 } |
| 886 | 937 |
| 887 // Called when the user changes the selected segment in the segmented control. | 938 // Called when the user changes the selected segment in the segmented control. |
| 888 - (void)tabSelected:(id)sender { | 939 - (void)tabSelected:(id)sender { |
| 889 [tabView_ selectTabViewItemAtIndex:[segmentedControl_ selectedSegment]]; | 940 [tabView_ selectTabViewItemAtIndex:[segmentedControl_ selectedSegment]]; |
| 890 } | 941 } |
| 891 | 942 |
| 892 // Handler for the permission-changing menus. | 943 // Handler for the permission-changing menus. |
| 893 - (void)permissionValueChanged:(id)sender { | 944 - (void)permissionValueChanged:(id)sender { |
| 894 DCHECK([sender isKindOfClass:[NSPopUpButton class]]); | 945 DCHECK([sender isKindOfClass:[NSPopUpButton class]]); |
| 895 NSPopUpButton* button = static_cast<NSPopUpButton*>(sender); | 946 NSPopUpButton* button = static_cast<NSPopUpButton*>(sender); |
| 896 ContentSettingsType type = static_cast<ContentSettingsType>([button tag]); | 947 ContentSettingsType type = static_cast<ContentSettingsType>([button tag]); |
| 897 ContentSetting newSetting = static_cast<ContentSetting>( | 948 ContentSetting newSetting = static_cast<ContentSetting>( |
| 898 [[button selectedItem] tag]); | 949 [[button selectedItem] tag]); |
| 899 if (presenter_.get()) | 950 if (presenter_.get()) |
| 900 presenter_->OnSitePermissionChanged(type, newSetting); | 951 presenter_->OnSitePermissionChanged(type, newSetting); |
| 901 } | 952 } |
| 902 | 953 |
| 903 // Adds a new row to the UI listing the permissions. Returns the amount of | 954 // Adds a new row to the UI listing the permissions. Returns the amount of |
| 904 // vertical space that was taken up by the row. | 955 // vertical space that was taken up by the row. |
| 905 - (CGFloat)addPermission: | 956 - (NSPoint)addPermission: |
| 906 (const WebsiteSettingsUI::PermissionInfo&)permissionInfo | 957 (const WebsiteSettingsUI::PermissionInfo&)permissionInfo |
| 907 toView:(NSView*)view | 958 toView:(NSView*)view |
| 908 atPoint:(NSPoint)point { | 959 atPoint:(NSPoint)point { |
| 909 // TODO(dubroy): Remove this check by refactoring GetPermissionIcon to take | 960 // TODO(dubroy): Remove this check by refactoring GetPermissionIcon to take |
| 910 // the PermissionInfo object as its argument. | 961 // the PermissionInfo object as its argument. |
| 911 ContentSetting setting = permissionInfo.setting == CONTENT_SETTING_DEFAULT ? | 962 ContentSetting setting = permissionInfo.setting == CONTENT_SETTING_DEFAULT ? |
| 912 permissionInfo.default_setting : permissionInfo.setting; | 963 permissionInfo.default_setting : permissionInfo.setting; |
| 913 NSImage* image = WebsiteSettingsUI::GetPermissionIcon( | 964 NSImage* image = WebsiteSettingsUI::GetPermissionIcon( |
| 914 permissionInfo.type, setting).ToNSImage(); | 965 permissionInfo.type, setting).ToNSImage(); |
| 915 NSImageView* imageView = [self addImageWithSize:[image size] | 966 NSImageView* imageView = [self addImageWithSize:[image size] |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 944 | 995 |
| 945 // Align the icon with the text. | 996 // Align the icon with the text. |
| 946 [self alignPermissionIcon:imageView withTextField:label]; | 997 [self alignPermissionIcon:imageView withTextField:label]; |
| 947 | 998 |
| 948 // Permissions specified by policy or an extension cannot be changed. | 999 // Permissions specified by policy or an extension cannot be changed. |
| 949 if (permissionInfo.source == content_settings::SETTING_SOURCE_EXTENSION || | 1000 if (permissionInfo.source == content_settings::SETTING_SOURCE_EXTENSION || |
| 950 permissionInfo.source == content_settings::SETTING_SOURCE_POLICY) { | 1001 permissionInfo.source == content_settings::SETTING_SOURCE_POLICY) { |
| 951 [button setEnabled:NO]; | 1002 [button setEnabled:NO]; |
| 952 } | 1003 } |
| 953 | 1004 |
| 954 return NSHeight([label frame]); | 1005 NSRect buttonFrame = [button frame]; |
| 1006 return NSMakePoint(NSMaxX(buttonFrame), NSMaxY(buttonFrame)); | |
| 955 } | 1007 } |
| 956 | 1008 |
| 957 // Align an image with a text field by vertically centering the image on | 1009 // Align an image with a text field by vertically centering the image on |
| 958 // the cap height of the first line of text. | 1010 // the cap height of the first line of text. |
| 959 - (void)alignPermissionIcon:(NSImageView*)imageView | 1011 - (void)alignPermissionIcon:(NSImageView*)imageView |
| 960 withTextField:(NSTextField*)textField { | 1012 withTextField:(NSTextField*)textField { |
| 961 NSFont* font = [textField font]; | 1013 NSFont* font = [textField font]; |
| 962 | 1014 |
| 963 // Calculate the offset from the top of the text field. | 1015 // Calculate the offset from the top of the text field. |
| 964 CGFloat capHeight = [font capHeight]; | 1016 CGFloat capHeight = [font capHeight]; |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 987 UTF8ToUTF16(cookieInfo.cookie_source), | 1039 UTF8ToUTF16(cookieInfo.cookie_source), |
| 988 base::IntToString16(cookieInfo.allowed), | 1040 base::IntToString16(cookieInfo.allowed), |
| 989 base::IntToString16(cookieInfo.blocked)); | 1041 base::IntToString16(cookieInfo.blocked)); |
| 990 | 1042 |
| 991 NSTextField* label = [self addText:labelText | 1043 NSTextField* label = [self addText:labelText |
| 992 withSize:[NSFont smallSystemFontSize] | 1044 withSize:[NSFont smallSystemFontSize] |
| 993 bold:NO | 1045 bold:NO |
| 994 toView:view | 1046 toView:view |
| 995 atPoint:point]; | 1047 atPoint:point]; |
| 996 | 1048 |
| 997 // Shrink the label to fit the text width. | |
| 998 NSSize requiredSize = [[label cell] cellSizeForBounds:[label frame]]; | |
| 999 [label setFrameSize:requiredSize]; | |
| 1000 | |
| 1001 // Align the icon with the text. | 1049 // Align the icon with the text. |
| 1002 [self alignPermissionIcon:imageView withTextField:label]; | 1050 [self alignPermissionIcon:imageView withTextField:label]; |
| 1003 | 1051 |
| 1004 return NSHeight([label frame]); | 1052 return NSHeight([label frame]); |
| 1005 } | 1053 } |
| 1006 | 1054 |
| 1007 // Set the content of the identity and identity status fields. | 1055 // Set the content of the identity and identity status fields. |
| 1008 - (void)setIdentityInfo:(const WebsiteSettingsUI::IdentityInfo&)identityInfo { | 1056 - (void)setIdentityInfo:(const WebsiteSettingsUI::IdentityInfo&)identityInfo { |
| 1009 [identityField_ setStringValue: | 1057 [identityField_ setStringValue: |
| 1010 base::SysUTF8ToNSString(identityInfo.site_identity)]; | 1058 base::SysUTF8ToNSString(identityInfo.site_identity)]; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1048 [cookiesView_ setSubviews:[NSArray array]]; | 1096 [cookiesView_ setSubviews:[NSArray array]]; |
| 1049 NSPoint controlOrigin = NSMakePoint(kFramePadding, 0); | 1097 NSPoint controlOrigin = NSMakePoint(kFramePadding, 0); |
| 1050 | 1098 |
| 1051 string16 sectionTitle = l10n_util::GetStringUTF16( | 1099 string16 sectionTitle = l10n_util::GetStringUTF16( |
| 1052 IDS_WEBSITE_SETTINGS_TITLE_SITE_DATA); | 1100 IDS_WEBSITE_SETTINGS_TITLE_SITE_DATA); |
| 1053 NSTextField* header = [self addText:sectionTitle | 1101 NSTextField* header = [self addText:sectionTitle |
| 1054 withSize:[NSFont smallSystemFontSize] | 1102 withSize:[NSFont smallSystemFontSize] |
| 1055 bold:YES | 1103 bold:YES |
| 1056 toView:cookiesView_ | 1104 toView:cookiesView_ |
| 1057 atPoint:controlOrigin]; | 1105 atPoint:controlOrigin]; |
| 1058 [self sizeTextFieldHeightToFit:header]; | |
| 1059 controlOrigin.y += NSHeight([header frame]) + kPermissionsHeadlineSpacing; | 1106 controlOrigin.y += NSHeight([header frame]) + kPermissionsHeadlineSpacing; |
| 1060 | 1107 |
| 1061 for (CookieInfoList::const_iterator it = cookieInfoList.begin(); | 1108 for (CookieInfoList::const_iterator it = cookieInfoList.begin(); |
| 1062 it != cookieInfoList.end(); | 1109 it != cookieInfoList.end(); |
| 1063 ++it) { | 1110 ++it) { |
| 1064 controlOrigin.y += kPermissionsTabSpacing; | 1111 controlOrigin.y += kPermissionsTabSpacing; |
| 1065 CGFloat rowHeight = [self addCookieInfo:*it | 1112 CGFloat rowHeight = [self addCookieInfo:*it |
| 1066 toView:cookiesView_ | 1113 toView:cookiesView_ |
| 1067 atPoint:controlOrigin]; | 1114 atPoint:controlOrigin]; |
| 1068 controlOrigin.y += rowHeight; | 1115 controlOrigin.y += rowHeight; |
| 1069 } | 1116 } |
| 1070 | 1117 |
| 1071 controlOrigin.y += kPermissionsTabSpacing; | 1118 controlOrigin.y += kPermissionsTabSpacing; |
| 1072 [cookiesView_ setFrameSize:NSMakeSize(kWindowWidth, controlOrigin.y)]; | 1119 [cookiesView_ setFrameSize: |
| 1120 NSMakeSize(NSWidth([cookiesView_ frame]), controlOrigin.y)]; | |
| 1121 | |
| 1073 [self performLayout]; | 1122 [self performLayout]; |
| 1074 } | 1123 } |
| 1075 | 1124 |
| 1076 - (void)setPermissionInfo:(const PermissionInfoList&)permissionInfoList { | 1125 - (void)setPermissionInfo:(const PermissionInfoList&)permissionInfoList { |
| 1126 // The contents of the permissions view can cause the whole window to get | |
| 1127 // bigger, but currently permissions are always set before cookie info. | |
| 1128 // Check to make sure that's still the case. | |
| 1129 DCHECK_EQ(0U, [[cookiesView_ subviews] count]); | |
| 1130 | |
| 1077 [permissionsView_ setSubviews:[NSArray array]]; | 1131 [permissionsView_ setSubviews:[NSArray array]]; |
| 1078 NSPoint controlOrigin = NSMakePoint(kFramePadding, 0); | 1132 NSPoint controlOrigin = NSMakePoint(kFramePadding, 0); |
| 1079 | 1133 |
| 1080 string16 sectionTitle = l10n_util::GetStringUTF16( | 1134 string16 sectionTitle = l10n_util::GetStringUTF16( |
| 1081 IDS_WEBSITE_SETTINGS_TITLE_SITE_PERMISSIONS); | 1135 IDS_WEBSITE_SETTINGS_TITLE_SITE_PERMISSIONS); |
| 1082 NSTextField* header = [self addText:sectionTitle | 1136 NSTextField* header = [self addText:sectionTitle |
| 1083 withSize:[NSFont smallSystemFontSize] | 1137 withSize:[NSFont smallSystemFontSize] |
| 1084 bold:YES | 1138 bold:YES |
| 1085 toView:permissionsView_ | 1139 toView:permissionsView_ |
| 1086 atPoint:controlOrigin]; | 1140 atPoint:controlOrigin]; |
| 1087 [self sizeTextFieldHeightToFit:header]; | 1141 [self sizeTextFieldHeightToFit:header]; |
| 1088 controlOrigin.y += NSHeight([header frame]) + kPermissionsHeadlineSpacing; | 1142 controlOrigin.y += NSHeight([header frame]) + kPermissionsHeadlineSpacing; |
| 1089 | 1143 |
| 1090 for (PermissionInfoList::const_iterator permission = | 1144 for (PermissionInfoList::const_iterator permission = |
| 1091 permissionInfoList.begin(); | 1145 permissionInfoList.begin(); |
| 1092 permission != permissionInfoList.end(); | 1146 permission != permissionInfoList.end(); |
| 1093 ++permission) { | 1147 ++permission) { |
| 1094 controlOrigin.y += kPermissionsTabSpacing; | 1148 controlOrigin.y += kPermissionsTabSpacing; |
| 1095 CGFloat rowHeight = [self addPermission:*permission | 1149 NSPoint rowBottomRight = [self addPermission:*permission |
| 1096 toView:permissionsView_ | 1150 toView:permissionsView_ |
| 1097 atPoint:controlOrigin]; | 1151 atPoint:controlOrigin]; |
| 1098 controlOrigin.y += rowHeight; | 1152 controlOrigin.y = rowBottomRight.y; |
| 1099 } | 1153 } |
| 1100 controlOrigin.y += kFramePadding; | 1154 controlOrigin.y += kFramePadding; |
| 1101 [permissionsView_ setFrameSize:NSMakeSize(kWindowWidth, controlOrigin.y)]; | 1155 [permissionsView_ setFrameSize: |
| 1156 NSMakeSize(NSWidth([permissionsView_ frame]), controlOrigin.y)]; | |
| 1157 [self performLayout]; | |
| 1102 } | 1158 } |
| 1103 | 1159 |
| 1104 - (void)setFirstVisit:(const string16&)firstVisit { | 1160 - (void)setFirstVisit:(const string16&)firstVisit { |
| 1105 [firstVisitIcon_ setImage: | 1161 [firstVisitIcon_ setImage: |
| 1106 WebsiteSettingsUI::GetFirstVisitIcon(firstVisit).ToNSImage()]; | 1162 WebsiteSettingsUI::GetFirstVisitIcon(firstVisit).ToNSImage()]; |
| 1107 [firstVisitDescriptionField_ setStringValue: | 1163 [firstVisitDescriptionField_ setStringValue: |
| 1108 base::SysUTF16ToNSString(firstVisit)]; | 1164 base::SysUTF16ToNSString(firstVisit)]; |
| 1109 [self performLayout]; | 1165 [self performLayout]; |
| 1110 } | 1166 } |
| 1111 | 1167 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1179 [bubble_controller_ setPermissionInfo:permission_info_list]; | 1235 [bubble_controller_ setPermissionInfo:permission_info_list]; |
| 1180 } | 1236 } |
| 1181 | 1237 |
| 1182 void WebsiteSettingsUIBridge::SetFirstVisit(const string16& first_visit) { | 1238 void WebsiteSettingsUIBridge::SetFirstVisit(const string16& first_visit) { |
| 1183 [bubble_controller_ setFirstVisit:first_visit]; | 1239 [bubble_controller_ setFirstVisit:first_visit]; |
| 1184 } | 1240 } |
| 1185 | 1241 |
| 1186 void WebsiteSettingsUIBridge::SetSelectedTab(TabId tab_id) { | 1242 void WebsiteSettingsUIBridge::SetSelectedTab(TabId tab_id) { |
| 1187 [bubble_controller_ setSelectedTab:tab_id]; | 1243 [bubble_controller_ setSelectedTab:tab_id]; |
| 1188 } | 1244 } |
| OLD | NEW |