| Index: chrome/browser/ui/cocoa/browser/profile_chooser_controller.mm
|
| diff --git a/chrome/browser/ui/cocoa/browser/profile_chooser_controller.mm b/chrome/browser/ui/cocoa/browser/profile_chooser_controller.mm
|
| index bd0a6aba5fa0e865315b89324dbaf2435a62c1cd..51fe90268c208d32452d9cd636ab542c49b3cf26 100644
|
| --- a/chrome/browser/ui/cocoa/browser/profile_chooser_controller.mm
|
| +++ b/chrome/browser/ui/cocoa/browser/profile_chooser_controller.mm
|
| @@ -27,7 +27,9 @@
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_dialogs.h"
|
| #include "chrome/browser/ui/browser_window.h"
|
| +#include "chrome/browser/ui/chrome_pages.h"
|
| #include "chrome/browser/ui/chrome_style.h"
|
| +#import "chrome/browser/ui/cocoa/hyperlink_text_view.h"
|
| #import "chrome/browser/ui/cocoa/info_bubble_view.h"
|
| #import "chrome/browser/ui/cocoa/info_bubble_window.h"
|
| #import "chrome/browser/ui/cocoa/user_manager_mac.h"
|
| @@ -140,6 +142,44 @@ NSTextField* BuildLabel(NSString* title,
|
| return label.autorelease();
|
| }
|
|
|
| +// Builds an NSTextView that has the contents set to the specified |message|,
|
| +// with a non-underlined |link| inserted at |link_offset|. The view is anchored
|
| +// at the specified |frame_origin| and has a fixed |frame_width|.
|
| +NSTextView* BuildFixedWidthTextViewWithLink(
|
| + id<NSTextViewDelegate> delegate,
|
| + NSString* message,
|
| + NSString* link,
|
| + int link_offset,
|
| + NSPoint frame_origin,
|
| + CGFloat frame_width) {
|
| + base::scoped_nsobject<HyperlinkTextView> text_view(
|
| + [[HyperlinkTextView alloc] initWithFrame:NSZeroRect]);
|
| + NSColor* link_color = gfx::SkColorToCalibratedNSColor(
|
| + chrome_style::GetLinkColor());
|
| + [text_view setMessageAndLink:message
|
| + withLink:link
|
| + atOffset:link_offset
|
| + font:[NSFont labelFontOfSize:kTextFontSize]
|
| + messageColor:[NSColor blackColor]
|
| + linkColor:link_color];
|
| +
|
| + // Removes the underlining from the link.
|
| + [text_view setLinkTextAttributes:nil];
|
| + NSTextStorage* text_storage = [text_view textStorage];
|
| + NSRange link_range = NSMakeRange(link_offset, [link length]);
|
| + [text_storage addAttribute:NSUnderlineStyleAttributeName
|
| + value:[NSNumber numberWithInt:NSUnderlineStyleNone]
|
| + range:link_range];
|
| +
|
| + NSRect frame = [[text_view attributedString]
|
| + boundingRectWithSize:NSMakeSize(frame_width, 0)
|
| + options:NSStringDrawingUsesLineFragmentOrigin];
|
| + frame.origin = frame_origin;
|
| + [text_view setFrame:frame];
|
| + [text_view setDelegate:delegate];
|
| + return text_view.autorelease();
|
| +}
|
| +
|
| // Builds a title card with one back button right aligned and one label center
|
| // aligned.
|
| NSView* BuildTitleCard(NSRect frame_rect,
|
| @@ -1289,18 +1329,29 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| yOffset = NSMaxY([removeAndRelaunchButton frame]) + kVerticalSpacing;
|
| }
|
|
|
| - // Adds the main text.
|
| - NSString* contentStr = isPrimaryAccount ?
|
| - l10n_util::GetNSStringF(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
|
| - base::UTF8ToUTF16(accountIdToRemove_)) :
|
| - l10n_util::GetNSString(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT);
|
| - NSTextField* contentLabel =
|
| - BuildLabel(contentStr, NSMakePoint(kHorizontalSpacing, yOffset),
|
| - nil /* background_color */, nil /* text_color */);
|
| - [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)];
|
| - [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel];
|
| - [container addSubview:contentLabel];
|
| - yOffset = NSMaxY([contentLabel frame]) + kVerticalSpacing;
|
| + NSView* contentView;
|
| + NSPoint contentFrameOrigin = NSMakePoint(kHorizontalSpacing, yOffset);
|
| + if (isPrimaryAccount) {
|
| + std::vector<size_t> offsets;
|
| + NSString* contentStr = l10n_util::GetNSStringF(
|
| + IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
|
| + base::UTF8ToUTF16(accountIdToRemove_), base::string16(), &offsets);
|
| + NSString* linkStr = l10n_util::GetNSString(IDS_PROFILES_SETTINGS_LINK);
|
| + contentView = BuildFixedWidthTextViewWithLink(self, contentStr, linkStr,
|
| + offsets[1], contentFrameOrigin, availableWidth);
|
| + } else {
|
| + NSString* contentStr = isPrimaryAccount ?
|
| + l10n_util::GetNSStringF(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
|
| + base::UTF8ToUTF16(accountIdToRemove_)) :
|
| + l10n_util::GetNSString(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT);
|
| + NSTextField* contentLabel = BuildLabel(contentStr, contentFrameOrigin,
|
| + nil /* background_color */, nil /* text_color */);
|
| + [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)];
|
| + [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel];
|
| + contentView = contentLabel;
|
| + }
|
| + [container addSubview:contentView];
|
| + yOffset = NSMaxY([contentView frame]) + kVerticalSpacing;
|
|
|
| // Adds the title card.
|
| NSBox* separator = [self separatorWithFrame:
|
| @@ -1320,6 +1371,14 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| return container.autorelease();
|
| }
|
|
|
| +// Called when clicked on the settings link.
|
| +- (BOOL)textView:(NSTextView*)textView
|
| + clickedOnLink:(id)link
|
| + atIndex:(NSUInteger)charIndex {
|
| + chrome::ShowSettings(browser_);
|
| + return YES;
|
| +}
|
| +
|
| - (NSButton*)hoverButtonWithRect:(NSRect)rect
|
| text:(NSString*)text
|
| imageResourceId:(int)imageResourceId
|
|
|