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

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

Issue 1995793002: Refactor ChooserBubbleUiController on Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor_ChooserBubbleController
Patch Set: rebase Created 4 years, 7 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 | « chrome/browser/ui/cocoa/chooser_content_view.mm ('k') | chrome/chrome_browser_ui.gypi » ('j') | 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 248fa37ff3da814f9781cbd09b5ec7b06e430ea5..27602d31fc7a3444756d186eb1d071d3fb987816 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
@@ -18,7 +18,7 @@
#import "chrome/browser/ui/cocoa/base_bubble_controller.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h"
#import "chrome/browser/ui/cocoa/browser_window_utils.h"
-#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h"
+#import "chrome/browser/ui/cocoa/chooser_content_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/location_bar/location_bar_view_mac.h"
@@ -27,34 +27,13 @@
#include "components/bubble/bubble_controller.h"
#include "components/url_formatter/elide_url.h"
#include "content/public/browser/native_web_keyboard_event.h"
-#import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h"
#include "ui/base/cocoa/cocoa_base_utils.h"
-#import "ui/base/cocoa/controls/hyperlink_button_cell.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"
#include "url/origin.h"
-namespace {
-
-// Chooser bubble width.
-const CGFloat kChooserBubbleWidth = 320.0f;
-
-// Chooser bubble height.
-const CGFloat kChooserBubbleHeight = 280.0f;
-
-// Distance between the bubble border and the view that is closest to the
-// border.
-const CGFloat kMarginX = 20.0f;
-const CGFloat kMarginY = 20.0f;
-
-// Distance between two views inside the bubble.
-const CGFloat kHorizontalPadding = 10.0f;
-const CGFloat kVerticalPadding = 10.0f;
-
-} // namespace
-
std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
return base::WrapUnique(
new ChooserBubbleUiCocoa(browser_, chooser_controller()));
@@ -64,18 +43,15 @@ std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
: BaseBubbleController<NSTableViewDataSource, NSTableViewDelegate> {
@private
// Bridge to the C++ class that created this object.
- ChooserBubbleUiCocoa* bridge_;
-
- base::scoped_nsobject<NSTextField> titleView_;
- base::scoped_nsobject<NSScrollView> scrollView_;
- base::scoped_nsobject<NSTableColumn> tableColumn_;
- base::scoped_nsobject<NSTableView> tableView_;
- base::scoped_nsobject<NSButton> connectButton_;
- base::scoped_nsobject<NSButton> cancelButton_;
- base::scoped_nsobject<NSTextField> message_;
- base::scoped_nsobject<NSButton> getHelpButton_;
+ ChooserBubbleUiCocoa* bridge_; // Weak.
bool buttonPressed_;
+ base::scoped_nsobject<ChooserContentView> chooserContentView_;
+ NSTableView* tableView_; // Weak.
+ NSButton* connectButton_; // Weak.
+ NSButton* cancelButton_; // Weak.
+ NSButton* helpButton_; // Weak.
+
Browser* browser_; // Weak.
ChooserController* chooserController_; // Weak.
}
@@ -118,25 +94,6 @@ std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
// Returns the expected parent for this bubble.
- (NSWindow*)getExpectedParentWindow;
-// Creates the title for the bubble.
-- (base::scoped_nsobject<NSTextField>)bubbleTitle;
-
-// Creates a button with |title| and |action|.
-- (base::scoped_nsobject<NSButton>)buttonWithTitle:(NSString*)title
- action:(SEL)action;
-
-// Creates the "Connect" button.
-- (base::scoped_nsobject<NSButton>)connectButton;
-
-// Creates the "Cancel" button.
-- (base::scoped_nsobject<NSButton>)cancelButton;
-
-// Creates the message.
-- (base::scoped_nsobject<NSTextField>)message;
-
-// Creates the "Get help" button.
-- (base::scoped_nsobject<NSButton>)getHelpButton;
-
// Called when the "Connect" button is pressed.
- (void)onConnect:(id)sender;
@@ -144,7 +101,7 @@ std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
- (void)onCancel:(id)sender;
// Called when the "Get help" button is pressed.
-- (void)onGetHelpPressed:(id)sender;
+- (void)onHelpPressed:(id)sender;
@end
@@ -211,134 +168,32 @@ std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
}
- (void)show {
- NSView* view = [[self window] contentView];
-
- // ------------------------------------
- // | Chooser bubble title |
- // | -------------------------------- |
- // | | option 0 | |
- // | | option 1 | |
- // | | option 2 | |
- // | | | |
- // | | | |
- // | | | |
- // | -------------------------------- |
- // | [ Connect ] [ Cancel ] |
- // |----------------------------------|
- // | Not seeing your device? Get help |
- // ------------------------------------
-
- // Determine the dimensions of the bubble.
- // Once the height and width are set, the buttons and permission menus can
- // be laid out correctly.
- NSRect bubbleFrame =
- NSMakeRect(0, 0, kChooserBubbleWidth, kChooserBubbleHeight);
-
- // Create the views.
- // Title.
- titleView_ = [self bubbleTitle];
- CGFloat titleHeight = NSHeight([titleView_ frame]);
-
- // Connect button.
- connectButton_ = [self connectButton];
- 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 messageWidth = NSWidth([message_ frame]);
- CGFloat messageHeight = NSHeight([message_ frame]);
-
- // Get help button.
- getHelpButton_ = [self getHelpButton];
-
- // 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 -
- 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];
- [scrollView_ setHasHorizontalScroller:YES];
- [scrollView_ setAutohidesScrollers:YES];
-
- // TableView.
- tableView_.reset([[NSTableView alloc] initWithFrame:NSZeroRect]);
- tableColumn_.reset([[NSTableColumn alloc] initWithIdentifier:@""]);
- [tableColumn_ setWidth:(scrollViewWidth - kMarginX)];
- [tableView_ addTableColumn:tableColumn_];
+ chooserContentView_.reset([[ChooserContentView alloc]
+ initWithChooserTitle:
+ l10n_util::GetNSStringF(
+ IDS_CHOOSER_BUBBLE_PROMPT,
+ url_formatter::FormatOriginForSecurityDisplay(
+ chooserController_->GetOrigin(),
+ url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC))]);
+
+ tableView_ = [chooserContentView_ tableView];
+ connectButton_ = [chooserContentView_ connectButton];
+ cancelButton_ = [chooserContentView_ cancelButton];
+ helpButton_ = [chooserContentView_ helpButton];
+
+ [connectButton_ setTarget:self];
+ [connectButton_ setAction:@selector(onConnect:)];
+ [cancelButton_ setTarget:self];
+ [cancelButton_ setAction:@selector(onCancel:)];
[tableView_ setDelegate:self];
[tableView_ setDataSource:self];
- // Make the column title invisible.
- [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_];
-
- // Connect button.
- CGFloat connectButtonOriginX = kChooserBubbleWidth - kMarginX -
- kHorizontalPadding - connectButtonWidth -
- cancelButtonWidth;
- 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 = 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_];
-
- // Get help button.
- getHelpButton_ = [self getHelpButton];
- CGFloat getHelpButtonOriginX =
- kMarginX + messageWidth - kHorizontalPadding / 2;
- CGFloat getHelpButtonOriginY = kMarginY;
- [getHelpButton_
- setFrameOrigin:NSMakePoint(getHelpButtonOriginX, getHelpButtonOriginY)];
- [view addSubview:getHelpButton_];
-
- bubbleFrame = [[self window] frameRectForContentRect:bubbleFrame];
+ [helpButton_ setTarget:self];
+ [helpButton_ setAction:@selector(onHelpPressed:)];
+
+ [[[self window] contentView] addSubview:chooserContentView_.get()];
+
+ NSRect bubbleFrame =
+ [[self window] frameRectForContentRect:[chooserContentView_ frame]];
if ([[self window] isVisible]) {
// Unfortunately, calling -setFrame followed by -setFrameOrigin (called
// within -setAnchorPoint) causes flickering. Avoid the flickering by
@@ -355,7 +210,7 @@ std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
[self setAnchorPoint:[self getExpectedAnchorPoint]];
[self showWindow:nil];
[[self window] makeFirstResponder:nil];
- [[self window] setInitialFirstResponder:tableView_.get()];
+ [[self window] setInitialFirstResponder:tableView_];
}
}
@@ -449,78 +304,6 @@ std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
return browser_->window()->GetNativeWindow();
}
-- (base::scoped_nsobject<NSTextField>)bubbleTitle {
- base::scoped_nsobject<NSTextField> titleView(
- [[NSTextField alloc] initWithFrame:NSZeroRect]);
- [titleView setDrawsBackground:NO];
- [titleView setBezeled:NO];
- [titleView setEditable:NO];
- [titleView setSelectable:NO];
- [titleView setStringValue:
- l10n_util::GetNSStringF(
- IDS_CHOOSER_BUBBLE_PROMPT,
- url_formatter::FormatOriginForSecurityDisplay(
- chooserController_->GetOrigin(),
- url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC))];
- [titleView setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
- // The height is arbitrary as it will be adjusted later.
- [titleView setFrameSize:NSMakeSize(kChooserBubbleWidth - 2 * kMarginX, 0.0f)];
- [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:titleView];
- return titleView;
-}
-
-- (base::scoped_nsobject<NSButton>)buttonWithTitle:(NSString*)title
- action:(SEL)action {
- base::scoped_nsobject<NSButton> button(
- [[ConstrainedWindowButton alloc] initWithFrame:NSZeroRect]);
- [button setButtonType:NSMomentaryPushInButton];
- [button setTitle:title];
- [button setTarget:self];
- [button setAction:action];
- [button sizeToFit];
- return button;
-}
-
-- (base::scoped_nsobject<NSButton>)connectButton {
- NSString* connectTitle =
- l10n_util::GetNSString(IDS_CHOOSER_BUBBLE_CONNECT_BUTTON_TEXT);
- return [self buttonWithTitle:connectTitle action:@selector(onConnect:)];
-}
-
-- (base::scoped_nsobject<NSButton>)cancelButton {
- NSString* cancelTitle =
- l10n_util::GetNSString(IDS_CHOOSER_BUBBLE_CANCEL_BUTTON_TEXT);
- return [self buttonWithTitle:cancelTitle action:@selector(onCancel:)];
-}
-
-- (base::scoped_nsobject<NSTextField>)message {
- base::scoped_nsobject<NSTextField> messageView(
- [[NSTextField alloc] initWithFrame:NSZeroRect]);
- [messageView setDrawsBackground:NO];
- [messageView setBezeled:NO];
- [messageView setEditable:NO];
- [messageView setSelectable:NO];
- [messageView
- setStringValue:l10n_util::GetNSStringF(IDS_CHOOSER_BUBBLE_FOOTNOTE_TEXT,
- base::string16())];
- [messageView setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
- [messageView sizeToFit];
- return messageView;
-}
-
-- (base::scoped_nsobject<NSButton>)getHelpButton {
- base::scoped_nsobject<NSButton> button(
- [[NSButton alloc] initWithFrame:NSZeroRect]);
- base::scoped_nsobject<HyperlinkButtonCell> cell([[HyperlinkButtonCell alloc]
- initTextCell:l10n_util::GetNSString(
- IDS_CHOOSER_BUBBLE_GET_HELP_LINK_TEXT)]);
- [button setCell:cell.get()];
- [button sizeToFit];
- [button setTarget:self];
- [button setAction:@selector(onGetHelpPressed:)];
- return button;
-}
-
+ (CGFloat)matchWidthsOf:(NSView*)viewA andOf:(NSView*)viewB {
NSRect frameA = [viewA frame];
NSRect frameB = [viewB frame];
@@ -553,7 +336,7 @@ std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
[self close];
}
-- (void)onGetHelpPressed:(id)sender {
+- (void)onHelpPressed:(id)sender {
chooserController_->OpenHelpCenterUrl();
}
« no previous file with comments | « chrome/browser/ui/cocoa/chooser_content_view.mm ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698