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

Unified Diff: chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm

Issue 1665343003: Add message and Help Center link to the chooser UI for Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@add_text_to_webusb_chooser_ui
Patch Set: updated code since GetHelpCenterUrl now returns a GURL instead of a base::string16 Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm
diff --git a/chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm b/chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm
index 45e2349c2afd93d282a7fc2ded7e62bf0084abd6..7e09ca9de613f34f7b3ee5852a3df5230fcc08f4 100644
--- a/chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm
+++ b/chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm
@@ -4,9 +4,10 @@
#import "chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.h"
+#include <stddef.h>
+
#include <algorithm>
#include <cmath>
-#include <vector>
#include "base/mac/scoped_nsobject.h"
#include "base/strings/sys_string_conversions.h"
@@ -26,8 +27,12 @@
#include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/native_web_keyboard_event.h"
+#include "skia/ext/skia_utils_mac.h"
+#include "ui/base/cocoa/controls/hyperlink_text_view.h"
#include "ui/base/cocoa/window_size_constants.h"
+#include "ui/base/l10n/l10n_util.h"
#include "ui/base/l10n/l10n_util_mac.h"
+#include "url/gurl.h"
namespace {
@@ -35,7 +40,7 @@ namespace {
const CGFloat kChooserBubbleWidth = 320.0f;
// Chooser bubble height.
-const CGFloat kChooserBubbleHeight = 220.0f;
+const CGFloat kChooserBubbleHeight = 280.0f;
// Distance between the bubble border and the view that is closest to the
// border.
@@ -46,8 +51,7 @@ const CGFloat kMarginY = 20.0f;
const CGFloat kHorizontalPadding = 10.0f;
const CGFloat kVerticalPadding = 10.0f;
-const CGFloat kTitlePaddingX = 50.0f;
-}
+} // namespace
scoped_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
return make_scoped_ptr(new ChooserBubbleUiCocoa(browser_, this));
@@ -65,6 +69,7 @@ scoped_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
base::scoped_nsobject<NSTableView> tableView_;
base::scoped_nsobject<NSButton> connectButton_;
base::scoped_nsobject<NSButton> cancelButton_;
+ base::scoped_nsobject<HyperlinkTextView> message_;
bool buttonPressed_;
Browser* browser_; // Weak.
@@ -121,6 +126,9 @@ scoped_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
// Creates the "Cancel" button.
- (base::scoped_nsobject<NSButton>)cancelButton;
+// Creates the help link.
+- (base::scoped_nsobject<HyperlinkTextView>)message;
+
// Called when the "Connect" button is pressed.
- (void)onConnect:(id)sender;
@@ -201,7 +209,9 @@ scoped_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
// | | | |
// | | | |
// | -------------------------------- |
- // | [ Connect] [ Cancel ] |
+ // | [ Connect ] [ Cancel ] |
+ // |----------------------------------|
+ // | Not seeing your device? Get help |
// ------------------------------------
// Determine the dimensions of the bubble.
@@ -213,28 +223,38 @@ scoped_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
// Create the views.
// Title.
titleView_ = [self bubbleTitle];
- CGFloat titleOriginX = kMarginX;
CGFloat titleHeight = NSHeight([titleView_ frame]);
- CGFloat titleOriginY = kChooserBubbleHeight - kMarginY - titleHeight;
- [titleView_ setFrameOrigin:NSMakePoint(titleOriginX, titleOriginY)];
- [view addSubview:titleView_];
// Connect button.
connectButton_ = [self connectButton];
- // Cancel button.
- cancelButton_ = [self cancelButton];
CGFloat connectButtonWidth = NSWidth([connectButton_ frame]);
CGFloat connectButtonHeight = NSHeight([connectButton_ frame]);
+
+ // Cancel button.
+ cancelButton_ = [self cancelButton];
CGFloat cancelButtonWidth = NSWidth([cancelButton_ frame]);
+ // Message.
+ message_ = [self message];
+ CGFloat messageHeight = NSHeight([message_ frame]);
+
+ // Separator.
+ CGFloat separatorOriginX = 0.0f;
+ CGFloat separatorOriginY = kMarginY + messageHeight + kVerticalPadding;
+ NSBox* separator =
+ [self horizontalSeparatorWithFrame:NSMakeRect(separatorOriginX,
+ separatorOriginY,
+ kChooserBubbleWidth, 0.0f)];
+
// ScollView embedding with TableView.
CGFloat scrollViewWidth = kChooserBubbleWidth - 2 * kMarginX;
CGFloat scrollViewHeight = kChooserBubbleHeight - 2 * kMarginY -
- 2 * kVerticalPadding - titleHeight -
- connectButtonHeight;
- NSRect scrollFrame =
- NSMakeRect(kMarginX, kMarginY + connectButtonHeight + kVerticalPadding,
- scrollViewWidth, scrollViewHeight);
+ 4 * kVerticalPadding - titleHeight -
+ connectButtonHeight - messageHeight;
+ NSRect scrollFrame = NSMakeRect(
+ kMarginX,
+ kMarginY + messageHeight + 3 * kVerticalPadding + connectButtonHeight,
+ scrollViewWidth, scrollViewHeight);
scrollView_.reset([[NSScrollView alloc] initWithFrame:scrollFrame]);
[scrollView_ setBorderType:NSBezelBorder];
[scrollView_ setHasVerticalScroller:YES];
@@ -252,26 +272,45 @@ scoped_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
[tableView_ setHeaderView:nil];
[tableView_ setFocusRingType:NSFocusRingTypeNone];
+ // Lay out the views.
+ // Title.
+ CGFloat titleOriginX = kMarginX;
+ CGFloat titleOriginY = kChooserBubbleHeight - kMarginY - titleHeight;
+ [titleView_ setFrameOrigin:NSMakePoint(titleOriginX, titleOriginY)];
+ [view addSubview:titleView_];
+
+ // ScollView.
[scrollView_ setDocumentView:tableView_];
[view addSubview:scrollView_];
- // Set connect button and cancel button to the right place.
+ // Connect button.
CGFloat connectButtonOriginX = kChooserBubbleWidth - kMarginX -
kHorizontalPadding - connectButtonWidth -
cancelButtonWidth;
- CGFloat connectButtonOriginY = kMarginY;
+ CGFloat connectButtonOriginY =
+ kMarginY + messageHeight + 2 * kVerticalPadding;
[connectButton_
setFrameOrigin:NSMakePoint(connectButtonOriginX, connectButtonOriginY)];
[connectButton_ setEnabled:NO];
[view addSubview:connectButton_];
+ // Cancel button.
CGFloat cancelButtonOriginX =
kChooserBubbleWidth - kMarginX - cancelButtonWidth;
- CGFloat cancelButtonOriginY = kMarginY;
+ CGFloat cancelButtonOriginY = connectButtonOriginY;
[cancelButton_
setFrameOrigin:NSMakePoint(cancelButtonOriginX, cancelButtonOriginY)];
[view addSubview:cancelButton_];
+ // Separator.
+ [view addSubview:separator];
+
+ // Message.
+ CGFloat messageOriginX = kMarginX;
+ CGFloat messageOriginY = kMarginY;
+ [message_ setFrameOrigin:NSMakePoint(messageOriginX, messageOriginY)];
+ [view addSubview:message_];
+
bubbleFrame = [[self window] frameRectForContentRect:bubbleFrame];
if ([[self window] isVisible]) {
// Unfortunately, calling -setFrame followed by -setFrameOrigin (called
@@ -392,9 +431,6 @@ scoped_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
[titleView setStringValue:l10n_util::GetNSString(IDS_CHOOSER_BUBBLE_PROMPT)];
[titleView setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
[titleView sizeToFit];
- NSRect titleFrame = [titleView frame];
- [titleView setFrameSize:NSMakeSize(NSWidth(titleFrame) + kTitlePaddingX,
- NSHeight(titleFrame))];
return titleView;
}
@@ -422,6 +458,41 @@ scoped_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
return [self buttonWithTitle:cancelTitle action:@selector(onCancel:)];
}
+- (base::scoped_nsobject<HyperlinkTextView>)message {
+ base::scoped_nsobject<HyperlinkTextView> textView(
+ [[HyperlinkTextView alloc] initWithFrame:NSZeroRect]);
+
+ base::string16 linkString =
+ l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_GET_HELP_LINK_TEXT);
+
+ NSString* text =
+ l10n_util::GetNSStringF(IDS_CHOOSER_BUBBLE_FOOTNOTE_TEXT, linkString);
+ [textView setMessage:text
+ withFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]
+ messageColor:[NSColor blackColor]];
+
+ NSColor* linkColor =
+ skia::SkColorToCalibratedNSColor(chrome_style::GetLinkColor());
+ [textView addLinkRange:NSMakeRange([text length] - linkString.size(),
+ linkString.size())
+ withURL:base::SysUTF8ToNSString(
+ chooserBubbleDelegate_->GetHelpCenterUrl().spec())
+ linkColor:linkColor];
+
+ // Removes the underlining from the link.
+ NSTextStorage* textStorage = [textView textStorage];
+ [textStorage addAttribute:NSUnderlineStyleAttributeName
+ value:@(NSUnderlineStyleNone)
+ range:NSMakeRange(0, [text length])];
+
+ [textView setVerticallyResizable:YES];
+ [textView
+ setFrameSize:NSMakeSize(kChooserBubbleWidth - 2 * kMarginX, MAXFLOAT)];
+ [textView sizeToFit];
+
+ return textView;
+}
+
+ (CGFloat)matchWidthsOf:(NSView*)viewA andOf:(NSView*)viewB {
NSRect frameA = [viewA frame];
NSRect frameB = [viewB frame];
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698