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